Skip to content
humanoidrobot.build

Build package

Build Duke Humanoid v1

Duke University General Robotics Lab · Biped · research · 2024

Open-source 10-DOF research biped for energy-efficient RL locomotion exploiting passive dynamics.

L1CompiledGate: Package validates against the spec; every fact has a source.
Fig 1/2PhotoDuke Humanoid v1 legs, photo sequence of a walking gait
From the DukeHumanoidv1 README.© General Robotics Lab, Duke University (DukeHumanoidv1) · MIT · source
Drawing
/duke/duke-humanoid
Maker
Duke University General Robotics Lab
Country
Durham, US
Package rev
v0.1.0
Level
L1 Compiled
Availability
Research only
Openness
85/100
HW licence
unknown
Last checked
2026-09-25
DOF
10

Paper arXiv:2409.19795. Hardware wiki on Notion holds the BOM, CNC/DIY CAD zips and Fusion files; the GitHub repo holds code, URDF and policies. The repo is MIT; the Notion CAD has no stated license. v1 is legs only on a box body and tethered (48 V bench supplies, external Linux PC over EtherCAT); motors and drives are quote-only from Motorevo. Repo inactive since Jun 2025; the lab published Duke Humanoid V2 repos in Aug-Sep 2026 (generalroboticslab/duke_humanoid_v2).

01

Configure

Saved in the URL. Share the link to share the build.
Region · where parts ship to
Printer bed (square, mm)
Printed parts
Estimate for United States
—+ 45 unpriced lines: lower bound
No BOM line has a price yet
02

Source

One cart across 9 vendors · prices in USD as listed

45 lines · 512 parts · 13 without an offer in US · 1/45 lines sourced in 2+ regions (L3 gate)

