LeRobot documentation

NVIDIA RoboLab

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.7.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

NVIDIA RoboLab

RoboLab es un benchmark de 120 tareas de manipulación sobre una mesa para un robot DROID (un brazo Franka Panda con una pinza Robotiq 2F-85), simulado con NVIDIA Isaac Lab y renderizado con el renderizador RTX de Isaac Sim. Las tareas abarcan pick-and-place, apilado, clasificación, reorientación y variantes condicionadas por lenguaje (relaciones espaciales, colores, conteo, instrucciones vagas), clasificadas como simples, moderadas o complejas.

Requisitos y licencias

  • GPU: una GPU NVIDIA RTX (Isaac Sim renderiza con RTX). Un env de una tarea ocupa aproximadamente 7 GB de VRAM, incluido Isaac Sim; cada env adicional en la misma tarea añade entre 1 y 2 GB (la guía de RoboLab indica que una GPU de 48 GB puede soportar de 30 a 100 envs, dependiendo de la tarea). Tu policy necesita memoria adicional aparte.
  • Isaac Sim: RoboLab se ejecuta aquí con Isaac Sim 6.0.1 e Isaac Lab 3.0 beta 2, el stack de Isaac Sim 6 de RoboLab. Al usar Isaac Sim se acepta la licencia de NVIDIA Isaac Sim; la imagen de Docker la acepta por ti, al igual que la propia imagen de RoboLab.
  • Recursos: las escenas, objetos y modelos de robots de RoboLab (unos 6 GB, de su git LFS) están licenciados principalmente bajo CC BY-NC-SA 4.0, aunque algunos lo están bajo otros términos; consulte THIRD_PARTY_NOTICES.md de RoboLab. LeRobot no los distribuye: la imagen los descarga de NVlabs cuando se construye.
  • Docker, para la configuración de servidor siguiente: BuildKit (docker buildx) para construir la imagen, y el NVIDIA Container Toolkit para que el contenedor pueda usar la GPU.

Ejecútalo servido (recomendado)

Isaac Lab 3.0 beta fija transformers==4.57.6 (por lo tanto huggingface-hub<1.0), numpy==2.3.1 y packaging==26.0, que las propias dependencias de LeRobot no aceptan. Ejecuta RoboLab en su propia imagen Docker, detrás de lerobot-env-server, y tu política en tu entorno habitual de LeRobot:

# Build the image on first use (Isaac Sim and the assets: a long first build), then serve every task
lerobot-env-server --config_path=docker/sim/configs/robolab.yaml --docker=true

# In your LeRobot environment
lerobot-eval \
  --policy.path=<your DROID joint-position policy> \
  --env.type=robolab \
  --env.task=BananaInBowlTask \
  --env.server.endpoint=tcp/127.0.0.1:7448 \
  --rename_map='{"observation.images.over_shoulder_left_camera": "observation.images.<exterior>", "observation.images.wrist_cam": "observation.images.<wrist>"}' \
  --eval.batch_size=1 \
  --eval.n_episodes=10

El servidor ejecuta cualquiera de sus tareas configuradas: el cliente abre la que solicita y el servidor la construye en el Isaac Sim en ejecución (unos segundos). Iniciar el propio Isaac Sim tarda desde segundos hasta unos minutos. Si no encuentra una GPU en el contenedor (ERROR_INCOMPATIBLE_DRIVER), consulte la nota sobre Vulkan en Simulation.

Ejecútalo localmente

Con Isaac Sim y RoboLab instalados en su entorno, agregue --env.server.endpoint y lerobot-eval ejecutará RoboLab en su propio proceso. Instale primero la pila de RoboLab y luego LeRobot sin sus dependencias, tal como lo hace la imagen de Docker:

GIT_LFS_SKIP_SMUDGE=1 git clone https://github.com/NVlabs/RoboLab.git && git -C RoboLab lfs pull
uv venv --python 3.12 && source .venv/bin/activate
uv pip install "isaaclab[isaacsim]==3.0.0b2.post1" -e ./RoboLab \
  --extra-index-url https://pypi.nvidia.com --index-strategy unsafe-best-match
uv pip install --no-deps -e ./lerobot
uv pip install draccus termcolor eclipse-zenoh  # what the rest of LeRobot's simulation code imports
export OMNI_KIT_ACCEPT_EULA=YES                 # accepts the Isaac Sim license

Este entorno no tiene espacio para políticas que requieran transformers 5 (π₀.₅, SmolVLA, …): ejecútalas servidas.

Tareas

Cada una de las 120 tareas de RoboLab es su propia suite con un id de tarea, por lo que lerobot-eval informa una tasa de éxito por tarea y en general. --env.task acepta una lista de nombres de tareas separados por comas, p. ej. BananaInBowlTask,RubiksCubeAndBananaTask; déjalo vacío para todas las 120. Los nombres de las tareas, las instrucciones y la dificultad se enumeran en los metadatos de tareas de RoboLab.

Todos los entornos de una tarea comparten un mismo mundo de Isaac Lab en la GPU: --eval.batch_size=N ejecuta N episodios a la vez en ese mundo.

Observaciones y acciones

ClaveFormaContenido
observation.images.over_shoulder_left_camera720 × 1280 × 3Cámara exterior, a la izquierda del robot
observation.images.wrist_cam720 × 1280 × 3Cámara de muñeca
observation.state8joint_0.pos … joint_6.pos (radianes), gripper.pos (0 abierto, 1 cerrado)
action8Objetivos absolutos conjuntos para las 7 articulaciones, luego el agarre: cerrado por encima de 0.5

El robot se ejecuta a 15 Hz (la física a 120 Hz, 8 pasos de física por acción), y LeRobot lo registra como robot_type="Franka", tal como en DROID. Cada episodio tiene el límite de tiempo de su tarea (de 20 a 300 s, es decir, de 300 a 4.500 pasos); un episodio que tiene éxito termina como terminado, y uno que agota el tiempo como truncado. La instrucción de la tarea es la descripción de la tarea del entorno.

Robot de simulación

RoboLab también puede sustituir a un robot DROID real en lerobot-rollout, lerobot-record y las demás herramientas de robots (ver Simulación: local o servida):

lerobot-rollout \
  --robot.type=sim --robot.env.type=robolab --robot.env.task=BananaInBowlTask --robot.task_id=0 \
  --robot.env.server.endpoint=tcp/127.0.0.1:7448 \
  --policy.path=<your policy> --fps=15 ...

Referencia de configuración del entorno

ParámetroPredeterminadoDescripción
taskempty: todos los 120Nombres de tareas separados por comas
cameras"WRIST_LEFT"Un preset de cámara de robolab/registrations/droid/camera_presets.py de RoboLab, por ejemplo WRIST_LEFT_RIGHT para ambas cámaras exteriores
instruction_type"default"Qué instrucción da cada tarea: default, vague o specific
observation_height, observation_widthno definido: 720 × 1280Redimensiona los fotogramas de la cámara primero en la GPU, por ejemplo, para enviar fotogramas más pequeños desde un servidor

Comparación con el tablero de clasificación

El tablero de clasificación de RoboLab evalúa 10 episodios por tarea con la instrucción predeterminada, las cámaras WRIST_LEFT y acciones de posición de articulaciones, que son los valores predeterminados de LeRobot. No especifica qué versión de Isaac Sim generó sus resultados, y el valor predeterminado de RoboLab es Isaac Sim 5.0: la física y el renderizado difieren entre versiones de Isaac Sim, por lo que los resultados de esta configuración de Isaac Sim 6.0.1 no son directamente comparables.

Update on GitHub