rhoyn.

Walk under disturbances: 43 publicly released Unitree G1 walking policies, none finishes reliably

84–88%best completion, PhysX to MuJoCo · no policy finishes every tour
38 of 69ranked rows complete at most 1% of tours in both engines
37%small-command error of gr00t_wbc at 0.74 m, the field’s best · our teleop pick
Abstract

We ported forty-three publicly released walking policies for the Unitree G1 to one C++ interface and ran each on the same set of punched three-minute tours, in MuJoCo and PhysX. Nothing completes reliably. The best rows still fail about one tour in six, only thirteen complete half on average over both engines, and 38 of the 69 ranked rows complete at most 1% of tours in both engines. The leaders tie on completion, so for teleop we pick on what an operator feels: gr00t_wbc at its canonical 0.74 m.

Figure 1. One punched tour, all seventy-one rows side by side in PhysX, ranked: most lower rows fall before the clock runs out. Tiles show htd_wbc under its former name, decoupled_wbc.

What you can reuse

  • The harness: forty-three G1 policies behind one C++ interface, in two physics engines, as seventy-one rows.
  • The task: eighteen waypoints, one punch per segment, and arms the policy may not use for balance.
  • The data: completion, error and cost per row and engine, plus small-command and leg-stiffness sweeps. Code + data, MIT; checkpoints under their authors’ terms. github.com/rhoyn/teleop-walking-bench
  • Twenty-three of the policies, running in your browser.

1Nothing completes reliably, and teleop pays for every fall

In teleop the punches are the operator’s own: a reach that shifts the robot’s weight, a door that pushes back, a bump into a table. The arms are the operator’s, so the policy must balance without them, and a fall ends the episode. Here every segment lands a punch and the harness owns the arms: handoff completes 0/0% of its tours under that rule, 35/36% when allowed its arms.

Short of falling, a robot can drift off target, more the longer it walks; have a deadzone, where small stick inputs do nothing, so the operator pushes harder and overshoots; or creep when told to stand still, while the operator manipulates.

Figure 2. The thirteen rows that complete at least half their tours, averaged over the two engines. The next best, supermimic_rayzhao, reaches 41 / 36%.
All 69 ranked rows as a chart · upper bar MuJoCo, lower PhysX

Rows are in the README’s order, by mean survival over both engines. The names in bold are the twenty-three you can drive yourself at the end of the page.

