Robotics
Safetensors
English
gr00t
gr00t-n1.7
vla
vision-language-action
humanoid
imitation-learning
diffusion-policy
unitree-g1
inspire-ftp
sonic-wbc

GR00T N1.7-3B Fine-Tune v7 β€” Unitree G1 "grab the bottle" (right hand, SONIC WBC, DP speedup-resampled dataset)

v7 fine-tune of NVIDIA GR00T N1.7-3B (paper) on a Unitree G1 humanoid driven by the SONIC whole-body controller.

Single-handed pick task ("grab the bottle", RIGHT hand). Trained at the CloudWalk Robotics Lab (CW-RL), 2026-06, on a 220-episode / 60,163-frame real-robot teleoperation dataset for the UNITREE_G1_SONIC embodiment. Released as a reference fine-tune for teams building manipulation policies on the GR00T + SONIC + MuJoCo/G1 stack.

What makes v7 different β€” a speedup-resampling reference baseline. v7's dataset is the fusion of the two source sets (the 105-ep set + the 115-ep "worst-positions" set β€” the same raw data v6 merged) processed by a new method: dynamic-programming (DP) resampling in the wrist's Cartesian space, targeting 3 mm of wrist travel per frame with a per-step merge cap max_K=40. The result keeps 38% of the merged original's samples (220 episodes, 60,163 frames, β‰ˆ51,000 training samples) β€” it speeds up the slow/near-stationary stretches of each demonstration while preserving the spatial trajectory. v7 deliberately does NOT apply the zero-wandering segment-removal curation used in v4/v5/v6 β€” it is a clean baseline meant to isolate the effect of the speedup resampling alone before stacking segment removal on top.

Predecessors: v2 (…-210ep-v2-finetune) β€” the former production champion (superseded by v10 …-371ep-v10-finetune, 12/12) (checkpoint-20000, 10/12) β€” v4 (…-417ep-v4-finetune) (radius-5, 6/12), v5 (…-314ep-v5-finetune) (radius-20, 9/12), v6 (…-502ep-v6-finetune) (merged radius-20, 8/12), and v1 (…-105ep-v1-finetune).

This is a behavior-cloning fine-tune of the full 3B model. Status: trained 2026-06-25, closed-loop eval complete (7/12) β€” only checkpoint-20000 is published (one checkpoint per repo, lineage storage policy); the highest knock-over rate in the family keeps v2 in production (see Evaluation).

Quick facts

Base GR00T-N1.7-3B β€” Qwen3-VL vision-language backbone + flow-matching diffusion-transformer (DiT) action head
Parameters 3.14 B total / 1.62 B trainable (51.5%)
Dataset cloudwalk-research/gr00t-g1-grab-bottle-right-hand-speedup-3mm-v1 β€” 220 episodes, 60,163 frames @ 50 Hz (~273 frames/ep), 640Γ—480 ego_view camera (no wrist cams); fusion of the 105-ep + 115-ep "worst-positions" sets, DP wrist-Cartesian speedup resampling (3 mm/frame, max_K=40), no segment removal (β‰ˆ38% of merged samples retained, β‰ˆ51,000 training samples)
Robot target Unitree G1 (29-DoF body) + Inspire FTP hands (7-DoF/hand: 6 finger joints + 1 grip pad, via InspireFTPGripMapper) + SONIC whole-body controller
Embodiment tag UNITREE_G1_SONIC (unitree_g1_sonic)
State space 43-D (left_leg 6 + right_leg 6 + waist 3 + left_arm 7 + left_hand 7 + right_arm 7 + right_hand 7)
Action space [40 Γ— 78] = 40-step horizon Γ— (64 motion_token + 7 left_hand_joints + 7 right_hand_joints)
Hardware 6Γ— NVIDIA B200 (sm_100 / Blackwell)
Mixed precision bf16
Optimizer AdamW, lr 1e-4 cosine, warmup_ratio 0.05, weight_decay 1e-5
Steps / batch 20,000 / global batch 48 (8 per GPU Γ— 6 GPUs); checkpoints saved every 10,000 β€” only checkpoint-20000 is published (see Checkpoints)
Epochs 15.96 @ 20k (960k frame-views Γ· 60,163 frames)
Augmentation color jitter (brightness 0.3, contrast 0.4, saturation 0.5, hue 0.08)
Wall-clock 67.1 min on 6Γ— B200 (train_runtime 4027.5 s, 4.97 steps/s, 238.4 samples/s)
Final train loss 0.0960 mean (per-step at step 20k β‰ˆ 0.0448)

