--- license: apache-2.0 base_model: nvidia/GR00T-N1.6-3B tags: - robotics - gr00t - unitree-g1 - inspire-hand - manipulation datasets: - birbirll/g1-inspire-piston-pick-place --- # GR00T N1.6 — G1 + Inspire piston pick-and-place Fine-tune of `nvidia/GR00T-N1.6-3B` on [birbirll/g1-inspire-piston-pick-place](https://huggingface.co/datasets/birbirll/g1-inspire-piston-pick-place) (102 success episodes, LeRobot v2.1). Picks up a piston from a table with the right Inspire hand (Unitree G1, fixed base). Closed-loop verified in IsaacLab. ## Contents - Model weights (bf16 safetensors) + processor/experiment configs — loadable with Isaac-GR00T's `run_gr00t_server.py` (`--embodiment_tag NEW_EMBODIMENT`). - **`g1_inspire_modality_config.py`** — the modality config used for training (register via `--modality-config-path`): state = arms 14 + hands 12 + waist 3 (dims 29:63 of the raw state are unused tactile); action = 30-D (left_arm 7 | right_arm 7 | left_hand 6 | right_hand 6 | base_height 1 | navigate 3), 30-step horizon; arms trained RELATIVE (decoded to absolute by the server). ## Training recipe (single RTX 4090, ~2.5 h) ```bash python gr00t/experiment/launch_finetune.py \ --base-model-path nvidia/GR00T-N1.6-3B \ --dataset-path \ --embodiment-tag NEW_EMBODIMENT \ --modality-config-path g1_inspire_modality_config.py \ --num-gpus 1 --output-dir ./out \ --max-steps 10000 --save-steps 1000 --save-total-limit 2 \ --global-batch-size 8 --gradient-accumulation-steps 4 \ --state-dropout-prob 0.8 \ --color-jitter-params brightness 0.3 contrast 0.4 saturation 0.5 hue 0.08 ``` Key knobs: `--state-dropout-prob 0.8` (forces vision conditioning — without it the policy shortcuts through proprioception and ignores the camera); effective batch 32; default LR 1e-4; loss ~1.16 → ~0.011. On 24 GB GPUs you must additionally set the optimizer to `paged_adamw_8bit` and enable gradient checkpointing in `launch_finetune.py` (upstream defaults OOM); on A100-class hardware the upstream defaults are fine.