Share of tours completed, MuJoCo against PhysX, by policyPaired horizontal bars for each policy, ordered by mean survival: the upper bar is MuJoCo, the lower PhysX. gr00t_wbc_h070_p000 83 and 84 percent; htd_wbc_h066_p012 86 and 81; htd_wbc_h066_p000 84 and 79; htd_wbc_h070_p000 83 and 79; gr00t_wbc_h066_p012 88 and 74; htd_wbc_h074_p000 79 and 77; gr00t_wbc_h066_p000 88 and 73; gr00t_wbc_h074_p000 74 and 77; morphmimic_gr00twbcplnr 68 and 81; morphmimic_sonicplnr 62 and 84; homie 54 and 54; wbc_agile_velocity 48 and 63; amo 54 and 57. Below amo no row completes half its tours; the best SuperMimic reproduction, supermimic_rayzhao, reaches 41 and 36 percent, and thirty-eight of the sixty-nine ranked rows complete at most one tour in a hundred in both engines. Among the leaders the engines pick differently: MuJoCo's best is gr00t_wbc at 0.66 m, 88 percent, PhysX's gr00t_wbc at 0.70 m, 84 percent.policytours completedmujoco / physx25%50%75%100%gr00t_wbc_h070_p00083/84htd_wbc_h066_p01286/81htd_wbc_h066_p00084/79htd_wbc_h070_p00083/79gr00t_wbc_h066_p01288/74htd_wbc_h074_p00079/77gr00t_wbc_h066_p00088/73gr00t_wbc_h074_p00074/77morphmimic_gr00twbcplnr68/81morphmimic_sonicplnr62/84homie54/54wbc_agile_velocity48/63amo54/57wbc_agile38/25zealot27/15supermimic_rayzhao_gr00twbcplnr41/36supermimic_rayzhao_sonicplnr37/38supermimic_dyn_sonicplnr24/31supermimic_dyn_gr00twbcplnr20/19mimic_lite_gr00twbcplnr10/19run_residual6/9sonic24/5mimic_lite_sonicplnr8/13supermimic_panhainan_gr00twbcplnr2/24supermimic_kangzejian_sonicplnr16/16supermimic_panhainan_sonicplnr0/15wty_cpp1/1falcon0/0openwbt0/1morphmimic_openwbtplnr4/5supermimic_rayzhao_openwbtplnr2/2asap1/1schoi0/0supermimic_dyn_openwbtplnr1/1robomimic3/2supermimic_kangzejian_gr00twbcplnr10/7rl_gym0/1supermimic_kyrieyoung_sonicplnr1/1supermimic_kyrieyoung_gr00twbcplnr1/0supermimic_panhainan_openwbtplnr0/1mimic_lite_openwbtplnr0/1supermimic_kangzejian_openwbtplnr0/0supermimic_kyrieyoung_openwbtplnr0/0rl_lab0/0supermimic_m5_gr00twbcplnr0/0supermimic_m5_sonicplnr0/0supermimic_breezewrf_sonicplnr0/0supermimic_breezewrf_openwbtplnr0/0supermimic_breezewrf_gr00twbcplnr0/0supermimic_m5_openwbtplnr0/0handoff0/0supermimic_omegai_gr00twbcplnr0/0supermimic_omegai_sonicplnr0/0supermimic_omegai_openwbtplnr0/0bfm_zero0/0josabb0/0huru0/0sunny0/0dm_march0/0dm_agile1/0holosoma0/0rl_mjlab0/0legged_rl_lab0/0mturan330/0wcompton0/0g1_gym0/0nanog10/0clobot0/0stepdown0/0
Show as a table · all 71 rows, every column

Every cell is MuJoCo / PhysX. Survival is mean seconds upright out of 180, the column the table is ranked on. Position and yaw error are measured at the end of each segment, or where the robot fell, whether or not it reached the target. The last three columns are what a completed walk cost: energy, vibration, and stomp, the work a foot does on the floor per touchdown.

