LeRobot documentation

NVIDIA IsaacLab Arena & LeRobot

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

NVIDIA IsaacLab Arena & LeRobot

O LeRobot EnvHub agora suporta simulação acelerada por GPU com o IsaacLab Arena para avaliação de políticas em escala. Treine e avalie políticas de aprendizado por imitação com simulação de alta fidelidade — tudo integrado ao ecossistema LeRobot.

IsaacLab Arena - GR1 Microwave Environment

IsaacLab Arena integra-se ao NVIDIA IsaacLab para oferecer:

  • 🤖 Embodimentes humanoides: GR1, G1, Galileo com diversas configurações
  • 🎯 Tarefas de manipulação e locomanipulação: Abrir portas, pegar e colocar, pressionar botões e mais
  • ⚡ Rollouts acelerados por GPU: Execução paralela de ambientes em GPUs NVIDIA
  • 🖼️ RTX Rendering: Avalie políticas baseadas em visão com renderização realista, reflexos e refrações
  • 📦 Conjuntos de dados compatíveis com LeRobot: Prontos para treinamento com GR00T N1x, PI0, SmolVLA, ACT e políticas de Diffusion
  • 🔄 Integração com EnvHub: Carregue ambientes do HuggingFace EnvHub com uma linha

Instalação

Pré-requisitos

Os requisitos de hardware são compartilhados com o Isaac Sim e estão detalhados em Requisitos do Isaac Sim.

  • GPU da NVIDIA com suporte a CUDA
  • Driver da NVIDIA compatível com IsaacSim 5.1.0
  • Linux (Ubuntu 22.04 / 24.04)

Configuração

# 1. Create conda environment
conda create -y -n lerobot-arena python=3.11
conda activate lerobot-arena
conda install -y -c conda-forge ffmpeg=7.1.1

# 2. Install Isaac Sim 5.1.0
pip install "isaacsim[all,extscache]==5.1.0" --extra-index-url https://pypi.nvidia.com

# Accept NVIDIA EULA (required)
export ACCEPT_EULA=Y
export PRIVACY_CONSENT=Y

# 3. Install IsaacLab 2.3.0
git clone https://github.com/isaac-sim/IsaacLab.git
cd IsaacLab
git checkout v2.3.0
./isaaclab.sh -i
cd ..

# 4. Install IsaacLab Arena
git clone https://github.com/isaac-sim/IsaacLab-Arena.git
cd IsaacLab-Arena
git checkout release/0.1.1
pip install -e .
cd ..


# 5. Install LeRobot (evaluation extra for env/policy evaluation)
git clone https://github.com/huggingface/lerobot.git
cd lerobot
pip install -e ".[evaluation]"


# 6. Install additional dependencies
pip install onnxruntime==1.23.2 lightwheel-sdk==1.0.1 vuer[all]==0.0.70 qpsolvers==4.8.1
pip install numpy==1.26.0 # Isaac Sim 5.1 depends on numpy==1.26.0, this will be fixed in next release

Avaliando Políticas

Políticas pré-treinadas

As seguintes políticas treinadas estão disponíveis:

PolíticaArquiteturaTarefaLink
pi05-arena-gr1-microwavePI0.5GR1 Micro-ondasHuggingFace
smolvla-arena-gr1-microwaveSmolVLAGR1 Micro-ondasHuggingFace

Avaliar SmolVLA

pip install -e ".[smolvla]"
pip install numpy==1.26.0 # revert numpy to version 1.26
lerobot-eval \
    --policy.path=nvidia/smolvla-arena-gr1-microwave \
    --env.type=isaaclab_arena \
    --env.hub_path=nvidia/isaaclab-arena-envs \
    --rename_map='{"observation.images.robot_pov_cam_rgb": "observation.images.robot_pov_cam"}' \
    --policy.device=cuda \
    --env.environment=gr1_microwave \
    --env.embodiment=gr1_pink \
    --env.object=mustard_bottle \
    --env.headless=false \
    --env.enable_cameras=true \
    --env.video=true \
    --env.video_length=10 \
    --env.video_interval=15 \
    --env.state_keys=robot_joint_pos \
    --env.camera_keys=robot_pov_cam_rgb \
    --trust_remote_code=True \
    --eval.batch_size=1

