G1 Dance RL: policies and Schuhplattler reference motion
Reinforcement-learning dance policies for the Unitree G1 (29 DoF), trained in Isaac Lab and tested in Isaac Lab and MuJoCo (sim-to-sim). The experiment asks whether a policy that learns more dances becomes more robust. Code, training setup and full results: github.com/OyunbatBatzorig/g1-dance-rl
Simulation only. These policies have not been run on a real robot. Do not deploy them on hardware without your own testing and safety measures.
Policies (policies/)
Each folder holds an rsl-rl checkpoint (model_*.pt, actor-critic MLP 512-256-128, ELU) and the exact
params/env.yaml and params/agent.yaml used for training. Task ids are registered by the GitHub repository
(prefix Unitree-G1-29dof-Mimic-Schuhplattler-).
| Folder | Task | Dances | Iterations | Action | MuJoCo success (64 randomized runs) |
|---|---|---|---|---|---|
p1_dance102 |
Residual-DR-D102-Wide |
Dance-102 | 5,000 | residual | 92% |
p2_dance102_gangnam |
Residual-DR-D102-Wide-Multi2 |
+ Gangnam Style | 6,000 | residual | 97% / 97% |
p3_three_dances_residual |
Residual-DR-D102-Wide-Multi3 |
+ Schuhplattler v1 | 10,000 | residual | 97% / 100% / 36% |
p3_three_dances_full_v2 |
MimicAction-DR-D102-Multi3Bal |
Dance-102, Gangnam, Schuhplattler v2 | 10,000 | full | 95% / 95% / 70% |
schuhplattler_full |
MimicAction-DR-Sch |
Schuhplattler v1 | 3,000 | full | 91–95% |
schuhplattler_v2_full |
MimicAction-DR-SchBal2 |
Schuhplattler v2 | 3,000 | full | 88–95% |
- Residual action:
q_des = q_ref[k+1] + clip(a · scale, ±1.0 rad), PD velocity target = reference joint velocity. - Full action:
q_des = q_default + scale · a(unitree_rl_lab default). - Observation (154): reference joint position and velocity (29 + 29), reference torso orientation in the robot torso frame (6), pelvis angular velocity (3), joint position minus default (29), joint velocity (29), last action (29). Isaac Lab joint order. 50 Hz policy, 200 Hz physics.
- Training randomization (DR v2): Kp/Kd ×0.75–1.25, link masses ×0.7–1.3, friction 0.3–2.0, latency 0–20 ms, sensor noise, random pushes. One seed (42) per policy.
Play a policy in MuJoCo with scripts/sim2sim/sim2sim_dance.py from the GitHub repository
(--action wide for residual, --action mimic for full).
Motions (motions/)
Schuhplattler (Bavarian folk dance) retargeted to the G1 from a tutorial video: video → GVHMR → GMR → ground-contact fix, added ending (blend to the default pose), and for v2 a balance fix (pelvis shifted over the stance foot with leg IK, the 10.4 s hop replaced by a short double support).
| File | Content |
|---|---|
schuhplattler_v1_30hz.csv / _50hz.npz |
first reference (14.37 s) |
schuhplattler_v2_30hz.csv / _50hz.npz |
balance-fixed reference (14.33 s) |
CSV: one row per frame, root position (3), root quaternion xyzw (4), 29 joint angles in Unitree SDK order
(unitree_rl_lab mimic format). NPZ: made with unitree_rl_lab scripts/mimic/csv_to_npz.py (50 Hz, Isaac Lab
joint order, with body poses and velocities).
Dance-102 and Gangnam Style motions are not included: get them from unitree_rl_lab (Apache-2.0).
License and credits
CC BY-NC 4.0 (non-commercial). The Schuhplattler motion is derived from GVHMR output, whose license allows research and non-commercial use only; GVHMR uses SMPL-X body models (not included).