policysurvivalcompletedrunspos erryaw errwalk energywalk vibrstomp
gr00t_wbc_h070_p000172.2 / 173.1 s83 / 84%256014 / 27 cm5 / 6°7.9 / 9.2 kJ1.1 / 1.71.2 / 0.8 J
htd_wbc_h066_p012173.6 / 170.8 s86 / 81%25607 / 15 cm10 / 9°6.1 / 13.1 kJ1.4 / 4.01.6 / 0.9 J
htd_wbc_h066_p000173.2 / 169.3 s84 / 79%25608 / 19 cm10 / 6°6.1 / 15.5 kJ1.5 / 4.71.6 / 0.8 J
htd_wbc_h070_p000172.3 / 169.7 s83 / 79%25608 / 12 cm14 / 12°6.0 / 13.1 kJ1.4 / 3.71.7 / 1.2 J
gr00t_wbc_h066_p012174.3 / 166.4 s88 / 74%256025 / 122 cm17 / 12°7.6 / 9.8 kJ0.9 / 1.71.0 / 0.3 J
htd_wbc_h074_p000170.1 / 168.8 s79 / 77%256012 / 10 cm21 / 13°6.0 / 13.7 kJ1.4 / 3.71.8 / 1.7 J
gr00t_wbc_h066_p000174.2 / 164.2 s88 / 73%256029 / 147 cm22 / 14°7.3 / 9.9 kJ0.9 / 1.81.1 / 0.4 J
gr00t_wbc_h074_p000167.8 / 169.8 s74 / 77%256011 / 18 cm4 / 4°8.6 / 10.2 kJ1.2 / 1.61.9 / 1.5 J
morphmimic_gr00twbcplnr158.2 / 168.0 s68 / 81%256089 / 75 cm5 / 4°11.8 / 14.2 kJ1.6 / 2.01.0 / 2.2 J
morphmimic_sonicplnr151.8 / 169.9 s62 / 84%256059 / 41 cm10 / 10°11.1 / 14.1 kJ1.8 / 2.31.8 / 3.6 J
homie155.5 / 155.7 s54 / 54%256016 / 16 cm17 / 20°11.9 / 11.3 kJ1.8 / 2.13.0 / 2.8 J
wbc_agile_velocity148.8 / 159.5 s48 / 63%256016 / 16 cm7 / 6°13.1 / 13.5 kJ2.2 / 2.84.9 / 4.5 J
amo151.2 / 154.0 s54 / 57%256018 / 49 cm8 / 7°14.8 / 17.9 kJ2.1 / 2.42.3 / 2.3 J
wbc_agile145.1 / 133.0 s38 / 25%51218 / 33 cm8 / 10°8.1 / 10.3 kJ1.3 / 1.93.3 / 3.2 J
zealot133.4 / 117.0 s27 / 15%51271 / 168 cm46 / 62°46.1 / — kJ21.9 / —1.3 / — J
supermimic_rayzhao_gr00twbcplnr125.6 / 121.7 s41 / 36%512325 / 260 cm27 / 29°17.8 / 22.1 kJ2.5 / 3.11.6 / 3.3 J
supermimic_rayzhao_sonicplnr121.7 / 120.5 s37 / 38%512210 / 179 cm25 / 27°17.9 / 24.0 kJ2.6 / 3.51.9 / 4.5 J
supermimic_dyn_sonicplnr111.6 / 122.0 s24 / 31%512265 / 299 cm23 / 23°19.8 / 27.2 kJ2.9 / 3.71.9 / 4.9 J
supermimic_dyn_gr00twbcplnr107.0 / 103.4 s20 / 19%512266 / 283 cm15 / 14°18.0 / — kJ2.5 / —1.2 / — J
mimic_lite_gr00twbcplnr93.7 / 113.4 s10 / 19%512230 / 168 cm9 / 9°— / —— / —— / —
run_residual101.0 / 102.4 s6 / 9%5121146 / 1174 cm14 / 13°— / —— / —— / —
sonic118.4 / 81.2 s24 / 5%51275 / 89 cm13 / 17°14.6 / — kJ2.2 / —2.9 / — J
mimic_lite_sonicplnr86.8 / 95.4 s8 / 13%512148 / 127 cm15 / 15°— / —— / —— / —
supermimic_panhainan_gr00twbcplnr60.6 / 111.0 s2 / 24%512282 / 588 cm20 / 13°— / 39.3 kJ— / 4.8— / 5.7 J
supermimic_kangzejian_sonicplnr81.6 / 79.9 s16 / 16%512132 / 129 cm39 / 37°— / —— / —— / —
supermimic_panhainan_sonicplnr39.5 / 100.0 s0 / 15%512331 / 751 cm30 / 19°— / —— / —— / —
wty_cpp71.0 / 67.5 s1 / 1%51228 / 33 cm22 / 22°— / —— / —— / —
falcon69.8 / 58.3 s0 / 0%51248 / 58 cm15 / 16°— / —— / —— / —
openwbt42.2 / 83.9 s0 / 1%512117 / 92 cm26 / 16°— / —— / —— / —
morphmimic_openwbtplnr58.9 / 62.0 s4 / 5%512164 / 184 cm28 / 29°— / —— / —— / —
supermimic_rayzhao_openwbtplnr59.0 / 60.5 s2 / 2%512354 / 320 cm43 / 44°— / —— / —— / —
asap60.6 / 56.4 s1 / 1%512211 / 172 cm28 / 30°— / —— / —— / —
schoi58.5 / 51.2 s0 / 0%51245 / 84 cm22 / 27°— / —— / —— / —
supermimic_dyn_openwbtplnr52.4 / 54.4 s1 / 1%512336 / 370 cm29 / 28°— / —— / —— / —
robomimic56.0 / 49.8 s3 / 2%512369 / 298 cm25 / 25°— / —— / —— / —
supermimic_kangzejian_gr00twbcplnr54.5 / 49.7 s10 / 7%512199 / 204 cm31 / 32°— / —— / —— / —
rl_gym28.5 / 70.2 s0 / 1%512156 / 75 cm38 / 16°— / —— / —— / —
supermimic_kyrieyoung_sonicplnr49.8 / 46.1 s1 / 1%512385 / 357 cm42 / 41°— / —— / —— / —
supermimic_kyrieyoung_gr00twbcplnr51.6 / 44.1 s1 / 0%512354 / 307 cm44 / 44°— / —— / —— / —
supermimic_panhainan_openwbtplnr37.4 / 55.3 s0 / 1%512450 / 913 cm31 / 27°— / —— / —— / —
mimic_lite_openwbtplnr43.4 / 47.4 s0 / 1%512195 / 180 cm20 / 22°— / —— / —— / —
supermimic_kangzejian_openwbtplnr38.6 / 37.7 s0 / 0%512255 / 256 cm35 / 36°— / —— / —— / —
supermimic_kyrieyoung_openwbtplnr38.3 / 35.3 s0 / 0%512498 / 468 cm47 / 47°— / —— / —— / —
rl_lab40.0 / 33.6 s0 / 0%51264 / 77 cm71 / 72°— / —— / —— / —
supermimic_m5_gr00twbcplnr35.7 / 37.5 s0 / 0%512497 / 494 cm33 / 33°— / —— / —— / —
supermimic_m5_sonicplnr35.9 / 37.3 s0 / 0%512594 / 589 cm41 / 40°— / —— / —— / —
supermimic_breezewrf_sonicplnr33.0 / 37.3 s0 / 0%512351 / 318 cm47 / 45°— / —— / —— / —
supermimic_breezewrf_openwbtplnr31.7 / 36.3 s0 / 0%512356 / 412 cm50 / 51°— / —— / —— / —
supermimic_breezewrf_gr00twbcplnr30.5 / 33.8 s0 / 0%512542 / 587 cm47 / 45°— / —— / —— / —
supermimic_m5_openwbtplnr27.3 / 28.2 s0 / 0%512593 / 591 cm39 / 37°— / —— / —— / —
handoff22.8 / 25.6 s0 / 0%512234 / 230 cm30 / 31°— / —— / —— / —
supermimic_omegai_gr00twbcplnr22.2 / 24.7 s0 / 0%512748 / 770 cm31 / 32°— / —— / —— / —
supermimic_omegai_sonicplnr18.7 / 19.1 s0 / 0%512936 / 988 cm49 / 47°— / —— / —— / —
supermimic_omegai_openwbtplnr19.5 / 18.3 s0 / 0%5121216 / 1121 cm42 / 45°— / —— / —— / —
bfm_zero15.9 / 11.9 s0 / 0%512487 / 514 cm69 / 86°— / —— / —— / —
josabb*11.0 / 10.6 s0 / 0%512144 / 172 cm83 / 86°— / —— / —— / —
huru*7.9 / 8.2 s0 / 0%512201 / 199 cm69 / 77°— / —— / —— / —
sunny*7.7 / 8.4 s0 / 0%512203 / 240 cm76 / 75°— / —— / —— / —
dm_march9.0 / 4.8 s0 / 0%512164 / 177 cm90 / 91°— / —— / —— / —
dm_agile8.5 / 4.1 s1 / 0%51257 / 53 cm88 / 88°— / —— / —— / —
holosoma6.0 / 6.5 s0 / 0%51279 / 100 cm45 / 60°— / —— / —— / —
rl_mjlab5.7 / 5.3 s0 / 0%512294 / 283 cm73 / 78°— / —— / —— / —
legged_rl_lab4.1 / 3.8 s0 / 0%512224 / 227 cm85 / 86°— / —— / —— / —
mturan33*2.7 / 4.4 s0 / 0%512224 / 246 cm89 / 87°— / —— / —— / —
wcompton2.5 / 2.2 s0 / 0%512129 / 142 cm55 / 58°— / —— / —— / —
g1_gym2.5 / 1.9 s0 / 0%512112 / 110 cm87 / 92°— / —— / —— / —
nanog12.1 / 2.2 s0 / 0%51283 / 90 cm58 / 60°— / —— / —— / —
clobot1.8 / 1.8 s0 / 0%512130 / 125 cm84 / 80°— / —— / —— / —
stepdown1.6 / 1.6 s0 / 0%51293 / 92 cm67 / 61°— / —— / —— / —
handoff_with_arms139.0 / 140.0 s35 / 36%51213 / 15 cm8 / 9°7.8 / 12.7 kJ1.3 / 2.53.4 / 3.9 J
clobot_with_arms87.0 / 73.3 s3 / 1%51223 / 25 cm14 / 16°— / —— / —— / —

