Craig Merry, pairing with Claude Code · 2026-09-07 · source, data and sim

An LLM at 50 Hz

A checkable answer to a challenge posed on X on 7 September 2026.

Can you prompt an LLM to output the high frequency control commands for a legged robot in varying terrain e.g. ashish-kmr.github.io RSS 2021, CoRL 2022 (this is by now 5 year old technology, so I am not picking a particularly hard task).
@JitendraMalikCV, 7 Sep 2026

Short answer: no, and here is the receipt. I asked Claude to write the 50 Hz joint commands for the smallest legged robot on my desk, a Pollen Microduck, and ran them in the same MuJoCo plant that scores the robot's own trained policy. The LLM's open-loop command table never stood for six seconds on a flat floor, let alone on terrain. Its hand-written balance law can hold a stand but not a walk. The five-year-old recipe, a PPO policy at 50 Hz reading 61 proprioceptive numbers, walks on everything up to its training limit. What the LLM was good for was everything around the loop: the terrains, the instruments, the sign conventions, and finding that the servos cannot even hold the nominal pose without feedback.

0/80LLM open-loop table: episodes still standing at 6 s, all terrains
0/80LLM gait plus LLM balance law
28/80trained PPO policy, 0.3 m/s: all of flat, 5 mm rough and most of a 10 mm ledge
8 then 0policy on a 10 mm ledge, then on a 15 mm ledge, of 10

What was tested

The robot. Pollen Robotics' Microduck: a 25 cm, roughly 800 g biped with fourteen position-servo joints the policy drives (five per leg, four in the neck and head) plus a mouth. Its runtime runs the policy at 50 Hz over a 61-value proprioceptive observation. This is not a quadruped and not the A1 or the Cassie in the cited papers. It is the legged robot I have a verified simulator for, and it is harder for open loop, not easier: the servos are weak (kp 0.55 N·m/rad, torque limit ±0.64 N·m) and the standing pose is not statically stable on them.

The plant. duckbench's scene.mjb (sha256 3f8c9ab9b409ba74…), MuJoCo 3.1.16 WASM, 5 ms timestep, four substeps per 20 ms control tick. The same plant and the same control loop that every published duckbench number went through, at duckbench commit ee7c71d.

The terrains. Eight, laid from the bench's bank of movable blocks along a 340 mm wide lane. Each block is 200 mm tall with its top at the tread, so a ledge is a real vertical face, not a slope. Pollen trains this robot on steps capped at 15 mm because, in their words in the training config, "the robot can only lift its feet ~1-2 cm". The terrains bracket that.

flat
0 m1 m2 mfloor only; the stair bank parked 5 m below
ledge10
0 m1 m2 mone 10 mm step up at x = 0.13 m, then flat
ledge15
0 m1 m2 mone 15 mm step up at x = 0.13 m, then flat
ledge20
0 m1 m2 mone 20 mm step up at x = 0.13 m, then flat
rough5
0 m1 m2 malternating 5 mm up/down ledges every 200 mm from x = 0.13 m
rough10
0 m1 m2 malternating 10 mm up/down ledges every 200 mm from x = 0.13 m
ramp5
0 m1 m2 ma flight rising 5 mm every 200 mm, to 35 mm
ramp10
0 m1 m2 ma flight rising 10 mm every 200 mm, to 70 mm

Three controllers

  1. A. The LLM's open-loop 50 Hz table. Claude wrote a parametric gait by hand (a hip pitch sinusoid, a knee lift during swing, an ankle that keeps the sole flat, a hip roll weight shift, a 1 s amplitude ramp), expanded it into a literal table of fourteen servo targets every 20 ms, and the table is played with no sensor read after t = 0. This is the challenge as posed. Its five parameters were tuned on the flat floor only with a 72-point grid, three seeds each, then frozen. The best: f = 1.5 Hz, hip 0.05 rad, knee 0.3 rad, roll -0.08 rad.
  2. B. The same gait plus an LLM-written balance law. Projected gravity and the gyro feed hip pitch and hip roll offsets every tick. Gains tuned on the flat floor with a 27-point grid: kp = -0.4, kr = 0.3, kd = 0. This is the "code as policy" reading of the challenge.
  3. C. Pollen's trained policy. alpha_walking.onnx (sha256 e36332d383997d51…), PPO in mjlab, run through the bench's canonical observation and actuation path with a 0.3 m/s forward command. Not tuned. C+ adds a heading hold on the command input (a yaw rate proportional to lateral drift and heading) so the blind policy stays on the 340 mm lane; that is a planner-level input, the kind of thing the post says LLMs are fine at.

