G1 ATL Stomp β ONNX Whole-Body Control Policy
Fine-tuned SONIC whole-body control policy for the Unitree G1 humanoid (29 DOF) that performs ATL Stomp β a ~5-second street-dance routine with rapid stomp footwork, a single-leg hop phase, a deep squat with torso roll, and fast arm swings.
The stock SONIC base model fails this move: in the paired rollout below it loses balance and falls (5.06 s in), ending on the floor. The released policy completes the whole routine in free dynamics without falling and finishes standing at rest, on both the original-tempo clip and the 1.5Γ slowed variant it was trained on.
Results
Free-dynamics rollout on the same reference β the original-tempo clip plus a
settle-to-stance tail (550 control steps @ 50 Hz) β every episode termination
except time_out disabled, so nothing is masked by an episode reset:
| Metric | Stock SONIC | this release |
|---|---|---|
| Fall onset | 5.06 s | none |
| Root height, minimum | 0.077 m (on the floor) | 0.654 m |
| Tracking error, mean / max | 2901 / 4643 mm | 475 / 753 mm |
The same policy on the 1.5Γ slowed reference plus a settle-to-stance tail runs all 544 control steps β root-height minimum 0.663 m, mean tracking error 96 mm β and ends the clip standing at rest.
See atl_stomp_before_after_en.mp4 in the companion GitHub repo
(qjwdlwjdl/G1-ATL-Stomp) for a
side-by-side render of both policies on the same reference.
Files
| File | Description |
|---|---|
model_step_002000_g1.onnx |
G1 policy (actor) β primary deployment artifact |
model_step_002000_encoder.onnx |
observation encoder |
model_step_002000_decoder.onnx |
action decoder |
model_step_002000_smpl.onnx |
SMPL encoder head |
model_step_002000_teleop.onnx |
teleop encoder head |
Exported with the official gear_sonic pipeline
(eval_agent_trl.py +export_onnx_only=true).
Training
- Base model: nvidia/GEAR-SONIC (SONIC release checkpoint, universal-token whole-body controller).
- Method: PPO (TRL) motion tracking on a single street-dance clip, 2,048 parallel environments in Isaac Lab.
- Stage V8 (this release): 2,000 iterations, actor LR 4e-6, warm-started from
stage V6 and trained on the repaired
atl_stomp_v7motion.
Three findings drove the final stage, each verified by rollout rather than by training reward:
- Termination thresholds, not the policy, were the bottleneck. The stock
training terminations (
tracking/base_adaptive_strict_ori_foot_xyz) end an episode once the pelvis drifts 0.15 m or rotates 0.2 rad from the reference. On a single dynamic motion that fires the moment the policy starts to struggle, so PPO never sees β and never learns β the recovery region. Relaxing them (0.5 m / 1.2 rad / 0.4 m body, adaptive tightening off) moved the fall from 43 % to 90 % of the slowed clip within 500 iterations. - Long runs regress. At the stock 1e-5 learning rate the policy peaked around iteration 4,000 (90 % of the slowed clip) and had degraded back to 43 % by iteration 6,000. The final stage therefore warm-starts from the peak and refines at 4e-6.
- The reference motion had a corrupted track.
pose_aa[:, 0](root rotation) disagreed with the cleanroot_rotquaternion by exactly 120Β° on 4 of 267 frames, while agreeing to within 0.05Β° everywhere else. Each of those frames teleports the reference (every tracked body jumps 10β56 cm in a single 20 ms step).atl_stomp_v7rebuilds that column fromroot_rot.
Usage
The policy is compatible with the GR00T-WholeBodyControl deployment stack (Unitree G1, 29-DOF joint interface). Observations follow the SONIC universal-token policy interface (proprioception + motion-tracking command features at 50 Hz; actions are 29-DOF joint position targets).
Training data
Motion tracking on the in-house ATL Stomp motion clip β see the companion
dataset repo
(g1-atl-stomp-motion).
Motion data captured in-house from a user-provided street-dance video; no
third-party motion data used.
Credit
Motion Data by Bones Studio.
License
Fine-tuned weights released under Apache-2.0. Base model: NVIDIA GEAR-SONIC (Apache-2.0).
Model tree for oniichan521/g1-atl-stomp-policy
Base model
nvidia/GEAR-SONIC