The last two rows are greyed out because they are unranked: each is a policy handed all twenty-nine joints instead of fifteen. handoff goes from 0/0% to 35/36% that way and clobot from nothing to 3/1%, which is the cost of the arms rule stated as a number. The four names marked * read the base linear velocity straight from the simulator, a sensor no real robot has; they are ranked, but not deployable as shipped.

2Which one to pick for teleop: gr00t_wbc at 0.74 m

On completion alone the leaders are a tie. htd_wbc_h066_p012 completes 0.4 points fewer tours than gr00t_wbc_h070_p000, 95% interval −1.7 to +0.8 over both engines, and ranks three to six overlap; the two 0.74 m rows sit a few points lower. So we pick on teleop needs: small commands, standstill drift, position accuracy.

gr00t_wbc at its canonical 0.74 m is the one that does all three. gr00t_wbc_h074_p000 completes 74/77% of tours and ends segments 11/18 cm and 4/4° from target. Its small-command error, 37%, is the best in the field, it drifts 0.001/0.002 m/s when asked to stand still, and 1.5× stiffer legs cost it 1% of its survival (9% at 2×). htd_wbc lands as close or closer, 7–19 cm against 11/18 cm, but has a deadzone on small commands (section 7).

At 0.70 m it gains about 9/7 points of completion, but small-command error rises from 37% to 65%. The 0.66 m rows are wrong for teleop: gr00t_wbc there ends PhysX segments 122–147 cm from target, and htd_wbc creeps at 0.124 and 0.153 m/s in PhysX when it should stand still.

