GR00T-N1.7 Γ GEAR-SONIC β prompt-conditioned whole-body motion for Unitree G1 (V2 β cold-start fix)
β οΈ Proof-of-concept β read first
This model memorizes 8 prompts (7 motions + stand), augmented to 54 episodes. Generalization to new prompts / new motions is untested (no held-out split). Demo clips run with deviation/fall terminations relaxed (
RELAX=1), so they show prompt β token tracking, not validated balance. It is not a deployable general humanoid VLA. Full caveats in Honest scope & limitations.
What's new in V2 vs V1:
V1's one-shot motions (kick / walk / jump) could not self-start from a standing rest pose β
the memoryless single-frame policy couldn't tell "about to kick" from "just stood up", so they froze
and needed a bootstrap (replay dump tokens to enter the motion). V2 removes the bootstrap: all
three one-shots now self-initiate from cold stand (stochastically β see results). The fix is a
three-part combination recipe (data + loss + idle), not an architecture change:
- Physical WBC-rollout augmentation β instead of splicing token frames (non-physical), each
[1 s of another motion's momentum] ++ [target onset]token sequence is replayed through the SONIC WBC and re-recorded as(token, ego_rgb, proprio). This covers the deployment "switch-prompt-from-any-state" distribution with physically-valid transitions. Only rollouts that actually launched (not frozen/fell) are kept; all*_from_kicksources are dropped (kick's high foot-lift momentum contaminates the target onset). - Onset-loss-weighting β the flow-matching loss upweights the first ~12 token positions, fixing
the abrupt high-amplitude
kickonset that data alone didn't repair. - Stand episodes β 4
"stand"episodes so the policy emits a natural idle instead of drifting into out-of-distribution motion when no action prompt is active.
One prompt-conditioned model.
prompt β GR00T β 64-d FSQ token β SONIC.decode β 29-DoF G1 motion. Skills live in the token space; the pretrained SONIC WBC supplies balance/recovery.
π Code, training & validation scaffolding: vitorcen/LeSONIC
(scripts/gear_sonic_live_demo.sh, scripts/sonic_build_aug_transitions.py,
scripts/sonic_merge_aug_to_lerobot.sh, gear_sonic/data/vla_live_injector.py).
π₯ Closed-loop demos (GR00T-in-the-loop, no C++/DDS)
Each clip is the live closed loop: every control step the policy reads the G1's ego camera + proprioception + the prompt, GR00T predicts a 40-step token chunk over ZMQ, and SONIC's WBC decodes it to joint targets. Zero bootstrap β every motion is driven live from step 0.
β οΈ Clips run with
RELAX=1(deviation/fall terminations at threshold 99 = effectively off), so the full motion plays without the normal 1β2 s deviation reset. They demonstrate prompt β token tracking, not fall-resistance (untested under strict termination).
β Cold-start onset β switch motions at runtime, no restart, no bootstrap
A single persistent live session: the robot stands idle, then the prompt is switched
(squat β jump β dance β walk β lunge β kick β macarena β¦) by writing a control file β the next
control step picks it up. This is the V2 headline: walk / jump / kick start from the
standing rest pose with no bootstrap injection.
Action sequencing β flow2, all deploy actions chained in one looping session
The prompt is switched over time so the G1 chains every deploy action and loops, with no GUI/server restart; the robot walks to a new spot and performs the next action there. Every segment is pure live (zero replay).
Run it:
GR00T_CKPT=<this_checkpoint> bash scripts/gear_sonic_live_demo.sh @flow2.
Results β and how to read them
βΉοΈ Measured on the training distribution with no held-out split β these quantify fit, not generalization. Cold-start launch rates are over a small number of trials (n = 2β3) and are stochastic (the memoryless policy has no phase signal, so onset is not deterministic).
Cold-start launch from a standing rest pose β four models, same harness, same RELAX=1, prompt switched at idle (LAUNCH = the motion actually initiates and is not frozen / fallen):
| model | recipe | kick | walk | jump |
|---|---|---|---|---|
| V1 8k baseline | clean 7-motion data | 0 | 0 | 0 (all freeze without bootstrap) |
| onsetw-6000 | onset-loss-weighting only | 2/3 | 1/3 | 0/3 |
| aug-8000 | physical augmentation only | 0/3 | 3/3 | 1/3 |
| V2 (this, aug2-8000) | augmentation + onset-weight + stand | 1β2 / 2 | 2 / 2 | 2 / 2 |
The single-approach models each fix part of the problem (onset-weight β strong kick; augmentation
β strong walk); the combination is the first model where all three one-shots launch from cold
stand. Honest: still stochastic (~50β100% per motion, not a deterministic 3/3); kick remains
the hardest (most abrupt, highest-amplitude single-leg onset).
- Self-sustaining motions (
squat,lunge,dance,macarena) run pure live and continue indefinitely, unchanged from V1. - Open-loop token MSE stays in the same regime as V1 (train-set reconstruction); checkpoint-8000 was selected by the open-loop MSE funnel + the closed-loop cold-start check above. There is no validation curve β selection is on training-distribution fit.
standidle: the 4 stand episodes are enough for the live sentinel idle, but not enough for a model-driven"stand"prompt (it still drifts) β the live demo injects a captured stand token at idle rather than routing"stand"through the model.
What this is
| Base | NVIDIA Isaac GR00T N1.7 (Gr00tN1d7), VLM backbone nvidia/Cosmos-Reason2-2B (frozen), action_horizon 40 |
| Task | prompt + ego-view + proprioception β action.motion_token (64-d FSQ) |
| Embodiment | unitree_g1_sonic (29-DoF G1 + projected gravity) |
| Decoder | GEAR-SONIC UniversalTokenModule.decode("g1_dyn", β¦) (released WBC checkpoint) |
| Training | DiT action head + projector fine-tuned, Cosmos VLM frozen; bf16, single RTX 4090, 8000 steps; onset-loss-weighting on the first ~12 token positions |
| Data | wsagi/SONIC-VLA-BonesSeed-V2 β 54 episodes / 12 630 frames: 7 base motions + physical WBC-rollout transition augmentation (LAUNCH-filtered, *_from_kick dropped) + 4 stand episodes |
| Weights | bf16, β 6.3 GB, 3 shards (training was bf16; fp32 re-save would only restore mixed-precision noise) |
β οΈ Honest scope & limitations
A proof-of-concept checkpoint, not a general humanoid VLA:
- Training-distribution only β generalization untested. 8 prompts memorized; new-motion / new-prompt / paraphrase generalization not evaluated.
- Memoryless single-frame policy (architectural). GR00T predicts a 40-step chunk from a single
obs frame β no history, no phase signal. V2's augmentation + onset-weighting mitigates the
cold-start freeze by teaching the onset distribution from many start states, but cannot make it
deterministic β that needs history conditioning (
n_obs_steps β₯ 2) or a phase input, which is future work. - FSQ token modelling caveat. The 64-d token is discrete (FSQ, 16 levels/dim); the head regresses it as a continuous flow-matching target and snaps to the grid at deploy. A discrete objective (per-dim CE) is the cleaner formulation (future work).
- Balance is the WBC's, not this model's. "Doesn't fall" in the demos is largely the pretrained SONIC controller; the VLA's contribution is not yet decoupled by ablation.
- Ego camera looks at the ground (pelvis-mounted, forward); the visual signal for pose is weak β the policy leans on proprioception + prompt.
- Not runnable standalone. Requires the GEAR-SONIC WBC checkpoint + the
unitree_g1_sonicembodiment config + the live injector + a running GR00T ZMQ server (GR00T and SONIC can't share a process β transformers version conflict). See the repo for env, ZMQ wire schema, and eval commands.
How to run (closed loop)
# 1. start the GR00T inference server (Isaac-GR00T venv) pointed at this checkpoint
python -m gr00t.eval.run_gr00t_server \
--model_path <this_checkpoint> --embodiment_tag unitree_g1_sonic --port 5555
# 2. drive SONIC's WBC live in the Isaac viewer (isaaclab env) β zero bootstrap
GR00T_CKPT=<this_checkpoint> bash scripts/gear_sonic_live_demo.sh @flow2 # chained loop
bash scripts/sonic_say.sh kick # switch the running session to any motion at runtime
Architecture
prompt ββ
ego cam ββΌββΊ GR00T N1.7 ββ(ZMQ)βββΊ 64-d motion_token βββΊ SONIC WBC decode βββΊ 29-DoF G1 (balanced)
proprio ββ (one model) (frozen controller)
Citation / links
- GEAR-SONIC WBC: https://github.com/NVlabs/GR00T-WholeBodyControl
- NVIDIA Isaac GR00T: https://github.com/NVIDIA/Isaac-GR00T
- Training & augmentation code: vitorcen/LeSONIC
- Downloads last month
- 31
Model tree for wsagi/GR00T-N1.7-G1-SONIC-BonesSeed-V2
Base model
nvidia/GR00T-N1.7-3B