LeRobot documentation
NVIDIA RoboLab
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.
- Artículo: RoboLab: A High-Fidelity Simulation Benchmark for Analysis of Task Generalist Policies
- GitHub: NVlabs/RoboLab
- Página del proyecto y clasificación: research.nvidia.com/labs/srl/projects/robolab
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=10El 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 licenseEste 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
| Clave | Forma | Contenido |
|---|---|---|
observation.images.over_shoulder_left_camera | 720 × 1280 × 3 | Cámara exterior, a la izquierda del robot |
observation.images.wrist_cam | 720 × 1280 × 3 | Cámara de muñeca |
observation.state | 8 | joint_0.pos … joint_6.pos (radianes), gripper.pos (0 abierto, 1 cerrado) |
action | 8 | Objetivos 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ámetro | Predeterminado | Descripción |
|---|---|---|
task | empty: todos los 120 | Nombres 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_width | no definido: 720 × 1280 | Redimensiona 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.