#PartCategoryQtyUnitLineOffer
Mouser1 line · unpriced
1
MicroStrain 3DM-CV7-AHRS IMU
sensor.imu · MPN 3DM-CV7-AHRS
sensor1unpriced—MouserLinked in the Duke BOM
DigiKey2 lines · unpriced
2
TE FX29 compression load cell, 100 lbf, I2C (toe and heel of each foot)
sensor.load-cell · MPN FX29K0-100A-0100-L
sensor4unpriced—DigiKeyLinked in the Duke BOM
3
KEMET ALS70A334QS063 0.33 F capacitor on the distribution block
power.capacitor · MPN ALS70A334QS063
power1unpriced—DigiKeyLinked in the Duke BOM
PJRC (maker store)1 line · unpriced
4
PJRC Teensy 4.0 with pins (sensor hub: IMU over UART, load cells over I2C)
electronics.teensy40
electronics1unpriced—PJRC (maker store)
Amazon22 lines · unpriced
5
Monoprice SlimRun Ethernet patch cable, ~2 m per leg, re-terminated as load-cell extenders
cable.load-cell-extender
cable2unpriced—AmazonLinked in the Duke BOM
6
Pre-crimped MX1.25 male/female connector set (detachable load cells)
cable.mx125
cable1unpriced—AmazonSearch page linked in the Duke Electronics wiki
7
Latching emergency stop switch on the supplies' remote on/off
power.estop
power1unpriced—AmazonLinked in the Duke BOM
8
Power distribution block (uxcell terminal block)
power.distribution-block
power1unpriced—AmazonLinked in the Duke BOM
9
12 AWG 3-prong AC power cable, one per supply
cable.ac-12awg
cable4unpriced—AmazonSearch page linked in the Duke Electronics wiki
10
2020 aluminium extrusion, cut: 4x 353 mm, 2x 260 mm (b), 2x 260 mm (c)
structure.extrusion-2020
structure8unpriced—AmazonLinked in the Duke BOM
11
3-way corner connector assembly for 2020 extrusion (top frame)
structure.3way-connector
structure4unpriced—AmazonLinked in the Duke BOM
12
Bearing 65x85x10 mm (hip and knee motor axes)
structure.bearing-65x85x10
structure6unpriced—AmazonLinked in the Duke BOM
13
Flanged bearing 25x37x7 mm
structure.bearing-25x37x7f
structure8unpriced—AmazonLinked in the Duke BOM
14
Needle bearing 10x14x10 mm (knee/ankle linkage)
structure.needle-10x14x10
structure10unpriced—AmazonLinked in the Duke BOM
15
M5x25 socket head cap screw (Motor_1 rotor)
fastener.m5x25-shcs
fastener12unpriced—AmazonLinked in the Duke BOM
16
M5x10 button head screw (corner connectors)
fastener.m5x10-bhcs
fastener48unpriced—AmazonLinked in the Duke BOM
17
M5 sliding T-nut for 2020 extrusion
fastener.m5-tnut
fastener24unpriced—AmazonLinked in the Duke BOM
18
M4x25 socket head cap screw (Motor_0 and Motor_2 rotors)
fastener.m4x25-shcs
fastener24unpriced—AmazonLinked in the Duke BOM
19
M4x20 screw (parallel linkage)
fastener.m4x20
fastener16unpriced—AmazonLinked in the Duke BOM
20
M4 nut (parallel linkage)
fastener.m4-nut
fastener16unpriced—AmazonLinked in the Duke BOM
21
M4x12 button head screw (everything else)
fastener.m4x12-bhcs
fastener198unpriced—AmazonLinked in the Duke BOM
22
M4 and M5 external-tooth lock washers (as needed)
fastener.lock-washers
fastener1unpriced—AmazonLinked in the Duke BOM
23
PTFE lubricant (bearings)
other.ptfe-grease
other1unpriced—AmazonLinked in the Duke BOM
24
CATTONGUE non-abrasive grip tape, 2 in (foot soles)
other.grip-tape
other1unpriced—AmazonLinked in the Duke BOM
25
Filament: PLA (Creality), PLA-CF (Bambu Lab), TPU 95A HF (Polymaker)
other.filament
other1unpriced—AmazonLinked in the Duke BOM
26
Gantry fasteners: M8 sliding T-nuts (18 packs of 20) and M8x1.25x16 SHCS (9 packs of 40)
fastener.gantry
fastener1unpriced—AmazonLinked in the Duke BOM
8BitDo1 line · unpriced
27
8BitDo Ultimate controller with 2.4 GHz adapter (velocity commands)
electronics.gamepad
electronics1unpriced—8BitDoships globallyLinked in the hardware-control README; any pygame gamepad works with changes
McMaster-Carr1 line · unpriced
28
Spacer / thrust washer 18x10x2 mm
structure.spacer-18x10x2
structure20unpriced—McMaster-CarrLinked in the Duke BOM
Henkel1 line · unpriced
29
Loctite 222 low-strength threadlocker
other.loctite-222
other1unpriced—HenkelLinked in the Duke BOM
Reynolds Advanced Materials1 line · unpriced
30
Smooth-On Task 16 casting resin (listed 'for molding')
other.task16
other1unpriced—Reynolds Advanced MaterialsLinked in the Duke BOM
80/202 lines · unpriced
31
80/20 gantry extrusion: 1x 40-8016 @ 1828.8 mm, 2x 40-8080 @ 1828.8 mm, 2x 40-8080 @ 1524 mm, 4x 40-4080 @ 1219.2 mm (mitred), 2x 40-4080 @ 609.6 mm (mitred)
structure.gantry-extrusion
structure11unpriced—80/20Linked in the Duke BOM
32
80/20 gantry plates and brackets: 6x 14105 corner bracket, 4x 40-4325, 4x 40-4328, 4x 40-4365, 12x 40-4362, 4x 40-4330, 8x 40-4331
structure.gantry-plates
structure42unpriced—80/20Linked in the Duke BOM
No offer in this region13 lines · unpriced
33
Motorevo PA-100-2018 geared motor, 18:1 (rated 40 Nm / 20 A), hip yaw, hip roll, knee
actuator.pa100-18 · MPN PA-100-2018
actuator6unpriced—Offers in CN only
34
Motorevo PA-100-2020 geared motor, 20:1 (rated 44.8 Nm / 20 A), hip pitch
actuator.pa100-20 · MPN PA-100-2020
actuator2unpriced—Offers in CN only
35
Motorevo PA-100-2010 geared motor, 10:1 (rated 22.4 Nm / 20 A), ankle
actuator.pa100-10 · MPN PA-100-2010
actuator2unpriced—Offers in CN only
36
Motor controller assembly (Elmo-based EtherCAT drive, CiA 402), one per motor
electronics.motor-controller
electronics10unpriced—Offers in CN only
37
Samtec FFSD-05-S-05.00-01-N ribbon cable (IMU has no premade leads; solder USB + UART by hand)
cable.imu-connector · MPN FFSD-05-S-05.00-01-N
cable1unpriced—No offer found yet
38
TCA9548A 8-channel I2C multiplexer breakout (FX29 address 0x28 is fixed)
electronics.i2c-mux · MPN TCA9548A · 1 alt
electronics1unpriced—No offer found yet
39
4.7 kΩ resistor (I2C pull-ups)
electronics.r-4k7
electronics8unpriced—No offer found yet
40
220 Ω resistor
electronics.r-220
electronics1unpriced—No offer found yet
41
100 nF capacitor (per-device decoupling on the sensor board)
electronics.c-100n
electronics2unpriced—No offer found yet
42
Linux PC, Ubuntu 22.04 + CUDA 12.3, Ethernet port used as EtherCAT master (e.g. enp3s0)
compute.host · 1 alt
compute1unpriced—No offer found yet
43
Mean Well RSP-2000-48 48 V 2000 W supply, 4 in parallel (active current sharing)
power.psu · MPN RSP-2000-48
power4unpriced—No offer found yet
44
Power wire: 8 AWG (supply outputs), 4 AWG (capacitor), 24 AWG (current-share signals)
cable.wire-power
cable1unpriced—No offer found yet
45
10 mm external retaining ring (lower leg shafts)
structure.retaining-ring-10
structure2unpriced—No offer found yet
Cart total · US512$0.0045 lines unpriced, not in total
03

