LeRobot documentation
NVIDIA RoboLab
NVIDIA RoboLab
RoboLab est un benchmark de 120 tâches de manipulation sur table pour un robot DROID (un bras Franka Panda avec une pince Robotiq 2F-85), simulé avec NVIDIA Isaac Lab et rendu avec le moteur de rendu RTX d’Isaac Sim. Les tâches couvrent le pick-and-place, le empilement, le tri, la réorientation et des variantes conditionnées par le langage (relations spatiales, couleurs, comptage, instructions vagues), classées en simple, modéré ou complexe.
- Article : RoboLab : un benchmark de simulation haute fidélité pour l’analyse des politiques généralistes de tâches
- GitHub : NVlabs/RoboLab
- Page du projet et classement : research.nvidia.com/labs/srl/projects/robolab
Exigences et licences
- GPU : un GPU NVIDIA RTX (Isaac Sim effectue le rendu avec RTX). Un environnement d’une tâche occupe environ 7 Go de VRAM, Isaac Sim inclus ; chaque environnement supplémentaire dans la même tâche ajoute environ 1 à 2 Go (le guide de RoboLab indique qu’il est possible de faire tourner de 30 à 100 environnements sur un GPU de 48 Go, selon la tâche). Votre politique nécessite sa propre mémoire en plus.
- Isaac Sim : RoboLab s’exécute ici sur Isaac Sim 6.0.1 et Isaac Lab 3.0 beta 2, la pile Isaac Sim 6 de RoboLab. L’utilisation d’Isaac Sim implique l’acceptation de la licence NVIDIA Isaac Sim ; l’image Docker l’accepte pour vous, tout comme l’image propre à RoboLab.
- Assets : les scènes, objets et modèles de robots de RoboLab (environ 6 Go, issus de son git LFS) sont principalement sous licence CC BY-NC-SA 4.0, certains étant régis par d'autres conditions ; consultez le fichier THIRD_PARTY_NOTICES.md de RoboLab. LeRobot ne les distribue pas : l'image les télécharge depuis NVlabs lors de sa construction.
- Docker, pour la configuration de service ci-dessous : BuildKit (
docker buildx) pour construire l’image, et le NVIDIA Container Toolkit afin que le conteneur puisse utiliser le GPU.
L’exécuter en mode service (recommandé)
Isaac Lab 3.0 beta fixe transformers==4.57.6 (d’où huggingface-hub<1.0), numpy==2.3.1 et packaging==26.0, ce que les propres dépendances de LeRobot n’acceptent pas. Exécutez RoboLab dans sa propre image Docker, derrière lerobot-env-server, et votre politique dans votre environnement LeRobot habituel :
# 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=10Le serveur exécute l’une de ses tâches configurées : le client ouvre celle qu’il demande, et le serveur la construit dans l’instance Isaac Sim en cours d’exécution (quelques secondes). Le démarrage d’Isaac Sim lui-même prend de quelques secondes à quelques minutes. S’il ne détecte pas de GPU dans le conteneur (ERROR_INCOMPATIBLE_DRIVER), consultez la note Vulkan dans Simulation.
L'exécuter localement
Avec Isaac Sim et RoboLab installés dans votre environnement, ajoutez --env.server.endpoint et lerobot-eval exécute RoboLab dans son propre processus. Installez d’abord la pile RoboLab, puis LeRobot sans ses dépendances, comme le fait l’image 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 licenseCet environnement ne dispose pas de la place nécessaire pour les politiques qui requièrent transformers 5 (π₀.₅, SmolVLA, …) : exécutez-les en mode servi.
Tâches
Chaque l’une des 120 tâches de RoboLab constitue sa propre suite avec un identifiant de tâche unique, de sorte que lerobot-eval rapporte un taux de réussite par tâche et un taux global. --env.task accepte une liste de noms de tâches séparés par des virgules, par exemple BananaInBowlTask,RubiksCubeAndBananaTask ; laissez-le vide pour les 120 tâches. Les noms des tâches, les instructions et la difficulté sont répertoriés dans les métadonnées des tâches de RoboLab.
Tous les environnements d'une tâche partagent un même monde Isaac Lab sur le GPU : --eval.batch_size=N exécute N épisodes simultanément dans ce monde.
Observations et actions
| Clé | Forme | Contenu |
|---|---|---|
observation.images.over_shoulder_left_camera | 720 × 1280 × 3 | Caméra extérieure, à gauche du robot |
observation.images.wrist_cam | 720 × 1280 × 3 | Caméra de poignet |
observation.state | 8 | joint_0.pos … joint_6.pos (radians), gripper.pos (0 ouvert, 1 fermé) |
action | 8 | Cibles absolues conjointes pour les 7 articulations, puis la pince : fermée au-dessus de 0,5 |
Le robot fonctionne à 15 Hz (physique à 120 Hz, 8 étapes de physique par action), et LeRobot l’enregistre avec robot_type="Franka", comme dans DROID. Chaque épisode a la limite de temps de sa tâche (de 20 à 300 s, soit de 300 à 4 500 étapes) ; un épisode réussi se termine en « terminated », tandis qu’un épisode qui atteint la limite de temps se termine en « truncated ». L’instruction de la tâche est la description de la tâche de l’environnement.
Robot de simulation
RoboLab peut également remplacer un robot DROID réel dans lerobot-rollout, lerobot-record et les autres outils robotiques (voir Simulation : locale ou servie) :
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 ...
Référence de configuration de l'environnement
| Paramètre | Par défaut | Description |
|---|---|---|
task | empty: les 120 | Noms de tâches séparés par des virgules |
cameras | "WRIST_LEFT" | Un préréglage de caméra de RoboLab, robolab/registrations/droid/camera_presets.py, par exemple WRIST_LEFT_RIGHT pour les deux caméras extérieures |
instruction_type | "default" | L'instruction donnée par chaque tâche : default, vague ou specific |
observation_height, observation_width | unset : 720 × 1280 | Redimensionner les images de la caméra d'abord sur le GPU, par exemple pour envoyer des images plus petites depuis un serveur |
Comparaison avec le tableau des classements
Le classement de RoboLab évalue 10 épisodes par tâche avec l’instruction par défaut, les caméras WRIST_LEFT et des actions en position articulaire, qui sont les valeurs par défaut de LeRobot. Il ne précise pas quelle version d’Isaac Sim a produit ses résultats, et la valeur par défaut de RoboLab est Isaac Sim 5.0 : la physique et le rendu diffèrent entre les versions d’Isaac Sim, de sorte que les chiffres issus de cette configuration Isaac Sim 6.0.1 ne sont pas directement comparables.