openarm_sweep_pump

NVIDIA GR00T-N1.5-3B finetuned on an OpenArm bimanual teleoperation dataset (sweeping and scrubbing). Plain base-mode finetune โ€” no MoE, no confidence head, no auxiliary losses.

Layout

Folder What
base/ Plain base-mode finetune, 40,000 steps. This is what used to sit at the repo root.
sail/ Same recipe plus SAIL EAG (Error-Adaptive Guidance), 40,000 steps. horizon 4, condition dropout 0.1, CFG weight 1.0.

Both were trained from nvidia/GR00T-N1.5-3B on the same dataset with the same hyper-parameters; the only difference is the EAG conditioner.

Tasks

The policy was trained on three natural-language instructions:

# Instruction Episodes Frames
0 Hold the dustpan with the left hand and sweep the debris into it with the brush in the right hand 57 31,460
1 Pick up the blue scrubber with the left hand and scrub the white bowl 25 17,574
2 Pick up the gray scrubber with the left hand and scrub the white bowl 25 17,169
Total 107 66,203

Data

LeRobot v2.1, robot_type: openarm_bimanual, 30 fps.

Key dtype Shape
observation.state float32 [26]
action float32 [26]
observation.head float32 [2]
action.head float32 [2]
observation.images.ego_left video [3, 720, 1280]
observation.images.ego_right video [3, 720, 1280]

Images are consumed at their native 1280x720 โ€” there is no re-encoding step.

Training

Base model nvidia/GR00T-N1.5-3B
Data config openarm_bimanual (OpenArmBimanualDataConfig)
Embodiment tag new_embodiment (projector slot 31)
Prediction mode base โ€” Stage 1 only, Stage 2 skipped
Steps 40,000 (~38.65 epochs over 66,203 frames)
Batch 32 per device x 2 GPUs = 64 effective
Hardware 2x H200
Action horizon 16
Action dim 32 (padded; 26 are used)

Training loss went from 1.1172 at step 10 to 0.0028 at step 40,000. Only action_loss is reported โ€” base mode has no loss_conf / loss_ratio / loss_flare.

Files

Final weights from the end of training (step 40,000):

config.json
model-00001-of-00002.safetensors
model-00002-of-00002.safetensors
model.safetensors.index.json
experiment_cfg/metadata.json

Optimizer and scheduler state are not published, so this checkpoint is for inference, not for resuming training.

Usage

from gr00t.model.policy import Gr00tPolicy
from gr00t.experiment.data_config import DATA_CONFIG_MAP

data_config = DATA_CONFIG_MAP["openarm_bimanual"]

policy = Gr00tPolicy(
    model_path="TTaekwan/openarm_sweep_pump",
    modality_config=data_config.modality_config(),
    modality_transform=data_config.transform(),
    embodiment_tag="new_embodiment",
    device="cuda",
)

action = policy.get_action(observation)

openarm_bimanual is not in upstream Isaac-GR00T โ€” it needs the OpenArmBimanualDataConfig entry that this checkpoint was trained with.

Notes

  • The training dataset is private and is not distributed with these weights.
  • Derived from nvidia/GR00T-N1.5-3B; the base model's license terms apply.
Downloads last month

-

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

Model tree for TTaekwan/real_openarm

Finetuned
(75)
this model