Overview / Build
Build

Build one.

From an empty bench to a robot that powers on — in order: the materials, the bill of materials, the mechanical build, and the wiring. Firmware and calibration live with the software →

56 functional DOFfrom $8,722catalog partsno machine shop
Replication wiki GitHub ↗ Notion ↗
Before anything ships

What you need.

Printer & filament

Any desktop printer — every part fits a standard bed. Budget 7 spools (≈2.1 kg printed): PLA/PETG white for covers and mounts, black for the high-wear ORCA hand structure.

Tools

Hex drivers, a crimper, a soldering iron, a multimeter — and a current-limited bench supply for every first energization. No machine shop: sheet parts are ordered from any fab service (drawings in the BOM).

Computers

A Mac or Linux laptop runs the full simulation twin and every desktop tool. Ubuntu on the Jetson runs the robot — ROS 2 is only needed there.

Skills

Basic 3D printing, a terminal, light electronics. Prove every motion in the twin before it ever runs on hardware.

The breakdown

Where the money goes.

Eight subsystems make up the core bill. Hover a slice — or a row — and the actual components inside it appear below.

SubsystemShareCost
Mobile base28%$2,272
Body / torso11%$889
Arms - both33%$2,622
Hands - both15%$1,195
Neck / head3%$235
Structural hardware2%$184
Electronics, power & cabling6%$500
3D printed material2%$161
Core total$8,058

Prices move. NVIDIA raised every Jetson price 33–101% on 22 July 2026 — the identical robot went from $12,969 to $14,968 overnight. Compute is a choice here, not a component: the bill treats it that way.

Before you start

Print first. Test as you go.

The shells take about 36 hours on one printer — start them before the actuator kits arrive, and build the electrical kits while they run.

Print

≈ 2.1 kg of PETG or ABS. Every mesh is generated from the MuJoCo model mabel_full.xml — never hand-edit a printed part, regenerate it.

Order of operations

Bottom-up. Never mount a module onto one you haven't range-tested — a base with a twisted swerve module is invisible once the body is on it.

Bus IDs

Assign every CAN and serial ID before the part goes into the chain, one device powered at a time. A wrong ID buried mid-arm means taking the arm apart.

Torque off

Every actuator stays limp until its module is mechanically complete and its limits are set. Bring the whole robot up with torque disabled.

What these drawings are. The exploded views below are the authority for which parts exist and in what order they stack. A fully itemized fastener and torque schedule has not been published yet — use the hardware that ships with each actuator, and match the drawing. Published drawings today: body and head; the remaining five modules are documented as build sequences here and in the build guide.

01

Base.

Three independently steered modules in a delta layout — the rolling foundation everything else stacks onto.

3 × delta swerveREV NEO + NEO 5506 × SPARK MAX / FlexCAN · 120 ΩTeensy 4.1
  1. Build all three swerve modules first. Each pairs a NEO for drive with a NEO 550 for steer. Build them identically and completely before any of them touches the chassis.
  2. Mount them in the delta layout — three modules at 120°. Keep every bolt pattern square to the chassis plate.A twisted module reads as permanent heading drift later.
  3. Fit the 38.1 mm wheels and turn each module through a full steer rotation by hand. Nothing should bind or tug a cable.
  4. Daisy-chain the CAN bus across all six SPARK controllers, with a 120 Ω terminator at each end of the chain.
  5. Assign CAN IDs 1–6, one controller powered at a time so two devices can never answer to the same ID.
  6. Seat the compute bay — Teensy 4.1 for the swerve loop, Jetson Thor for everything above it.
  7. Range-test the finished base before the lift goes on. Steer each module through its full travel and spin each wheel.
Module
Drive
REV NEO × 3 · CAN
Steer
REV NEO 550 × 3 · CAN
Controllers
REV SPARK MAX / Flex × 6
Wheels
38.1 mm
Firmware
Teensy 4.1 · reverse-engineered REV CAN stack
Base hardware in depth →
02

Lift.

