Spaces:
Running
Running
Download index.html from KitSmith/so101-assembly-guide: direct link, hf CLI and curl.
- Browser
- Download file 41.2 kB
-
https://huggingface.co/spaces/KitSmith/so101-assembly-guide/resolve/main/index.html
- Command line
-
hf download hf://spaces/KitSmith/so101-assembly-guide/index.html
-
curl -L -o index.html https://huggingface.co/spaces/KitSmith/so101-assembly-guide/resolve/main/index.html
41.2 kB
| <!-- | |
| Hugging Face static Space KitSmith/so101-assembly-guide, generated by scripts/src/build-hf-space.ts | |
| from deploy/hf-space/index.template.html. Edit the template, then `pnpm build-hf-space` and | |
| `hf upload KitSmith/so101-assembly-guide deploy/hf-space/dist . --type space`. | |
| Every 3D view is iframed from kitsmith.dev (nothing copied here). Step text, screws, checks and | |
| sources stay on kitsmith.dev, and every step links there. | |
| --> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="utf-8" /> | |
| <meta name="viewport" content="width=device-width, initial-scale=1" /> | |
| <title>SO-101 Assembly Guide in 3D</title> | |
| <meta | |
| name="description" | |
| content="Every step of the kitsmith.dev SO-101 assembly guide in 3D. The full step-by-step guide lives at kitsmith.dev/so101." | |
| /> | |
| <link rel="canonical" href="https://kitsmith.dev/so101/" /> | |
| <style> | |
| :root { | |
| --bg: #f6f7fa; | |
| --bg-2: #ffffff; | |
| --fg: #101827; | |
| --muted: #4b5a72; | |
| --accent: #0b57d0; | |
| --accent-fg: #ffffff; | |
| --line: #d9dee7; | |
| --link: #0b57d0; | |
| --tap: 44px; | |
| } | |
| @media (prefers-color-scheme: dark) { | |
| :root { | |
| --bg: #101827; | |
| --bg-2: #182337; | |
| --fg: #eef2f7; | |
| --muted: #9fabbe; | |
| --accent: #4da3ff; | |
| --accent-fg: #101827; | |
| --line: #22314a; | |
| --link: #8ec4ff; | |
| } | |
| } | |
| * { | |
| box-sizing: border-box; | |
| } | |
| body { | |
| margin: 0; | |
| padding-block: 1.5rem 2.5rem; | |
| padding-inline: 1rem; | |
| background: var(--bg); | |
| color: var(--fg); | |
| font: | |
| 16px/1.5 system-ui, | |
| -apple-system, | |
| 'Segoe UI', | |
| Roboto, | |
| sans-serif; | |
| } | |
| main { | |
| max-width: 76rem; | |
| margin: 0 auto; | |
| } | |
| h1 { | |
| font-size: 1.6rem; | |
| line-height: 1.2; | |
| margin: 0 0 0.4rem; | |
| } | |
| h2 { | |
| font-size: 1.15rem; | |
| margin: 2rem 0 0.5rem; | |
| } | |
| p { | |
| margin: 0 0 0.75rem; | |
| } | |
| a { | |
| color: var(--link); | |
| } | |
| .lede { | |
| color: var(--muted); | |
| max-width: 48rem; | |
| } | |
| .layout { | |
| display: grid; | |
| grid-template-columns: minmax(0, 1fr) 19rem; | |
| gap: 1.25rem; | |
| align-items: start; | |
| margin-top: 1.25rem; | |
| } | |
| .now { | |
| margin: 0; | |
| color: var(--muted); | |
| font-size: 0.9rem; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .now-title { | |
| margin: 0.1rem 0 0.6rem; | |
| font-size: 1.2rem; | |
| } | |
| .frame { | |
| width: 100%; | |
| aspect-ratio: 4 / 3; | |
| max-height: 75vh; | |
| border: 1px solid var(--line); | |
| border-radius: 0.75rem; | |
| overflow: hidden; | |
| background: var(--bg-2); | |
| } | |
| .frame iframe { | |
| display: block; | |
| width: 100%; | |
| height: 100%; | |
| border: 0; | |
| } | |
| .controls { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 0.5rem; | |
| margin-top: 0.75rem; | |
| } | |
| .controls button { | |
| min-height: var(--tap); | |
| padding: 0.4rem 0.9rem; | |
| border: 1px solid var(--line); | |
| border-radius: 0.6rem; | |
| background: var(--bg-2); | |
| color: var(--fg); | |
| font: inherit; | |
| cursor: pointer; | |
| } | |
| .controls button:disabled { | |
| opacity: 0.45; | |
| cursor: default; | |
| } | |
| .cta { | |
| display: inline-flex; | |
| align-items: center; | |
| min-height: var(--tap); | |
| padding: 0.4rem 1.1rem; | |
| border-radius: 0.6rem; | |
| background: var(--accent); | |
| color: var(--accent-fg); | |
| font-weight: 600; | |
| text-decoration: none; | |
| } | |
| .steps { | |
| max-height: min(40rem, 80vh); | |
| overflow-y: auto; | |
| border: 1px solid var(--line); | |
| border-radius: 0.75rem; | |
| background: var(--bg-2); | |
| padding: 0 0 0.5rem; | |
| } | |
| .steps h3 { | |
| position: sticky; | |
| top: 0; | |
| margin: 0; | |
| padding: 0.5rem 0.9rem; | |
| background: var(--bg-2); | |
| border-bottom: 1px solid var(--line); | |
| font-size: 0.9rem; | |
| } | |
| .steps ol { | |
| list-style: none; | |
| margin: 0; | |
| padding: 0.25rem 0; | |
| } | |
| .steps a { | |
| display: flex; | |
| gap: 0.5rem; | |
| min-height: 2.25rem; | |
| padding: 0.35rem 0.9rem; | |
| color: var(--fg); | |
| text-decoration: none; | |
| line-height: 1.3; | |
| font-size: 0.92rem; | |
| } | |
| .steps a span { | |
| color: var(--muted); | |
| font-variant-numeric: tabular-nums; | |
| flex: none; | |
| } | |
| .steps a:hover { | |
| background: var(--bg); | |
| } | |
| .steps a[aria-current='step'] { | |
| background: var(--bg); | |
| box-shadow: inset 3px 0 0 var(--accent); | |
| font-weight: 600; | |
| } | |
| .held { | |
| margin-top: 1rem; | |
| color: var(--muted); | |
| font-size: 0.9rem; | |
| } | |
| /* Screenshot strip: upright cards, all visible on a wide screen, snap-scrolled with the next | |
| card peeking on a phone. Captions are text, not pixels, so they read at any width. */ | |
| .shots { | |
| display: grid; | |
| grid-auto-flow: column; | |
| grid-auto-columns: minmax(13rem, 1fr); | |
| gap: 1rem; | |
| margin: 0.75rem 0 0; | |
| padding: 4px 0 0.75rem; | |
| list-style: none; | |
| overflow-x: auto; | |
| scroll-snap-type: x mandatory; | |
| overscroll-behavior-x: contain; | |
| } | |
| .shots li { | |
| scroll-snap-align: start; | |
| } | |
| .shots a { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 0.3rem; | |
| color: var(--fg); | |
| text-decoration: none; | |
| border-radius: 1rem; | |
| } | |
| .shots img { | |
| display: block; | |
| width: 100%; | |
| height: auto; | |
| aspect-ratio: 430 / 760; | |
| margin-bottom: 0.5rem; | |
| border: 1px solid var(--line); | |
| border-radius: 1rem; | |
| background: #101827; | |
| box-shadow: | |
| 0 1px 2px rgb(16 24 39 / 0.08), | |
| 0 8px 24px rgb(16 24 39 / 0.12); | |
| transition: transform 0.15s ease; | |
| } | |
| .shots strong { | |
| font-size: 1rem; | |
| line-height: 1.3; | |
| } | |
| .shots span { | |
| color: var(--muted); | |
| font-size: 0.9rem; | |
| line-height: 1.4; | |
| } | |
| .shots a:hover img { | |
| transform: translateY(-3px); | |
| } | |
| .shots a:hover strong { | |
| color: var(--link); | |
| } | |
| .shots a:focus-visible { | |
| outline: 3px solid var(--accent); | |
| outline-offset: 4px; | |
| } | |
| @media (prefers-reduced-motion: reduce) { | |
| .shots img { | |
| transition: none; | |
| } | |
| .shots a:hover img { | |
| transform: none; | |
| } | |
| } | |
| .cta:focus-visible, | |
| .controls button:focus-visible, | |
| .steps a:focus-visible { | |
| outline: 3px solid var(--accent); | |
| outline-offset: 2px; | |
| } | |
| ul.links { | |
| padding-left: 1.2rem; | |
| margin: 0.25rem 0 0; | |
| } | |
| ul.links li { | |
| margin: 0.3rem 0; | |
| } | |
| footer { | |
| margin-top: 2.5rem; | |
| padding-top: 1rem; | |
| border-top: 1px solid var(--line); | |
| color: var(--muted); | |
| font-size: 0.9rem; | |
| } | |
| @media (max-width: 52rem) { | |
| .layout { | |
| grid-template-columns: minmax(0, 1fr); | |
| } | |
| .frame { | |
| aspect-ratio: 3 / 4; | |
| } | |
| .steps { | |
| max-height: 24rem; | |
| } | |
| .shots { | |
| grid-auto-columns: 72%; | |
| } | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <main> | |
| <h1>SO-101 Assembly Guide in 3D</h1> | |
| <p class="lede"> | |
| Every step of the | |
| <a href="https://kitsmith.dev/so101/" target="_blank" rel="noopener">kitsmith.dev SO-101 guide</a> in 3D: | |
| the step's parts highlighted, the arm built so far beneath them, later parts ghosted. Pick a | |
| step and drag to turn the model. Each step's page on kitsmith.dev has its check, the screws | |
| and tools where it needs them, and the source for every fact. | |
| </p> | |
| <div class="layout"> | |
| <section aria-labelledby="now-title"> | |
| <p class="now" id="now">F-001 · Follower arm · step 1 of 26</p> | |
| <h2 class="now-title" id="now-title">Remove support material from all printed parts</h2> | |
| <div class="frame"> | |
| <iframe | |
| id="viewer" | |
| title="3D view of step F-001" | |
| src="https://kitsmith.dev/so101/embed/follower/001-follower-clean-printed-parts/" | |
| allow="fullscreen" | |
| ></iframe> | |
| </div> | |
| <div class="controls"> | |
| <button | |
| type="button" | |
| id="prev" | |
| aria-keyshortcuts="ArrowLeft" | |
| title="Shortcut: ←" | |
| disabled | |
| > | |
| ← Previous | |
| </button> | |
| <button type="button" id="next" aria-keyshortcuts="ArrowRight" title="Shortcut: →"> | |
| Next → | |
| </button> | |
| <a class="cta" id="cta" href="https://kitsmith.dev/so101/follower/001-follower-clean-printed-parts/" target="_blank" rel="noopener" | |
| >Open F-001 on kitsmith.dev: the full step with its check and sources ↗</a | |
| > | |
| </div> | |
| </section> | |
| <nav class="steps" id="steps" aria-label="All steps"><section><h3>Follower arm</h3><ol><li><a href="https://kitsmith.dev/so101/follower/001-follower-clean-printed-parts/" data-id="F-001" target="_blank" rel="noopener"><span>F-001</span>Remove support material from all printed parts</a></li><li><a href="https://kitsmith.dev/so101/follower/002-follower-set-servo-ids/" data-id="F-002" target="_blank" rel="noopener"><span>F-002</span>Set motor IDs 1–6 and baud rate before assembly</a></li><li><a href="https://kitsmith.dev/so101/follower/003-follower-preinstall-cables/" data-id="F-003" target="_blank" rel="noopener"><span>F-003</span>Plug one 3-pin cable into each motor before building</a></li><li><a href="https://kitsmith.dev/so101/follower/010-follower-joint1-horns/" data-id="F-010" target="_blank" rel="noopener"><span>F-010</span>Fit both horns on motor 1 (shoulder pan)</a></li><li><a href="https://kitsmith.dev/so101/follower/011-follower-joint1-motor-into-base/" data-id="F-011" target="_blank" rel="noopener"><span>F-011</span>Seat motor 1 in the base</a></li><li><a href="https://kitsmith.dev/so101/follower/012-follower-joint1-motor-holder/" data-id="F-012" target="_blank" rel="noopener"><span>F-012</span>Slide the first motor holder over motor 1</a></li><li><a href="https://kitsmith.dev/so101/follower/013-follower-joint1-shoulder/" data-id="F-013" target="_blank" rel="noopener"><span>F-013</span>Attach the shoulder to the motor 1 horns</a></li><li><a href="https://kitsmith.dev/so101/follower/014-follower-joint1-shoulder-motor-holder/" data-id="F-014" target="_blank" rel="noopener"><span>F-014</span>Add the shoulder motor holder</a></li><li><a href="https://kitsmith.dev/so101/follower/020-follower-joint2-horns/" data-id="F-020" target="_blank" rel="noopener"><span>F-020</span>Fit both horns on motor 2 (shoulder lift)</a></li><li><a href="https://kitsmith.dev/so101/follower/021-follower-joint2-motor/" data-id="F-021" target="_blank" rel="noopener"><span>F-021</span>Slide motor 2 in from the top and fasten</a></li><li><a href="https://kitsmith.dev/so101/follower/022-follower-joint2-upper-arm/" data-id="F-022" target="_blank" rel="noopener"><span>F-022</span>Attach the upper arm to the motor 2 horns</a></li><li><a href="https://kitsmith.dev/so101/follower/030-follower-joint3-horns/" data-id="F-030" target="_blank" rel="noopener"><span>F-030</span>Fit both horns on motor 3 (elbow flex)</a></li><li><a href="https://kitsmith.dev/so101/follower/031-follower-joint3-motor/" data-id="F-031" target="_blank" rel="noopener"><span>F-031</span>Insert motor 3 into the upper arm</a></li><li><a href="https://kitsmith.dev/so101/follower/032-follower-joint3-forearm/" data-id="F-032" target="_blank" rel="noopener"><span>F-032</span>Connect the forearm to the motor 3 horns</a></li><li><a href="https://kitsmith.dev/so101/follower/040-follower-joint4-horns/" data-id="F-040" target="_blank" rel="noopener"><span>F-040</span>Fit both horns on motor 4 (wrist flex)</a></li><li><a href="https://kitsmith.dev/so101/follower/041-follower-joint4-motor-holder/" data-id="F-041" target="_blank" rel="noopener"><span>F-041</span>Slide motor holder 4 onto the forearm</a></li><li><a href="https://kitsmith.dev/so101/follower/042-follower-joint4-motor/" data-id="F-042" target="_blank" rel="noopener"><span>F-042</span>Slide in motor 4 and fasten</a></li><li><a href="https://kitsmith.dev/so101/follower/050-follower-joint5-motor/" data-id="F-050" target="_blank" rel="noopener"><span>F-050</span>Insert motor 5 into the wrist holder</a></li><li><a href="https://kitsmith.dev/so101/follower/051-follower-joint5-horn/" data-id="F-051" target="_blank" rel="noopener"><span>F-051</span>Fit one horn only on motor 5 (wrist roll)</a></li><li><a href="https://kitsmith.dev/so101/follower/052-follower-joint5-wrist-to-motor4/" data-id="F-052" target="_blank" rel="noopener"><span>F-052</span>Secure the wrist to the motor 4 horns</a></li><li><a href="https://kitsmith.dev/so101/follower/060-follower-gripper-body/" data-id="F-060" target="_blank" rel="noopener"><span>F-060</span>Attach the gripper body to the motor 5 horn</a></li><li><a href="https://kitsmith.dev/so101/follower/061-follower-gripper-motor/" data-id="F-061" target="_blank" rel="noopener"><span>F-061</span>Insert the gripper motor</a></li><li><a href="https://kitsmith.dev/so101/follower/062-follower-gripper-horns/" data-id="F-062" target="_blank" rel="noopener"><span>F-062</span>Fit both horns on the gripper motor</a></li><li><a href="https://kitsmith.dev/so101/follower/063-follower-gripper-claw/" data-id="F-063" target="_blank" rel="noopener"><span>F-063</span>Install the gripper claw</a></li><li><a href="https://kitsmith.dev/so101/follower/070-follower-controller-board/" data-id="F-070" target="_blank" rel="noopener"><span>F-070</span>Mount the controller board on its plate and fit it to the base</a></li><li><a href="https://kitsmith.dev/so101/follower/071-follower-daisy-chain/" data-id="F-071" target="_blank" rel="noopener"><span>F-071</span>Daisy-chain the motor cables and connect motor 1 to the board</a></li></ol></section><section><h3>Leader arm</h3><ol><li><a href="https://kitsmith.dev/so101/leader/001-leader-clean-printed-parts/" data-id="L-001" target="_blank" rel="noopener"><span>L-001</span>Remove support material from all printed parts</a></li><li><a href="https://kitsmith.dev/so101/leader/002-leader-set-servo-ids/" data-id="L-002" target="_blank" rel="noopener"><span>L-002</span>Set motor IDs 1–6 and baud rate before assembly</a></li><li><a href="https://kitsmith.dev/so101/leader/003-leader-preinstall-cables/" data-id="L-003" target="_blank" rel="noopener"><span>L-003</span>Plug one 3-pin cable into each motor before building</a></li><li><a href="https://kitsmith.dev/so101/leader/010-leader-joint1-horns/" data-id="L-010" target="_blank" rel="noopener"><span>L-010</span>Fit both horns on motor 1 (shoulder pan)</a></li><li><a href="https://kitsmith.dev/so101/leader/011-leader-joint1-motor-into-base/" data-id="L-011" target="_blank" rel="noopener"><span>L-011</span>Seat motor 1 in the base</a></li><li><a href="https://kitsmith.dev/so101/leader/012-leader-joint1-motor-holder/" data-id="L-012" target="_blank" rel="noopener"><span>L-012</span>Slide the first motor holder over motor 1</a></li><li><a href="https://kitsmith.dev/so101/leader/013-leader-joint1-shoulder/" data-id="L-013" target="_blank" rel="noopener"><span>L-013</span>Attach the shoulder to the motor 1 horns</a></li><li><a href="https://kitsmith.dev/so101/leader/014-leader-joint1-shoulder-motor-holder/" data-id="L-014" target="_blank" rel="noopener"><span>L-014</span>Add the shoulder motor holder</a></li><li><a href="https://kitsmith.dev/so101/leader/020-leader-joint2-horns/" data-id="L-020" target="_blank" rel="noopener"><span>L-020</span>Fit both horns on motor 2 (shoulder lift)</a></li><li><a href="https://kitsmith.dev/so101/leader/021-leader-joint2-motor/" data-id="L-021" target="_blank" rel="noopener"><span>L-021</span>Slide motor 2 in from the top and fasten</a></li><li><a href="https://kitsmith.dev/so101/leader/022-leader-joint2-upper-arm/" data-id="L-022" target="_blank" rel="noopener"><span>L-022</span>Attach the upper arm to the motor 2 horns</a></li><li><a href="https://kitsmith.dev/so101/leader/030-leader-joint3-horns/" data-id="L-030" target="_blank" rel="noopener"><span>L-030</span>Fit both horns on motor 3 (elbow flex)</a></li><li><a href="https://kitsmith.dev/so101/leader/031-leader-joint3-motor/" data-id="L-031" target="_blank" rel="noopener"><span>L-031</span>Insert motor 3 into the upper arm</a></li><li><a href="https://kitsmith.dev/so101/leader/032-leader-joint3-forearm/" data-id="L-032" target="_blank" rel="noopener"><span>L-032</span>Connect the forearm to the motor 3 horns</a></li><li><a href="https://kitsmith.dev/so101/leader/040-leader-joint4-horns/" data-id="L-040" target="_blank" rel="noopener"><span>L-040</span>Fit both horns on motor 4 (wrist flex)</a></li><li><a href="https://kitsmith.dev/so101/leader/041-leader-joint4-motor-holder/" data-id="L-041" target="_blank" rel="noopener"><span>L-041</span>Slide motor holder 4 onto the forearm</a></li><li><a href="https://kitsmith.dev/so101/leader/042-leader-joint4-motor/" data-id="L-042" target="_blank" rel="noopener"><span>L-042</span>Slide in motor 4 and fasten</a></li><li><a href="https://kitsmith.dev/so101/leader/050-leader-joint5-motor/" data-id="L-050" target="_blank" rel="noopener"><span>L-050</span>Insert motor 5 into the wrist holder</a></li><li><a href="https://kitsmith.dev/so101/leader/051-leader-joint5-horn/" data-id="L-051" target="_blank" rel="noopener"><span>L-051</span>Fit one horn only on motor 5 (wrist roll)</a></li><li><a href="https://kitsmith.dev/so101/leader/052-leader-joint5-wrist-to-motor4/" data-id="L-052" target="_blank" rel="noopener"><span>L-052</span>Secure the wrist to the motor 4 horns</a></li><li><a href="https://kitsmith.dev/so101/leader/061-leader-handle/" data-id="L-061" target="_blank" rel="noopener"><span>L-061</span>Attach the handle to the leader holder</a></li><li><a href="https://kitsmith.dev/so101/leader/063-leader-trigger/" data-id="L-063" target="_blank" rel="noopener"><span>L-063</span>Attach the trigger</a></li><li><a href="https://kitsmith.dev/so101/leader/070-leader-controller-board/" data-id="L-070" target="_blank" rel="noopener"><span>L-070</span>Mount the controller board on its plate and fit it to the base</a></li><li><a href="https://kitsmith.dev/so101/leader/071-leader-daisy-chain/" data-id="L-071" target="_blank" rel="noopener"><span>L-071</span>Daisy-chain the motor cables and connect motor 1 to the board</a></li></ol></section></nav> | |
| </div> | |
| <p class="held">2 steps that no public source confirms yet (L-060, L-062) are left out here. They are on kitsmith.dev, flagged as unverified.</p> | |
| <section aria-labelledby="pages-h"> | |
| <h2 id="pages-h">On each page of the guide</h2> | |
| <ul class="shots"> | |
| <li> | |
| <a | |
| href="https://kitsmith.dev/so101/follower/071-follower-daisy-chain/" | |
| target="_blank" | |
| rel="noopener" | |
| > | |
| <img | |
| src="shots/steps.webp" | |
| width="430" | |
| height="760" | |
| loading="lazy" | |
| decoding="async" | |
| alt="Step F-071 on kitsmith.dev: a supply-voltage warning, three numbered instructions in plain words each with a src link, and a Done when check." | |
| /> | |
| <strong>Plain words, a source for each</strong> | |
| <span | |
| >Each step in plain English, the source behind every instruction, and a check that | |
| tells you it's done.</span | |
| > | |
| </a> | |
| </li> | |
| <li> | |
| <a href="https://kitsmith.dev/so101/servos/" target="_blank" rel="noopener"> | |
| <img | |
| src="shots/servos.webp" | |
| width="430" | |
| height="760" | |
| loading="lazy" | |
| decoding="async" | |
| alt="The servo table on kitsmith.dev: motor ID, joint, and the gear ratio and product code for the follower and leader arms." | |
| /> | |
| <strong>Which motor goes where</strong> | |
| <span | |
| >Motor ID, gear ratio and product code for each of the six joints, both arms.</span | |
| > | |
| </a> | |
| </li> | |
| <li> | |
| <a | |
| href="https://kitsmith.dev/so101/troubleshooting/wrist-roll-servo-cable-torn/" | |
| target="_blank" | |
| rel="noopener" | |
| > | |
| <img | |
| src="shots/issue.webp" | |
| width="430" | |
| height="760" | |
| loading="lazy" | |
| decoding="async" | |
| alt="A troubleshooting page on kitsmith.dev: the symptoms to recognise it, then the fix as ordered steps." | |
| /> | |
| <strong>Stuck? Start from what you see</strong> | |
| <span>Troubleshooting pages go from the symptoms to the fix and why it happens.</span> | |
| </a> | |
| </li> | |
| <li> | |
| <a | |
| href="https://kitsmith.dev/so101/follower/032-follower-joint3-forearm/" | |
| target="_blank" | |
| rel="noopener" | |
| > | |
| <img | |
| src="shots/need.webp" | |
| width="430" | |
| height="760" | |
| loading="lazy" | |
| decoding="async" | |
| alt="Step F-032 on kitsmith.dev: the motor for the joint with its gear ratio, then the parts, screws and tools the step uses." | |
| /> | |
| <strong>Everything the step uses</strong> | |
| <span | |
| >The motor for that joint, and the parts, screws and tools you need for it.</span | |
| > | |
| </a> | |
| </li> | |
| </ul> | |
| </section> | |
| <h2>The full guide</h2> | |
| <p> | |
| 52 steps across the follower and leader arms. Every fact links to its public source. | |
| </p> | |
| <ul class="links"> | |
| <li><a href="https://kitsmith.dev/so101/" target="_blank" rel="noopener">Start the guide</a></li> | |
| <li> | |
| <a href="https://kitsmith.dev/so101/servos/" target="_blank" rel="noopener" | |
| >Servo and gear ratio at each joint</a | |
| > | |
| </li> | |
| <li><a href="https://kitsmith.dev/so101/kits/" target="_blank" rel="noopener">Kit part numbers</a></li> | |
| <li> | |
| <a href="https://kitsmith.dev/so101/troubleshooting/" target="_blank" rel="noopener" | |
| >Troubleshooting</a | |
| > | |
| </li> | |
| <li> | |
| <a | |
| href="https://github.com/Guillaume-Georges/so101-assembly-guide" | |
| target="_blank" | |
| rel="noopener" | |
| >Source and data on GitHub</a | |
| > | |
| (MIT) | |
| </li> | |
| </ul> | |
| <footer> | |
| SO-101 design by | |
| <a href="https://github.com/TheRobotStudio/SO-ARM100" target="_blank" rel="noopener" | |
| >TheRobotStudio</a | |
| > | |
| (Apache-2.0). Community project, not affiliated with Hugging Face, TheRobotStudio or any kit | |
| vendor. | |
| </footer> | |
| </main> | |
| <script type="application/json" id="steps-data"> | |
| [{"id":"F-001","assembly":"follower","title":"Remove support material from all printed parts","meta":"F-001 · Follower arm · step 1 of 26","page":"https://kitsmith.dev/so101/follower/001-follower-clean-printed-parts/","embed":"https://kitsmith.dev/so101/embed/follower/001-follower-clean-printed-parts/"},{"id":"F-002","assembly":"follower","title":"Set motor IDs 1–6 and baud rate before assembly","meta":"F-002 · Follower arm · step 2 of 26","page":"https://kitsmith.dev/so101/follower/002-follower-set-servo-ids/","embed":"https://kitsmith.dev/so101/embed/follower/002-follower-set-servo-ids/"},{"id":"F-003","assembly":"follower","title":"Plug one 3-pin cable into each motor before building","meta":"F-003 · Follower arm · step 3 of 26","page":"https://kitsmith.dev/so101/follower/003-follower-preinstall-cables/","embed":"https://kitsmith.dev/so101/embed/follower/003-follower-preinstall-cables/"},{"id":"F-010","assembly":"follower","title":"Fit both horns on motor 1 (shoulder pan)","meta":"F-010 · Follower arm · step 4 of 26","page":"https://kitsmith.dev/so101/follower/010-follower-joint1-horns/","embed":"https://kitsmith.dev/so101/embed/follower/010-follower-joint1-horns/"},{"id":"F-011","assembly":"follower","title":"Seat motor 1 in the base","meta":"F-011 · Follower arm · step 5 of 26","page":"https://kitsmith.dev/so101/follower/011-follower-joint1-motor-into-base/","embed":"https://kitsmith.dev/so101/embed/follower/011-follower-joint1-motor-into-base/"},{"id":"F-012","assembly":"follower","title":"Slide the first motor holder over motor 1","meta":"F-012 · Follower arm · step 6 of 26","page":"https://kitsmith.dev/so101/follower/012-follower-joint1-motor-holder/","embed":"https://kitsmith.dev/so101/embed/follower/012-follower-joint1-motor-holder/"},{"id":"F-013","assembly":"follower","title":"Attach the shoulder to the motor 1 horns","meta":"F-013 · Follower arm · step 7 of 26","page":"https://kitsmith.dev/so101/follower/013-follower-joint1-shoulder/","embed":"https://kitsmith.dev/so101/embed/follower/013-follower-joint1-shoulder/"},{"id":"F-014","assembly":"follower","title":"Add the shoulder motor holder","meta":"F-014 · Follower arm · step 8 of 26","page":"https://kitsmith.dev/so101/follower/014-follower-joint1-shoulder-motor-holder/","embed":"https://kitsmith.dev/so101/embed/follower/014-follower-joint1-shoulder-motor-holder/"},{"id":"F-020","assembly":"follower","title":"Fit both horns on motor 2 (shoulder lift)","meta":"F-020 · Follower arm · step 9 of 26","page":"https://kitsmith.dev/so101/follower/020-follower-joint2-horns/","embed":"https://kitsmith.dev/so101/embed/follower/020-follower-joint2-horns/"},{"id":"F-021","assembly":"follower","title":"Slide motor 2 in from the top and fasten","meta":"F-021 · Follower arm · step 10 of 26","page":"https://kitsmith.dev/so101/follower/021-follower-joint2-motor/","embed":"https://kitsmith.dev/so101/embed/follower/021-follower-joint2-motor/"},{"id":"F-022","assembly":"follower","title":"Attach the upper arm to the motor 2 horns","meta":"F-022 · Follower arm · step 11 of 26","page":"https://kitsmith.dev/so101/follower/022-follower-joint2-upper-arm/","embed":"https://kitsmith.dev/so101/embed/follower/022-follower-joint2-upper-arm/"},{"id":"F-030","assembly":"follower","title":"Fit both horns on motor 3 (elbow flex)","meta":"F-030 · Follower arm · step 12 of 26","page":"https://kitsmith.dev/so101/follower/030-follower-joint3-horns/","embed":"https://kitsmith.dev/so101/embed/follower/030-follower-joint3-horns/"},{"id":"F-031","assembly":"follower","title":"Insert motor 3 into the upper arm","meta":"F-031 · Follower arm · step 13 of 26","page":"https://kitsmith.dev/so101/follower/031-follower-joint3-motor/","embed":"https://kitsmith.dev/so101/embed/follower/031-follower-joint3-motor/"},{"id":"F-032","assembly":"follower","title":"Connect the forearm to the motor 3 horns","meta":"F-032 · Follower arm · step 14 of 26","page":"https://kitsmith.dev/so101/follower/032-follower-joint3-forearm/","embed":"https://kitsmith.dev/so101/embed/follower/032-follower-joint3-forearm/"},{"id":"F-040","assembly":"follower","title":"Fit both horns on motor 4 (wrist flex)","meta":"F-040 · Follower arm · step 15 of 26","page":"https://kitsmith.dev/so101/follower/040-follower-joint4-horns/","embed":"https://kitsmith.dev/so101/embed/follower/040-follower-joint4-horns/"},{"id":"F-041","assembly":"follower","title":"Slide motor holder 4 onto the forearm","meta":"F-041 · Follower arm · step 16 of 26","page":"https://kitsmith.dev/so101/follower/041-follower-joint4-motor-holder/","embed":"https://kitsmith.dev/so101/embed/follower/041-follower-joint4-motor-holder/"},{"id":"F-042","assembly":"follower","title":"Slide in motor 4 and fasten","meta":"F-042 · Follower arm · step 17 of 26","page":"https://kitsmith.dev/so101/follower/042-follower-joint4-motor/","embed":"https://kitsmith.dev/so101/embed/follower/042-follower-joint4-motor/"},{"id":"F-050","assembly":"follower","title":"Insert motor 5 into the wrist holder","meta":"F-050 · Follower arm · step 18 of 26","page":"https://kitsmith.dev/so101/follower/050-follower-joint5-motor/","embed":"https://kitsmith.dev/so101/embed/follower/050-follower-joint5-motor/"},{"id":"F-051","assembly":"follower","title":"Fit one horn only on motor 5 (wrist roll)","meta":"F-051 · Follower arm · step 19 of 26","page":"https://kitsmith.dev/so101/follower/051-follower-joint5-horn/","embed":"https://kitsmith.dev/so101/embed/follower/051-follower-joint5-horn/"},{"id":"F-052","assembly":"follower","title":"Secure the wrist to the motor 4 horns","meta":"F-052 · Follower arm · step 20 of 26","page":"https://kitsmith.dev/so101/follower/052-follower-joint5-wrist-to-motor4/","embed":"https://kitsmith.dev/so101/embed/follower/052-follower-joint5-wrist-to-motor4/"},{"id":"F-060","assembly":"follower","title":"Attach the gripper body to the motor 5 horn","meta":"F-060 · Follower arm · step 21 of 26","page":"https://kitsmith.dev/so101/follower/060-follower-gripper-body/","embed":"https://kitsmith.dev/so101/embed/follower/060-follower-gripper-body/"},{"id":"F-061","assembly":"follower","title":"Insert the gripper motor","meta":"F-061 · Follower arm · step 22 of 26","page":"https://kitsmith.dev/so101/follower/061-follower-gripper-motor/","embed":"https://kitsmith.dev/so101/embed/follower/061-follower-gripper-motor/"},{"id":"F-062","assembly":"follower","title":"Fit both horns on the gripper motor","meta":"F-062 · Follower arm · step 23 of 26","page":"https://kitsmith.dev/so101/follower/062-follower-gripper-horns/","embed":"https://kitsmith.dev/so101/embed/follower/062-follower-gripper-horns/"},{"id":"F-063","assembly":"follower","title":"Install the gripper claw","meta":"F-063 · Follower arm · step 24 of 26","page":"https://kitsmith.dev/so101/follower/063-follower-gripper-claw/","embed":"https://kitsmith.dev/so101/embed/follower/063-follower-gripper-claw/"},{"id":"F-070","assembly":"follower","title":"Mount the controller board on its plate and fit it to the base","meta":"F-070 · Follower arm · step 25 of 26","page":"https://kitsmith.dev/so101/follower/070-follower-controller-board/","embed":"https://kitsmith.dev/so101/embed/follower/070-follower-controller-board/"},{"id":"F-071","assembly":"follower","title":"Daisy-chain the motor cables and connect motor 1 to the board","meta":"F-071 · Follower arm · step 26 of 26","page":"https://kitsmith.dev/so101/follower/071-follower-daisy-chain/","embed":"https://kitsmith.dev/so101/embed/follower/071-follower-daisy-chain/"},{"id":"L-001","assembly":"leader","title":"Remove support material from all printed parts","meta":"L-001 · Leader arm · step 1 of 26","page":"https://kitsmith.dev/so101/leader/001-leader-clean-printed-parts/","embed":"https://kitsmith.dev/so101/embed/leader/001-leader-clean-printed-parts/"},{"id":"L-002","assembly":"leader","title":"Set motor IDs 1–6 and baud rate before assembly","meta":"L-002 · Leader arm · step 2 of 26","page":"https://kitsmith.dev/so101/leader/002-leader-set-servo-ids/","embed":"https://kitsmith.dev/so101/embed/leader/002-leader-set-servo-ids/"},{"id":"L-003","assembly":"leader","title":"Plug one 3-pin cable into each motor before building","meta":"L-003 · Leader arm · step 3 of 26","page":"https://kitsmith.dev/so101/leader/003-leader-preinstall-cables/","embed":"https://kitsmith.dev/so101/embed/leader/003-leader-preinstall-cables/"},{"id":"L-010","assembly":"leader","title":"Fit both horns on motor 1 (shoulder pan)","meta":"L-010 · Leader arm · step 4 of 26","page":"https://kitsmith.dev/so101/leader/010-leader-joint1-horns/","embed":"https://kitsmith.dev/so101/embed/leader/010-leader-joint1-horns/"},{"id":"L-011","assembly":"leader","title":"Seat motor 1 in the base","meta":"L-011 · Leader arm · step 5 of 26","page":"https://kitsmith.dev/so101/leader/011-leader-joint1-motor-into-base/","embed":"https://kitsmith.dev/so101/embed/leader/011-leader-joint1-motor-into-base/"},{"id":"L-012","assembly":"leader","title":"Slide the first motor holder over motor 1","meta":"L-012 · Leader arm · step 6 of 26","page":"https://kitsmith.dev/so101/leader/012-leader-joint1-motor-holder/","embed":"https://kitsmith.dev/so101/embed/leader/012-leader-joint1-motor-holder/"},{"id":"L-013","assembly":"leader","title":"Attach the shoulder to the motor 1 horns","meta":"L-013 · Leader arm · step 7 of 26","page":"https://kitsmith.dev/so101/leader/013-leader-joint1-shoulder/","embed":"https://kitsmith.dev/so101/embed/leader/013-leader-joint1-shoulder/"},{"id":"L-014","assembly":"leader","title":"Add the shoulder motor holder","meta":"L-014 · Leader arm · step 8 of 26","page":"https://kitsmith.dev/so101/leader/014-leader-joint1-shoulder-motor-holder/","embed":"https://kitsmith.dev/so101/embed/leader/014-leader-joint1-shoulder-motor-holder/"},{"id":"L-020","assembly":"leader","title":"Fit both horns on motor 2 (shoulder lift)","meta":"L-020 · Leader arm · step 9 of 26","page":"https://kitsmith.dev/so101/leader/020-leader-joint2-horns/","embed":"https://kitsmith.dev/so101/embed/leader/020-leader-joint2-horns/"},{"id":"L-021","assembly":"leader","title":"Slide motor 2 in from the top and fasten","meta":"L-021 · Leader arm · step 10 of 26","page":"https://kitsmith.dev/so101/leader/021-leader-joint2-motor/","embed":"https://kitsmith.dev/so101/embed/leader/021-leader-joint2-motor/"},{"id":"L-022","assembly":"leader","title":"Attach the upper arm to the motor 2 horns","meta":"L-022 · Leader arm · step 11 of 26","page":"https://kitsmith.dev/so101/leader/022-leader-joint2-upper-arm/","embed":"https://kitsmith.dev/so101/embed/leader/022-leader-joint2-upper-arm/"},{"id":"L-030","assembly":"leader","title":"Fit both horns on motor 3 (elbow flex)","meta":"L-030 · Leader arm · step 12 of 26","page":"https://kitsmith.dev/so101/leader/030-leader-joint3-horns/","embed":"https://kitsmith.dev/so101/embed/leader/030-leader-joint3-horns/"},{"id":"L-031","assembly":"leader","title":"Insert motor 3 into the upper arm","meta":"L-031 · Leader arm · step 13 of 26","page":"https://kitsmith.dev/so101/leader/031-leader-joint3-motor/","embed":"https://kitsmith.dev/so101/embed/leader/031-leader-joint3-motor/"},{"id":"L-032","assembly":"leader","title":"Connect the forearm to the motor 3 horns","meta":"L-032 · Leader arm · step 14 of 26","page":"https://kitsmith.dev/so101/leader/032-leader-joint3-forearm/","embed":"https://kitsmith.dev/so101/embed/leader/032-leader-joint3-forearm/"},{"id":"L-040","assembly":"leader","title":"Fit both horns on motor 4 (wrist flex)","meta":"L-040 · Leader arm · step 15 of 26","page":"https://kitsmith.dev/so101/leader/040-leader-joint4-horns/","embed":"https://kitsmith.dev/so101/embed/leader/040-leader-joint4-horns/"},{"id":"L-041","assembly":"leader","title":"Slide motor holder 4 onto the forearm","meta":"L-041 · Leader arm · step 16 of 26","page":"https://kitsmith.dev/so101/leader/041-leader-joint4-motor-holder/","embed":"https://kitsmith.dev/so101/embed/leader/041-leader-joint4-motor-holder/"},{"id":"L-042","assembly":"leader","title":"Slide in motor 4 and fasten","meta":"L-042 · Leader arm · step 17 of 26","page":"https://kitsmith.dev/so101/leader/042-leader-joint4-motor/","embed":"https://kitsmith.dev/so101/embed/leader/042-leader-joint4-motor/"},{"id":"L-050","assembly":"leader","title":"Insert motor 5 into the wrist holder","meta":"L-050 · Leader arm · step 18 of 26","page":"https://kitsmith.dev/so101/leader/050-leader-joint5-motor/","embed":"https://kitsmith.dev/so101/embed/leader/050-leader-joint5-motor/"},{"id":"L-051","assembly":"leader","title":"Fit one horn only on motor 5 (wrist roll)","meta":"L-051 · Leader arm · step 19 of 26","page":"https://kitsmith.dev/so101/leader/051-leader-joint5-horn/","embed":"https://kitsmith.dev/so101/embed/leader/051-leader-joint5-horn/"},{"id":"L-052","assembly":"leader","title":"Secure the wrist to the motor 4 horns","meta":"L-052 · Leader arm · step 20 of 26","page":"https://kitsmith.dev/so101/leader/052-leader-joint5-wrist-to-motor4/","embed":"https://kitsmith.dev/so101/embed/leader/052-leader-joint5-wrist-to-motor4/"},{"id":"L-061","assembly":"leader","title":"Attach the handle to the leader holder","meta":"L-061 · Leader arm · step 22 of 26","page":"https://kitsmith.dev/so101/leader/061-leader-handle/","embed":"https://kitsmith.dev/so101/embed/leader/061-leader-handle/"},{"id":"L-063","assembly":"leader","title":"Attach the trigger","meta":"L-063 · Leader arm · step 24 of 26","page":"https://kitsmith.dev/so101/leader/063-leader-trigger/","embed":"https://kitsmith.dev/so101/embed/leader/063-leader-trigger/"},{"id":"L-070","assembly":"leader","title":"Mount the controller board on its plate and fit it to the base","meta":"L-070 · Leader arm · step 25 of 26","page":"https://kitsmith.dev/so101/leader/070-leader-controller-board/","embed":"https://kitsmith.dev/so101/embed/leader/070-leader-controller-board/"},{"id":"L-071","assembly":"leader","title":"Daisy-chain the motor cables and connect motor 1 to the board","meta":"L-071 · Leader arm · step 26 of 26","page":"https://kitsmith.dev/so101/leader/071-leader-daisy-chain/","embed":"https://kitsmith.dev/so101/embed/leader/071-leader-daisy-chain/"}] | |
| </script> | |
| <script> | |
| // Without this script every step link opens its kitsmith.dev page; with it, a click loads the | |
| // step's 3D view in the frame instead (modifier-clicks still open the page). | |
| const STEPS = JSON.parse(document.getElementById('steps-data').textContent); | |
| const viewer = document.getElementById('viewer'); | |
| const cta = document.getElementById('cta'); | |
| const now = document.getElementById('now'); | |
| const nowTitle = document.getElementById('now-title'); | |
| const prev = document.getElementById('prev'); | |
| const next = document.getElementById('next'); | |
| const list = document.getElementById('steps'); | |
| const links = [...list.querySelectorAll('a[data-id]')]; | |
| let cur = 0; | |
| function show(i) { | |
| cur = i; | |
| const s = STEPS[i]; | |
| viewer.src = s.embed; | |
| viewer.title = `3D view of step ${s.id}, ${s.title}`; | |
| now.textContent = s.meta; | |
| nowTitle.textContent = s.title; | |
| cta.href = s.page; | |
| cta.textContent = `Open ${s.id} on kitsmith.dev: the full step with its check and sources ↗`; | |
| prev.disabled = i === 0; | |
| next.disabled = i === STEPS.length - 1; | |
| for (const a of links) { | |
| if (a.dataset.id === s.id) a.setAttribute('aria-current', 'step'); | |
| else a.removeAttribute('aria-current'); | |
| } | |
| // Scroll only the list, never the page: inside huggingface.co's frame scrollIntoView can | |
| // move the host page. | |
| const a = links[i]; | |
| if ( | |
| a.offsetTop < list.scrollTop + 40 || | |
| a.offsetTop > list.scrollTop + list.clientHeight - 40 | |
| ) | |
| list.scrollTop = a.offsetTop - list.clientHeight / 2; | |
| } | |
| links.forEach((a, i) => | |
| a.addEventListener('click', (e) => { | |
| if (e.metaKey || e.ctrlKey || e.shiftKey || e.button !== 0) return; | |
| e.preventDefault(); | |
| show(i); | |
| }), | |
| ); | |
| const step = (delta) => show(Math.min(STEPS.length - 1, Math.max(0, cur + delta))); | |
| prev.addEventListener('click', () => step(-1)); | |
| next.addEventListener('click', () => step(1)); | |
| // ← and → move a step too (asked for on Discord, 2026-09-17). Skipped while typing, with a | |
| // modifier held, and inside the screenshot strip, where the arrows scroll it. | |
| document.addEventListener('keydown', (e) => { | |
| if (e.defaultPrevented || e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) return; | |
| const delta = e.key === 'ArrowLeft' ? -1 : e.key === 'ArrowRight' ? 1 : 0; | |
| if (!delta) return; | |
| const t = e.target; | |
| if (t && t.closest && t.closest('input, textarea, select, [contenteditable], .shots')) | |
| return; | |
| e.preventDefault(); | |
| step(delta); | |
| }); | |
| // The 3D frame relays the same keys when the focus is inside it (kitsmith.dev embed pages). | |
| const origin = new URL('https://kitsmith.dev/so101').origin; | |
| window.addEventListener('message', (e) => { | |
| if (e.origin !== origin || !e.data || e.data.kitsmith !== 'step') return; | |
| step(e.data.delta < 0 ? -1 : 1); | |
| }); | |
| show(0); | |
| </script> | |
| </body> | |
| </html> | |