Build package
Build ToddlerBot
Stanford University · Humanoid · research · 2025
Low-cost, fully 3D-printed open-source small humanoid (0.56 m, 3.4 kg, 30 DOF) for scalable policy learning research.

- Drawing
- /stanford/toddlerbot
- Maker
- Stanford University
- Country
- Stanford, US
- Package rev
- v0.1.0
- Level
- L2 Sim-verified
- Availability
- DIY
- Openness
- 100/100
- HW licence
- CC-BY-NC-SA-4.0
- Last checked
- 2026-09-25
- Height
- 56 cm
- Mass
- 3.4 kg
- DOF
- 30
- Actuators
- servo actuators; 7 DOF/arm, 6 DOF/leg, 2 neck, 2 waist
ToddlerBot 2.0 released Aug 2025; variants 2XC and 2XM both in Menagerie (toddlerbot_2xm). Onshape CAD + MakerWorld print files + BOM sheet public. Locomotion Beyond Feet follow-up Jan 2026. Mirror fork exists at kscalelabs/toddlerbot. Licenses per README: code and docs MIT; hardware design (Onshape, STL/3MF) CC BY-NC-SA 4.0, non-commercial.
Configure
Saved in the URL. Share the link to share the build.Source
One cart across 7 vendors · prices in USD as listed47 lines · 342 parts · 2 without an offer in US · 3/47 lines sourced in 2+ regions (L3 gate)
| # | Part | Category | Qty | Unit | Line | Offer |
|---|---|---|---|---|---|---|
ROBOTIS US7 lines · $4,069.96 | ||||||
| 1 | DYNAMIXEL 2XC430-W250-T (dual-axis, hip) actuator.2xc430-w250 · MPN 2XC430-W250-T · 1 alt | actuator | 2 | $298.89list price | $597.78 | ROBOTIS US |
| 2 | DYNAMIXEL 2XL430-W250-T (dual-axis, arms: 3 per arm) actuator.2xl430-w250 · MPN 2XL430-W250-T · 1 alt | actuator | 6 | $149.39list price | $896.34 | ROBOTIS US |
| 3 | DYNAMIXEL XC330-T288-T (neck, waist, ankle, torso) actuator.xc330-t288 · MPN XC330-T288-T | actuator | 6 | $103.39list price | $620.34 | ROBOTIS US |
| 4 | DYNAMIXEL XC430-T240BB-T actuator.xc430-t240bb · MPN XC430-T240BB-T | actuator | 4 | $137.89list price | $551.56 | ROBOTIS US |
| 5 | DYNAMIXEL XM430-W210-T (legs: 2 per leg) actuator.xm430-w210 · MPN XM430-W210-T · 1 alt | actuator | 4 | $310.39list price | $1,241.56 | ROBOTIS US |
| 6 | DYNAMIXEL HN11-I101 idler set structure.idler-hn11 · MPN HN11-I101 · 1 alt | structure | 10 | $8.05list price | $80.50 | ROBOTIS US |
| 7 | DYNAMIXEL HN12-I101 idler set structure.idler-hn12 · MPN HN12-I101 · 1 alt | structure | 4 | $20.47list price | $81.88 | ROBOTIS US |
Seeed Studio1 line · $955.00 | ||||||
| 8 | NVIDIA Jetson Orin NX 16GB (Seeed reComputer J4012) compute.jetson-orin-nx · MPN reComputer J4012 · 1 alt | compute | 1 | $955.00list price | $955.00 | Seeed Studioships globally |
Amazon US31 lines · $511.37 | ||||||
| 9 | AW-CB375NF M.2 (A/E key) Wi-Fi 5 + BLE card electronics.wifi-card · MPN AW-CB375NF | electronics | 1 | $18.36list price | $18.36 | Amazon US |
| 10 | Wi-Fi 6E internal antenna pair, IPX MHF4 electronics.wifi-antenna | electronics | 1 | $9.49list price | $9.49 | Amazon US |
| 11 | Arducam 1080P IMX291 160° fisheye USB camera with mic (eyes) sensor.fisheye-camera | sensor | 2 | $49.99list price | $99.98 | Amazon US |
| 12 | Phone loudspeaker (iPhone SE 2020/2022 replacement part) electronics.speaker | electronics | 1 | $5.99list price | $5.99 | Amazon US |
| 13 | HiLetgo M38 Bluetooth MP3 audio receiver board (3-pack), speaker driver electronics.speaker-driver | electronics | 1 | $7.99list price | $7.99 | Amazon US |
| 14 | 2000 mAh LiPo battery power.battery-lipo · 1 alt | power | 1 | $49.99list price | $49.99 | Amazon USCell count/voltage not stated in the sheet; check the listing |
| 15 | LiPo battery voltage tester / low-voltage alarm power.lipo-tester | power | 1 | $12.95list price | $12.95 | Amazon US |
| 16 | LiPo balance charger power.lipo-charger | power | 1 | $31.99list price | $31.99 | Amazon US |
| 17 | Rocker switch (5-pack) power.rocker-switch | power | 1 | $5.99list price | $5.99 | Amazon US |
| 18 | USB-A to micro-USB cable, 0.5 ft cable.usb-micro-0.5ft | cable | 1 | $5.98list price | $5.98 | Amazon US |
| 19 | USB-A to micro-USB cable, 1.5 ft (speaker) cable.usb-micro-1.5ft | cable | 1 | $8.99list price | $8.99 | Amazon US |
| 20 | USB hub port splitter (cameras + speaker) electronics.usb-hub | electronics | 1 | $6.98list price | $6.98 | Amazon US |
| 21 | Jumper wire assortment (IMU to Jetson header) cable.jumper-wire | cable | 1 | $6.98list price | $6.98 | Amazon US |
| 22 | XT30 male + female plugs (5 pairs) cable.xt30-pairs | cable | 1 | $9.99list price | $9.99 | Amazon US |
| 23 | XT30 to XT60 adapter leads (4-pack) cable.xt30-xt60 | cable | 1 | $8.99list price | $8.99 | Amazon US |
| 24 | Barrel jack connector 5.5x2.5 mm (DC5525), Jetson power cable.barrel-jack | cable | 1 | $9.49list price | $9.49 | Amazon US |
| 25 | 14 AWG 2-conductor power cable (bench-supply tether) cable.wire-14awg | cable | 1 | $17.49list price | $17.49 | Amazon US |
| 26 | 683-2RS ball bearing 3x7x3 mm (10-pack) structure.bearing-683 | structure | 1 | $11.96list price | $11.96 | Amazon US |
| 27 | 684ZZ ball bearing 4x9x4 mm (10-pack) structure.bearing-684 | structure | 2 | $7.99list price | $15.98 | Amazon US |
| 28 | AXK0414 thrust needle roller bearing + 2 washers structure.bearing-axk0414 · MPN AXK0414 | structure | 30 | $1.48list price | $44.40 | Amazon USAlternative link in the sheet |
| 29 | Oilless sleeve bushing 3 mm bore x 5 mm OD x 5 mm (10-pack) structure.bushing-3x5x5 | structure | 1 | $5.99list price | $5.99 | Amazon US |
| 30 | 5 mm rubber tape (foot / palm grip) other.rubber-tape | other | 1 | $16.99list price | $16.99 | Amazon US |
| 31 | Vibra-TITE 213 VC-3 threadlocker, 5 mL (about 100 screws need it per the manual) other.threadlocker | other | 1 | $6.55list price | $6.55 | Amazon US |
| 32 | M2 button-head screw/nut/washer kit, 660 pcs (Screws tab: M2x4 24, M2x8 43, M2x10 20) fastener.m2-kit | fastener | 2 | $8.99list price | $17.98 | Amazon US |
| 33 | M2.5 button-head screw kit, 705 pcs (Screws tab: M2.5x4 32, x6 8, x10 19) fastener.m2_5-kit | fastener | 1 | $9.99list price | $9.99 | Amazon US |
| 34 | M3 countersunk screw kit, 565 pcs (Screws tab: M3x4 5, x6 14, x8 4, x10 11, x14 1; flat head x6 2, x8 5, x12 6) fastener.m3-flat-kit | fastener | 1 | $9.99list price | $9.99 | Amazon US |
| 35 | M3x8 set screws / studs, 50 pcs (Screws tab: 8 used) fastener.m3x8-set | fastener | 1 | $6.99list price | $6.99 | Amazon US |
| 36 | M3x10 set screws / studs, 50 pcs (Screws tab: 25 used) fastener.m3x10-set | fastener | 1 | $6.99list price | $6.99 | Amazon US |
| 37 | M4 button-head screw kit, 675 pcs (Screws tab: M4x8 5, x12 1, x20 6, x25 2, x30 2) fastener.m4-kit | fastener | 1 | $22.38list price | $22.38 | Amazon US |
| 38 | M4 x 40-60 mm socket head screws, 50 pcs (Screws tab: M4x55 1, waist) fastener.m4-long-kit | fastener | 1 | $9.58list price | $9.58 | Amazon US |
| 39 | M3 + M4 stainless lock nut kit, 182 pcs fastener.locknuts | fastener | 1 | $7.98list price | $7.98 | Amazon US |
Bambu Lab US store2 lines · $89.97 | ||||||
| 40 | Bambu PLA-CF filament, 1 kg (structural parts) printed.filament-pla-cf | printed | 2 | $34.99list price | $69.98 | Bambu Lab US store |
| 41 | Bambu PLA Basic filament, 1 kg (calibration devices, stand) printed.filament-pla | printed | 1 | $19.99list price | $19.99 | Bambu Lab US store |
Pololu1 line · $69.90 | ||||||
| 42 | Pololu D36V50F12 12 V 4.5 A step-down regulator power.buck-12v · MPN D36V50F12 | power | 2 | $34.95list price | $69.90 | Pololu |
Adafruit1 line · $24.95 | ||||||
| 43 | Adafruit BNO085 9-DOF IMU breakout (STEMMA QT) sensor.imu-bno085 · MPN Adafruit 4754 | sensor | 1 | $24.95list price | $24.95 | Adafruit |
DigiKey2 lines · $4.99 | ||||||
| 44 | JST EH pre-crimped cable (long motor-chain runs) cable.jst-eh-precrimped | cable | 10 | $0.38list price | $3.82 | DigiKeyDigiKey short link from the sheet; sheet shows $0.38 unit, $3.82 line total |
| 45 | JST EH 3-pin housing cable.jst-eh-housing | cable | 25 | $0.05list price | $1.17 | DigiKeyDigiKey short link from the sheet; sheet shows $0.05 unit, $1.17 line total |
No offer in this region2 lines · $1.80 + 1 unpriced | ||||||
| 46 | TTL power/communication board V8 (8-channel, CH348L USB-to-TTL, 3x XT30 out, 2 buck headers), JLCPCB PCBA electronics.pcb-8ch · MPN TTLPowerBoardV8 | electronics | 1 | unpriced | — | Offers in CN only |
| 47 | M2x6 pre-coated (thread-locking) screws, 200 pcs (Screws tab: 106 used) fastener.m2x6-precoated | fastener | 200 | $0.01list price | $1.80 | Offers in CN only |
| Cart total · US | 342 | $5,727.94 | 1 line unpriced, not in total | |||
Fabricate
Planned for a 256 mm bed- Fabricated parts
- 13
- Print time (sum)
- 55 h
- Material (sum)
- 1,520 g
- Plates · estimate
- ≈ 8
Plates is an estimate, not a slice: the package has no part footprints, so it assumes about 200 g of FDM parts per plate on a 256 mm bed, scaled by bed area (256 mm ≈ 200 g/plate). Parts larger than your bed are not detected. One printer running around the clock: about 2.3 days.
| Part | Process | Material | Qty | h / part | g / part | Profile |
|---|---|---|---|---|---|---|
Arm plate 1 (arms are identical left/right) (MakerWorld 2XC profile, plate 1) printed.arm-1 | FDM | PLA-CF | 1 | 4.1 | 94 | 0.2 mm layer, 6 walls, 25% infill (MakerWorld profile 1842043, Bambu + AMS) |
Arm plate 2 (MakerWorld 2XC profile, plate 2) printed.arm-2 | FDM | PLA-CF | 1 | 4.1 | 94 | 0.2 mm layer, 6 walls, 25% infill |
Left leg plate (MakerWorld 2XC profile, plate 3) printed.leg-left | FDM | PLA-CF | 1 | 4.7 | 120 | 0.2 mm layer, 6 walls, 25% infill |
Right leg plate (MakerWorld 2XC profile, plate 4) printed.leg-right | FDM | PLA-CF | 1 | 4.7 | 120 | 0.2 mm layer, 6 walls, 25% infill |
Torso plate (MakerWorld 2XC profile, plate 5) printed.torso | FDM | PLA-CF | 1 | 10.0 | 312 | 0.2 mm layer, 6 walls, 25% infill |
Torso + head + neck small parts (MakerWorld 2XC profile, plate 10) printed.torso-head-neck | FDM | PLA-CF | 1 | 3.1 | 61 | 0.2 mm layer, 6 walls, 25% infill |
Head cover (MakerWorld 2XC profile, plate 11) printed.head-cover | FDM | PLA-CF | 1 | 3.9 | 70 | 0.2 mm layer, 6 walls, 25% infill |
Waist (gears: tips page recommends PLA-CF with more wall loops) (MakerWorld 2XC profile, plate 13) printed.waist | FDM | PLA-CF | 1 | 3.8 | 86 | 0.2 mm layer, 6 walls, 25% infill |
Feet, rubber-pad version (alt: plate 15 'Foot without Rubber', 34 g, 1.1 h) (MakerWorld 2XC profile, plate 17) printed.foot | FDM | PLA-CF | 1 | 1.0 | 27 | 0.2 mm layer, 6 walls, 25% infill |
Palms, rubber-pad version (alt: plate 16 'Palm with TPU', 62 g TPU, 5.1 h) (MakerWorld 2XC profile, plate 18) printed.palm | FDM | PLA-CF | 1 | 1.4 | 42 | 0.2 mm layer, 6 walls, 25% infill |
Unlabelled plate (contents not named on MakerWorld) (MakerWorld 2XC profile, plate 19) printed.plate-19 | FDM | PLA-CF + PLA (28 g + 3 g) | 1 | 1.0 | 31 | 0.2 mm layer, 6 walls, 25% infill |
Zero-point calibration devices, set 1 (tooling) (MakerWorld 2XC profile, plate 8) printed.calibrator-1 | FDM | PLA | 1 | 8.4 | 298 | 0.2 mm layer, 6 walls, 25% infill |
Zero-point calibration devices, set 2 (tooling) (MakerWorld 2XC profile, plate 12) printed.calibrator-2 | FDM | PLA | 1 | 4.4 | 165 | 0.2 mm layer, 6 walls, 25% infill |
Assemble
Every step ends in a check- Steps
- 16
- Subassemblies
- 10
- Hands-on time (sum)
- —
- Critical path
- —
- Your progress · this device
- —
16 steps have no time estimate; times above are lower bounds.
Steps, in build order
- Fabrication01
Order the 8-channel TTL power board (PCBA) first
The docs say to order the PCB before anything else (about 10 days lead time). Upload TTLPowerBoardV8.zip to JLCPCB, choose Standard PCBA with both sides assembled, then upload bom_v8.csv and positions_v8.csv. If a part is out of stock, use the documented substitutes: C160259 (JST EH), C2902689 (2x06 pin socket), C5188440 (5 mm terminal block).
CHECKIn the JLCPCB parts-confirmation screen every BOM row is ticked and the front/back placement previews match the v8placementF/B images in the docs.- Parts in
- TTL power/communication board V8 (8-channel, CH348L USB-to-TTL, 3x XT30 out, 2 buck headers), JLCPCB PCBAelectronics.pcb-8ch
- Tools
- —
- Torque
- —
- Time
- —
- After
- Start
- Source
- hshi74.github.io
- 02
Print the robot and calibration plates
Bambu users can print straight from the MakerWorld 2XC release. Other printers: download the 3MF files and keep the published part orientations and profile, which the docs say matter for strength. Remove supports before assembly. For custom edits, use the Onshape document.
CHECKAll 13 plates listed here are printed with supports removed. The per-plate filament use roughly matches MakerWorld (about 1.05 kg PLA-CF and 0.47 kg PLA across these 13 plates).- Parts in
- Arm plate 1 (arms are identical left/right) (MakerWorld 2XC profile, plate 1)printed.arm-1
- Arm plate 2 (MakerWorld 2XC profile, plate 2)printed.arm-2
- Left leg plate (MakerWorld 2XC profile, plate 3)printed.leg-left
- Right leg plate (MakerWorld 2XC profile, plate 4)printed.leg-right
- Torso plate (MakerWorld 2XC profile, plate 5)printed.torso
- Torso + head + neck small parts (MakerWorld 2XC profile, plate 10)printed.torso-head-neck
- Head cover (MakerWorld 2XC profile, plate 11)printed.head-cover
- Waist (gears: tips page recommends PLA-CF with more wall loops) (MakerWorld 2XC profile, plate 13)printed.waist
- Feet, rubber-pad version (alt: plate 15 'Foot without Rubber', 34 g, 1.1 h) (MakerWorld 2XC profile, plate 17)printed.foot
- Palms, rubber-pad version (alt: plate 16 'Palm with TPU', 62 g TPU, 5.1 h) (MakerWorld 2XC profile, plate 18)printed.palm
- Unlabelled plate (contents not named on MakerWorld) (MakerWorld 2XC profile, plate 19)printed.plate-19
- Zero-point calibration devices, set 1 (tooling) (MakerWorld 2XC profile, plate 8)printed.calibrator-1
- Zero-point calibration devices, set 2 (tooling) (MakerWorld 2XC profile, plate 12)printed.calibrator-2
- Bambu PLA-CF filament, 1 kg (structural parts)printed.filament-pla-cf
- Bambu PLA Basic filament, 1 kg (calibration devices, stand)printed.filament-pla
- Tools
- Bambu Lab printer (recommended; sheet lists X1-Carbon Combo + smooth PEI plate + glue)
- Torque
- —
- Time
- —
- After
- Start
- Source
- hshi74.github.io
- 03
Sort and count the hardware
The manual preface: sort and count every hardware piece into separate compartments so leftovers reveal skipped steps. Use the pre-coated M2x6 screws, or threadlocker on the screws highlighted yellow in the manual. If a joint feels stuck, check screw length first.
CHECKCounted piles match the sheet's Screws tab (e.g. M2x6 106, M2x8 43, M2.5x4 32, M3x10 studs 25, bearings 683 x12, 684 x14, AXK0414 x18).- Parts in
- M2x6 pre-coated (thread-locking) screws, 200 pcs (Screws tab: 106 used)fastener.m2x6-precoated
- M2 button-head screw/nut/washer kit, 660 pcs (Screws tab: M2x4 24, M2x8 43, M2x10 20)fastener.m2-kit
- M2.5 button-head screw kit, 705 pcs (Screws tab: M2.5x4 32, x6 8, x10 19)fastener.m2_5-kit
- M3 countersunk screw kit, 565 pcs (Screws tab: M3x4 5, x6 14, x8 4, x10 11, x14 1; flat head x6 2, x8 5, x12 6)fastener.m3-flat-kit
- M3x8 set screws / studs, 50 pcs (Screws tab: 8 used)fastener.m3x8-set
- M3x10 set screws / studs, 50 pcs (Screws tab: 25 used)fastener.m3x10-set
- M4 button-head screw kit, 675 pcs (Screws tab: M4x8 5, x12 1, x20 6, x25 2, x30 2)fastener.m4-kit
- M4 x 40-60 mm socket head screws, 50 pcs (Screws tab: M4x55 1, waist)fastener.m4-long-kit
- M3 + M4 stainless lock nut kit, 182 pcsfastener.locknuts
- 683-2RS ball bearing 3x7x3 mm (10-pack)structure.bearing-683
- 684ZZ ball bearing 4x9x4 mm (10-pack)structure.bearing-684
- AXK0414 thrust needle roller bearing + 2 washersstructure.bearing-axk0414
- Oilless sleeve bushing 3 mm bore x 5 mm OD x 5 mm (10-pack)structure.bushing-3x5x5
- Tools
- —
- Torque
- —
- Time
- —
- After
- Start
- Source
- docs.google.com
- Arms04
Arms (x2, identical)
The arms go first because they are the easiest. Per the manual, each arm takes 3x 2XL430, 1x XC430 and 3x HN11-I101 idler sets. Plug the cable in on the idler side first, and seat studs flush with or slightly below the surface. Left and right arms are identical. The 2.0 assembly video walks through the arm.
CHECKEach arm joint turns by hand through its range with no binding, and all studs sit flush or below the surface.- Parts in
- DYNAMIXEL 2XL430-W250-T (dual-axis, arms: 3 per arm)actuator.2xl430-w250
- DYNAMIXEL XC430-T240BB-Tactuator.xc430-t240bb
- DYNAMIXEL HN11-I101 idler setstructure.idler-hn11
- AXK0414 thrust needle roller bearing + 2 washersstructure.bearing-axk0414
- 684ZZ ball bearing 4x9x4 mm (10-pack)structure.bearing-684
- M2 button-head screw/nut/washer kit, 660 pcs (Screws tab: M2x4 24, M2x8 43, M2x10 20)fastener.m2-kit
- M2.5 button-head screw kit, 705 pcs (Screws tab: M2.5x4 32, x6 8, x10 19)fastener.m2_5-kit
- M3x8 set screws / studs, 50 pcs (Screws tab: 8 used)fastener.m3x8-set
- M3x10 set screws / studs, 50 pcs (Screws tab: 25 used)fastener.m3x10-set
- M4 button-head screw kit, 675 pcs (Screws tab: M4x8 5, x12 1, x20 6, x25 2, x30 2)fastener.m4-kit
- Arm plate 1 (arms are identical left/right) (MakerWorld 2XC profile, plate 1)printed.arm-1
- Arm plate 2 (MakerWorld 2XC profile, plate 2)printed.arm-2
- Palms, rubber-pad version (alt: plate 16 'Palm with TPU', 62 g TPU, 5.1 h) (MakerWorld 2XC profile, plate 18)printed.palm
- Vibra-TITE 213 VC-3 threadlocker, 5 mL (about 100 screws need it per the manual)other.threadlocker
- Tools
- Electric screwdriver (low torque for M2), PH1 screwdriver, Allen keys
- Torque
- —
- Time
- —
- Source
- hshi74.github.io
- Legs05
Legs (left, then mirrored right)
Per the manual, each leg takes 2x XM430, 1x XC430, 1x 2XC430, 1x XC330, 2x HN11 and 1x HN12. On the left hip roll the 2XC430 actuation side faces backward; on the right it faces forward. Watch the XC330 orientation. The right leg mirrors the left. 2.0 legs are 30 mm shorter and drop the knee parallel links.
CHECKMotor orientations on both legs match the L/R orientation figure in the manual, and each leg joint moves by hand without cable snag.- Parts in
- DYNAMIXEL XM430-W210-T (legs: 2 per leg)actuator.xm430-w210
- DYNAMIXEL 2XC430-W250-T (dual-axis, hip)actuator.2xc430-w250
- DYNAMIXEL XC430-T240BB-Tactuator.xc430-t240bb
- DYNAMIXEL XC330-T288-T (neck, waist, ankle, torso)actuator.xc330-t288
- DYNAMIXEL HN11-I101 idler setstructure.idler-hn11
- DYNAMIXEL HN12-I101 idler setstructure.idler-hn12
- AXK0414 thrust needle roller bearing + 2 washersstructure.bearing-axk0414
- 683-2RS ball bearing 3x7x3 mm (10-pack)structure.bearing-683
- 684ZZ ball bearing 4x9x4 mm (10-pack)structure.bearing-684
- M2 button-head screw/nut/washer kit, 660 pcs (Screws tab: M2x4 24, M2x8 43, M2x10 20)fastener.m2-kit
- M2.5 button-head screw kit, 705 pcs (Screws tab: M2.5x4 32, x6 8, x10 19)fastener.m2_5-kit
- M3 countersunk screw kit, 565 pcs (Screws tab: M3x4 5, x6 14, x8 4, x10 11, x14 1; flat head x6 2, x8 5, x12 6)fastener.m3-flat-kit
- M4 button-head screw kit, 675 pcs (Screws tab: M4x8 5, x12 1, x20 6, x25 2, x30 2)fastener.m4-kit
- M3 + M4 stainless lock nut kit, 182 pcsfastener.locknuts
- Left leg plate (MakerWorld 2XC profile, plate 3)printed.leg-left
- Right leg plate (MakerWorld 2XC profile, plate 4)printed.leg-right
- Feet, rubber-pad version (alt: plate 15 'Foot without Rubber', 34 g, 1.1 h) (MakerWorld 2XC profile, plate 17)printed.foot
- 5 mm rubber tape (foot / palm grip)other.rubber-tape
- Tools
- Allen keys, Wrench or pliers
- Torque
- —
- Time
- —
- Source
- hshi74.github.io
- Head06
Head: eyes, speaker, neck motor
Mount both fisheye cameras (with cables) and the speaker driver with double-sided tape. Plug the cable in before closing the shell; the micro-USB port on the driver board is fragile. Plug in the neck motor cable on both sides. See the camera-cable, speaker-cable and head videos.
CHECKBoth camera cables and the speaker cable exit the head, and the neck XC330 has cables on both sides.- Parts in
- Arducam 1080P IMX291 160° fisheye USB camera with mic (eyes)sensor.fisheye-camera
- Phone loudspeaker (iPhone SE 2020/2022 replacement part)electronics.speaker
- HiLetgo M38 Bluetooth MP3 audio receiver board (3-pack), speaker driverelectronics.speaker-driver
- USB-A to micro-USB cable, 1.5 ft (speaker)cable.usb-micro-1.5ft
- DYNAMIXEL XC330-T288-T (neck, waist, ankle, torso)actuator.xc330-t288
- 683-2RS ball bearing 3x7x3 mm (10-pack)structure.bearing-683
- 684ZZ ball bearing 4x9x4 mm (10-pack)structure.bearing-684
- Head cover (MakerWorld 2XC profile, plate 11)printed.head-cover
- Torso + head + neck small parts (MakerWorld 2XC profile, plate 10)printed.torso-head-neck
- Tools
- —
- Torque
- —
- Time
- —
- After
- 02
- Source
- hshi74.github.io
- Waist07
Waist (joins both legs)
Per the manual: 2x XC330 and 2x HN11 idler sets, plus the M4x55 bolt. Match the motor orientation figure. The waist link flexes to let the motors in. The manual notes the waist link geometry changed after it was drawn, but the steps are the same.
CHECKBoth legs hang from the waist, the waist turns by hand in roll and yaw, and the M4x55 screw is tight.- Parts in
- DYNAMIXEL XC330-T288-T (neck, waist, ankle, torso)actuator.xc330-t288
- DYNAMIXEL HN11-I101 idler setstructure.idler-hn11
- AXK0414 thrust needle roller bearing + 2 washersstructure.bearing-axk0414
- 684ZZ ball bearing 4x9x4 mm (10-pack)structure.bearing-684
- M4 x 40-60 mm socket head screws, 50 pcs (Screws tab: M4x55 1, waist)fastener.m4-long-kit
- Waist (gears: tips page recommends PLA-CF with more wall loops) (MakerWorld 2XC profile, plate 13)printed.waist
- Tools
- Allen key
- Torque
- —
- Time
- —
- After
- 05
- Source
- hshi74.github.io
- Torso08
Torso shell, neck, IMU (manual torso steps 1-8)
Build the torso up to step 8 of the manual. Plug in the IMU cable (4 jumper wires taped together, pin map in the manual) before closing that section. The manual singles out one step-3 screw as possibly the most critical in the build; tighten it fully.
CHECKThe IMU is wired per the manual's pin map, the arms and head are attached, and the neck rotates by hand.- Parts in
- Torso plate (MakerWorld 2XC profile, plate 5)printed.torso
- Torso + head + neck small parts (MakerWorld 2XC profile, plate 10)printed.torso-head-neck
- DYNAMIXEL XC330-T288-T (neck, waist, ankle, torso)actuator.xc330-t288
- Adafruit BNO085 9-DOF IMU breakout (STEMMA QT)sensor.imu-bno085
- Jumper wire assortment (IMU to Jetson header)cable.jumper-wire
- M3 countersunk screw kit, 565 pcs (Screws tab: M3x4 5, x6 14, x8 4, x10 11, x14 1; flat head x6 2, x8 5, x12 6)fastener.m3-flat-kit
- M2.5 button-head screw kit, 705 pcs (Screws tab: M2.5x4 32, x6 8, x10 19)fastener.m2_5-kit
- AXK0414 thrust needle roller bearing + 2 washersstructure.bearing-axk0414
- Tools
- —
- Torque
- —
- Time
- —
- Source
- hshi74.github.io
- Bring-up09
Set Dynamixel IDs and baud rate
Set IDs one motor at a time to avoid conflicts, using the ID list in the manual's wiring figure. Set every motor to 2 Mbps: the tips page says XC330 cannot sustain 4 Mbps. Each 2X motor shows two IDs; move the joint to see which one changes. The 'ID the Motors' video walks through it. The repo has no ID-assignment script.
CHECKA Dynamixel Wizard scan at 2 Mbps finds every motor at its assigned ID with no duplicates.- Parts in
- DYNAMIXEL 2XC430-W250-T (dual-axis, hip)actuator.2xc430-w250
- DYNAMIXEL 2XL430-W250-T (dual-axis, arms: 3 per arm)actuator.2xl430-w250
- DYNAMIXEL XC330-T288-T (neck, waist, ankle, torso)actuator.xc330-t288
- DYNAMIXEL XC430-T240BB-Tactuator.xc430-t240bb
- DYNAMIXEL XM430-W210-T (legs: 2 per leg)actuator.xm430-w210
- Tools
- Dynamixel Wizard 2.0, U2D2 + U2D2 power hub + 12 V adapter (per the manual; the sheet lists U2D2/hub only under Teleoperation)
- Torque
- —
- Time
- —
- After
- 08
- Source
- github.com
- Compute10
Set up the Jetson Orin NX before installing it
Flash JetPack 6.1+ (the Seeed reComputer J4012 guide), fit the M.2 Wi-Fi card, set power mode 0:MAXN, install the real-time kernel, then create the conda env and run `pip install -e ".[jetson]"`. The USB-C port is for flashing only.
CHECK`uname -r` ends in `-rt-tegra`, the Jetson joins Wi-Fi and accepts SSH, and `pytest tests/` runs in the toddlerbot env.- Parts in
- NVIDIA Jetson Orin NX 16GB (Seeed reComputer J4012)compute.jetson-orin-nx
- AW-CB375NF M.2 (A/E key) Wi-Fi 5 + BLE cardelectronics.wifi-card
- Wi-Fi 6E internal antenna pair, IPX MHF4electronics.wifi-antenna
- Tools
- Host PC for flashing, HDMI, keyboard, mouse
- Torque
- —
- Time
- —
- After
- 08
- Source
- hshi74.github.io
- Electrical11
Power board and motor-chain wiring
Safety · human-verified requiredPrepare the power board as in the Power Board video: two D36V50F12 bucks on the back headers, switch on the terminal block, XT30 to the Jetson via the barrel jack. Chain the motors to the board roots as the manual's diagram shows, using longer JST EH leads for the long runs. Keep the manual's slot allocation so current is balanced across the bucks. Connect the USB hub (cameras, speaker) and the board to the Jetson.
CHECKBefore any motor is connected, the Jetson XT30 output reads 12 V with correct polarity. With the chains connected, every motor ID appears in a scan from the Jetson.This step can hurt a person or ruin parts. Its instructions need sign-off by a human who has done it before relying on them. Stop and ask if anything differs from what you see.
- Parts in
- TTL power/communication board V8 (8-channel, CH348L USB-to-TTL, 3x XT30 out, 2 buck headers), JLCPCB PCBAelectronics.pcb-8ch
- Pololu D36V50F12 12 V 4.5 A step-down regulatorpower.buck-12v
- JST EH pre-crimped cable (long motor-chain runs)cable.jst-eh-precrimped
- JST EH 3-pin housingcable.jst-eh-housing
- XT30 male + female plugs (5 pairs)cable.xt30-pairs
- XT30 to XT60 adapter leads (4-pack)cable.xt30-xt60
- Barrel jack connector 5.5x2.5 mm (DC5525), Jetson powercable.barrel-jack
- USB-A to micro-USB cable, 0.5 ftcable.usb-micro-0.5ft
- USB hub port splitter (cameras + speaker)electronics.usb-hub
- Rocker switch (5-pack)power.rocker-switch
- Tools
- Soldering station, Wire stripper, Heat-shrink
- Torque
- —
- Time
- —
- Source
- hshi74.github.io
- 12
Battery, tester and first power-on
Safety · human-verified requiredBring the robot up first on the bench supply over the 14 AWG tether; tape the supply's voltage and current buttons, per the tips page. Then fit the LiPo with the voltage tester attached to prevent over-discharge. The battery box goes into the torso in one pose; if the front cover will not close, fix the box pose and wire routing. An optional DIY 21700 pack is documented separately.
CHECKOn battery, the tester shows every cell above its alarm threshold, the Jetson boots, and all motors respond. The front cover knobs close without force.This step can hurt a person or ruin parts. Its instructions need sign-off by a human who has done it before relying on them. Stop and ask if anything differs from what you see.
- Parts in
- 2000 mAh LiPo batterypower.battery-lipo
- LiPo battery voltage tester / low-voltage alarmpower.lipo-tester
- LiPo balance chargerpower.lipo-charger
- 14 AWG 2-conductor power cable (bench-supply tether)cable.wire-14awg
- Tools
- 30 V 10 A bench supply (sheet Tools section)
- Torque
- —
- Time
- —
- After
- 11
- Source
- hshi74.github.io
- Bring-up13
Zero-point calibration with printed jigs
Safety · human-verified requiredInsert the calibration devices until they click and lock the joints; route cables clear of them. The knee lower limit is its own zero reference. Run `python toddlerbot/tools/calibrate_zero.py --robot toddlerbot_2xc` (optionally with `--parts ...`). Check config_motors.json, then run `python toddlerbot/descriptions/add_configs.py --robot toddlerbot_2xc`.
CHECKWith the jigs in, no calibrated joint can be moved by hand, and after add_configs the zero offsets in config_motors.json have been propagated to the robot config.This step can hurt a person or ruin parts. Its instructions need sign-off by a human who has done it before relying on them. Stop and ask if anything differs from what you see.
- Parts in
- Zero-point calibration devices, set 1 (tooling) (MakerWorld 2XC profile, plate 8)printed.calibrator-1
- Zero-point calibration devices, set 2 (tooling) (MakerWorld 2XC profile, plate 12)printed.calibrator-2
- Tools
- —
- Torque
- —
- Time
- —
- Source
- hshi74.github.io
- 14
Standing test
Safety · human-verified requiredRun `python toddlerbot/policies/run_policy.py --policy stand --robot toddlerbot_2xc --sim real`. Hold the robot whenever you stop a script or cut power: the motors disable and it will fall. Also hold it in the air with stand running and feel for backlash, which usually means loose screws.
CHECKToddy stands upright and steady on flat ground under the stand policy, with no joint showing more backlash than the XC330 joints.This step can hurt a person or ruin parts. Its instructions need sign-off by a human who has done it before relying on them. Stop and ask if anything differs from what you see.
- Parts in
- —
- Tools
- —
- Torque
- —
- Time
- —
- After
- 13
- Source
- hshi74.github.io
- 15
IMU-feedback zero fine-tuning
Safety · human-verified requiredIf the robot leans after jig calibration (joint backlash), run `python toddlerbot/policies/run_policy.py --policy calibrate --robot toddlerbot_2xc --sim real`. It runs PID on torso pitch from the IMU. Press Ctrl+C once it is upright, holding the robot; the zero point is saved.
CHECKRerunning the stand policy after fine-tuning, the torso stays visibly upright with no forward or backward lean.This step can hurt a person or ruin parts. Its instructions need sign-off by a human who has done it before relying on them. Stop and ask if anything differs from what you see.
- Parts in
- Adafruit BNO085 9-DOF IMU breakout (STEMMA QT)sensor.imu-bno085
- Tools
- —
- Torque
- —
- Time
- —
- After
- 14
- Source
- hshi74.github.io
- Software16
Keyframe replay in sim, then published RL checkpoints
Safety · human-verified requiredCheck the install in MuJoCo with `python toddlerbot/policies/run_policy.py --policy replay --path motion/push_up_2xc.lz4 --vis view`. Download a 2XC checkpoint (e.g. toddlerbot_2xc_walk_rsl_20251226_114612) from the Google Drive folder linked in the README, try it in sim, then on the real robot with a spotter. To train your own: `python toddlerbot/locomotion/train_mjx.py --gin-file walk --env walk`.
CHECKThe push-up replay plays in the MuJoCo viewer without errors, and the walk checkpoint walks in simulation before any real-robot run.This step can hurt a person or ruin parts. Its instructions need sign-off by a human who has done it before relying on them. Stop and ask if anything differs from what you see.
- Parts in
- —
- Tools
- —
- Torque
- —
- Time
- —
- After
- 15
- Source
- github.com
Progress is stored in this browser only (localStorage). Nothing is sent anywhere.
Bring-up
Flash · calibrate · first policy- A
Flash firmware
TargetsDynamixel X-series servos (Protocol 2.0, TTL, 2 Mbps), TTL power board V8 (CH348L 8-port USB-to-TTL, no MCU firmware), Jetson Orin NX host (JetPack 6.1+, RT kernel)
Repogithub.com/hshi74/toddlerbot
No custom motor firmware. Motor IDs and baud rate are set by hand in ROBOTIS Dynamixel Wizard 2.0 (manual + 'ID the Motors' video); the repo has no ID script. Host control is a C++ pybind11 extension (toddlerbot/actuation/src/dynamixel_mch.cpp + vendored dynamixel_sdk) that scans the serial ports for motor IDs; toddlerbot/sim/real_world.py opens them at 2,000,000 baud. examples/test_dynamixel.py tests the bus. Per-motor system ID: toddlerbot/tools/run_sysID.py with the SysID jig (MakerWorld plate 7); cached fits are in toddlerbot/descriptions/sysID_*/. Per-robot configs: toddlerbot/descriptions/toddlerbot_2xc/ (MJCF, URDF, robot.yml).
- B
Calibrate
Calibrationpython toddlerbot/tools/calibrate_zero.py --robot toddlerbot_2xc [--parts ...]; python toddlerbot/descriptions/add_configs.py --robot toddlerbot_2xc; fine-tune: python toddlerbot/policies/run_policy.py --policy calibrate --robot toddlerbot_2xc --sim realLog the output. It goes in your build report.
- C
First policy
- walk (omnidirectional, 2XC)MuJoCo MJX + RSL-RL PPO, ONNX Runtime on Jetson source
- get up from the groundMuJoCo MJX + RSL-RL PPO source
- crawl (full / only / rotate)MuJoCo MJX + RSL-RL PPO source
- crawl up / down stairsMuJoCo MJX + RSL-RL PPO source
- climb up / down box, climb wallMuJoCo MJX + RSL-RL PPO source
- multi-skill whole-body locomotion (Locomotion Beyond Feet)RL skill policies + depth skill classifier (FoundationStereo) source
- push-up (keyframe replay)open-loop keyframe replay (run_policy.py --policy replay) source
- cartwheel (DeepMimic-style)MuJoCo MJX + RSL-RL PPO source
- bimanual manipulation (diffusion policy)Diffusion Policy (PyTorch) source
Try the policy in the browser sim before it touches hardware. Keep a hand near the power switch the first time a policy runs on the real robot.
Report your build
Moves ToddlerBot toward L4 · BuiltA build report is the only thing that proves a package works. It raises the level, puts a point on the map, and tells the Foreman which steps to rewrite.
Level gate
Holds L2 · evidence, not confidence- L0Indexed
Known to exist. Atlas page only.
- 3 sources on record(met)
- L1Compiled
Package validates against the spec; every fact has a source.
- Build package compiled(met)
- 28 sources across robot and package(met)
- L2Sim-verified
Loads in browser and GPU sim, mass within tolerance of the BOM, holds a stand. Unlocks .training.
- URDF/MJCF is public(met)
- Sim load, mass tolerance and stand are checked on .training(checked elsewhere)
- L3Sourced
Every BOM line resolves to a live offer in at least two regions. Unlocks the one-click cart.
- 1/47 BOM lines have offers in 2+ regions(not met)
- L4Built
At least one community build report with photos and bring-up logs. Unlocks Build it as the main action.
- 0 reviewed build reports(not met)
- Review feed unreachable at last refresh; count is registry-only(checked elsewhere)
- L5Certified
The robot's maintainer signs the package. Unlocks certified teams and kit sales.
- Maintainer signature not recorded(not met)
Levels are cumulative and set by the registry from reviewed evidence. This panel shows what can be measured from the package today.