gr00t_wbc is under the NVIDIA Open Model licence, commercial use permitted with attribution; htd_wbc is BSD-3-Clause.

3How the benchmark works

  • Tour. Three minutes, eighteen waypoints ten seconds apart, 50 Hz control over a 2 ms step.
  • Steering. A P-controller on position and yaw error, by default gain 1.5 with reached bands 10/20 cm and 0.05/0.12 rad (seven policies set their own). Commands are clamped to each policy’s own limits (0.3 m/s for gr00t_wbc and htd_wbc, 1.5 m/s for run_residual, no yaw for amo and dm_march), so the task differs per row.
  • Punches. 0.1 s after each waypoint switch: a random one of all 29 joints, a random 3D direction, up to 40 N·s on a 35.1 kg robot, about 1.1 m/s.
  • Falls. Pelvis below 0.20 m. Lenient: kneeling or sitting still counts as surviving.
  • Porting. Authors’ gains, scales and clocks, at 50 Hz through TensorRT (TF32). The policy owns the fifteen leg and waist joints; the fourteen arm joints random-walk.
  • Statistics. Every policy and engine gets the same tours. Wilson 95% intervals are ±1.3–1.9 points at n = 2560 and up to ±4 at n = 512, so the gaps between Figure 2’s groups are not noise.
