upstair1104 β H2 stair-climbing policy (20 cm Γ 6 treads, up)
MuJoCo / stable-baselines3 PPO policy trained to climb a 20 cm Γ 6 tread
staircase with the Unitree H2 lower body plus 3-DoF waist.
Files
| file |
description |
h2_stairs_waist_ppo.zip |
SB3 PPO policy (MLP 256Γ256) |
h2_stairs_waist_ppo.curriculum.json |
training contract: obs/action layout, servo gains, reward weights, curriculum state |
Interface
| item |
value |
| observations |
86 |
| actions |
15 (12 leg joints + waist yaw/roll/pitch) |
| model |
MuJoCo surrogate h2_lowerbody.xml (59 kg) |
| control dt |
0.01 s |
Measured on 20 cm Γ 6 treads (20 episodes, deterministic)
success 0/20 | mean max x 2.402 m | mean 4.85 / 6 treads | summit 7/20
| treads reached |
episodes |
| 6 (summit) |
7 |
| 5 |
7 |
| 4 |
3 |
| 3 |
2 |
| 2 |
1 |
success additionally requires standing still on the landing past x > 3.0 m for
0.2 s, which the policy does not reach yet (best run 2.90 m).
Training
| item |
value |
| steps |
34,079,296 |
| init |
continued from the 24 M-step 20 cm run |
| lr / ent_coef |
1e-4 / 0.001 |
| envs |
16 |
| code |
origin/codex/h2-stair-clearance @ 3d9ae2d + local edits |
Local edits that mattered:
action_scales knee 1.8 rad (was 1.1 of a 2.53 rad range) β unlocked the
2nd and 3rd treads;
- dense stair rewards:
stair_advance +4 (pelvis past the tread edge),
stair_skip β2 (no two-tread jumps), stair_stall β3 (4 s without progress),
completion scaled by tread depth (1.0 / 1.6 / 2.2 / β¦), stair_lift 2.0
with a +8 cm swing target;
- landing costs softened:
landing_impact β0.3, base_vertical_motion β0.3,
fall_event β3.
Load
from stable_baselines3 import PPO
model = PPO.load("h2_stairs_waist_ppo.zip")
action, _ = model.predict(obs, deterministic=True)