NVIDIA Isaac Teleop and GR00T 1.7 Open VLA Model Available in LeRobot

Community Article
Published July 7, 2026

header-blog

Introduction

NVIDIA Isaac Teleop and NVIDIA Isaac GR00T 1.7 are now available on LeRobot, bringing new capabilities for open robot learning and humanoid development.

GR00T 1.7 is the latest open, commercially viable Vision-Language-Action (VLA) foundation model for general-purpose humanoid robots. It delivers improved performance and expanded manipulation capabilities over GR00T N1.5. With this release, GR00T 1.7 replaces N1.5 in LeRobot, and developers should transition to the new model, as N1.5 is no longer supported.

The Isaac GR00T 1.7 model is also available on the NVIDIA Isaac GR00T open development platform, accelerating end-to-end humanoid development and coming pre-integrated with the GR00T reference humanoid robot, an open reference design for academic research.

Isaac Teleop is a teleoperation framework for collecting robot demonstration data. It enables developers to capture high-quality demonstrations, real and sim, in formats compatible with downstream training pipelines, streamlining the workflow from data collection to imitation learning and policy fine-tuning.

image (2)

GR00T 1.7 on LeRobot

GR00T 1.7 is now available on LeRobot, making it faster and easier to train, fine-tune, and deploy NVIDIA’s latest Vision-Language-Action foundation model. Developers can use LeRobot’s open workflows to quickly adapt the model to their own tasks and robots.

image4_compressed

Models trained anywhere can also be deployed through LeRobot while maintaining the same benchmarked performance, providing a seamless path from development to deployment.

The guide below will walk you through installation, training and deployment with GR00T 1.7, via LeRobot - of a real world task executed with the SO-101 robot


Installation

Running GR00T via LeRobot is very simple. Before starting, verify you meet the GR00T prerequisites, everything else will be handled by the LeRobot installation. To follow this guide, we assume you have your SO101 Robot configured, calibrated and ready to work for you.

The following commands will install LeRobot and all the dependencies required for GR00T training and inference

# Install UV if not already installed, then start a new shell
curl -LsSf https://astral.sh/uv/install.sh | sh

# Install ffmpeg
sudo apt install ffmpeg

# From you working directory
git clone https://github.com/huggingface/lerobot.git
cd lerobot

# Install LeRobot,GR00T and dependecnies
uv venv --python 3.12
uv pip install -e ".[groot,training,feetech,viz]"

DGX Spark users you should install compatible CUDA 13 torch version, like so

uv pip install "torch==2.11.0+cu130" "torchvision==0.26.0+cu13" --index-url https://download.pytorch.org/whl/cu130
# Force uv to not rollback torch for the rest of the session
export UV_NO_SYNC=1 

Isaac Teleop Data collection

NVIDIA PROVIDES THE WORK ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE WORK AND ASSUME ANY RISKS ASSOCIATED WITH YOUR EXERCISE OF PERMISSIONS UNDER THIS LICENSE.

There are two ways to collect data, either using a VR headset or the SO-101 leader arm.

  • For the SO-101 leader arm follow these instructions, SO-101 Teleoperation documentation.
  • For using a VR headset follow the guide here. The steps below give an overview of the commands you will be running.

1.Run the following to install Isaac Teleop for data collection.

# LeRobot with the extras this example uses:
#   feetech    - SO-101 serial motor bus
#   kinematics - Placo IK solver (XR controller path)
#   dataset    - dataset recording (record.py)
# huggingface_hub >= 1.5 is needed by the automatic URDF fetch (Buckets API).
uv pip install -e ".[feetech,kinematics,dataset]" "huggingface_hub>=1.5"

# Isaac Teleop from public PyPI. `cloudxr` brings the CloudXR runtime bindings;
# `retargeters-lite` is the scipy-based retargeter path that resolves on both
# x86_64 and ARM (the full `retargeters` extra does not resolve on aarch64).
uv pip install "isaacteleop[cloudxr,retargeters-lite]~=1.3.131" "scipy>=1.14"
  1. Setup your environment variables.
# make sure that camera index and robot id and port matches your setup! 
# find index using `uv run lerobot-find-cameras opencv`
WRIST_CAM='wrist: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30, fourcc: "MJPG"}'
FRONT_CAM='front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: "MJPG"}'
export ROBOT_CAMERAS="{ $WRIST_CAM, $FRONT_CAM }"
export ROBOT_ID=follower_robot
export ROBOT_PORT=/dev/ttyACM0
  1. Test your teleoperation setup with your headset.
uv run python examples.isaac_teleop_to_so101.teleoperate \
    --robot.type=so101_follower \
    --robot.port=$ROBOT_PORT \
    --robot.id=$ROBOT_ID \
    --teleop.type=xr_controller
  1. Collect data!
export DATASET_NAME=your_data_set
export HF_USER=your_hf_username
export DATASET=$HF_USER/$DATASET_NAME

