On May 21, 2026, HuggingFace unveiled LeRobot Humanoid — a fully open-source bipedal robot, mostly 3D-printed, with a total cost of roughly $2,500 USD. The release is uniquely complete: hardware (BOM, STL, wiring), runtime control, identification pipeline, training environments (MJLab), and a policy zoo. It's the "Raspberry Pi moment" for humanoid robotics — for the first time, any researcher or university lab can build a real two-legged robot, train policies with RL, and deploy in the real world for the cost of a mid-range laptop.
This tutorial walks you through every step: ordering Robstride motors, printing 75 PLA+ parts, assembling the 12-DOF lower body, installing MJLab, training a walking policy with PPO, and deploying sim-to-real on the physical robot. Written for beginners — no deep humanoid or reinforcement-learning background required.
1. Why LeRobot Humanoid matters
Before LeRobot Humanoid, getting hands on a real bipedal humanoid meant one of two paths:
- Buy a commercial robot: Unitree G1 ($16,000+), Booster T1 ($35,000+), Fourier GR-1 ($150,000+), Tesla Optimus (not for sale) — out of reach for most labs.
- Build from scratch: Berkeley Humanoid Lite ($5,000+) requires a CNC shop, or you design your own mechanism — months of work and serious design risk.
LeRobot Humanoid is different because the entire workflow is closed-loop and validated:
- Hardware: 75 ready-to-print STL files + concrete BOM with Robstride and Norelem part numbers — no redesign needed.
- Design tool: Simplified robot representations for motor-sizing evaluation before you order parts.
- Runtime: One interface running both in sim (MJLab) and on the real robot — no two separate code paths.
- Identification: An automated pipeline that fits MuJoCo parameters from real-robot logs to close the sim-to-real gap.
- Training zoo: MJLab environments + policy templates —
python train.pyand you're going.
The whole project lives in the Virgileboat GitHub org, Apache 2.0 licensed, with 40+ community contributors. This is not a one-shot paper drop — it's a living platform already being used for published research.
2. Architecture & BOM
The current LeRobot Humanoid biped has 12 active motors, concentrated in the lower body and hip, with a simple passive upper torso. The BOM breaks down as follows:
2.1. Robstride motors (~$1,880)
| Motor | Qty | Location | Notes |
|---|---|---|---|
| Robstride O0 | 2 | Torso connection | Mini, ~$125 each |
| Robstride O2 | 2 | Hip Z-axis | Yaw, ~$145 each |
| Robstride O3 | 4 | Thigh (hip pitch/roll, knee) | Mid-power, ~$225 each |
| Robstride O5 | 4 | Shin & ankle | High-power, ~$110 each |
All motors talk over a CAN FD bus via a SAVVYCANFD 2CH adapter. This is the major delta from Berkeley Humanoid Lite (Dynamixel) or SO-100 (Feetech) — Robstride delivers higher torque, but CAN setup is more involved than UART servos. See Berkeley Humanoid Lite build guide for a direct comparison.
2.2. 3D-printed parts (~$56)
- 75 STL parts in
lerobot-humanoid-hardware/stl/ - Recommended material: PLA+ ~3.5 kg of filament
- Minimum printer envelope: 220×220×250 mm (Ender 3 V2, Prusa Mini are fine)
- Subassemblies: torso, hip_x, hip_z, thigh, knee_mechanism, shin, ankle_mechanism, ankle, foot
Important: some load-bearing parts (thigh, knee) should be printed at 80% infill, 5 perimeters. The outer shell can be 20% infill as normal.
2.3. Electronics (~$200)
- Raspberry Pi 5 (8GB): main controller, runs the LeRobot runtime
- BNO055 or BNO085: 9-DOF IMU for orientation/balance
- SAVVYCANFD 2CH: CAN FD adapter that bridges Pi to motors
- Power cables 2.5mm + color-coded comms cables
- 6S 5000mAh LiPo or bench PSU 24V/15A for tabletop testing
2.4. Mechanical extras (~$200)
- Bearings: 35×72×17 (×4), 15×21×4 (×14), 5×16×5 (×8)
- Norelem 27628-01-05 spherical joints (×8) — for the ankle mechanism
- ISO7379 shoulder screws + full M2–M5 length kit
Total: ~$2,635 USD (April 2026 pricing, shipping not included).
Practical cost in Southeast Asia: Add ~$300-500 for shipping + duties (Robstride motors come from China). PLA+ is cheap locally; Raspberry Pi 5 8GB is widely available. Realistic delivered budget: $2,900-3,200.
3. Phase 1 — Ordering & printing (1-2 weeks)
3.1. Order motors
Robstride motors can be ordered as a pre-packaged set from openelab.io, which already includes cables and the CAN adapter (~$1,880). Fastest option — about 2-3 weeks to ship internationally.
Pitfall: Do not accidentally order O3 v1.0 — you need O3 v2.0 with the updated firmware that supports CAN FD at 2 Mbps.
3.2. Print STL files
Clone the hardware repo and start printing in parallel with motor ordering:
git clone https://github.com/Virgileboat/lerobot-humanoid-hardware.git
cd lerobot-humanoid-hardware/stl
Each STL ships with a .json metadata file specifying infill %, perimeters, and supports. Open in PrusaSlicer or Cura, import the preset, slice, and print. On a single 200 mm/s printer, all 75 parts take roughly 8-10 days of continuous printing. With two printers in parallel, you can finish in 4-5 days.
3.3. Bench-test every motor
This is the critical step most people skip. As motors arrive, test each one on the bench before assembly:
# Install the python CAN library
pip install robstride
# Ping motor ID 1
python -m robstride ping --id 1 --interface can0
# Spin one revolution
python -m robstride spin --id 1 --speed 30 --time 2
If a motor doesn't respond or sounds wrong, return it immediately — don't discover it mid-assembly.
4. Phase 2 — Assembly (3-5 days)
The lerobot-humanoid-hardware/assembly/ folder contains PDFs and step-by-step photos for each subassembly. Recommended build order:
1. Foot + ankle_mechanism (both legs, day 1)
2. Shin + ankle (both legs, day 2)
3. Knee_mechanism + thigh (both legs, day 3)
4. Hip_z + hip_x (both legs, day 3 afternoon)
5. Torso + leg integration (day 4)
6. Wiring + CAN bus + power (days 4-5)
Community tips that matter:
- Bearing fitment: Bearings press into PLA — if loose, apply thin CA glue to the outer race. NEVER hammer hard; you'll crack the PLA.
- Cable routing: Leave 15-20 cm slack at every joint to allow full motion. Use twisted pairs for the CAN bus to reduce noise.
- CAN termination: Place 120-ohm resistors at both ends of the chain — without them, you get random motor dropouts.
- Safety: Install a hardware E-stop button that cuts motor power directly (not via software) from day one.
After full assembly, do not jump to 24V immediately. Test each motor over CAN at 12V first, verify IDs are correct, motion is smooth, and there's no mechanical binding.
5. Phase 3 — Software stack install
5.1. Install LeRobot core
On a dev laptop (Ubuntu 22.04 or 24.04):
# Python 3.11
conda create -n lerobot python=3.11 -y
conda activate lerobot
# Clone & install
git clone https://github.com/huggingface/lerobot.git
cd lerobot
pip install -e ".[all]"
For the full LeRobot workflow background, see the LeRobot ecosystem guide and the VLA + LeRobot framework intro.
5.2. Install the LeRobot Humanoid stack
# Runtime — drives real robot & sim
git clone https://github.com/Virgileboat/lerobot-humanoid-runtime.git
cd lerobot-humanoid-runtime && pip install -e .
# Model — URDF/MJCF assets
git clone https://github.com/Virgileboat/lerobot-humanoid-model.git
cd lerobot-humanoid-model && pip install -e .
# Identification — sim2real param fitting
git clone https://github.com/Virgileboat/lerobot-humanoid-identification.git
# Training zoo — RL environments
git clone https://github.com/Virgileboat/lerobot-legged-zoo.git
cd lerobot-legged-zoo && pip install -e .
5.3. Verify the simulation runs
# Run the bundled standing-policy demo
python -m lerobot_humanoid_runtime.demos.stand_sim \
--model lerobot-humanoid-v1 \
--simulator mjlab \
--headless false
A MuJoCo window should open and the robot should remain standing. If the robot falls immediately, the URDF probably has incorrect inertia loaded.
6. Phase 4 — Train a walking policy (1-3 days)
LeRobot Humanoid relies on MJLab (built on MuJoCo XLA) as the parallel simulator — comparable to Isaac Lab but lighter, with no hard NVIDIA GPU requirement.
6.1. PPO walking policy
cd lerobot-legged-zoo
# PPO walking — 4096 parallel envs
python train.py \
--task lerobot_humanoid_walk \
--algo ppo \
--num_envs 4096 \
--total_timesteps 50_000_000 \
--save_dir ./runs/walk_v1
On an RTX 4090 or A100, 50M timesteps takes ~6-8 hours. On an RTX 3060 12GB, drop to --num_envs 1024 and run overnight.
Reward design (pre-tuned in the environment):
- Forward velocity tracking (primary)
- Upright orientation penalty
- Joint torque penalty (smoothness)
- Foot contact symmetry (gait quality)
- Termination on fall (z < 0.5m)
For deeper reward-shaping insight, see RL Humanoid series — Reward design and Booster Gym ICRA 2026 sim2real.
6.2. Curriculum learning
LeRobot Humanoid recommends a 3-stage curriculum:
- Standing (5M steps) — learn balance in place
- Walking forward slowly (15M steps) — vel = 0.3 m/s
- Walking + turning + perturbation (30M steps) — vel = 0.5 m/s + random pushes
The curriculum reduces training time by ~60% versus end-to-end training and produces policies that are significantly more stable when deployed on real hardware.
7. Phase 5 — Sim-to-real with the identification pipeline
This is the part most humanoid projects skip, and LeRobot Humanoid handles it especially well.
7.1. Collect real-robot logs
# Passive run with gravity compensation, recording state
python -m lerobot_humanoid_runtime.log_passive \
--duration 60 \
--output ./logs/passive_run.parquet
While logging, gently push the robot to generate diverse motion.
7.2. Fit MuJoCo parameters
cd lerobot-humanoid-identification
# CMA-ES on damping, friction, motor delay
python identify.py \
--real_log ./logs/passive_run.parquet \
--mjcf ../lerobot-humanoid-model/mjcf/biped.xml \
--output ./fitted_params.yaml \
--iters 500
The pipeline uses MJWarp to replay real actions in simulation, optimizing damping/friction/motor_delay to minimize state error between sim and reality. The output is a YAML that gets merged into your MJCF.
7.3. Retrain with fitted params
Re-train the walking policy using the fitted MJCF — this is system identification + domain randomization combined. Per the LeRobot paper, deployed policies become 3-5× more stable.
Deep-dive sim-to-real reading: Sim2Real for dexterous humanoid.
8. Phase 6 — Deploy & first walk
8.1. Pre-flight checklist
- E-stop button confirmed working (test that it really cuts power)
- Robot suspended via gantry or rope on the first attempt (safety first)
- Low-gain test — start at ~10% of nominal gain, robot should gently sway
- IMU calibration (place flat, run
runtime.calibrate_imu) - Joint zeroing — stand in nominal pose, set offsets
8.2. Deploy policy
python -m lerobot_humanoid_runtime.deploy \
--policy ./runs/walk_v1/best.pt \
--interface real \
--command_freq 50 \
--gain_scale 0.3 # start LOW
If the robot starts walking smoothly, bump --gain_scale to 0.5, then 0.8, then 1.0. Never jump straight to 1.0 on the first attempt — motors can overload or oscillate.
8.3. Real-world tuning
Common issues to expect on first deploy:
- Robot sways in place: Increase damping in fitted_params, retrain.
- Walks too slowly: Increase the forward-velocity reward in the env, retrain.
- Heavier on one leg: Check IMU bias and joint-zero offsets.
With a freshly built robot, expect 2-3 days of wobbly walking — this is the "fun" phase of humanoid robotics. Most research labs don't get to experience this on hardware they fully understand.
9. Results & roadmap
Per the official HuggingFace blog post (May 21, 2026):
- ✅ Standing policy validated on real hardware
- ✅ Walking policy running at 0.3-0.5 m/s
- ✅ Repos have 147 stars, 11 forks within a week of release
- 🔄 Coming next: upper-body arms (phase 2), rough-terrain policies
- 🔄 Community contributions: VLA integration (combining manipulation + locomotion)
Quick comparison with bipedal robots at similar price points:
| Robot | Price | DOF | Open-source? | Sim2real pipeline |
|---|---|---|---|---|
| LeRobot Humanoid | $2,500 | 12 | Full | ✅ Identification + zoo |
| Berkeley Humanoid Lite | $5,000 | 22 | CAD + RL code | ⚠️ Partial |
| Booster T1 | $35,000 | 23 | SDK only | ✅ Booster Gym |
| Unitree G1 | $16,000 | 23+ | SDK + Mujoco model | ⚠️ Limited |
LeRobot Humanoid isn't the most capable robot, but it is the cheapest, the most open, and the most pipeline-complete for beginners learning humanoid robotics. That's the core differentiator.
10. Pitfalls & beginner advice
- Don't skip motor bench testing — One bad motor can blow up an entire assembly day if found mid-chain.
- Use proper infill on load-bearing parts — Knee and thigh MUST be 80% infill, no shortcuts.
- CAN bus termination resistors — Forget them and you'll chase random motor dropouts for hours.
- Use cloud GPUs if local is weak — RunPod RTX 4090 costs ~$0.5/hour; one policy ≈ $5.
- Start with the included standing policy — Don't try to train walking from scratch on day one. Verify your hardware works against a known-good checkpoint first.
- Document any modifications — If you tweak an STL, fork the repo and push it up. The LeRobot community is very active and often merges PRs back.
11. Related Posts
- Berkeley Humanoid Lite build guide — the $5,000 bipedal robot from Berkeley
- Booster Gym ICRA 2026 — Step-by-step sim-to-real on the Booster T1
- LeRobot ecosystem guide — the HuggingFace robotics framework architecture
Sources:
- LeRobot Humanoid official blog — HuggingFace, May 21, 2026
- Virgileboat/lerobot-humanoid — Main GitHub org
- OpenELAB Robstride motor set for LeRobot Humanoid
- LeRobot main library