NOVA (Neural Open Vision Actions) is a fine-tuned version of NVIDIA's GR00T N1.6 vision-language-action model, trained specifically for
Pollen Robotics' Reachy 2 humanoid robot.
1action = [
2 shoulder_pitch, # -180° to 90°
3 shoulder_roll, # -180° to 10°
4 elbow_yaw, # -90° to 90°
5 elbow_pitch, # -125° to 0°
6 wrist_roll, # -100° to 100°
7 wrist_pitch, # -45° to 45°
8 wrist_yaw, # -30° to 30°
9 gripper, # 0 (closed) to 1 (open)
10]
1python -m gr00t.train \
2 --dataset_repo_id ganatrask/NOVA \
3 --embodiment_tag reachy2 \
4 --video_backend decord \
5 --num_gpus 2 \
6 --batch_size 64 \
7 --max_steps 30000 \
8 --save_steps 3000 \
9 --output_dir ./checkpoints/groot-reachy2
1cd Isaac-GR00T
2patch -p1 < ../patches/add_reachy2_embodiment.patch
1from gr00t.data.embodiment_tags import EmbodimentTag
2from gr00t.policy.gr00t_policy import Gr00tPolicy
3import importlib.util
4
5# Load modality config first
6spec = importlib.util.spec_from_file_location(
7 "modality_config",
8 "configs/reachy2_modality_config.py"
9)
10module = importlib.util.module_from_spec(spec)
11spec.loader.exec_module(module)
12
13# Load policy
14policy = Gr00tPolicy(
15 embodiment_tag=EmbodimentTag.REACHY2,
16 model_path="ganatrask/NOVA", # or local checkpoint path
17 device="cuda",
18 strict=True,
19)
20
21# Run inference
22obs = {
23 "video": {"front_cam": image[None, None, :, :, :]}, # (1, 1, H, W, 3)
24 "state": {"arm_joints": joints[None, None, :]}, # (1, 1, 7)
25 "language": {"annotation.human.task_description": [["Pick up the red cube"]]},
26}
27action, _ = policy.get_action(obs)
1@misc{nova2025,
2 title={NOVA: Neural Open Vision Actions},
3 author={ganatrask},
4 year={2025},
5 publisher={HuggingFace},
6 url={https://huggingface.co/ganatrask/NOVA}
7}
This model inherits the
NVIDIA Open Model License from the base GR00T N1.6 model.