uv run python examples.isaac_teleop_to_so101.record \
    --robot.type=so101_follower \
    --robot.port=$ROBOT_PORT \
    --robot.id=$ROBOT_ID \
    --teleop.type=xr_controller \
    --robot.cameras=$ROBOT_CAMERAS \
    --dataset.repo_id=$DATASET \
    --dataset.single_task="Pick up vial and put it into the rack" \
    --dataset.num_episodes=50 \
    --dataset.push_to_hub=true

This will create a LeRobot dataset and push it to the Hugging Face Hub, ready to train a policy using GR00T 1.7

image1

Training

With the dataset you collected, you can begin post-training GR00T 1.7. We have been using an RTX 6000 Pro for our testing. Make sure to adapt the command for the dataset name you collected!

uv run hf auth login
uv run wandb login

export DATASET_NAME=your_data_set
export HF_USER=your_hf_username
export DATASET=$HF_USER/$DATASET_NAME
export REPO_ID="${DATASET}_GR00T17" #this is the model that will be uploaded to huggingface
export OUTPUT_DIR=outputs/train/$REPO_ID

uv run lerobot-train \
  --dataset.repo_id=$DATASET \
  --dataset.image_transforms.enable=true \
  --policy.type=groot \
  --policy.device=cuda \
  --policy.base_model_path=nvidia/GR00T-N1.7-3B \
  --policy.embodiment_tag=new_embodiment \
  --policy.chunk_size=16 \
  --policy.n_action_steps=16 \
  --policy.use_relative_actions=true \
  --policy.relative_exclude_joints='["gripper"]' \
  --policy.use_bf16=true \
  --policy.push_to_hub=true \
  --policy.repo_id=$REPO_ID \
  --seed=42 \
  --batch_size=64 \
  --steps=20000 \
  --save_checkpoint=true \
  --save_freq=5000 \
  --use_policy_training_preset=true \
  --env_eval_freq=0 \
  --eval_steps=0 \
  --log_freq=10 \
  --output_dir=$OUTPUT_DIR \
  --job_name=$DATASET \
  --wandb.enable=true \
  --wandb.disable_artifact=true

# Multi-GPU:
uv run accelerate launch \
  --multi_gpu \
  --num_processes=$(nvidia-smi -L | wc -l) \
  .venv/bin/lerobot-train \
  # here you add the entire command from the single GPU

If you are using a remote machine via SSH, you should use tmux to prevent the session from being killed when logging out

We have created an NVIDIA Brev LeRobot Launchable to help you train your models faster - Use this one click deploy to get your GPU instance in minutes

Deployment

When the training job is completed, it's time to see the robot perform. We will use lerobot-rollout for that - You will also see a Rerun visualizer to monitor robot actions and observations. To help the robot succeed, ensure the rest pose of the robot is similar to what you have used when recording - eg. when the robot is in the initial crouch position, it might not see enough of the table to remember its task.

export MODEL_ID=your_trained_model_on_huggingface

# make sure that camera index and robot id and port matches your setup! 
# find index using `uv run lerobot-find-cameras opencv`
WRIST_CAM='wrist: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30, fourcc: "MJPG"}'
FRONT_CAM='front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: "MJPG"}'
export ROBOT_CAMERAS="{ $WRIST_CAM, $FRONT_CAM }"
export ROBOT_ID=follower_robot
export ROBOT_PORT=/dev/ttyACM0

uv run lerobot-rollout \
  --strategy.type=base \
  --policy.path=$MODEL_ID \
  --policy.base_model_path=nvidia/GR00T-N1.7-3B \
  --policy.n_action_steps=8 \
  --robot.type=so101_follower \
  --robot.port=$ROBOT_PORT \
  --robot.id=$ROBOT_ID \
  --robot.cameras="$ROBOT_CAMERAS" \
  --task="place the vial in the rack" \
  --duration=60 \
  --device=cuda \
  --display_data=true \
  --inference.type=rtc \
  --inference.rtc.enabled=false \
  --inference.rtc.execution_horizon=10 \
  --inference.queue_threshold=0

image6

LIBERO Benchmark Results

We deployed GR00T 1.7 policy against the LIBERO Benchmark. LIBERO (Lifelong Benchmark for RObot learning, NeurIPS 2023) is a suite of 130 language-annotated tabletop manipulation tasks designed to isolate what kind of generalization a policy needs to handle. Each suite holds all other variables fixed and varies exactly one axis. Below is also a table comparing the performance difference between GR00T 1.7 and GR00T 1.5, showing a strong improvement trend.

Task LeRobot GR00T 1.5 LeRobot GR00T 1.7 Checkpoint
LIBERO-Spatial 82% 95% Checkpoint
LIBERO-Object 99% 100% Checkpoint
LIBERO-Goal 98% Checkpoint
LIBERO-Long 82% 93% Checkpoint
Average 87% 96.5%

Get Started Today

Key Takeaways

  • GR00T 1.7 integrates natively into LeRobot, requiring no infrastructure changes for teams already using the framework
  • Both the LeRobot and OSS paths use the same nvidia/GR00T-N1.7 weights - pick the workflow that fits your stack
  • Post-training requires LeRobot Dataset v3.0 format

Additional Resources

Stay up-to-date with the latest developments by following NVIDIA on Hugging Face.

Community

Sign up or log in to comment