Download r16_latency_g200/README.md from ETHRC-humanoid/rc-humanoid-locomotion: direct link, hf CLI and curl.
- Browser
- Download file 4.11 kB
-
https://huggingface.co/ETHRC-humanoid/rc-humanoid-locomotion/resolve/main/r16_latency_g200/README.md
- Command line
-
hf download hf://ETHRC-humanoid/rc-humanoid-locomotion/r16_latency_g200/README.md
-
curl -L -o README.md https://huggingface.co/ETHRC-humanoid/rc-humanoid-locomotion/resolve/main/r16_latency_g200/README.md
r16_latency_g200 — Report 16 one-change-at-a-time walker
Measured: the gains are free.:0.342 m/s — ✅ walks (= arm A)
A.2 — control + ~65 ms latency + leg gains 180/5→200/10. Paired with arm A, it isolates the gain change from the latency
| Task | ETHRC-humanoidv1-walk-r16-latency-g200-psu-v0 |
| Branch | test/SjohnU_remodel_actuators @ 8f9f058 |
| Checkpoint | model_9999.pt (10,000 iters, completed) |
| Envs / seed | 4096 / 42 |
| rsl-rl | 5.0.1 (native actor/critic state_dict) |
| Actions | 26 @ 50 Hz |
| wandb | k28tg52k |
| Hardware | AWS us-east-2, 1x L40S (g6e.xlarge) |
Report 16: one-change-at-a-time, measured in physical units
All arms = u4_walk_crouch_real + the r16 shared layer (25% standing envs, track_lin_vel_xy
1.5 -> 2.2) + exactly one further change. 10k iters, 4096 envs, seed 42, branch
test/SjohnU_remodel_actuators @ 8f9f058.
Measured with scripts/rsl_rl/measure_gait.py (1000 steps x 64 envs, forward command forced).
Physical units only. Reward-term values are NOT comparable across configs with different
weight/std, and they actively mislead here: r16_footlift posts the best curves of the entire
set (tvel 1.194, mean_reward 11.79) while moving 0.001 m/s.
| policy | change | cmd | fwd m/s | cadence | lean | walks? |
|---|---|---|---|---|---|---|
r16_upright @0.8 |
upright price + spawn-tilt DR | 0.8 | 0.634 | 3.30/s | 1.5° | ✅ best |
crouch_nogait |
(ref) | 0.5 | 0.572 | 8.14/s | 5.3° | ✅ |
r16_upright @0.5 |
upright price + spawn-tilt DR | 0.5 | 0.406 | 3.37/s | 0.7° | ✅ |
u4_walk_crouch_real |
(ref, 22k) | 0.5 | 0.397 | 3.48/s | 9.9° | ✅ |
r16_latency |
+~65 ms delay | 0.5 | 0.347 | 3.39/s | 13.3° | ✅ |
r16_latency_g200 |
+~65 ms + legs 200/10 | 0.5 | 0.342 | 3.47/s | 10.7° | ✅ |
r16_control |
— (baseline) | 0.5 | 0.026 | 0.24/s | 9.2° | ❌ |
u4_walk_bigstep_v1 |
(ref, 4 changes, 25k) | 0.5 | 0.009 | 1.71/s | 20.9° | ❌ |
r16_footlift |
clearance 1.0@0.15 -> 2.4@0.17 | 0.5 | 0.001 | 0.28/s | 11.9° | ❌ worst |
The rule: standing must be made untenable
The policy's default attractor is a stand-and-micro-correct local optimum — that is what
r16_control is stuck in at 10k (0.026 m/s, 0.24 steps/env/s). Every result follows from
whether a change makes standing tenable or not:
- Makes standing untenable -> a real gait emerges:
latency(cannot twitch-correct at 50 Hz -> 0.347), spawn-tilt DR (must recover every reset -> 0.406), or simply training to 22k (crouch_real-> 0.397; it only learns to translate between 15k and 22k). - Enriches standing -> it never walks:
footlift(0.001, worse than its own control) and a slower gait clock (0.004).
Latency is load-bearing, not a deploy tax. control + latency walks at 0.347 m/s where the
identical control marches at 0.026 -- same code, same 10k iters, one knob, 14x the stepping.
Not a confound: the crouch-envelope chain already swaps legs_waist to IdealPDActuatorCfg and
moves torque-speed into the PhysX spawn func; _apply_latency_only turns that into a DelayedPD
with identical effort/velocity limits, gains and armature, and never touches spawn.func.
Leg gains 180/5 -> 200/10 are free (0.342 vs 0.347).
Foot-lift is what broke bigstep -- bigstep carried exactly this layer. It perversely reached
lower clearance than control (0.1003 vs 0.1567 m) while paying 2.4x for height: it did not lift
higher, it stopped stepping.
Lean is not causal. r16_latency walks at 13.3° BACK, r16_upright at 0.7°, bigstep fails
at 20.9°. Lean predicts nothing -- though pricing it still helps, via the spawn-tilt/untenable
-standing mechanism rather than via the lean itself.
Files
policy.pt,policy.onnx— exported viascripts/rsl_rl/play_export.pydeploy.yaml— deploy config (obs/action layout, gains, 50 Hz)model_9999.pt— raw rsl-rl checkpoint (re-export / resume)