Avaliar PI0.5

pip install -e ".[pi]"
pip install numpy==1.26.0 # revert numpy to version 1.26
PI0.5 requires disabling torch compile for evaluation:
TORCH_COMPILE_DISABLE=1 TORCHINDUCTOR_DISABLE=1 lerobot-eval \
    --policy.path=nvidia/pi05-arena-gr1-microwave \
    --env.type=isaaclab_arena \
    --env.hub_path=nvidia/isaaclab-arena-envs \
    --rename_map='{"observation.images.robot_pov_cam_rgb": "observation.images.robot_pov_cam"}' \
    --policy.device=cuda \
    --env.environment=gr1_microwave \
    --env.embodiment=gr1_pink \
    --env.object=mustard_bottle \
    --env.headless=false \
    --env.enable_cameras=true \
    --env.video=true \
    --env.video_length=15 \
    --env.video_interval=15 \
    --env.state_keys=robot_joint_pos \
    --env.camera_keys=robot_pov_cam_rgb \
    --trust_remote_code=True \
    --eval.batch_size=1
To change the number of parallel environments, use the ```--eval.batch_size``` flag.

O que esperar

Durante a avaliação, você verá uma barra de progresso mostrando a taxa de sucesso em andamento:

Stepping through eval batches:   8%|██████▍    | 4/50 [00:45<08:06, 10.58s/it, running_success_rate=25.0%]

Gravação de Vídeo

Para habilitar a gravação de vídeo durante a avaliação, adicione as seguintes flags ao seu comando:

--env.video=true \
--env.video_length=15 \
--env.video_interval=15

Para mais detalhes sobre gravação de vídeo, consulte a Documentação de Gravação do IsaacLab.

When running headless with `--env.headless=true`, you must also enable cameras explicitly for camera enabled environments:
--env.headless=true --env.enable_cameras=true

Diretório de Saída

Os vídeos de avaliação são salvos no diretório de saída com a seguinte estrutura:

outputs/eval/<date>/<timestamp>_<env>_<policy>/videos/<task>_<env_id>/eval_episode_<n>.mp4

Por exemplo:

outputs/eval/2026-01-02/14-38-01_isaaclab_arena_smolvla/videos/gr1_microwave_0/eval_episode_0.mp4

Políticas de Treinamento

Para saber mais sobre o treinamento de políticas com LeRobot, consulte a documentação de treinamento:

Conjuntos de dados de exemplo do IsaacLab Arena estão disponíveis no HuggingFace Hub para experimentação:

Conjunto de dadosDescriçãoFrames
Arena-GR1-Manipulation-TaskManipulação de micro-ondas GR1~4K
Arena-G1-Loco-Manipulation-TaskG1 locomanipulação~4K

Configuração do Ambiente

Opções de Configuração Completa

from lerobot.envs.configs import IsaaclabArenaEnvConfig

config = IsaaclabArenaEnvConfig(
    # Environment selection
    environment="gr1_microwave",      # Task environment
    embodiment="gr1_pink",            # Robot embodiment
    object="power_drill",             # Object to manipulate

    # Simulation settings
    episode_length=300,               # Max steps per episode
    headless=True,                    # Run without GUI
    device="cuda:0",                  # GPU device
    seed=42,                          # Random seed

    # Observation configuration
    state_keys="robot_joint_pos",     # State observation keys (comma-separated)
    camera_keys="robot_pov_cam_rgb",  # Camera observation keys (comma-separated)
    state_dim=54,                     # Expected state dimension
    action_dim=36,                    # Expected action dimension
    camera_height=512,                # Camera image height
    camera_width=512,                 # Camera image width
    enable_cameras=True,              # Enable camera observations

    # Video recording
    video=False,                      # Enable video recording
    video_length=100,                 # Frames per video
    video_interval=200,               # Steps between recordings

    # Advanced
    mimic=False,                      # Enable mimic mode
    teleop_device=None,               # Teleoperation device
    disable_fabric=False,             # Disable fabric optimization
    enable_pinocchio=True,            # Enable Pinocchio for IK
)

