G1 Kozak — SONIC fine-tuned for the prysiadka
A whole-body motion-tracking policy for the Unitree G1 (29 DoF), fine-tuned from NVIDIA's released SONIC checkpoint to perform the kozak (prysiadka) — the Ukrainian squat-kick, danced in a deep squat with the legs thrown out and recovered in alternation, without the hands touching the floor.
The stock model cannot do it. This one can.
| evaluation (90 kozak clips) | stock SONIC | this policy |
|---|---|---|
| against the conditioned reference | 0.0333 | 0.6333 |
| against raw motion capture | 0.0444 | 0.5333 |
Both reference sets are reported because the conditioned reference is our own preprocessing and the raw capture is not — the result does not depend on it. On 20 clips withheld from training, stock completes 0 of 20 under either reference.
Files
| file | |
|---|---|
kozak_n5_it14500.onnx |
59.7 MB · opset 13 · ir_version 7 · 114 nodes |
Signature:
input obs_dict float32 [1, 1770]
output action float32 [1, 29]
29 outputs = the G1's 29 actuated joints. The control loop runs at 50 Hz.
Using it
The observation vector is SONIC's universal-token whole-body tracking
observation, unchanged from the base model — this fine-tune touches neither the
architecture nor the observation space. Build it exactly as upstream does; see
GR00T-WholeBodyControl
(pinned commit aa263a8), whose deployment path consumes ONNX policies of this
shape.
import onnxruntime as ort
import numpy as np
sess = ort.InferenceSession("kozak_n5_it14500.onnx")
obs = np.zeros((1, 1770), dtype=np.float32) # build per upstream
action, = sess.run(["action"], {"obs_dict": obs}) # (1, 29)
Because it is a tracking policy, it needs a reference motion to track. It is not a text- or goal-conditioned controller.
How it was trained
Fine-tuned from sonic_release/last.pt with PPO in Isaac Lab 2.3.2 / PhysX:
- 340-clip mix — 90 kozak clips at 26.5% density, the remainder general motion acting as rehearsal
- 18,000 iterations at 4,096 parallel environments
- Architecture, observation space and termination conditions unchanged from the base model
- Checkpoint selected by 3-point local mean across the whole training curve rather than by peak, because a single checkpoint is not a measurement — the same run swings several points between adjacent saves
References are conditioned before training: floor-aligned to measured stance soles, stance feet planted, and time-warped where inverse dynamics shows the demand exceeding what the joint can supply. Raw kozak capture floats the feet ~2.7 cm and demands 2.03× rated hip-pitch torque on 42.5% of clips; tracking an unreachable target measures the target rather than the robot.
What it costs
Teaching a new skill degrades others. Measured on 500 clips stratified across 250 categories of the base model's own training distribution:
| stock | this policy | |
|---|---|---|
| general-capability retention | 0.9780 | 0.8960 |
That ~8-point loss is not spread evenly — it concentrates in the capability nearest the taught skill. Dance loses ~15 points; object handling loses ~4. If you fine-tune a whole-body tracking policy on a new skill, expect the bill to arrive on whatever the base model already did that most resembles it.
Limitations
- The trunk lean is saturated, not reproduced. G1's
waist_pitchspans only ±29.8°, and the conditioned kozak sits above 95% of that range on 69.8% of frames. "The G1 performs the kozak" means "the closest motion its kinematics admit." The tracking metrics cannot surface this, because the reference they score against carries the same limit. - Simulation only. Every number here is PhysX under one evaluation protocol. No hardware deployment has been attempted.
- It is a tracking policy, so it reproduces a reference; it does not generate the dance.
- Success is scored under strict termination settings (anchor position, anchor orientation, end-effector position). Looser settings give higher numbers that are not comparable to these.
Licence and attribution
- Base model: NVIDIA GR00T-WholeBodyControl / SONIC, used under its licence.
- Training data: BONES-SEED, gated, not redistributed. Motion Data by Bones Studio — https://bones.studio/
- No raw motion capture is included in or derivable from these weights.
Attribution for the motion data is required by its licence and applies to anything built on this policy.