Fabricate

Planned for a 256 mm bed
Fabricated parts
90
Print time (sum)
—
Material (sum)
—
Plates · estimate
—

No plate estimate: the package does not list grams per part yet, and we will not guess them. Slice the source files for your 256 mm bed.

PartProcessMaterialQtyh / partg / partProfile
Body plates: 2x B_Shelf_Plate, 1x B_Base_Plate, 12x B_Corner_Connector
cnc.body
CNCAluminium 606115——source
Upper leg (hip) plates, 7 per leg: Hip_0 Top/Front/Back/Inner/Outer, Hip_1 Inner/Outer (all symmetric)
cnc.upper-leg
CNCAluminium 606114——source
Lower leg parts, 13 per leg: Hip_to_Lower_Connector, Shank_Plate Outer/Inner, Knee_Joint_Holder, Knee_Rocker, Ankle_Rocker, 2x Shank_Ankle_Link, 2x Knee_Link, Shank_Link_Main, Shank_Link_Back, Foot_Main (mirror parts have L and R files)
cnc.lower-leg
CNCAluminium 606126——source
Bearing_Load_Shaft
cnc.load-shaft
CNCAluminium 606110——source
B_Teensy_Mount and B_IMU_Mount
printed.electronics-mounts
FDMPLA or PLA-CF, 25% adaptive cubic, 2 walls2——source
Knee_Stopper (mirror)
printed.knee-stopper
FDMTPU 95A, 30% gyroid, 2 walls2——source
Foot_Sole: hard (PLA/PLA-CF, 100% rectilinear) or soft (TPU 95A, 60% adaptive cubic, 0 walls, flow 0.9, ~60-70A)
printed.foot-sole
FDMPLA / PLA-CF or TPU 95A2——source
Load_Cell_Enclosure
printed.load-cell-enclosure
FDMPLA-CF, 100% rectilinear, 0.16 mm layers (Bambu Lab printer)4——source
Motor protection guards L/R_P_0..P_4
printed.motor-protection
FDMTPU 95A, 30% gyroid, 0 walls, flow 0.610——source
Joint zeroing jigs: A_hip_0_2_5_7, A_knee_ankle_3_4_L, A_knee_ankle_8_9_R, A_hip_1_L, A_hip_6_R (one of each design)
printed.alignment-jigs
FDMNot specified5——source
Aluminium 6061 · 65 parts · g unknownPLA or PLA-CF, 25% adaptive cubic, 2 walls · 2 parts · g unknownTPU 95A, 30% gyroid, 2 walls · 2 parts · g unknownPLA / PLA-CF or TPU 95A · 2 parts · g unknownPLA-CF, 100% rectilinear, 0.16 mm layers (Bambu Lab printer) · 4 parts · g unknownTPU 95A, 30% gyroid, 0 walls, flow 0.6 · 10 parts · g unknownNot specified · 5 parts · g unknown
04

Assemble

Every step ends in a check
Steps
18
Subassemblies
6
Hands-on time (sum)
—
Critical path
—
Your progress · this device
—

18 steps have no time estimate; times above are lower bounds.

Assembly graph · lanes are subassemblies, columns are dependency depthcritical pathdonesafety