Usando o Environment Hub diretamente para uso avançado

Crie um arquivo chamado test_env_load_arena.py ou baixe do EnvHub:

import logging
from dataclasses import asdict
from pprint import pformat
import torch
import tqdm
from lerobot.configs import parser
from lerobot.configs.eval import EvalPipelineConfig


@parser.wrap()
def main(cfg: EvalPipelineConfig):
    """Run random action rollout for IsaacLab Arena environment."""
    logging.info(pformat(asdict(cfg)))

    from lerobot.envs import make_env

    env_dict = make_env(
        cfg.env,
        n_envs=cfg.env.num_envs,
        trust_remote_code=True,
    )
    env = next(iter(env_dict.values()))[0]
    env.reset()
    for _ in tqdm.tqdm(range(cfg.env.episode_length)):
        with torch.inference_mode():
            actions = env.action_space.sample()
            obs, rewards, terminated, truncated, info = env.step(actions)
            if terminated.any() or truncated.any():
                obs, info = env.reset()
    env.close()


if __name__ == "__main__":
    main()

Execute com:

python test_env_load_arena.py \
    --env.environment=g1_locomanip_pnp \
    --env.embodiment=gr1_pink \
    --env.object=cracker_box \
    --env.num_envs=4 \
    --env.enable_cameras=true \
    --env.seed=1000 \
    --env.video=true \
    --env.video_length=10 \
    --env.video_interval=15 \
    --env.headless=false \
    --env.hub_path=nvidia/isaaclab-arena-envs \
    --env.type=isaaclab_arena

Criando Novos Ambientes

Primeiro, crie um novo ambiente IsaacLab Arena seguindo a Documentação do IsaacLab Arena.

Clone o nosso repositório EnvHub:

git clone https://huggingface.co/nvidia/isaaclab-arena-envs

Modifique o arquivo example_envs.yaml com base no seu novo ambiente. Envie o repositório modificado para o HuggingFace EnvHub.

Your IsaacLab Arena environment code must be locally available during evaluation. Users can clone your environment repository separately, or you can bundle the environment code and assets directly in your EnvHub repo.

Em seguida, ao avaliar, use seu novo ambiente:

lerobot-eval \
    --env.hub_path=<your-env-hub-path>/isaaclab-arena-envs \
    --env.environment=<your new environment> \
    ...other flags...

Aguardamos suas contribuições!

Solução de problemas

Memória CUDA esgotada

Reduza o batch_size ou use uma GPU com mais VRAM:

--eval.batch_size=1

EULA não aceita

Defina as variáveis de ambiente antes de executar:

export ACCEPT_EULA=Y
export PRIVACY_CONSENT=Y

Gravação de vídeo não está funcionando

Ative as câmeras ao executar em modo headless:

--env.video=true --env.enable_cameras=true --env.headless=true

Incompatibilidade de dimensão na saída da política

Certifique-se de que action_dim corresponda à sua política:

--env.action_dim=36

Erros do libGLU.so.1 durante a inicialização do Isaac Sim

Certifique-se de que as seguintes dependências estão instaladas, isso provavelmente ocorrerá em máquinas headless.

sudo apt update && sudo apt install -y libglu1-mesa libxt6

Veja também

Lightwheel LW-BenchHub

Lightwheel está trazendo Lightwheel-Libero-Tasks e Lightwheel-RoboCasa-Tasks com 268 tarefas para o ecossistema LeRobot. O LW-BenchHub coleta e gera datasets em larga escala por meio de teleoperação, em conformidade com a especificação do LeRobot, permitindo fluxos de trabalho de treinamento e avaliação prontos para uso. Com a interface unificada fornecida pelo EnvHub, os desenvolvedores podem construir rapidamente pipelines experimentais de ponta a ponta.

