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)   # obs 86 -> action 15
Downloads last month

-

Downloads are not tracked for this model. How to track
Video Preview
loading