CoolFace
Apppublic

KitSmith/so101-assembly-guide

sourceHugging Facemitupdated 14d agoView on Hugging Face
7likes
index.html506 linesDownload Raw Back to root
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