Instalar

Pressupondo que você seguiu as etapas de Instalação, você pode instalar o LW-BenchHub com:

conda install pinocchio -c conda-forge -y
pip install numpy==1.26.0 # revert numpy to version 1.26

sudo apt-get install git-lfs && git lfs install

git clone https://github.com/LightwheelAI/lw_benchhub
cd lw_benchhub
git lfs pull # Ensure LFS files (e.g., .usd assets) are downloaded

pip install -e .

Para instruções mais detalhadas, consulte a Documentação do LW-BenchHub.

Conjunto de Dados de Tarefas do Lightwheel

Os conjuntos de dados do LW-BenchHub estão disponíveis no HuggingFace Hub:

Conjunto de dadosDescriçãoTarefasFrames
Lightwheel-Tasks-X7SX7S LIBERO e RoboCasa117~10.3M
Lightwheel-Tasks-Double-PiperDouble-Piper LIBERO130~6.0M
Lightwheel-Tasks-G1-ControllerG1-Controller LIBERO62~2.7M
Lightwheel-Tasks-G1-WBCG1-WBC RoboCasa32~1.5M

Para treinar políticas, consulte a seção Training Policies.

Avaliando Políticas

Políticas pré-treinadas

As seguintes políticas treinadas estão disponíveis:

PolíticaArquiteturaTarefaLayoutRobôLink
smolvla-double-piper-pnpSmolVLAL90K1PutTheBlackBowlOnThePlatelibero-1-1DoublePiper-AbsHuggingFace

Avaliar SmolVLA

lerobot-eval \
  --policy.path=LightwheelAI/smolvla-double-piper-pnp \
  --env.type=isaaclab_arena \
  --rename_map='{"observation.images.left_hand_camera_rgb": "observation.images.left_hand", "observation.images.right_hand_camera_rgb": "observation.images.right_hand", "observation.images.first_person_camera_rgb": "observation.images.first_person"}' \
  --env.hub_path=LightwheelAI/lw_benchhub_env \
  --env.kwargs='{"config_path": "configs/envhub/example.yml"}' \
  --trust_remote_code=true \
  --env.state_keys=joint_pos \
  --env.action_dim=12 \
  --env.camera_keys=left_hand_camera_rgb,right_hand_camera_rgb,first_person_camera_rgb \
  --policy.device=cuda \
  --eval.batch_size=10 \
  --eval.n_episodes=100

Configuração do Ambiente

A avaliação pode ser iniciada rapidamente modificando as configurações de robot, task e layout no arquivo de configuração.

Opções de Configuração Completa

# =========================
# Basic Settings
# =========================
disable_fabric: false
device: cuda:0
sensitivity: 1.0
step_hz: 50
enable_cameras: true
execute_mode: eval
episode_length_s: 20.0 # Episode length in seconds, increase if episodes timeout during eval

# =========================
# Robot Settings
# =========================
robot: DoublePiper-Abs # Robot type, DoublePiper-Abs, X7S-Abs, G1-Controller or G1-Controller-DecoupledWBC
robot_scale: 1.0

# =========================
# Task & Scene Settings
# =========================
task: L90K1PutTheBlackBowlOnThePlate # Task name
scene_backend: robocasa
task_backend: robocasa
debug_assets: null
layout: libero-1-1 # Layout and style ID
sources:
  - objaverse
  - lightwheel
  - aigen_objs
object_projects: []
usd_simplify: false
seed: 42

# =========================
# Object Placement Retry Settings
# =========================
max_scene_retry: 4
max_object_placement_retry: 3

resample_objects_placement_on_reset: true
resample_robot_placement_on_reset: true

# =========================
# Replay Configuration Settings
# =========================
replay_cfgs:
  add_camera_to_observation: true
  render_resolution: [640, 480]

Veja também

Update on GitHub