Steps, in build order

  1. Fabrication
    01

    Order the CNC parts

    Download the CNC and DIY STEP zip from the BOM page and order every 'machined' part in Al 6061 (the lab used JLCCNC: ISO 2768 medium, Ra 3.2). Order mirror parts as separate left and right files; symmetric parts use one file for both legs. Holes are tapped by the shop or by you.

    CHECKYou have 15 body parts, 14 upper-leg plates, 26 lower-leg parts and 10 load shafts, and an M4 screw threads by hand into every tapped hole.
    Parts in
    • Body plates: 2x B_Shelf_Plate, 1x B_Base_Plate, 12x B_Corner_Connectorcnc.body
    • Upper leg (hip) plates, 7 per leg: Hip_0 Top/Front/Back/Inner/Outer, Hip_1 Inner/Outer (all symmetric)cnc.upper-leg
    • Lower leg parts, 13 per leg: Hip_to_Lower_Connector, Shank_Plate Outer/Inner, Knee_Joint_Holder, Knee_Rocker, Ankle_Rocker, 2x Shank_Ankle_Link, 2x Knee_Link, Shank_Link_Main, Shank_Link_Back, Foot_Main (mirror parts have L and R files)cnc.lower-leg
    • Bearing_Load_Shaftcnc.load-shaft
    Tools
    —
    Torque
    —
    Time
    —
    After
    Start
    Source
    notion.so
  2. 02

    Print the DIY parts and grip the soles

    Print with the per-part settings in the manufacturing table. Apply 2 in grip tape to each foot sole and fuse it with a heat gun at about 300 °F, moving quickly so the printed foot does not deform.

    CHECKA FX29 load cell drops into each enclosure with its button proud of the surface, and the grip tape does not lift at the edges when flexed.
    Parts in
    • B_Teensy_Mount and B_IMU_Mountprinted.electronics-mounts
    • Knee_Stopper (mirror)printed.knee-stopper
    • Foot_Sole: hard (PLA/PLA-CF, 100% rectilinear) or soft (TPU 95A, 60% adaptive cubic, 0 walls, flow 0.9, ~60-70A)printed.foot-sole
    • Load_Cell_Enclosureprinted.load-cell-enclosure
    • Motor protection guards L/R_P_0..P_4printed.motor-protection
    • Joint zeroing jigs: A_hip_0_2_5_7, A_knee_ankle_3_4_L, A_knee_ankle_8_9_R, A_hip_1_L, A_hip_6_R (one of each design)printed.alignment-jigs
    • Filament: PLA (Creality), PLA-CF (Bambu Lab), TPU 95A HF (Polymaker)other.filament
    • CATTONGUE non-abrasive grip tape, 2 in (foot soles)other.grip-tape
    Tools
    FDM printer (lab used Bambu Lab X1C and Prusa MK4), Smooth PEI (PLA) and textured PEI (TPU) sheets, Heat gun
    Torque
    —
    Time
    —
    After
    Start
    Source
    notion.so
  3. Test rig
    03

    Build the 80/20 test gantry

    Build the frame from the 80/20 extrusions (mitred 4080 members per the provided drawing) and plates. The robot hangs from it for dynamics matching and first walking.

    CHECKThe frame stands without rocking and a hanging robot's feet clear the floor with room for a full leg swing.
    Parts in
    • 80/20 gantry extrusion: 1x 40-8016 @ 1828.8 mm, 2x 40-8080 @ 1828.8 mm, 2x 40-8080 @ 1524 mm, 4x 40-4080 @ 1219.2 mm (mitred), 2x 40-4080 @ 609.6 mm (mitred)structure.gantry-extrusion
    • 80/20 gantry plates and brackets: 6x 14105 corner bracket, 4x 40-4325, 4x 40-4328, 4x 40-4365, 12x 40-4362, 4x 40-4330, 8x 40-4331structure.gantry-plates
    • Gantry fasteners: M8 sliding T-nuts (18 packs of 20) and M8x1.25x16 SHCS (9 packs of 40)fastener.gantry
    Tools
    Hex keys
    Torque
    —
    Time
    —
    After
    Start
    Source
    notion.so
  4. Legs
    04

    Upper legs: hip yaw, roll and pitch

    Follow the upper-leg assembly video for each leg. Motor_1 rotor takes M5x25, Motor_0 rotor M4x25, everything else M4x12. Use a sesame-seed amount of Loctite 222; excess threadlocker can damage the motors.

    CHECKEach hip axis turns by hand through its range with no binding and no axial play at the 65x85x10 bearings.
    Parts in
    • Upper leg (hip) plates, 7 per leg: Hip_0 Top/Front/Back/Inner/Outer, Hip_1 Inner/Outer (all symmetric)cnc.upper-leg
    • Motorevo PA-100-2018 geared motor, 18:1 (rated 40 Nm / 20 A), hip yaw, hip roll, kneeactuator.pa100-18
    • Motorevo PA-100-2020 geared motor, 20:1 (rated 44.8 Nm / 20 A), hip pitchactuator.pa100-20
    • Bearing 65x85x10 mm (hip and knee motor axes)structure.bearing-65x85x10
    • Flanged bearing 25x37x7 mmstructure.bearing-25x37x7f
    • M5x25 socket head cap screw (Motor_1 rotor)fastener.m5x25-shcs
    • M4x25 socket head cap screw (Motor_0 and Motor_2 rotors)fastener.m4x25-shcs
    • M4x12 button head screw (everything else)fastener.m4x12-bhcs
    • Loctite 222 low-strength threadlockerother.loctite-222
    • PTFE lubricant (bearings)other.ptfe-grease
    Tools
    Hex keys (wiki recommends Bondhus)
    Torque
    —
    Time
    —
    After
    01
    Source
    notion.so
  5. 05

    Lower legs: knee and ankle parallel linkage

    Follow the lower-leg video: mount Motor_3 (knee) and Motor_4 (ankle) with M4x12, Motor_2 rotor with M4x25, and build the knee and shank-ankle linkages on M4x20 screws and nuts with needle bearings and spacers.

    CHECKKnee and ankle move through their range by hand with no play in the linkage, and the knee stopper stops hyperextension.
    Parts in
    • Lower leg parts, 13 per leg: Hip_to_Lower_Connector, Shank_Plate Outer/Inner, Knee_Joint_Holder, Knee_Rocker, Ankle_Rocker, 2x Shank_Ankle_Link, 2x Knee_Link, Shank_Link_Main, Shank_Link_Back, Foot_Main (mirror parts have L and R files)cnc.lower-leg
    • Bearing_Load_Shaftcnc.load-shaft
    • Motorevo PA-100-2018 geared motor, 18:1 (rated 40 Nm / 20 A), hip yaw, hip roll, kneeactuator.pa100-18
    • Motorevo PA-100-2010 geared motor, 10:1 (rated 22.4 Nm / 20 A), ankleactuator.pa100-10
    • Bearing 65x85x10 mm (hip and knee motor axes)structure.bearing-65x85x10
    • Flanged bearing 25x37x7 mmstructure.bearing-25x37x7f
    • Needle bearing 10x14x10 mm (knee/ankle linkage)structure.needle-10x14x10
    • Spacer / thrust washer 18x10x2 mmstructure.spacer-18x10x2
    • 10 mm external retaining ring (lower leg shafts)structure.retaining-ring-10
    • M4x25 socket head cap screw (Motor_0 and Motor_2 rotors)fastener.m4x25-shcs
    • M4x20 screw (parallel linkage)fastener.m4x20
    • M4 nut (parallel linkage)fastener.m4-nut
    • M4x12 button head screw (everything else)fastener.m4x12-bhcs
    • Knee_Stopper (mirror)printed.knee-stopper
    • Loctite 222 low-strength threadlockerother.loctite-222
    Tools
    —
    Torque
    —
    Time
    —
    After
    04, 02
    Source
    notion.so
  6. Body
    06

    Base plate: hip motors, IMU, sensor-board mount

    Screw the hip 0/5 motors (20:1 and 18:1) to the top side of the base plate with M4x12, using very little Loctite. Seat the IMU on its mount with the cable in the channel, centre it with the wired side facing forward, and push it onto the plate pegs. Tap and fit the PCB mount, then stand an extrusion in each corner with corner brackets, M5 screws and sliders.

    CHECKThe IMU is on the robot centreline with its cable side forward, and the four corner extrusions are square to the plate.
    Parts in
    • Body plates: 2x B_Shelf_Plate, 1x B_Base_Plate, 12x B_Corner_Connectorcnc.body
    • B_Teensy_Mount and B_IMU_Mountprinted.electronics-mounts
    • MicroStrain 3DM-CV7-AHRS IMUsensor.imu
    • 2020 aluminium extrusion, cut: 4x 353 mm, 2x 260 mm (b), 2x 260 mm (c)structure.extrusion-2020
    • M4x12 button head screw (everything else)fastener.m4x12-bhcs
    • M5x10 button head screw (corner connectors)fastener.m5x10-bhcs
    • M5 sliding T-nut for 2020 extrusionfastener.m5-tnut
    • M4 and M5 external-tooth lock washers (as needed)fastener.lock-washers
    Tools
    —
    Torque
    —
    Time
    —
    After
    04, 02
    Source
    notion.so
  7. Legs
    07

    Feet with toe and heel load cells

    Seat the sensor holders in the empty foot, line the foot holes up with the aluminium, insert each load cell with the ridge aligned, then screw the foot on with Loctite. Do not overtighten; it can damage the force sensors.

    CHECKThe foot sits flat on a table, and pressing each corner deflects only the load-cell button, not the sole.
    Parts in
    • Foot_Sole: hard (PLA/PLA-CF, 100% rectilinear) or soft (TPU 95A, 60% adaptive cubic, 0 walls, flow 0.9, ~60-70A)printed.foot-sole
    • Load_Cell_Enclosureprinted.load-cell-enclosure
    • TE FX29 compression load cell, 100 lbf, I2C (toe and heel of each foot)sensor.load-cell
    • Lower leg parts, 13 per leg: Hip_to_Lower_Connector, Shank_Plate Outer/Inner, Knee_Joint_Holder, Knee_Rocker, Ankle_Rocker, 2x Shank_Ankle_Link, 2x Knee_Link, Shank_Link_Main, Shank_Link_Back, Foot_Main (mirror parts have L and R files)cnc.lower-leg
    Tools
    —
    Torque
    —
    Time
    —
    After
    05
    Source
    notion.so
  8. 08

    Fit the TPU motor guards

    Fit the ten TPU motor protection pieces (P_0 to P_4 per leg) over the actuators.

    CHECKNo guard touches a moving link anywhere in the range of motion.
    Parts in
    • Motor protection guards L/R_P_0..P_4printed.motor-protection
    Tools
    —
    Torque
    —
    Time
    —
    After
    05
    Source
    notion.so
  9. Body
    09

    Middle plate: motor controllers

    Mount two motor controllers per controller plate with heat conduction to the plate, fit the power and ground splitters in the middle, tap the middle plate and fix the controller plates without overtightening. Slide the plate onto the extrusions with the controllers facing down, leaving room for the top plate.

    CHECKAll ten controllers are fixed, cable-tied, and their EtherCAT and power ports are reachable.
    Parts in
    • Body plates: 2x B_Shelf_Plate, 1x B_Base_Plate, 12x B_Corner_Connectorcnc.body
    • Motor controller assembly (Elmo-based EtherCAT drive, CiA 402), one per motorelectronics.motor-controller
    • M5x10 button head screw (corner connectors)fastener.m5x10-bhcs
    • M5 sliding T-nut for 2020 extrusionfastener.m5-tnut
    Tools
    —
    Torque
    —
    Time
    —
    After
    06
    Source
    notion.so
  10. 10

    Top plate and top frame

    Fit the top plate on corner brackets and sliders (an onboard Jetson is optional and goes between the plates). Build the rectangular top frame from 3-way connectors and slide it onto the body.

    CHECKThe body is rigid when twisted by hand and the top frame can take the gantry hook.
    Parts in
    • Body plates: 2x B_Shelf_Plate, 1x B_Base_Plate, 12x B_Corner_Connectorcnc.body
    • 3-way corner connector assembly for 2020 extrusion (top frame)structure.3way-connector
    • 2020 aluminium extrusion, cut: 4x 353 mm, 2x 260 mm (b), 2x 260 mm (c)structure.extrusion-2020
    • M5x10 button head screw (corner connectors)fastener.m5x10-bhcs
    • M5 sliding T-nut for 2020 extrusionfastener.m5-tnut
    Tools
    —
    Torque
    —
    Time
    —
    After
    09
    Source
    notion.so
  11. Electrical
    11

    Sensor board: Teensy, I2C mux, IMU and load-cell leads

    Hand-solder the IMU ribbon (wire 1 is red) to USB and UART. Make one Ethernet extender per leg carrying two load cells on MX1.25 connectors using the wiki's colour map. Keep every load-cell I2C line separate into its own TCA9548A channel, give every device its own decoupling capacitor, and connect the mux to the Teensy I2C pins.

    CHECKContinuity on every extender wire; with one load cell on a Linux I2C bus, `i2cdetect -y <bus>` shows 0x28.
    Parts in
    • PJRC Teensy 4.0 with pins (sensor hub: IMU over UART, load cells over I2C)electronics.teensy40
    • TCA9548A 8-channel I2C multiplexer breakout (FX29 address 0x28 is fixed)electronics.i2c-mux
    • 4.7 kΩ resistor (I2C pull-ups)electronics.r-4k7
    • 220 Ω resistorelectronics.r-220
    • 100 nF capacitor (per-device decoupling on the sensor board)electronics.c-100n
    • Samtec FFSD-05-S-05.00-01-N ribbon cable (IMU has no premade leads; solder USB + UART by hand)cable.imu-connector
    • Monoprice SlimRun Ethernet patch cable, ~2 m per leg, re-terminated as load-cell extenderscable.load-cell-extender
    • Pre-crimped MX1.25 male/female connector set (detachable load cells)cable.mx125
    • MicroStrain 3DM-CV7-AHRS IMUsensor.imu
    • TE FX29 compression load cell, 100 lbf, I2C (toe and heel of each foot)sensor.load-cell
    Tools
    Soldering iron, Multimeter
    Torque
    —
    Time
    —
    After
    07, 06
    Source
    notion.so
  12. 12

    48 V supply bank, e-stop and bus capacitor

    Safety · human-verified required

    Wire four RSP-2000-48 supplies in parallel per the Mean Well datasheet: 12 AWG AC input (check your cable's colours), 24 AWG current-share signals, 8 AWG outputs to the distribution block, the e-stop on each supply's remote on/off, and the 0.33 F capacitor on the block with 4 AWG. Keep the motor controllers disconnected.

    CHECKWith controllers unplugged: the block reads about 48 V with correct polarity, and pressing the e-stop drops it to 0 V on all four supplies.

    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
    • Mean Well RSP-2000-48 48 V 2000 W supply, 4 in parallel (active current sharing)power.psu
    • Latching emergency stop switch on the supplies' remote on/offpower.estop
    • KEMET ALS70A334QS063 0.33 F capacitor on the distribution blockpower.capacitor
    • Power distribution block (uxcell terminal block)power.distribution-block
    • 12 AWG 3-prong AC power cable, one per supplycable.ac-12awg
    • Power wire: 8 AWG (supply outputs), 4 AWG (capacitor), 24 AWG (current-share signals)cable.wire-power
    Tools
    Crimp tool, Multimeter
    Torque
    —
    Time
    —
    After
    09
    Source
    notion.so
  13. 13

    EtherCAT chain and host

    Safety · human-verified required

    Daisy-chain the ten controllers in the wiki's topology order to the host's Ethernet port, then power the bus from the supply bank with the robot hanging on the gantry.

    CHECK`sudo ./ext/SOEM/test/linux/slaveinfo/slaveinfo enp3s0 -sdo` lists 10 slaves.

    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
    • Motor controller assembly (Elmo-based EtherCAT drive, CiA 402), one per motorelectronics.motor-controller
    • Linux PC, Ubuntu 22.04 + CUDA 12.3, Ethernet port used as EtherCAT master (e.g. enp3s0)compute.host
    Tools
    SOEM slaveinfo
    Torque
    —
    Time
    —
    After
    12, 10
    Source
    notion.so
  14. Bring-up
    14

    Load and match the drive configurations

    Safety · human-verified required

    For each joint pair, import the published .gprm file (motor0 to motor4 pages) under Expert Tuning > Axis Configuration > Import Page Parameters, then finalise current, velocity and position loops. Tune one motor of each pair and copy its configuration to the other leg.

    CHECKLeft and right motors of each pair track the same position trajectory with overlapping plots in Elmo.

    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
    • Motor controller assembly (Elmo-based EtherCAT drive, CiA 402), one per motorelectronics.motor-controller
    • Motorevo PA-100-2018 geared motor, 18:1 (rated 40 Nm / 20 A), hip yaw, hip roll, kneeactuator.pa100-18
    • Motorevo PA-100-2020 geared motor, 20:1 (rated 44.8 Nm / 20 A), hip pitchactuator.pa100-20
    • Motorevo PA-100-2010 geared motor, 10:1 (rated 22.4 Nm / 20 A), ankleactuator.pa100-10
    Tools
    Elmo Application Studio II (Windows)
    Torque
    —
    Time
    —
    After
    13
    Source
    notion.so
  15. 15

    Build host software and flash the Teensy

    Clone DukeHumanoidv1 with submodules, create the py38 environment, build the SOEM-based ethercat_motor_py extension with CMake, and upload teensy_comm.ino with the TCA9548 and Packetizer libraries. In MicroStrain SensorConnect set the IMU to 921600 baud and save without 'sample on startup'.

    CHECK`sudo chrt -f 99 $(which python) -u sensor_controller.py` streams IMU orientation and four load-cell readings (unloaded values inside the FX29's 300-1700 count zero band).
    Parts in
    • Linux PC, Ubuntu 22.04 + CUDA 12.3, Ethernet port used as EtherCAT master (e.g. enp3s0)compute.host
    • PJRC Teensy 4.0 with pins (sensor hub: IMU over UART, load cells over I2C)electronics.teensy40
    Tools
    micromamba, vcpkg (msgpack, eigen3, iir1), CMake + GCC 12, Arduino IDE + Teensyduino
    Torque
    —
    Time
    —
    After
    11, 13
  16. 16

    Joint initialization with the alignment jigs

    Safety · human-verified required

    Constrain every joint in its zero pose with the hip, thigh and ankle jigs, then run motor_controller.py, which records the encoder offsets per motor. This is needed after every power-on, because the encoder position repeats once per reduction-ratio sector.

    CHECKAfter removing the jigs, `trajectory_PD_test.py` holds the robot in the zero configuration, standing with straight knees.

    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
    • Joint zeroing jigs: A_hip_0_2_5_7, A_knee_ankle_3_4_L, A_knee_ankle_8_9_R, A_hip_1_L, A_hip_6_R (one of each design)printed.alignment-jigs
    Tools
    —
    Torque
    —
    Time
    —
    After
    15, 14, 08
    Source
    notion.so
  17. 17

    Sim-to-real trajectory matching on the gantry

    With the robot hanging, run `bash run.sh match_dyn` in legged_env, `trajectory_PD_test.py` on the robot and `sshkeyboard_pd_test.py` to drive both, then compare /sim and /real in PlotJuggler and adjust armature, friction and damping.

    CHECKJoint position traces for /sim and /real overlap for every joint through a keyboard-commanded trajectory.
    Parts in
    —
    Tools
    PlotJuggler (msgpack, port 9870)
    Torque
    —
    Time
    —
    After
    16, 03
    Source
    notion.so
  18. 18

    Run the published walking policy

    Safety · human-verified required

    Run `biped_controller.py` with the baseline or passive ONNX checkpoint and `gamepad.py` in a second terminal. Start on the gantry with a hand on the e-stop.

    CHECKThe robot walks forward and stops on gamepad command without falling for 30 s, with the gantry line slack.

    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
    • 8BitDo Ultimate controller with 2.4 GHz adapter (velocity commands)electronics.gamepad
    Tools
    —
    Torque
    —
    Time
    —
    After
    17

Progress is stored in this browser only (localStorage). Nothing is sent anywhere.

05

Bring-up

Flash · calibrate · first policy
  1. A

    Flash firmware

    Targetsteensy_comm (Teensy 4.0 sensor hub), Elmo drive parameters (.gprm per joint pair), ethercat_motor_py (host EtherCAT master, SOEM)

    Repogithub.com/generalroboticslab/dukeHumanoidHardwareControl

    Host runs Ubuntu 22.04 with a real-time priority Python loop (`sudo chrt -f 99`). The Teensy streams CRC-checked Packetizer frames at 1.5 Mbaud; the IMU runs on Serial1 at 921600. Drive tuning notes (kp/ki per pair) are on the motor0-motor4 wiki pages.

  2. B

    Calibrate

    CalibrationJoint initialization with printed alignment jigs on every power-on (motor_controller.py stores offsets); IMU baud, gyro bias and mounting transform via MicroStrain SensorConnect.

    Log the output. It goes in your build report.

  3. C

    First policy

    • walk, velocity tracking (baseline)Isaac Gym + rl_games (legged_env) source
    • walk, energy-efficient passive-dynamics policyIsaac Gym + rl_games (legged_env) source
    • walk (training checkpoints)Isaac Gym + rl_games source
    Run it in sim on humanoidrobots.training →

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.

06

Report your build

Moves Duke Humanoid v1 toward L4 · Built

A 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.

Robot/duke/duke-humanoid

Sends JSON to POST hyperspawn.io/api/v1/reports. Reports are reviewed before they count toward L4 or appear on the map.

GATE

Level gate

Holds L1 · evidence, not confidence
  1. L0
    Indexed

    Known to exist. Atlas page only.

    • 4 sources on record(met)
    held
  2. L1
    Compiled

    Package validates against the spec; every fact has a source.

    • Build package compiled(met)
    • 14 sources across robot and package(met)
    held
  3. L2
    Sim-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)
    next
  4. L3
    Sourced

    Every BOM line resolves to a live offer in at least two regions. Unlocks the one-click cart.

    • 0/45 BOM lines have offers in 2+ regions(not met)
    locked
  5. L4
    Built

    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)
    locked
  6. L5
    Certified

    The robot's maintainer signs the package. Unlocks certified teams and kit sales.

    • Maintainer signature not recorded(not met)
    locked

Levels are cumulative and set by the registry from reviewed evidence. This panel shows what can be measured from the package today.

Same robot, other verbs

REV

Revisions and sources

Every fact on this sheet traces to one of these