More on the task and the campaign · punches, rounds, porting

Punches. Each lasts 0.08 s at up to 500 N. The ceiling ramps from a third of that at the start to the full 500 N by the 120th second, so the last minute is spent at the ceiling, and each punch draws half to all of it. Tours and punches are drawn from the run id before the run starts, so they cannot be dodged.

Rounds. 125,952 runs, both engines, in rounds of 512 run ids. The thirteen rows that complete at least half their runs, averaged over the two engines, ran five rounds of different run ids, 0–2559; the rest ran one. Five rounds are there for precision: a policy that falls most of the time needs no fourth decimal place. The runs column carries each row’s own count.

Arms. The arm joints are held by PD gains derived from each motor’s armature. They are never still and never borrowable for balance, because a controller that windmills to stay upright falls the moment its operator reaches for a door handle.

Glossary · row names, suffixes and columns
  • MuJoCo / PhysX: the two physics engines. Every pair of numbers is MuJoCo first, PhysX second.
  • gr00t_wbc, htd_wbc: the whole-body controllers of NVIDIA GR00T and of Humanoid Touch Dream (HTD). htd_wbc was listed as decoupled_wbc before. gr00t_wbc is HOMIE v2, so homie and gr00t_wbc are one family.
  • _h070_p000: the commanded torso posture, height 0.70 m and pitch 0.00 rad; _h066_p012 is 0.66 m and 0.12 rad.
  • _sonicplnr, _openwbtplnr, _gr00twbcplnr: where a motion tracker’s reference comes from (section 6).
  • SuperMimic: every supermimic_ row is an independent community reproduction, named after its publisher or repository; the paper’s official checkpoint was not used.
  • kp, kd: the stiffness and damping gains of a joint’s PD controller.
  • * and _with_arms: names marked * read the base velocity straight from the simulator; _with_arms rows were handed all twenty-nine joints and are unranked.

4The top eight are two policies in four postures