Two controls make the failures legible. A0 plays the measured standing servo targets with zero gait amplitude. B0 is the balance law alone, no gait. And C is also run at 0.2 m/s, which turns out to be inside the policy's command dead zone.

Protocol

Every episode: reset with a perturbed start (±2 mm trunk, ±0.02 rad per joint; seed 0 is nominal), 25 ticks of settle under the standing policy, then 300 ticks (6 s) of the controller under test. An episode fell when projected gravity z rose above −0.7 or the trunk dropped below 60 mm, and is standing if at the last tick gravity z is below −0.9 and the trunk is above 90 mm. Ten seeds per cell. The step blocks do not collide with each other (the bench's standard isolation); block-to-robot contact is untouched.

Results

Episodes still standing at six seconds, of ten, per terrain.

A. LLM open-loop 50 Hz table
A. LLM open-loop 50 Hz table on flat: 0 of 10 standing at 6 s, median travelled 0.13 m, walked off the bank in 0 runs0flatA. LLM open-loop 50 Hz table on ledge10: 0 of 10 standing at 6 s, median travelled 0.13 m, walked off the bank in 0 runs0ledge10A. LLM open-loop 50 Hz table on ledge15: 0 of 10 standing at 6 s, median travelled 0.13 m, walked off the bank in 0 runs0ledge15A. LLM open-loop 50 Hz table on ledge20: 0 of 10 standing at 6 s, median travelled 0.13 m, walked off the bank in 0 runs0ledge20A. LLM open-loop 50 Hz table on rough5: 0 of 10 standing at 6 s, median travelled 0.13 m, walked off the bank in 0 runs0rough5A. LLM open-loop 50 Hz table on rough10: 0 of 10 standing at 6 s, median travelled 0.13 m, walked off the bank in 0 runs0rough10A. LLM open-loop 50 Hz table on ramp5: 0 of 10 standing at 6 s, median travelled 0.13 m, walked off the bank in 0 runs0ramp5A. LLM open-loop 50 Hz table on ramp10: 0 of 10 standing at 6 s, median travelled 0.13 m, walked off the bank in 0 runs0ramp10100
A0. hold the measured standing targets (control)
A0. hold the measured standing targets (control) on flat: 8 of 10 standing at 6 s, median travelled 0.00 m, walked off the bank in 0 runs8flatA0. hold the measured standing targets (control) on ledge10: 8 of 10 standing at 6 s, median travelled 0.00 m, walked off the bank in 0 runs8ledge10A0. hold the measured standing targets (control) on ledge15: 8 of 10 standing at 6 s, median travelled 0.00 m, walked off the bank in 0 runs8ledge15A0. hold the measured standing targets (control) on ledge20: 8 of 10 standing at 6 s, median travelled 0.00 m, walked off the bank in 0 runs8ledge20A0. hold the measured standing targets (control) on rough5: 8 of 10 standing at 6 s, median travelled 0.00 m, walked off the bank in 0 runs8rough5A0. hold the measured standing targets (control) on rough10: 8 of 10 standing at 6 s, median travelled 0.00 m, walked off the bank in 0 runs8rough10A0. hold the measured standing targets (control) on ramp5: 8 of 10 standing at 6 s, median travelled 0.00 m, walked off the bank in 0 runs8ramp5A0. hold the measured standing targets (control) on ramp10: 8 of 10 standing at 6 s, median travelled 0.00 m, walked off the bank in 0 runs8ramp10100
B. LLM gait + LLM balance law
B. LLM gait + LLM balance law on flat: 0 of 10 standing at 6 s, median travelled 0.13 m, walked off the bank in 0 runs0flatB. LLM gait + LLM balance law on ledge10: 0 of 10 standing at 6 s, median travelled 0.12 m, walked off the bank in 0 runs0ledge10B. LLM gait + LLM balance law on ledge15: 0 of 10 standing at 6 s, median travelled 0.12 m, walked off the bank in 0 runs0ledge15B. LLM gait + LLM balance law on ledge20: 0 of 10 standing at 6 s, median travelled 0.12 m, walked off the bank in 0 runs0ledge20B. LLM gait + LLM balance law on rough5: 0 of 10 standing at 6 s, median travelled 0.12 m, walked off the bank in 0 runs0rough5B. LLM gait + LLM balance law on rough10: 0 of 10 standing at 6 s, median travelled 0.12 m, walked off the bank in 0 runs0rough10B. LLM gait + LLM balance law on ramp5: 0 of 10 standing at 6 s, median travelled 0.12 m, walked off the bank in 0 runs0ramp5B. LLM gait + LLM balance law on ramp10: 0 of 10 standing at 6 s, median travelled 0.12 m, walked off the bank in 0 runs0ramp10100
B0. balance law only, no gait (control)
B0. balance law only, no gait (control) on flat: 8 of 10 standing at 6 s, median travelled 0.00 m, walked off the bank in 0 runs8flatB0. balance law only, no gait (control) on ledge10: 8 of 10 standing at 6 s, median travelled 0.00 m, walked off the bank in 0 runs8ledge10B0. balance law only, no gait (control) on ledge15: 8 of 10 standing at 6 s, median travelled 0.00 m, walked off the bank in 0 runs8ledge15B0. balance law only, no gait (control) on ledge20: 8 of 10 standing at 6 s, median travelled 0.00 m, walked off the bank in 0 runs8ledge20B0. balance law only, no gait (control) on rough5: 8 of 10 standing at 6 s, median travelled 0.00 m, walked off the bank in 0 runs8rough5B0. balance law only, no gait (control) on rough10: 8 of 10 standing at 6 s, median travelled 0.00 m, walked off the bank in 0 runs8rough10B0. balance law only, no gait (control) on ramp5: 8 of 10 standing at 6 s, median travelled 0.00 m, walked off the bank in 0 runs8ramp5B0. balance law only, no gait (control) on ramp10: 8 of 10 standing at 6 s, median travelled 0.00 m, walked off the bank in 0 runs8ramp10100
C. PPO policy, vx 0.3 m/s
C. PPO policy, vx 0.3 m/s on flat: 10 of 10 standing at 6 s, median travelled 0.76 m, walked off the bank in 0 runs10flatC. PPO policy, vx 0.3 m/s on ledge10: 8 of 10 standing at 6 s, median travelled 0.74 m, walked off the bank in 4 runs8ledge10C. PPO policy, vx 0.3 m/s on ledge15: 0 of 10 standing at 6 s, median travelled 0.13 m, walked off the bank in 0 runs0ledge15C. PPO policy, vx 0.3 m/s on ledge20: 0 of 10 standing at 6 s, median travelled 0.15 m, walked off the bank in 2 runs0ledge20C. PPO policy, vx 0.3 m/s on rough5: 10 of 10 standing at 6 s, median travelled 0.74 m, walked off the bank in 0 runs10rough5C. PPO policy, vx 0.3 m/s on rough10: 0 of 10 standing at 6 s, median travelled 0.34 m, walked off the bank in 0 runs0rough10C. PPO policy, vx 0.3 m/s on ramp5: 0 of 10 standing at 6 s, median travelled 0.73 m, walked off the bank in 0 runs0ramp5C. PPO policy, vx 0.3 m/s on ramp10: 0 of 10 standing at 6 s, median travelled 0.33 m, walked off the bank in 0 runs0ramp10100
C+. PPO policy, vx 0.3 m/s, heading hold on the bank centre line
C+. PPO policy, vx 0.3 m/s, heading hold on the bank centre line on flat: 10 of 10 standing at 6 s, median travelled 0.75 m, walked off the bank in 0 runs10flatC+. PPO policy, vx 0.3 m/s, heading hold on the bank centre line on ledge10: 5 of 10 standing at 6 s, median travelled 0.55 m, walked off the bank in 0 runs5ledge10C+. PPO policy, vx 0.3 m/s, heading hold on the bank centre line on ledge15: 0 of 10 standing at 6 s, median travelled 0.14 m, walked off the bank in 0 runs0ledge15C+. PPO policy, vx 0.3 m/s, heading hold on the bank centre line on ledge20: 0 of 10 standing at 6 s, median travelled 0.08 m, walked off the bank in 0 runs0ledge20C+. PPO policy, vx 0.3 m/s, heading hold on the bank centre line on rough5: 9 of 10 standing at 6 s, median travelled 0.78 m, walked off the bank in 0 runs9rough5C+. PPO policy, vx 0.3 m/s, heading hold on the bank centre line on rough10: 0 of 10 standing at 6 s, median travelled 0.39 m, walked off the bank in 1 runs0rough10C+. PPO policy, vx 0.3 m/s, heading hold on the bank centre line on ramp5: 0 of 10 standing at 6 s, median travelled 0.43 m, walked off the bank in 0 runs0ramp5C+. PPO policy, vx 0.3 m/s, heading hold on the bank centre line on ramp10: 0 of 10 standing at 6 s, median travelled 0.49 m, walked off the bank in 0 runs0ramp10100
C at vx 0.2 m/s (below its dead zone)
C at vx 0.2 m/s (below its dead zone) on flat: 10 of 10 standing at 6 s, median travelled 0.01 m, walked off the bank in 0 runs10flatC at vx 0.2 m/s (below its dead zone) on ledge10: 10 of 10 standing at 6 s, median travelled 0.01 m, walked off the bank in 0 runs10ledge10C at vx 0.2 m/s (below its dead zone) on ledge15: 10 of 10 standing at 6 s, median travelled 0.01 m, walked off the bank in 0 runs10ledge15C at vx 0.2 m/s (below its dead zone) on ledge20: 10 of 10 standing at 6 s, median travelled 0.01 m, walked off the bank in 0 runs10ledge20C at vx 0.2 m/s (below its dead zone) on rough5: 10 of 10 standing at 6 s, median travelled 0.01 m, walked off the bank in 0 runs10rough5C at vx 0.2 m/s (below its dead zone) on rough10: 10 of 10 standing at 6 s, median travelled 0.01 m, walked off the bank in 0 runs10rough10C at vx 0.2 m/s (below its dead zone) on ramp5: 10 of 10 standing at 6 s, median travelled 0.01 m, walked off the bank in 0 runs10ramp5C at vx 0.2 m/s (below its dead zone) on ramp10: 10 of 10 standing at 6 s, median travelled 0.01 m, walked off the bank in 0 runs10ramp10100

Below each bar count in the table: the median distance travelled along the lane, and how many runs walked off the side of the 340 mm lane before the end.

Controllerflatledge10ledge15ledge20rough5rough10ramp5ramp10
A. LLM open-loop 50 Hz table0/10
0.13 m
0/10
0.13 m
0/10
0.13 m
0/10
0.13 m
0/10
0.13 m
0/10
0.13 m
0/10
0.13 m
0/10
0.13 m
A0. hold the measured standing targets (control)8/10
0.00 m
8/10
0.00 m
8/10
0.00 m
8/10
0.00 m
8/10
0.00 m
8/10
0.00 m
8/10
0.00 m
8/10
0.00 m
B. LLM gait + LLM balance law0/10
0.13 m
0/10
0.12 m
0/10
0.12 m
0/10
0.12 m
0/10
0.12 m
0/10
0.12 m
0/10
0.12 m
0/10
0.12 m
B0. balance law only, no gait (control)8/10
0.00 m
8/10
0.00 m
8/10
0.00 m
8/10
0.00 m
8/10
0.00 m
8/10
0.00 m
8/10
0.00 m
8/10
0.00 m
C. PPO policy, vx 0.3 m/s10/10
0.76 m
8/10
0.74 m
off bank 4
0/10
0.13 m
0/10
0.15 m
off bank 2
10/10
0.74 m
0/10
0.34 m
0/10
0.73 m
0/10
0.33 m
C+. PPO policy, vx 0.3 m/s, heading hold on the bank centre line10/10
0.75 m
5/10
0.55 m
0/10
0.14 m
0/10
0.08 m
9/10
0.78 m
0/10
0.39 m
off bank 1
0/10
0.43 m
0/10
0.49 m
C at vx 0.2 m/s (below its dead zone)10/10
0.01 m
10/10
0.01 m
10/10
0.01 m
10/10
0.01 m
10/10
0.01 m
10/10
0.01 m
10/10
0.01 m
10/10
0.01 m

Trunk position on the 10 mm rough terrain, seed 0

Forward position of the trunk over the six seconds. A dot marks the tick the fall criterion fired.

A open loopB gait + balanceC policyC+ policy, heading hold
0.25 m0.50 m0.75 m1.00 m0 s1 s2 s3 s4 s5 s6 sA open loop, seed 0, rough10: travelled 0.13 m, fell at 2.12 sA open loop fell at 2.12 sB gait + balance, seed 0, rough10: travelled -0.15 m, fell at 2.80 sB gait + balance fell at 2.8 sC policy, seed 0, rough10: travelled 0.36 m, fell at 3.26 sC policy fell at 3.26 sC+ policy, heading hold, seed 0, rough10: travelled 0.13 m, fell at 3.22 sC+ policy, heading hold fell at 3.22 sC policy, fell 3.3 sC+ policy, heading hold, fell 3.2 sA open loop, fell 2.1 sB gait + balance, fell 2.8 s

The same on the flat floor

A open loopB gait + balanceC policyC+ policy, heading hold
0.25 m0.50 m0.75 m1.00 m0 s1 s2 s3 s4 s5 s6 sA open loop, seed 0, flat: travelled 0.13 m, fell at 2.12 sA open loop fell at 2.12 sB gait + balance, seed 0, flat: travelled -0.15 m, fell at 2.82 sB gait + balance fell at 2.82 sC policy, seed 0, flat: travelled 0.76 m, standing at 6 sC+ policy, heading hold, seed 0, flat: travelled 0.75 m, standing at 6 sC policy, 0.76 mC+ policy, heading hold, 0.75 mA open loop, fell 2.1 sB gait + balance, fell 2.8 s

What the numbers say

What the LLM produced

This is the literal deliverable the challenge asks for: joint targets at 50 Hz, written by the model. It is also what fails.

t_sleft_hip_yawleft_hip_rollleft_hip_pitchleft_kneeleft_ankleneck_pitchhead_pitchhead_yawhead_rollright_hip_yawright_hip_rollright_hip_pitchright_kneeright_ankle
0.000.0021-0.2674-0.4073-0.10540.51050.27170.3586-0.03090.0262-0.00930.27080.39210.0925-0.4592
0.020.0021-0.2677-0.4083-0.10430.51260.27170.3586-0.03090.0262-0.00930.27050.39110.0925-0.4582
0.040.0021-0.2686-0.4092-0.10100.51680.27170.3586-0.03090.0262-0.00930.26960.39020.0925-0.4573
0.060.0021-0.2700-0.4098-0.09580.52270.27170.3586-0.03090.0262-0.00930.26820.38960.0925-0.4567
0.080.0021-0.2718-0.4102-0.08900.52980.27170.3586-0.03090.0262-0.00930.26640.38920.0925-0.4563
0.100.0021-0.2739-0.4102-0.08110.53770.27170.3586-0.03090.0262-0.00930.26430.38920.0925-0.4563
0.120.0021-0.2761-0.4099-0.07280.54560.27170.3586-0.03090.0262-0.00930.26210.38950.0925-0.4566
0.140.0021-0.2782-0.4090-0.06470.55290.27170.3586-0.03090.0262-0.00930.26000.39040.0925-0.4575
0.160.0021-0.2802-0.4078-0.05750.55890.27170.3586-0.03090.0262-0.00930.25800.39160.0925-0.4587
0.180.0021-0.2817-0.4062-0.05180.56290.27170.3586-0.03090.0262-0.00930.25650.39320.0925-0.4603
0.200.0021-0.2826-0.4042-0.04830.56450.27170.3586-0.03090.0262-0.00930.25560.39520.0925-0.4623
0.220.0021-0.2828-0.4020-0.04760.56300.27170.3586-0.03090.0262-0.00930.25540.39740.0925-0.4645
0.240.0021-0.2822-0.3997-0.04990.55830.27170.3586-0.03090.0262-0.00930.25600.39970.0925-0.4668
0.260.0021-0.2807-0.3973-0.05570.55020.27170.3586-0.03090.0262-0.00930.25750.40210.0925-0.4692
0.280.0021-0.2782-0.3950-0.06490.53870.27170.3586-0.03090.0262-0.00930.26000.40440.0925-0.4715
0.300.0021-0.2748-0.3930-0.07760.52400.27170.3586-0.03090.0262-0.00930.26340.40640.0925-0.4735
0.320.0021-0.2706-0.3914-0.09340.50670.27170.3586-0.03090.0262-0.00930.26760.40800.0925-0.4751
0.340.0021-0.2657-0.3903-0.10540.49350.27170.3586-0.03090.0262-0.00930.27250.40910.0861-0.4826
0.360.0021-0.2602-0.3899-0.10540.49310.27170.3586-0.03090.0262-0.00930.27800.40950.0656-0.5035
0.380.0021-0.2545-0.3901-0.10540.49330.27170.3586-0.03090.0262-0.00930.28370.40930.0440-0.5249
0.400.0021-0.2486-0.3911-0.10540.49430.27170.3586-0.03090.0262-0.00930.28960.40830.0220-0.5459
0.420.0021-0.2429-0.3929-0.10540.49610.27170.3586-0.03090.0262-0.00930.29530.40650.0006-0.5654
0.440.0021-0.2377-0.3955-0.10540.49870.27170.3586-0.03090.0262-0.00930.30050.4039-0.0190-0.5824
0.460.0021-0.2332-0.3988-0.10540.50200.27170.3586-0.03090.0262-0.00930.30500.4006-0.0358-0.5960
0.480.0021-0.2297-0.4028-0.10540.50600.27170.3586-0.03090.0262-0.00930.30850.3966-0.0489-0.6051

First 25 of 300 rows. Every row is one 20 ms control tick: fourteen servo position targets in radians, the whole 6 s table in commands_open_loop.csv.

The measured neutral pose the table rides on

Mean servo targets over ticks 100 to 299 of the trained standing policy on the flat floor, three seeds. The LLM's gait is written as offsets from this column, because offsets from HOME fall over in under a second.

jointHOME (rad)measured standing target (rad)delta
left_hip_yaw0.00000.0021+0.0021
left_hip_roll-0.0873-0.2674-0.1801
left_hip_pitch-0.4579-0.4073+0.0506
left_knee-0.0049-0.1054-0.1005
left_ankle0.45300.5105+0.0575
neck_pitch0.34910.2717-0.0774
head_pitch0.34910.3586+0.0095
head_yaw0.0000-0.0309-0.0309
head_roll0.00000.0262+0.0262
right_hip_yaw0.0000-0.0093-0.0093
right_hip_roll0.08730.2708+0.1835
right_hip_pitch0.45790.3921-0.0658
right_knee0.00490.0925+0.0876
right_ankle-0.4530-0.4592-0.0062

Tuning grids, in full

Open loop (A):

72 grid points, flat floor, seeds 0 to 2 (score = 100 + metres if standing at 6 s, else seconds survived + metres)
fAKRlscorestandingtravelledfell at (s)
1.50.050.3-0.082.1720/30.1322.12, 1.92, 2.08
1.50.050.3-0.042.1370/30.1312.1, 1.88, 2.04
1.50.050.30.042.0310/30.1311.98, 1.82, 1.9
1.50.050.30.082.0250/30.1311.94, 1.82, 1.92
30.050.3-0.082.0150/30.1351.84, 1.84, 1.96
30.050.3-0.041.9680/30.1341.82, 1.8, 1.88
20.050.30.081.9350/30.1351.82, 1.76, 1.82
30.050.30.041.9330/30.1331.78, 1.78, 1.84
20.050.30.041.9290/30.1351.8, 1.76, 1.82
20.050.3-0.081.9270/30.1341.84, 1.74, 1.8
30.050.30.081.9190/30.1321.76, 1.76, 1.84
1.50.050.15-0.081.9150/30.1351.84, 1.72, 1.78
20.050.3-0.041.9140/30.1341.8, 1.74, 1.8
1.50.10.3-0.081.9100/30.1301.82, 1.7, 1.82
1.50.050.150.081.9050/30.1311.8, 1.72, 1.8
20.050.15-0.041.9010/30.1341.78, 1.74, 1.78
1.50.050.150.041.8980/30.1311.8, 1.72, 1.78
1.50.050.15-0.041.8940/30.1341.78, 1.72, 1.78
30.050.15-0.081.8940/30.1341.76, 1.74, 1.78
30.050.150.041.8870/30.1341.76, 1.72, 1.78
20.050.150.081.8850/30.1381.74, 1.72, 1.78
20.050.150.041.8830/30.1361.76, 1.72, 1.76
1.50.10.3-0.041.8810/30.1281.8, 1.68, 1.78
1.50.150.3-0.041.8810/30.1341.78, 1.68, 1.78
20.050.15-0.081.8800/30.1331.76, 1.72, 1.76
30.050.15-0.041.8750/30.1351.74, 1.72, 1.76
30.050.150.081.8730/30.1331.76, 1.7, 1.76
1.50.150.3-0.081.8620/30.1361.76, 1.66, 1.76
1.50.10.30.041.8610/30.1281.78, 1.66, 1.76
1.50.10.30.081.8430/30.1291.76, 1.64, 1.74
1.50.150.30.041.8430/30.1371.74, 1.64, 1.74
30.10.15-0.081.8100/30.1371.68, 1.66, 1.68
1.50.10.15-0.081.8080/30.1351.72, 1.62, 1.68
1.50.150.15-0.081.8070/30.1401.72, 1.6, 1.68
1.50.150.30.081.8050/30.1391.7, 1.6, 1.7
30.10.3-0.081.8010/30.1351.64, 1.66, 1.7
30.10.15-0.041.7960/30.1361.66, 1.64, 1.68
1.50.10.150.081.7870/30.1341.7, 1.6, 1.66
30.10.3-0.041.7870/30.1331.64, 1.64, 1.68
1.50.10.15-0.041.7860/30.1331.68, 1.62, 1.66
20.10.15-0.041.7810/30.1341.64, 1.62, 1.68
30.10.150.041.7760/30.1361.64, 1.62, 1.66
20.10.15-0.081.7730/30.1331.64, 1.62, 1.66
1.50.10.150.041.7720/30.1321.66, 1.6, 1.66
30.150.15-0.081.7650/30.1381.62, 1.6, 1.66
20.10.150.081.7620/30.1361.62, 1.6, 1.66
30.10.150.081.7620/30.1351.6, 1.62, 1.66
20.10.150.041.7550/30.1351.62, 1.6, 1.64
30.10.30.041.7540/30.1341.62, 1.6, 1.64
20.150.15-0.081.7520/30.1391.62, 1.58, 1.64
20.150.3-0.081.7500/30.1361.64, 1.56, 1.64
1.50.150.150.081.7480/30.1411.64, 1.56, 1.62
20.10.30.081.7480/30.1351.62, 1.58, 1.64
30.10.30.081.7470/30.1331.62, 1.58, 1.64
20.10.3-0.081.7460/30.1321.64, 1.58, 1.62
20.10.3-0.041.7460/30.1331.62, 1.58, 1.64
20.10.30.041.7410/30.1341.62, 1.58, 1.62
1.50.150.150.041.7400/30.1401.62, 1.56, 1.62
20.150.3-0.041.7390/30.1391.62, 1.56, 1.62
30.150.15-0.041.7380/30.1381.6, 1.58, 1.62
1.50.150.15-0.041.7360/30.1361.64, 1.56, 1.6
20.150.150.081.7360/30.1431.6, 1.56, 1.62
20.150.15-0.041.7280/30.1421.6, 1.56, 1.6
20.150.30.041.7260/30.1391.62, 1.54, 1.6
30.150.150.041.7260/30.1391.58, 1.56, 1.62
30.150.3-0.081.7250/30.1391.58, 1.56, 1.62
20.150.150.041.7160/30.1431.58, 1.54, 1.6
30.150.3-0.041.7130/30.1401.58, 1.54, 1.6
30.150.150.081.7070/30.1401.54, 1.56, 1.6
20.150.30.081.7010/30.1411.58, 1.52, 1.58
30.150.30.041.6810/30.1411.54, 1.52, 1.56
30.150.30.081.6750/30.1411.52, 1.52, 1.56

Balance law (B), on top of the best A gait:

27 grid points, flat floor, seeds 0 to 2 (score = 100 + metres if standing at 6 s, else seconds survived + metres)
kpkrkdscorestandingtravelledfell at (s)
-0.40.303.1900/3-0.0572.82, 2.86, 4.06
-0.4002.9020/3-0.0582.84, 2.88, 3.16
-0.4-0.30.022.8930/3-0.0542.5, 3.48, 2.86
-0.400.022.8850/3-0.0552.52, 3.56, 2.74
-0.200.052.7890/30.0362.76, 2.48, 3.02
-0.40.30.022.7790/3-0.1412.56, 3.58, 2.62
-0.20.30.052.7760/30.0362.76, 2.52, 2.94
-0.4-0.302.7700/3-0.0562.66, 2.78, 3.04
-0.2-0.30.052.7640/30.0382.88, 2.46, 2.84
-0.2-0.30.022.6670/30.1272.82, 2.24, 2.56
-0.20.30.022.6220/30.1282.66, 2.26, 2.56
-0.200.022.6210/30.1272.76, 2.26, 2.46
-0.400.052.4760/3-0.1382.44, 2.78, 2.62
-0.2-0.302.4700/30.1302.54, 2.16, 2.32
-0.40.30.052.4630/3-0.1372.42, 2.84, 2.54
-0.2002.4230/30.1292.38, 2.14, 2.36
-0.4-0.30.052.4210/3-0.1392.44, 2.68, 2.56
-0.20.302.4150/30.1282.42, 2.1, 2.34
-0.60.302.3030/3-0.1372.32, 2.58, 2.42
-0.6-0.302.2890/3-0.1382.36, 2.52, 2.4
-0.6-0.30.022.2860/3-0.1342.36, 2.48, 2.42
-0.6002.2820/3-0.1382.36, 2.48, 2.42
-0.60.30.052.2660/3-0.1272.34, 2.46, 2.38
-0.60.30.022.2600/3-0.1332.32, 2.48, 2.38
-0.600.022.2590/3-0.1342.32, 2.5, 2.36
-0.600.052.2590/3-0.1282.34, 2.42, 2.4
-0.6-0.30.052.2450/3-0.1292.32, 2.42, 2.38

Limitations, stated plainly

What the LLM was actually useful for

Everything in the post's last sentence. Over the same afternoon the model wrote the terrain generator, the kinematic sign probe (which joint direction lifts which foot), the episode harness, the perturbation protocol, the two controls, and the analysis on this page. It found the HOME-pose instability and the 0.2 m/s dead zone, both of which would have quietly corrupted a naive comparison. Earlier this month, in the same bench, it spent about 50,000 episodes searching for stair-climbing motions for this robot and its most valuable output was finding that the staircase itself was broken. Planning, instrumentation, and review: yes. The 50 Hz loop: no.

Reproduce it

git clone https://github.com/craigm26/duckbench && cd duckbench/sim && npm install
cp -r ../../llm-legged-control/sim malik     # or use sim/malik in duckbench at ee7c71d
node malik/probe.mjs      # joint sign conventions
node malik/diag.mjs       # the HOME-pose control and the policy's command sweep
node malik/diag2.mjs      # measures neutral.json, ledge limit
node malik/run.mjs        # tuning grids, evaluation, results.json, commands_open_loop.csv

Node v22.23.2, onnxruntime-node 1.29.0, mujoco 3.1.16. Every episode is deterministic given its seed; the reported numbers are what run.log shows.

Data

References

  1. Ashish Kumar, Zipeng Fu, Deepak Pathak, Jitendra Malik. RMA: Rapid Motor Adaptation for Legged Robots. RSS 2021. project page, arXiv:2107.04034.
  2. Ananye Agarwal, Ashish Kumar, Jitendra Malik, Deepak Pathak. Legged Locomotion in Challenging Terrains using Egocentric Vision. CoRL 2022, best systems paper. project page, arXiv:2211.07638.
  3. Ashish Kumar, Zhongyu Li, Jun Zeng, Deepak Pathak, Koushil Sreenath, Jitendra Malik. Adapting Rapid Motor Adaptation for Bipedal Robots. IROS 2022. project page, arXiv:2205.15299.
  4. Pollen Robotics. microduck_rl: RL training environments for Microduck (mjlab, PPO, Apache-2.0). github.com/pollen-robotics/microduck_rl; the 15 mm step cap and the "~1-2 cm" foot lift are in src/mjlab_microduck/tasks/microduck_velocity_env_cfg.py. Runtime: github.com/pollen-robotics/microduck.
  5. Emanuel Todorov, Tom Erez, Yuval Tassa. MuJoCo: A physics engine for model-based control. IROS 2012. mujoco.org.
  6. Craig Merry. duckbench: the Microduck bench this ran in. github.com/craigm26/duckbench.
  7. The post this answers: @JitendraMalikCV on X, 7 September 2026, 9:03 PM.