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

LeRobot EnvHub ahora admite simulación acelerada por GPU con IsaacLab Arena para la evaluación de políticas a gran escala. Entrena y evalúa políticas de aprendizaje por imitación con simulación de alta fidelidad, todo integrado en el ecosistema de LeRobot.

IsaacLab Arena - GR1 Microwave Environment

IsaacLab Arena se integra con NVIDIA IsaacLab para ofrecer:

  • 🤖 Encarnaciones humanoides: GR1, G1, Galileo con diversas configuraciones
  • 🎯 Tareas de manipulación y locomoción-manipulación: apertura de puertas, recogida y colocación, pulsación de botones y más
  • ⚡ Rollouts acelerados por GPU: Ejecución paralela de entornos en GPUs de NVIDIA
  • 🖼️ RTX Rendering: Evalúe políticas basadas en visión con renderizado realista, reflejos y refracciones
  • 📦 Conjuntos de datos compatibles con LeRobot: Listos para entrenar con GR00T N1x, PI0, SmolVLA, ACT y políticas de Diffusion
  • 🔄 Integración con EnvHub: Carga entornos desde HuggingFace EnvHub con una sola línea

Instalación

Prerrequisitos

Los requisitos de hardware son los mismos que los de Isaac Sim y se detallan en Requisitos de Isaac Sim.

  • GPU de NVIDIA con soporte para CUDA
  • Controlador de NVIDIA compatible con IsaacSim 5.1.0
  • Linux (Ubuntu 22.04 / 24.04)

Configuración

# 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

Evaluación de políticas

Políticas preentrenadas

Las siguientes políticas entrenadas están disponibles:

PolíticaArquitecturaTareaEnlace
pi05-arena-gr1-microwavePI0.5GR1 MicroondasHuggingFace
smolvla-arena-gr1-microwaveSmolVLAGR1 MicroondasHuggingFace

Evaluar 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

Evaluar 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.

Qué esperar

Durante la evaluación, verás una barra de progreso que muestra la tasa de éxito actual:

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

Grabación de video

Para habilitar la grabación de video durante la evaluación, añade las siguientes banderas a tu comando:

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

Para más detalles sobre la grabación de video, consulte la Documentación de grabación de 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

Directorio de salida

Los videos de evaluación se guardan en el directorio de salida con la siguiente estructura:

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

Por ejemplo:

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

Políticas de entrenamiento

Para obtener más información sobre el entrenamiento de políticas con LeRobot, consulte la documentación de entrenamiento:

Se pueden encontrar conjuntos de datos de muestra de IsaacLab Arena en HuggingFace Hub para experimentar:

DatasetDescripciónFrames
Arena-GR1-Manipulation-TaskManipulación de microondas GR1~4K
Arena-G1-Loco-Manipulation-TaskG1 manipulación~4K

Configuración del entorno

Opciones de configuración completas

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
)

Uso avanzado de Environment Hub directamente

Crea un archivo llamado test_env_load_arena.py o descárgalo desde 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()

Ejecutar con:

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

Creación de nuevos entornos

Primero, cree un nuevo entorno de IsaacLab Arena siguiendo la Documentación de IsaacLab Arena.

Clona nuestro repositorio de EnvHub:

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

Modifica el archivo example_envs.yaml en función de tu nuevo entorno. Sube tu repositorio modificado a 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.

Luego, al evaluar, usa tu nuevo entorno:

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

¡Esperamos con interés tus contribuciones!

Solución de problemas

Memoria insuficiente de CUDA

Reduce batch_size o usa una GPU con más VRAM:

--eval.batch_size=1

EULA no aceptado

Establezca las variables de entorno antes de ejecutar:

export ACCEPT_EULA=Y
export PRIVACY_CONSENT=Y

La grabación de video no funciona

Habilitar las cámaras al ejecutar en modo sin interfaz:

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

Incompatibilidad de la dimensión de la salida de la política

Asegúrate de que action_dim coincida con tu política:

--env.action_dim=36

Errores de libGLU.so.1 durante la inicialización de Isaac Sim

Asegúrate de tener instaladas las siguientes dependencias, es probable que esto ocurra en máquinas sin interfaz gráfica.

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

Véase también

Lightwheel LW-BenchHub

Lightwheel está incorporando Lightwheel-Libero-Tasks y Lightwheel-RoboCasa-Tasks, con 268 tareas, al ecosistema de LeRobot. LW-BenchHub recopila y genera conjuntos de datos a gran escala mediante teleoperación que cumplen con la especificación de LeRobot, lo que permite flujos de trabajo de entrenamiento y evaluación listos para usar. Con la interfaz unificada que proporciona EnvHub, los desarrolladores pueden construir rápidamente pipelines experimentales de extremo a extremo.

Instalación

Si has seguido los pasos de Instalación, puedes instalar LW-BenchHub con:

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 obtener instrucciones más detalladas, consulte la Documentación de LW-BenchHub.

Lightwheel Tasks Dataset

Los conjuntos de datos de LW-BenchHub están disponibles en HuggingFace Hub:

DatasetDescripciónTareasFrames
Lightwheel-Tasks-X7SX7S LIBERO y 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 las políticas de entrenamiento, consulte la sección Políticas de entrenamiento.

Evaluación de políticas

Políticas preentrenadas

Las siguientes políticas entrenadas están disponibles:

PolíticaArquitecturaTareaDiseñoRobotEnlace
smolvla-double-piper-pnpSmolVLAL90K1PutTheBlackBowlOnThePlatelibero-1-1DoublePiper-AbsHuggingFace

Evaluar 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

Configuración del entorno

La evaluación puede iniciarse rápidamente modificando las configuraciones de robot, task y layout en el archivo de configuración.

Opciones de configuración completas

# =========================
# 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]

Véase también

Update on GitHub