A cascaded Z-column that adds 0.635 m of vertical travel — counter height to over a table.

0.635 m travelBrushed DC + leadscrewBTS7960 H-bridgeRP2040 PicoQuadrature encoder
  1. Assemble the telescoping stages dry — no motor, no leadscrew. Run the column through its full travel by hand; it must slide with no stiction at any height.
  2. Fit the leadscrew and the brushed DC actuator, then turn the screw by hand end to end before energising anything.
  3. Mount the quadrature encoder and wire the BTS7960 H-bridge to the RP2040 Pico.
  4. Bolt the column to the base. It carries every module above it — tighten the base flange in a cross pattern.
  5. Home it empty. Close the position + velocity loop with nothing mounted and confirm both end stops before the body goes on.Homing a loaded column against an unproven end stop is how leadscrews get bent.
Module
Travel
0.635 m, cascaded stages
Actuator
Brushed DC + leadscrew
Driver
BTS7960 H-bridge
Control
RP2040 Pico · cascaded position + velocity
Link
USB serial to the host
Lift hardware in depth →

The lift changes the base's limits. Raising the column raises the centre of mass, so the tip-safe speed and braking envelope tightens with height. That coupling is modelled in whole-body control — it is not something you tune out mechanically.

03

Body.

The torso that leans, and the frame that carries the arms, the neck, and the body electronics.

DaMiao DM-J10422P400 N·mBody CANCustom PCBU2D2
Exploded view of the MABEL body: back housing cover, custom PCB, PCB mount, neck mounting plate, arm mounting plate, torso output shaft, torso actuator, U2D2 controller, front housing cover
Body · exploded viewOpen full size ↗
Parts
  1. Torso ActuatorDaMiao DM-J10422P · 400 N·m · CAN
  2. Torso Output ShaftBolts to the actuator output flange
  3. PCB Mount3D printed
  4. Custom PCBBody power + bus routing
  5. Neck Mounting PlateReceives the neck yaw actuator (§6)
  6. Arm Mounting Plate 1Mirrored for the second arm
  7. U2D2 ControllerUSB ↔ half-duplex TTL for the neck servos
  8. Back Housing Cover3D printed
  9. Front Housing Cover3D printed · closes last
  1. Mount the torso actuator to the lift carriage. It is the strongest joint on the robot — keep its torque disabled for the whole of this stage.
  2. Bolt the torso output shaft to the actuator's output flange. Everything above the torso hangs off this joint.
  3. Fit the PCB mount to the frame, then land the custom PCB on it.
  4. Add the neck mounting plate at the top of the frame — the neck yaw actuator lands here in §6.
  5. Add the arm mounting plates, left and right. Check both are coplanar before the arms go on.A skewed plate biases every Cartesian target on that arm.
  6. Seat the U2D2 controller and route its TTL run up toward the neck plate.
  7. Close the back housing cover, then the front. Leave both off until the arms and head are wired — the covers are the last thing on the body, not the first.
Body hardware in depth →
04

Arms.

Two 7-DOF OpenArm-derived arms on quasi-direct-drive motors — low gearing, real torque control, back-drivable by hand.

2 × 7 DOFOpenArm-derivedDaMiao QDDcan0 / can114 motors
  1. Build each arm link by link, from the shoulder out. Per arm: 2 × DM-J8009P shoulder, 2 × DM-J4340 shoulder-roll and elbow, 3 × DM-J4310 wrist.
  2. Assign IDs 1–7 before each motor goes into the chain, one motor powered at a time.A wrong ID buried mid-arm means dismantling the arm to reach it.
  3. Keep the arms on separate buses — left on can0, right on can1. Do not merge them onto one chain.
  4. Bolt each arm to its mounting plate on the body, and route the bus down through the shoulder before the housing covers go on.
  5. Set each joint's zero at a known pose, the same pose for both arms.
  6. Check back-drivability. With torque off, every joint should move under hand pressure. A joint that fights you is a mechanical fault, not a gain problem.
