G1 throw VLA checkpoints
DynamicVLA and ForceVLA fine-tuned on twanghcmut/g1-throw-newton:
a Unitree G1 picks an object off a pedestal and throws it into a box. One checkpoint per object group.
Training and evaluation code: branch benchmark/throw-vla of
extrinsic-dexterity, benchmark/throw/README.md.
Layout
dynamicvla/<group>/ config.json, model.safetensors (LeRobot policy, hzxie/DynamicVLA)
forcevla/<group>/ params/, assets/ (openpi checkpoint without optimizer state, ft-robotic/ForceVLA)
<group>: rigid, irregular, dynamic.
| Model | Init | Inputs | Training |
|---|---|---|---|
| DynamicVLA | SmolLM2-360M, no DOM pretraining | side and head camera (frames t-2, t), 14 joints | batch 44, 6 epochs |
| ForceVLA | pi0_base, LoRA | head and side camera, 14 joints, 6-D wrist wrench | batch 32; 20k steps rigid, 20k irregular, 15k dynamic |
Both predict 40 joint targets (1.3 s) and execute 16 before replanning.
Results
Closed loop in Isaac Lab, test split (held-out object variants), room and unseen kitchen 10-8 combined. Success: the object comes to rest inside the box. Brackets: 95% Wilson interval.
| Model | Rigid (320) | Irregular (288) | Dynamic (288) |
|---|---|---|---|
| DynamicVLA | 0.6 [0.2, 2.2] | 0.7 [0.2, 2.5] | 0.3 [0.1, 1.9] |
| ForceVLA | 8.4 [5.9, 12.0] | 5.9 [3.7, 9.2] | 3.8 [2.1, 6.7] |
| GR00T N1.7 (not released here) | 5.3 [3.3, 8.3] | 4.2 [2.4, 7.1] | 1.7 [0.7, 4.0] |
The scripted expert lands about 52% of its throws. All models lift the object in 49 to 76% of episodes; most failures are misses after release.
Download and evaluate
hf download twanghcmut/g1-throw-vla --include "forcevla/rigid/*" --local-dir ckpt
python benchmark/throw/eval/eval.py forcevla rigid ckpt/forcevla/rigid results/forcevla_rigid \
--model-python ForceVLA/.venv/bin/python --newton-python .venv-newton/bin/python
Run it from the Isaac Lab environment. Setup for each model is in the benchmark README.