KitSmith/so101-assembly-guide
7
1<!doctype html>2<!--3 Hugging Face static Space KitSmith/so101-assembly-guide, generated by scripts/src/build-hf-space.ts4 from deploy/hf-space/index.template.html. Edit the template, then `pnpm build-hf-space` and5 `hf upload KitSmith/so101-assembly-guide deploy/hf-space/dist . --type space`.6 Every 3D view is iframed from kitsmith.dev (nothing copied here). Step text, screws, checks and7 sources stay on kitsmith.dev, and every step links there.8-->9<html lang="en">10 <head>11 <meta charset="utf-8" />12 <meta name="viewport" content="width=device-width, initial-scale=1" />13 <title>SO-101 Assembly Guide in 3D</title>14 <meta15 name="description"16 content="Every step of the kitsmith.dev SO-101 assembly guide in 3D. The full step-by-step guide lives at kitsmith.dev/so101."17 />18 <link rel="canonical" href="https://kitsmith.dev/so101/" />19 <style>20 :root {21 --bg: #f6f7fa;22 --bg-2: #ffffff;23 --fg: #101827;24 --muted: #4b5a72;25 --accent: #0b57d0;26 --accent-fg: #ffffff;27 --line: #d9dee7;28 --link: #0b57d0;29 --tap: 44px;30 }31 @media (prefers-color-scheme: dark) {32 :root {33 --bg: #101827;34 --bg-2: #182337;35 --fg: #eef2f7;36 --muted: #9fabbe;37 --accent: #4da3ff;38 --accent-fg: #101827;39 --line: #22314a;40 --link: #8ec4ff;41 }42 }43 * {44 box-sizing: border-box;45 }46 body {47 margin: 0;48 padding-block: 1.5rem 2.5rem;49 padding-inline: 1rem;50 background: var(--bg);51 color: var(--fg);52 font:53 16px/1.5 system-ui,54 -apple-system,55 'Segoe UI',56 Roboto,57 sans-serif;58 }59 main {60 max-width: 76rem;61 margin: 0 auto;62 }63 h1 {64 font-size: 1.6rem;65 line-height: 1.2;66 margin: 0 0 0.4rem;67 }68 h2 {69 font-size: 1.15rem;70 margin: 2rem 0 0.5rem;71 }72 p {73 margin: 0 0 0.75rem;74 }75 a {76 color: var(--link);77 }78 .lede {79 color: var(--muted);80 max-width: 48rem;81 }82 .layout {83 display: grid;84 grid-template-columns: minmax(0, 1fr) 19rem;85 gap: 1.25rem;86 align-items: start;87 margin-top: 1.25rem;88 }89 .now {90 margin: 0;91 color: var(--muted);92 font-size: 0.9rem;93 font-variant-numeric: tabular-nums;94 }95 .now-title {96 margin: 0.1rem 0 0.6rem;97 font-size: 1.2rem;98 }99 .frame {100 width: 100%;101 aspect-ratio: 4 / 3;102 max-height: 75vh;103 border: 1px solid var(--line);104 border-radius: 0.75rem;105 overflow: hidden;106 background: var(--bg-2);107 }108 .frame iframe {109 display: block;110 width: 100%;111 height: 100%;112 border: 0;113 }114 .controls {115 display: flex;116 flex-wrap: wrap;117 gap: 0.5rem;118 margin-top: 0.75rem;119 }120 .controls button {121 min-height: var(--tap);122 padding: 0.4rem 0.9rem;123 border: 1px solid var(--line);124 border-radius: 0.6rem;125 background: var(--bg-2);126 color: var(--fg);127 font: inherit;128 cursor: pointer;129 }130 .controls button:disabled {131 opacity: 0.45;132 cursor: default;133 }134 .cta {135 display: inline-flex;136 align-items: center;137 min-height: var(--tap);138 padding: 0.4rem 1.1rem;139 border-radius: 0.6rem;140 background: var(--accent);141 color: var(--accent-fg);142 font-weight: 600;143 text-decoration: none;144 }145 .steps {146 max-height: min(40rem, 80vh);147 overflow-y: auto;148 border: 1px solid var(--line);149 border-radius: 0.75rem;150 background: var(--bg-2);151 padding: 0 0 0.5rem;152 }153 .steps h3 {154 position: sticky;155 top: 0;156 margin: 0;157 padding: 0.5rem 0.9rem;158 background: var(--bg-2);159 border-bottom: 1px solid var(--line);160 font-size: 0.9rem;161 }162 .steps ol {163 list-style: none;164 margin: 0;165 padding: 0.25rem 0;166 }167 .steps a {168 display: flex;169 gap: 0.5rem;170 min-height: 2.25rem;171 padding: 0.35rem 0.9rem;172 color: var(--fg);173 text-decoration: none;174 line-height: 1.3;175 font-size: 0.92rem;176 }177 .steps a span {178 color: var(--muted);179 font-variant-numeric: tabular-nums;180 flex: none;181 }182 .steps a:hover {183 background: var(--bg);184 }185 .steps a[aria-current='step'] {186 background: var(--bg);187 box-shadow: inset 3px 0 0 var(--accent);188 font-weight: 600;189 }190 .held {191 margin-top: 1rem;192 color: var(--muted);193 font-size: 0.9rem;194 }195 /* Screenshot strip: upright cards, all visible on a wide screen, snap-scrolled with the next196 card peeking on a phone. Captions are text, not pixels, so they read at any width. */197 .shots {198 display: grid;199 grid-auto-flow: column;200 grid-auto-columns: minmax(13rem, 1fr);201 gap: 1rem;202 margin: 0.75rem 0 0;203 padding: 4px 0 0.75rem;204 list-style: none;205 overflow-x: auto;206 scroll-snap-type: x mandatory;207 overscroll-behavior-x: contain;208 }209 .shots li {210 scroll-snap-align: start;211 }212 .shots a {213 display: flex;214 flex-direction: column;215 gap: 0.3rem;216 color: var(--fg);217 text-decoration: none;218 border-radius: 1rem;219 }220 .shots img {221 display: block;222 width: 100%;223 height: auto;224 aspect-ratio: 430 / 760;225 margin-bottom: 0.5rem;226 border: 1px solid var(--line);227 border-radius: 1rem;228 background: #101827;229 box-shadow:230 0 1px 2px rgb(16 24 39 / 0.08),231 0 8px 24px rgb(16 24 39 / 0.12);232 transition: transform 0.15s ease;233 }234 .shots strong {235 font-size: 1rem;236 line-height: 1.3;237 }238 .shots span {239 color: var(--muted);240 font-size: 0.9rem;241 line-height: 1.4;242 }243 .shots a:hover img {244 transform: translateY(-3px);245 }246 .shots a:hover strong {247 color: var(--link);248 }249 .shots a:focus-visible {250 outline: 3px solid var(--accent);251 outline-offset: 4px;252 }253 @media (prefers-reduced-motion: reduce) {254 .shots img {255 transition: none;256 }257 .shots a:hover img {258 transform: none;259 }260 }261 .cta:focus-visible,262 .controls button:focus-visible,263 .steps a:focus-visible {264 outline: 3px solid var(--accent);265 outline-offset: 2px;266 }267 ul.links {268 padding-left: 1.2rem;269 margin: 0.25rem 0 0;270 }271 ul.links li {272 margin: 0.3rem 0;273 }274 footer {275 margin-top: 2.5rem;276 padding-top: 1rem;277 border-top: 1px solid var(--line);278 color: var(--muted);279 font-size: 0.9rem;280 }281 @media (max-width: 52rem) {282 .layout {283 grid-template-columns: minmax(0, 1fr);284 }285 .frame {286 aspect-ratio: 3 / 4;287 }288 .steps {289 max-height: 24rem;290 }291 .shots {292 grid-auto-columns: 72%;293 }294 }295 </style>296 </head>297 <body>298 <main>299 <h1>SO-101 Assembly Guide in 3D</h1>300 <p class="lede">301 Every step of the302 <a href="https://kitsmith.dev/so101/" target="_blank" rel="noopener">kitsmith.dev SO-101 guide</a> in 3D:303 the step's parts highlighted, the arm built so far beneath them, later parts ghosted. Pick a304 step and drag to turn the model. Each step's page on kitsmith.dev has its check, the screws305 and tools where it needs them, and the source for every fact.306 </p>307 308 <div class="layout">309 <section aria-labelledby="now-title">310 <p class="now" id="now">F-001 · Follower arm · step 1 of 26</p>311 <h2 class="now-title" id="now-title">Remove support material from all printed parts</h2>312 <div class="frame">313 <iframe314 id="viewer"315 title="3D view of step F-001"316 src="https://kitsmith.dev/so101/embed/follower/001-follower-clean-printed-parts/"317 allow="fullscreen"318 ></iframe>319 </div>320 <div class="controls">321 <button type="button" id="prev" disabled>← Previous</button>322 <button type="button" id="next">Next →</button>323 <a class="cta" id="cta" href="https://kitsmith.dev/so101/follower/001-follower-clean-printed-parts/" target="_blank" rel="noopener"324 >Open F-001 on kitsmith.dev: the full step with its check and sources ↗</a325 >326 </div>327 </section>328 329 <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>330 </div>331 332 <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>333 334 <section aria-labelledby="pages-h">335 <h2 id="pages-h">On each page of the guide</h2>336 <ul class="shots">337 <li>338 <a339 href="https://kitsmith.dev/so101/follower/071-follower-daisy-chain/"340 target="_blank"341 rel="noopener"342 >343 <img344 src="shots/steps.webp"345 width="430"346 height="760"347 loading="lazy"348 decoding="async"349 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."350 />351 <strong>Plain words, a source for each</strong>352 <span353 >Each step in plain English, the source behind every instruction, and a check that354 tells you it's done.</span355 >356 </a>357 </li>358 <li>359 <a href="https://kitsmith.dev/so101/servos/" target="_blank" rel="noopener">360 <img361 src="shots/servos.webp"362 width="430"363 height="760"364 loading="lazy"365 decoding="async"366 alt="The servo table on kitsmith.dev: motor ID, joint, and the gear ratio and product code for the follower and leader arms."367 />368 <strong>Which motor goes where</strong>369 <span370 >Motor ID, gear ratio and product code for each of the six joints, both arms.</span371 >372 </a>373 </li>374 <li>375 <a376 href="https://kitsmith.dev/so101/troubleshooting/wrist-roll-servo-cable-torn/"377 target="_blank"378 rel="noopener"379 >380 <img381 src="shots/issue.webp"382 width="430"383 height="760"384 loading="lazy"385 decoding="async"386 alt="A troubleshooting page on kitsmith.dev: the symptoms to recognise it, then the fix as ordered steps."387 />388 <strong>Stuck? Start from what you see</strong>389 <span>Troubleshooting pages go from the symptoms to the fix and why it happens.</span>390 </a>391 </li>392 <li>393 <a394 href="https://kitsmith.dev/so101/follower/032-follower-joint3-forearm/"395 target="_blank"396 rel="noopener"397 >398 <img399 src="shots/need.webp"400 width="430"401 height="760"402 loading="lazy"403 decoding="async"404 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."405 />406 <strong>Everything the step uses</strong>407 <span408 >The motor for that joint, and the parts, screws and tools you need for it.</span409 >410 </a>411 </li>412 </ul>413 </section>414 415 <h2>The full guide</h2>416 <p>417 52 steps across the follower and leader arms. Every fact links to its public source.418 </p>419 <ul class="links">420 <li><a href="https://kitsmith.dev/so101/" target="_blank" rel="noopener">Start the guide</a></li>421 <li>422 <a href="https://kitsmith.dev/so101/servos/" target="_blank" rel="noopener"423 >Servo and gear ratio at each joint</a424 >425 </li>426 <li><a href="https://kitsmith.dev/so101/kits/" target="_blank" rel="noopener">Kit part numbers</a></li>427 <li>428 <a href="https://kitsmith.dev/so101/troubleshooting/" target="_blank" rel="noopener"429 >Troubleshooting</a430 >431 </li>432 <li>433 <a434 href="https://github.com/Guillaume-Georges/so101-assembly-guide"435 target="_blank"436 rel="noopener"437 >Source and data on GitHub</a438 >439 (MIT)440 </li>441 </ul>442 443 <footer>444 SO-101 design by445 <a href="https://github.com/TheRobotStudio/SO-ARM100" target="_blank" rel="noopener"446 >TheRobotStudio</a447 >448 (Apache-2.0). Community project, not affiliated with Hugging Face, TheRobotStudio or any kit449 vendor.450 </footer>451 </main>452 453 <script type="application/json" id="steps-data">454 [{"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/"}]455 </script>456 <script>457 // Without this script every step link opens its kitsmith.dev page; with it, a click loads the458 // step's 3D view in the frame instead (modifier-clicks still open the page).459 const STEPS = JSON.parse(document.getElementById('steps-data').textContent);460 const viewer = document.getElementById('viewer');461 const cta = document.getElementById('cta');462 const now = document.getElementById('now');463 const nowTitle = document.getElementById('now-title');464 const prev = document.getElementById('prev');465 const next = document.getElementById('next');466 const list = document.getElementById('steps');467 const links = [...list.querySelectorAll('a[data-id]')];468 let cur = 0;469 function show(i) {470 cur = i;471 const s = STEPS[i];472 viewer.src = s.embed;473 viewer.title = `3D view of step ${s.id}, ${s.title}`;474 now.textContent = s.meta;475 nowTitle.textContent = s.title;476 cta.href = s.page;477 cta.textContent = `Open ${s.id} on kitsmith.dev: the full step with its check and sources ↗`;478 prev.disabled = i === 0;479 next.disabled = i === STEPS.length - 1;480 for (const a of links) {481 if (a.dataset.id === s.id) a.setAttribute('aria-current', 'step');482 else a.removeAttribute('aria-current');483 }484 // Scroll only the list, never the page: inside huggingface.co's frame scrollIntoView can485 // move the host page.486 const a = links[i];487 if (488 a.offsetTop < list.scrollTop + 40 ||489 a.offsetTop > list.scrollTop + list.clientHeight - 40490 )491 list.scrollTop = a.offsetTop - list.clientHeight / 2;492 }493 links.forEach((a, i) =>494 a.addEventListener('click', (e) => {495 if (e.metaKey || e.ctrlKey || e.shiftKey || e.button !== 0) return;496 e.preventDefault();497 show(i);498 }),499 );500 prev.addEventListener('click', () => show(Math.max(0, cur - 1)));501 next.addEventListener('click', () => show(Math.min(STEPS.length - 1, cur + 1)));502 show(0);503 </script>504 </body>505</html>506 