Repository contents

checkpoint-20000/    # 20k steps (15.96 ep) β€” the published, production-candidate checkpoint
README.md            # this file

Only checkpoint-20000 is published. The 10k checkpoint was not retained (lineage storage policy: one checkpoint β€” 20k β€” per repo).

Each checkpoint-NNNNN/ is a self-contained, deploy-ready snapshot:

  • model-00001-of-00002.safetensors + model-00002-of-00002.safetensors (~6.5 GB, bf16)
  • model.safetensors.index.json
  • config.json
  • embodiment_id.json (contains unitree_g1_sonic)
  • processor_config.json
  • statistics.json (dataset normalization stats)
  • experiment_cfg/ (training config snapshot)

DeepSpeed ZeRO partition states, optimizer, scheduler and RNG files are intentionally omitted β€” they are needed only to resume training and would add several GB per checkpoint.

Evaluation

Why 20k is the goal. This run trained for 20,000 steps = 15.96 epochs on the 60,163-frame speedup-resampled set β€” right on v2's validated sweet spot (~15.3 epochs). This is the key contrast with v6: by speeding up the demonstrations (β‰ˆ60k frames vs v6's 120,017), v7 brings 20k steps back into the healthy-epoch zone instead of underfitting. 20k is the v7 goal and the published checkpoint. The production checkpoint is chosen by closed-loop comparison, not by training loss. There is no held-out split; train loss is a fit probe, not a generalization measure.

Closed-loop evaluation β€” completed (real G1). checkpoint-20000 was run closed-loop on the physical G1 + SONIC stack and measured against the v2 checkpoint-20000 champion. Low BC loss is a healthy prerequisite, not evidence of a good policy β€” this closed-loop result is the load-bearing signal.

Procedure. The bottle was placed at 12 fixed positions spanning one half-side of the table (the table is fixed relative to the robot). These are the same 12 positions used for data collection (see the source dataset card). One trial per position (12 trials) gives the grid result; a further 5 consecutive trials at the black-rectangle position give the fixed-position result. Legend: πŸŸ₯ red = knocked the bottle over Β· 🟧 orange = stuck in an "indecision" loop, never reaching the bottle Β· 🟩 green = successfully grasped the bottle. The policy was invoked with the task prompt "grab the bottle" β€” the same prompt used to collect the data.

Closed-loop eval: 12-position grid, checkpoint-20000

Results β€” checkpoint-20000.

Grid (12 fixed positions, 1 trial each):

Outcome Count Rate
🟩 Success 7/12 58%
🟧 Non-convergence (indecision loop) 0/12 0%
πŸŸ₯ Error (knocked bottle over) 5/12 42%

Fixed position (black rectangle, 5 consecutive trials):

Outcome Count Rate
🟩 Success 4/5 80%

⚠️ Single-trial methodology. Each of the 12 grid positions is tested once (1 trial/position); repeated placements at the same spot can succeed or fail differently β€” the fixed-position repeat test, where run, shows this per-position variance. Treat the grid score as a single-pass signal, not a repeated-trial mean.

Conclusion. v7 lands mid-pack β€” 7/12 (58%) grid success, below v2 (10/12), v5 (9/12), and v6 (8/12), but above v4 (6/12) and v1 (4/12). Like v5, it never gets stuck in an indecision loop (0/12 non-convergence): the DP speedup resampling produces committed, decisive motion, and it was strongest at the fixed black-rectangle position (4/5, 80%). The cost is the highest knock-over rate in the family (5/12, 42%): the speedup made the already-good positions smoother and faster, but the positions that need finer hand adjustment before the grasp suffer, in two modes β€” (a) close positions, the thumb arrives before it is positioned behind the bottle and topples it; (b) far positions, an open/close hand oscillation as if indecisive about committing all the way to the grasp. (Part of the deficit is a toppling-on-contact effect: with a smaller bottle the robot can push without it falling immediately, and several failing positions then succeed.)

