# r16_h_ankle — Report 16 SKY SLATE H-ANKLE — the REAL measured ankle (rs_kp 8.0/1.5). WALKS: 0.540 m/s @ cmd 1.2. Resolves the deploy-critical ankle unknown positively. | | | |---|---| | Branch | `test/SjohnU_remodel_actuators` | | Checkpoint | `model_9999.pt` (10,000 iters, completed) | | Envs / seed | 4096 / 42 | | rsl-rl | 5.0.1 (native actor/critic state_dict) | | wandb | `ijog4us3` (project rc_humanoid_rl) | | Hardware | AWS us-east-2, 1x L40S (g6e.xlarge) | ## Report-16 SKY SLATE — measured across the command sweep (physical units) All arms branch off H (`r16_deploy`) + exactly one change, 10k iters, 4096 envs, seed 42, branch `test/SjohnU_remodel_actuators`. Measured with `scripts/rsl_rl/measure_gait.py` (1000 steps x 64 envs) at three forward commands. **Physical m/s, not reward-term tvel** — tvel lied repeatedly (e.g. footlift scored tvel 1.19 at 0.001 m/s). | arm | change vs H | @0.5 | @0.8 | @1.2 | lean@1.2 | walks? | |---|---|---|---|---|---|---| | **`r16_final_act`** | action smoothing (action_rate -0.3) | 0.407 | 0.697 | **0.977** | 0.2° | ✅ fastest | | `r16_h2_noar` | action_rate -0.3 -> -0.12 | 0.388 | 0.644 | **0.888** | 1.6° | ✅ | | `r16_h_ankle` | ankle rs_kp 2.0/0.15 -> 8.0/1.5 (REAL ankle) | 0.222 | 0.382 | **0.540** | 3.4° | ✅ | | `r16_h_cmd` | limit_ranges lin_vel_y (-1.0,0.5)->(-0.2,1.2) | 0.090 | -0.035 | -0.630 | — | ❌ | | `r16_final_phys` | action_rate -0.12 + 100x soft_landing/10x joint_acc | — | — | — | — | 🔴 suicidal | ### What the slate establishes 1. **The command cap WAS the speed ceiling.** Every prior walker measured ~0.4 m/s because `limit_ranges` capped the forward command at 0.5. Given a higher command, the good walkers scale cleanly: `final_act` 0.41 -> 0.70 -> 0.98 m/s. `final_act` @1.2 (0.977 m/s, 0.2 deg lean) is the FASTEST walker of the whole campaign, beating `upright` (0.634) and `crouch_nogait` (0.572). 2. **But widening the command range DURING training (h_cmd) backfired.** `h_cmd` opened the range to (-0.2, 1.2) and never learned to walk forward — 0.090 m/s at 0.5, and it goes BACKWARD (-0.63 m/s) when commanded +1.2. Read together with (1): the right move is to train with the 0.5 cap and command higher AT DEPLOY, not to widen the training range. 3. **The real measured ankle walks (h_ankle).** Every prior walker used a PLACEHOLDER ankle; the only policy with the real ankle was bigstep, which couldn't walk -- a confound that sat between sim and hardware. `h_ankle` resolves it: the real rs_kp 8.0/1.5 ankle walks (0.222/0.382/0.540 m/s), at ~55% of `final_act`'s speed. The deploy story holds. 4. **action_rate -0.3 vs -0.12 is not decisive; the PHYSICAL-penalty overshoot is fatal.** `final_act` (-0.3) and `h2_noar` (-0.12) both walk well, with -0.3 marginally faster. The exploration-tax audit predicted -0.12 would clearly win; measured, it did not. What IS fatal is `final_phys`: keeping action_rate at -0.12 but raising soft_landing 100x (-1e-4 -> -0.01) and joint_acc 10x made LIVING net-negative, so the policy optimized by terminating early (reward rose -24.7 -> -18.2 as episode length fell 46 -> 22). A textbook suicidal policy. ## Files - `policy.pt`, `policy.onnx` — exported via `scripts/rsl_rl/play_export.py` - `deploy.yaml` — deploy config (obs/action layout, gains, 50 Hz) - `model_9999.pt` — raw rsl-rl checkpoint