htd_wbc’s authors reviewed our adapter and suggested sweeping torso height and pitch (issue #1); we ran gr00t_wbc over the same four. Only height moves the score. For gr00t_wbc, 0.74 to 0.66 m buys fourteen points of MuJoCo completion for fourteen to eighteen centimetres of position error, and in PhysX the last step gives 10–12 points back. htd_wbc pays nothing in MuJoCo: 79/77% to 86/81%, error down from 12 to 7–8 cm.

Show as a table · the eight posture rows, completion against position error
policytorso height, pitchcompletedpos err
gr00t_wbc0.74 m, 0 rad (canonical)74 / 77%11 / 18 cm
gr00t_wbc0.70 m, 0 rad83 / 84%14 / 27 cm
gr00t_wbc0.66 m, 0.12 rad88 / 74%25 / 122 cm
gr00t_wbc0.66 m, 0 rad88 / 73%29 / 147 cm
htd_wbc0.74 m, 0 rad79 / 77%12 / 10 cm
htd_wbc0.70 m, 0 rad (canonical)83 / 79%8 / 12 cm
htd_wbc0.66 m, 0.12 rad86 / 81%7 / 15 cm
htd_wbc0.66 m, 0 rad84 / 79%8 / 19 cm

MuJoCo / PhysX. Values from the full table in section 1. A wider sweep over gr00t_wbc’s walk/balance switch found it inert.

5Completing is not going where you were sent

morphmimic_sonicplnr completes 84% in PhysX, level with the best, but ends segments 59/41 cm from target; gr00t_wbc at 0.70–0.74 m and every htd_wbc row land within 7–27 cm. Low error is not enough: wty_cpp ends 28/33 cm off, close to wbc_agile (18/33 cm) and amo (18/49 cm), yet completes 1/1%; falcon almost none (0.2/0.4%). Error is taken where a segment ends or the robot fell, so falling early flatters it.

Costs matter for the data. wbc_agile_velocity stomps hardest among the leaders, 4.5–4.9 J a touchdown, and htd_wbc vibrates two to three times as much as gr00t_wbc in PhysX.

6A tracker is only as good as its reference

mimic_lite, MorphMimic and eight SuperMimic reproductions follow a reference motion but ship no planner. _sonicplnr rows take it from sonic’s planner network; _openwbtplnr and _gr00twbcplnr from a planner policy, a second, unpunched MuJoCo G1 driven by openwbt or gr00t_wbc_h074_p000 that walks 15 ticks (0.3 s at 50 Hz) ahead.

morphmimic completes 4/5% with the OpenWBT planner policy, 62/84% with sonic’s planner and 68/81% with the GR00T WBC one. On a ninety-second tour morphmimic_sonicplnr did 71/92% while the walkers held steady: trackers lose ground as position error builds.

The SuperMimic reproductions · provenance and training data

None of the SuperMimic rows is the paper’s. Every supermimic_ row is an independent community reproduction, published after the paper on hardware from an A800 to a MacBook.

The clearest pattern among them is data. rayzhao, trained on BONES-SEED and fine-tuned to get up and resist pushes, completes up to 41/36%; m5, breezewrf and omegai, trained on LAFAN1, fall within forty seconds on average. The split is not clean: panhainan, also on 40 LAFAN1 clips, reaches 24% in PhysX, and kangzejian, on BONES-SEED, at most 16%. That is a pattern across eight projects with many other differences, not a controlled experiment, and none of these scores says anything direct about the paper.

The planner-policy robot follows the same command limits as openwbt and gr00t_wbc on their own, and a one-sided spring under its pelvis keeps it from falling.

7On small commands, two robust policies barely move

gr00t_wbc_h074_p000 moves the commanded way in 97% of small walking commands and 99% of small turns. htd_wbc and homie score 99–101%: a deadzone. The operator cannot make the last ten centimetres of an approach. supermimic_dyn and morphmimic with the GR00T WBC planner policy come second and third, at 45% and 54%. More in Walk slowly and precisely.

Figure 3. Run id 0, every listed row, PhysX and MuJoCo side by side, turning right at 0.1 rad/s: some turn steadily, others stand still.
How small commands are scored, and every listed row on video

Two more benchmarks hold one command for 10 s with no punches — a yaw rate, or a planar velocity — drawn up to 1 rad/s and 1 m/s, 4096 run ids per engine, and score the small ones, 0.05 to 0.15 m/s or rad/s. Error is the median distance between measured and commanded velocity relative to the command: 0% is perfect, 100% is what standing still scores. Thirty-four rows are stable enough to be listed. Each row is scored at the first leg gain where it is stable — native, else 1.5×, else 2× — so the two gr00t_wbc 0.66 m rows were scored at 1.5×.

Turning right at 0.1 rad/s is Figure 3. Run id 0, every listed row, PhysX and MuJoCo side by side, walking straight ahead at 0.1 m/s:

8Stiffer legs are not a free upgrade

Every policy was rerun with the kp and kd of its twelve leg joints scaled by 1.5 and 2.0. At 2×, 43 of the 71 rows get worse; at 1.5×, 27. Most SuperMimic rows survive longer at 1.5×, and every row that completes enough to measure spends more energy and vibrates more.

Per-policy changes

gr00t_wbc, htd_wbc and homie lose up to three percent of their survival at 1.5× and three to twelve at 2×. wbc_agile_velocity loses fifteen and forty-eight; openwbt, rl_gym and schoi lose most of theirs already at 1.5×. supermimic_dyn_gr00twbcplnr gains thirty-five percent at 1.5×. gr00t_wbc_h066_p012 goes from 8.7 to 12.8 to 21.7 kJ a walk. Compared over run ids 0–511 in both engines.

9The engines agree on the field, not on the pick

Across all 69 ranked rows, survival in the two engines correlates at Spearman 0.97: they agree on who walks and who falls. Among the thirteen leaders, completion correlates at only 0.33. MuJoCo’s best is gr00t_wbc at 0.66 m, 88%; PhysX’s is gr00t_wbc at 0.70 m, 84%. Read both before picking a posture.

What differs between the engines

Each row runs the same exported weights on the same tours and punches. Both engines use each policy’s own kp, kd and torque limits: MuJoCo as an explicit PD torque, PhysX through its articulation joint drives. Contact is solved differently: MuJoCo integrates soft convex constraints with its implicitfast integrator; PhysX runs a TGS solver with 8 position and 1 velocity iterations, maps contact stiffness and damping onto a compliant material with friction 1.0, and disables self-collision. Both step on the GPU, MuJoCo through MuJoCo Warp. The planner-policy robot behind a tracker always runs in MuJoCo. A policy that scores in both has survived a change of contact model it never saw in training, the closest thing here to a sim-to-real proxy.

10A permissively licensed policy is level with the top

Of the forty-three, two are non-commercial (homie and bfm_zero, CC BY-NC), one is sim-only at its authors’ request, thirteen declare no licence and four grant none for the weights. htd_wbc is BSD-3-Clause: best on position error, cheapest walk in MuJoCo, level on completion, though not on small commands. Terms are in the NOTICE.

11Limitations

  • Simulation, not a floor: a shortlist, not a verdict.
  • Cost columns cover only the rows that finish often enough.
  • Tracker references are ours, never tuned by their authors; a planner-policy row partly measures its planner policy.
  • This article measures how publicly released walking policies survive and steer in simulation; it doesn’t explain any stack’s internals.

12Measure your own stack

Everything above runs from the repository on an NVIDIA GPU (the Makefile targets sm_89 by default).

stepcommand
build./download_export_onnx.sh && make && make capture
one policy./run.sh --policy gr00t_wbc_h074_p000 --engine physx --runids 0-255
full campaign./benchmark.sh --benchmark all
resultsresults/punches_gainx<G>/p<NN>.<policy>.<engine>.csv, one line per run id

Read completion with an interval. Count the runs whose outcome is complete and put a Wilson 95% interval around the share: 192 of 256 is 75%, or anywhere from 69% to 80%. If two intervals overlap, run more run ids.

Adding a policy. Implement the seven methods of policy_api::Policy — init, step, kp, kd, owned, limits and name — then add the include, a factory branch and its NAMES entry.

13Try it yourself

Twenty-three of them run here: each downloads its real weights and runs at 50 Hz against MuJoCo in your browser, ported from the benchmark’s own policy.cpp. gr00t_wbc runs at 0.66 m, htd_wbc at 0.66 m / 0.12 rad (their best completion rows, not our teleop pick). Most fall over: below the top seven of these twenty-three, only run_residual completes over 1% (6/9%).

Starting on frozen — the stance the crane holds, with no policy running. Pick one above and it downloads that policy’s weights, a few MB on top of the physics engine.

Click it, then drive: W/S forward and back, A/D sideways, Q/E turn. Nothing punches it here, and each policy is capped at its own command range, so amo will not turn.

Why twenty-three and not forty-three

wcompton’s weights are public but declare no licence. robomimic, g1_gym and stepdown ship only TorchScript and declare no licence, so their ONNX conversions can’t be redistributed.

sonic is about 0.9 GB across three networks and bfm_zero 123 MB, too large for a browser download; the ten trackers need sonic’s planner or a planner policy running a second simulated robot, so they go with it. huru, josabb, sunny and mturan33 read the simulator’s base velocity, which the page does not supply.

Free pilot: 50 episodes of your task.

Book a 15-min call or see the data