Per arm · 7 DOF
Shoulder × 2
DaMiao DM-J8009P · 40 N·m
Shoulder-roll + elbow × 2
DaMiao DM-J4340 · 27 N·m
Wrist × 3
DaMiao DM-J4310 · 7–10 N·m
Bus
CAN · 1 Mbit/s
Lineage
Open-source OpenArm
Arm hardware in depth →
05

Hands.

Two open-source ORCA hands — five tendon-routed fingers each, 17 actuated DOF per hand on a single serial chain.

2 × ORCA · 34 DOF16 × Feetech HLS39151 × HLS3930 wrist1 MHz TTLTendon-routed
  1. Print and assemble the ORCA hand frames — the design is fully released, so build to the ORCA documentation.
  2. Assign every servo ID before stringing. Once tendons are routed, reaching a servo means unstringing the finger.
  3. Route and string the tendons, five fingers per hand: abduction, MCP and PIP on each.
  4. Tension every tendon until no slack remains, then check again after the first few cycles.Slack read as calibration error is the single most common hand build failure — tension before you calibrate, not after.
  5. Chain all 17 servos on one 1 MHz TTL bus per hand — 16 finger servos plus the wrist.
  6. Mount each hand to its arm wrist flange and route the serial run back along the forearm.
  7. Run the grasp check — pinch, power, tripod. The same commands drive sim and hardware, so a grasp tuned in sim should reproduce here.
Per hand · 17 DOF
Fingers
Feetech HLS3915 × 16
Wrist
Feetech HLS3930 × 1
Bus
1 MHz TTL serial, one chain
Config
ORCA Hand Control Studio — IDs, registers, live load & temperature
Hand hardware in depth →
07

Electronics.

Custom base and body boards tie every actuator onto one low-latency local network — CAN for the motor buses, Ethernet and USB 3 for the bandwidth.

Custom base + body PCBCAN + EthernetJetson ThorSingle batteryUntethered
  1. Land both custom PCBs — the base board in the chassis, the body board on its printed mount (§3).
  2. Fan power out from one battery. Nothing trails behind the robot; the whole platform runs off a single pack.
  3. Bring up the CAN buses — base (6 SPARK controllers), body (torso + neck yaw), and the two arms on can0 / can1. Terminate each chain at both ends.
  4. Bring up the serial buses — one 1 MHz TTL chain per hand, the neck servos through the U2D2, and the lift Pico over USB.
  5. Connect the sensing — ZED Mini (eyes), RealSense D435i (chest), two Arducam global-shutter wrist cameras, RPLIDAR A3. Keep the wrist cameras pinned by hub port on one powered USB 3 hub.The two wrist cams are identical — without a fixed port assignment they swap between boots.
  6. Seat the Jetson Thor and its Ethernet run. It carries SLAM, navigation, perception, and whole-body control onboard.
  7. Label every bus and terminate every chain before the covers go on. This is the last moment any of it is reachable.
Module
Boards
Custom base PCB + body PCB
Motor buses
CAN · 1 Mbit/s
Serial
TTL (hands, neck) + USB (lift)
Compute
Jetson Thor · onboard, no tether
Sensing
7 cameras + LiDAR on USB 3
Electronics in depth →
Assembled

First power-on.

Mechanically complete is not commissioned. Bring the robot up limp, one bus at a time, then hand over to the build guide for firmware and calibration.

  1. Power on with every actuator torque-disabled. No exceptions, on any bus.
  2. Enumerate each bus separately and confirm the device count matches what you built — 6 on the base, torso + neck yaw on the body, 7 per arm, 17 per hand, 2 neck servos on TTL.
  3. Read state before writing any. Every joint should report a plausible position with the robot standing still.
  4. Home the lift empty-handed first, then verify the tip-safe envelope tightens as it rises.
  5. Enable torque one module at a time, lowest first, with the robot supported.

Troubleshooting & FAQ.

Open the full interactive wiki ↗

Bolted together. Now wake it up.