Next steps. Fine-tune and evaluate v8 (speedup + segment removal). If the close-position thumb problem persists, a segment-removal-only dataset (no speedup) is the candidate to try β€” we may be hitting a speed-vs-precision tradeoff on the trickier positions, or approaching the ceiling of what these 220 episodes can deliver. v2 remains in production.

How to download

from huggingface_hub import snapshot_download

local = snapshot_download(
    repo_id="cloudwalk-research/gr00t-n17-g1-grab-bottle-rh-220ep-v7-finetune",
    repo_type="model",
    allow_patterns=["checkpoint-20000/*"],
)
print(local)

How to deploy

Start the GR00T policy server (from an Isaac-GR00T environment) pointing at the downloaded checkpoint:

python -m gr00t.eval.run_gr00t_server \
    --model-path <local>/checkpoint-20000 \
    --embodiment-tag UNITREE_G1_SONIC \
    --device cuda:0 --host 0.0.0.0 --port 5550

Closed-loop control of the G1 (sim or real) is driven by the SONIC whole-body controller in GR00T-WholeBodyControl: the policy emits motion_token + hand-joint targets that the SONIC WBC decodes into whole-body joint commands. The server must be launched with the same UNITREE_G1_SONIC embodiment tag used in training. See the NVlabs VLA inference tutorial. This checkpoint is not plug-and-play on hardware β€” it requires the SONIC C++ deploy stack and the matching G1 setup.

Known caveats

  1. Right-hand-only, single task. The dataset is one task ("grab the bottle") executed with the right hand. Left-hand and locomotion action dims reflect the (largely stationary) demonstrations; do not expect bimanual or locomotion behavior.
  2. Single camera. Only the ego_view (head) camera was recorded β€” no wrist cameras. The policy has never seen wrist views.
  3. Deployment needs the SONIC stack. The checkpoint outputs motion_token + hand joints for UNITREE_G1_SONIC; it only produces robot motion through the SONIC WBC + ZMQ deploy pipeline. It is not directly executable on a bare G1.
  4. Train loss is not held-out. No episode split; the loss is a smoothed train-fit probe, not a generalization metric.
  5. Speedup-resampling reference baseline. v7's data is the fusion of two source sets (the 105-ep set + the 115-ep "worst-positions" set) processed by DP wrist-Cartesian speedup resampling (3 mm/frame, max_K=40), with no zero-wandering segment removal. It is a deliberate baseline to isolate the speedup effect; a follow-up may stack segment removal on top. Its behavior should be compared against the curated v4/v5/v6 lineage and the v2 champion.
  6. Healthy-epoch zone (vs v6's underfit). 20,000 steps = β‰ˆ16.0 epochs on 60,163 frames β€” right at v2's validated β‰ˆ15.3-epoch sweet spot, because the speedup resampling reduced the frame count. Unlike v6 (β‰ˆ8.0 ep, underfit risk), no 40k extension is planned for v7.
  7. Single published checkpoint. Only checkpoint-20000 is published (one checkpoint per repo, lineage storage policy). There is no intermediate rung.
  8. Grip anticipation (family-wide). Observed in closed-loop eval: the policy performs the full grasp motion β€” approaching and closing the hand β€” even when no bottle is on the table, and even with the table removed entirely, as if the bottle were present. This grip-anticipation artifact is shared across the whole grab-bottle family (the same training demonstrations). Notably, it persists even though v7's data is derived from a speedup-resampled version of the merged set (which included the 20 "empty-scene" episodes β€” no bottle, no movement β€” before resampling); those counter-examples did not teach the policy to inhibit the grasp. Worth gating on bottle detection for downstream deployment.
  9. Prompt conditioning β€” untested. All training data was collected with the task prompt "grab the bottle", and the same prompt is used to invoke the policy at inference β€” a constant across every episode and every model in this family. We have not tested whether conditioning the prompt on the bottle's presence (e.g. "grab the bottle if there is one in the image") would gate the grasp and reduce the grip-anticipation artifact noted above (the robot closing its hand even with no bottle present). It is a plausible mitigation, but unverified: the model may have learned the grasp as an unconditional reflex from the demonstrations, independent of prompt phrasing.
  10. Training environment. Trained on 6Γ— B200 GPUs with NCCL_IB_DISABLE=1 NCCL_P2P_LEVEL=NVL (InfiniBand off, P2P over NVLink) and W&B in offline mode (synced post-run). These affect only the training run, not the weights.

Lineage

Version Dataset Episodes Frames Epochs @20k Closed-loop Notes
v1 105ep-v1 105 70,680 13.6 βœ… 4/12 (33%) First GR00T N1.7 + SONIC fine-tune at CW-RL; right-hand bottle pick.
v2 right-hand-v2 210 62,772 15.3 βœ… 10/12 (83%) β€” former champion Curated (episodes split into shorter windows, bad segments removed). checkpoint-20000 = former production champion (10/12), superseded by v10 (12/12).
v4 radius-5 417 48,577 19.8 βœ… 6/12 (50%) Zero-wandering, most aggressive curation (radius 5 β†’ short windows).
v5 radius-20 314 50,496 19.0 βœ… 9/12 (75%) Zero-wandering, least aggressive curation (radius 20 β†’ longer windows, ~161 f/ep).
v6 radius-20-merged 502 120,017 8.0 βœ… 8/12 (67%) Merged (105-ep + 115-ep "worst-positions"), radius-20 with grasp-frame preservation. Largest set β†’ 20k = only ~8 ep (underfit risk).
v7 (this) speedup-3mm-v1 220 60,163 ~16.0 7/12 (58%) DP speedup resampling (wrist-Cartesian, 3 mm/frame, max_K=40) of the merged set; no segment removal β€” reference baseline. β‰ˆ16 ep @20k lands on v2's sweet spot.

References

  • GR00T N1 β€” Open foundation model for generalist humanoid robots; base policy fine-tuned here. Paper (arXiv:2503.14734), base model.
  • Isaac-GR00T β€” Training / inference / deployment stack used for this fine-tune. GitHub.
  • GR00T-WholeBodyControl (SONIC) β€” Whole-body controller + teleop + VLA deployment for the G1. GitHub, SONIC paper (arXiv:2511.07820).
  • Training dataset β€” cloudwalk-research/gr00t-g1-grab-bottle-right-hand-speedup-3mm-v1 (CloudWalk Research, 2026), PICO 4 Ultra teleoperation on the Unitree G1 with SONIC WBC; fusion of the 105-ep + 115-ep "worst-positions" sets, DP wrist-Cartesian speedup resampling (3 mm/frame, max_K=40), no segment removal (220 episodes, 60,163 frames).

Attribution

Developed by cloudwalk-research in the CloudWalk Robotics Lab (CW-RL). Fine-tuned from nvidia/GR00T-N1.7-3B using Isaac-GR00T; targets the Unitree G1 with the SONIC whole-body controller.

Citation

@misc{cwrl_gr00t_grab_bottle_v7_2026,
  title        = {GR00T N1.7 Fine-Tune v7 --- Unitree G1 "grab the bottle" (right hand, SONIC WBC, DP speedup-resampled 220-ep dataset)},
  author       = {{CloudWalk Robotics Lab}},
  year         = {2026},
  howpublished = {Hugging Face model repository},
  url          = {https://huggingface.co/cloudwalk-research/gr00t-n17-g1-grab-bottle-rh-220ep-v7-finetune}
}

License

Inherits the NVIDIA Open Model License Agreement of the base model nvidia/GR00T-N1.7-3B β€” see the license terms. This is a research preview: not intended for safety-critical use; closed-loop deployment on a physical humanoid requires human oversight.

Downloads last month

-

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

Model tree for cloudwalk-research/gr00t-n17-g1-grab-bottle-rh-220ep-v7-finetune

Finetuned
(71)
this model

Dataset used to train cloudwalk-research/gr00t-n17-g1-grab-bottle-rh-220ep-v7-finetune

Collection including cloudwalk-research/gr00t-n17-g1-grab-bottle-rh-220ep-v7-finetune

Papers for cloudwalk-research/gr00t-n17-g1-grab-bottle-rh-220ep-v7-finetune