LeRobot documentation

RoboTwin 2.0

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

RoboTwin 2.0

The commands below run the simulator locally. To keep its dependencies away from your policy's, serve it instead with `lerobot-env-server --config_path=docker/sim/configs/robotwin.yaml --sim.task=--docker=true`, where `` is the command's `--env.task`, and add `--env.server.endpoint=tcp/127.0.0.1:7448` to the command. A server runs the task it was started with (see [Simulation: local or served](./simulation)).

RoboTwin 2.0 es un benchmark de manipulación bimanual a gran escala construido sobre el motor de física SAPIEN. Proporciona un protocolo de evaluación estandarizado para políticas robóticas bimanuales en 50 tareas (según el main de la versión principal), con una fuerte aleatorización de dominio (desorden, iluminación, fondo, altura de la mesa y instrucciones en lenguaje natural).

RoboTwin 2.0 benchmark overview

Resumen

PropiedadValor
Tareas50 tareas de manipulación con dos brazos
RobotAloha-AgileX bimanual (14 GDL, 7 por brazo)
Espacio de accionesEspacio conjunto de 14 dimensiones, continuo en [-1, 1]
Cámarashead_camera, left_camera, right_camera
SimuladorSAPIEN (no MuJoCo)
Protocolo de evaluación100 episodios/tarea, 50 demostraciones demo_clean
Configuración de evaluaciónFácil (demo_clean) y Difícil (demo_randomized)

Tareas disponibles

RoboTwin 2.0 incluye 50 tareas de manipulación con brazos dobles en su directorio envs/ de origen. La lista canónica es la tupla ROBOTWIN_TASKS en src/lerobot/sim/integrations/robotwin.py, copiada textualmente del repositorio de origen. Tareas de ejemplo:

TareaNombre de la CLICategoría
Golpea el bloque con el martillobeat_block_hammerUso de herramientas
Haz clic en la campana / el reloj de alarmaclick_bellPrensa de precisión
Bloques apilados (2 / 3)stack_blocks_two/threeApilamiento
Apilar cuencos (2 / 3)stack_bowls_two/threeApilamiento
Bloque de transición / micrófonohandover_blockCoord. bimanual
Levantar la ollalift_potLevantamiento bimanual
Agitar el frascoshake_bottleMovimiento continuo
Interruptorturn_switchObjeto articulado
Sellostamp_sealLugar de precisión
Escanear objetoscan_objectManipulación móvil.

Pase una lista separada por comas a --env.task para ejecutar varias tareas en una sola evaluación.

`open_laptop` is currently broken upstream (its `check_success()` uses `self.arm_tag`, which is only set inside the scripted-expert `play_once()` path and therefore unavailable during normal policy eval). Avoid it until the upstream bug is fixed, or patch the task to default `self.arm_tag = "left"` in `load_actors()`.

Dataset

El conjunto de datos RoboTwin 2.0 está disponible en el Hugging Face Hub en el formato LeRobot v3.0:

lerobot/robotwin_unified

Contiene más de 100.000 trayectorias pre-recopiladas en las 50 tareas (79,6 GB, licencia Apache 2.0). No se necesita conversión de formato: ya está en el esquema correcto de LeRobot v3.0 con observaciones de video y etiquetas de acción.

Puedes cargarlo directamente con la biblioteca HF Datasets:

from datasets import load_dataset

ds = load_dataset("lerobot/robotwin_unified", split="train")

Instalación

RoboTwin 2.0 requiere Linux con una GPU de NVIDIA (SAPIEN renderiza con Vulkan). Sus planificadores, CuRobo y pytorch3d, compilan código CUDA contra torch 2.7.1, que no coincide con el torch de LeRobot, por lo que RoboTwin se ejecuta en su propio entorno detrás de lerobot-env-server y el lado de la política solo necesita LeRobot.

Imagen servida (recomendado)

lerobot-env-server --config_path=docker/sim/configs/robotwin.yaml --sim.task=beat_block_hammer --docker=true

La primera ejecución construye la etapa robotwin_native de docker/Dockerfile.sim (aproximadamente 20 minutos, principalmente pytorch3d y CuRobo). En una máquina pequeña, construya la imagen usted mismo primero con memoria acotada; el servidor la reutilizará a continuación:

docker build -f docker/Dockerfile.sim --build-arg SIM=robotwin \
  --build-arg MAX_JOBS=1 --build-arg CUROBO_CUDA_ARCHS=8.6 -t lerobot-sim-robotwin:local .

donde 8.6 es la capacidad de cálculo de tu GPU. Añade --env.server.endpoint=tcp/127.0.0.1:7448 a los comandos de evaluación que se indican a continuación.

Entorno nativo

Para ejecutar el servidor sin Docker, reproduce la etapa robotwin_native de docker/Dockerfile.sim en un entorno virtual separado, que es la receta probada: el nvcc de CUDA 12.8, torch 2.7.1, el commit y los assets fijados de RoboTwin, CuRobo v0.7.8, y los parches de mplib y SAPIEN de RoboTwin. Luego instala LeRobot con --no-deps más docker/sim/requirements.txt, y elimina --docker=true del comando anterior (ver Simulación: local o servida).

Evaluación

Evaluación estándar (recomendada)

Evalúe una política en una sola tarea con el protocolo oficial (100 episodios):

lerobot-eval \
  --policy.path="your-hf-policy-id" \
  --env.type=robotwin \
  --env.task=beat_block_hammer \
  --eval.batch_size=1 \
  --eval.n_episodes=100

Comprobación rápida de una sola tarea

lerobot-eval \
  --policy.path="your-hf-policy-id" \
  --env.type=robotwin \
  --env.task=beat_block_hammer \
  --eval.batch_size=1 \
  --eval.n_episodes=5

Barrido de tareas múltiples

Evaluar en varias tareas en una sola ejecución:

lerobot-eval \
  --policy.path="your-hf-policy-id" \
  --env.type=robotwin \
  --env.task=beat_block_hammer,click_bell,handover_block,stack_blocks_two \
  --eval.batch_size=1 \
  --eval.n_episodes=100

Benchmarks completos (las 50 tareas)

lerobot-eval \
  --policy.path="your-hf-policy-id" \
  --env.type=robotwin \
  --env.task=adjust_bottle,beat_block_hammer,blocks_ranking_rgb,blocks_ranking_size,click_alarmclock,click_bell,dump_bin_bigbin,grab_roller,handover_block,handover_mic,hanging_mug,lift_pot,move_can_pot,move_pillbottle_pad,move_playingcard_away,move_stapler_pad,open_microwave,pick_diverse_bottles,pick_dual_bottles,place_a2b_left,place_a2b_right,place_bread_basket,place_bread_skillet,place_burger_fries,place_can_basket,place_cans_plasticbox,place_container_plate,place_dual_shoes,place_empty_cup,place_fan,place_mouse_pad,place_object_basket,place_object_scale,place_object_stand,place_phone_stand,place_shoe,press_stapler,put_bottles_dustbin,put_object_cabinet,rotate_qrcode,scan_object,shake_bottle,shake_bottle_horizontally,stack_blocks_three,stack_blocks_two,stack_bowls_three,stack_bowls_two,stamp_seal,turn_switch \
  --eval.batch_size=1 \
  --eval.n_episodes=100
`open_laptop` is intentionally omitted above because of the upstream `self.arm_tag` bug (see the **Available tasks** section). Re-add it once the upstream fix lands.

Configuración de la cámara

Por defecto, se incluyen las tres cámaras:

Tecla de cámaraDescripción
head_cameraVista cenital montada en el torso
left_cameraCámara montada en la muñeca del brazo izquierdo
right_cameraCámara montada en la muñeca del brazo derecho

Para usar un subconjunto de cámaras, sobrescribe --env.camera_names:

lerobot-eval \
  --policy.path="your-hf-policy-id" \
  --env.type=robotwin \
  --env.task=beat_block_hammer \
  --env.camera_names="head_camera,left_camera" \
  --eval.batch_size=1 \
  --eval.n_episodes=10

Referencia de configuración del entorno

Parámetros clave de RoboTwinEnvConfig:

ParámetroPredeterminadoDescripción
task"beat_block_hammer"Nombre(s) de tarea(s) separados por comas
fps25FPS de simulación
episode_length1200Pasos máximos por episodio
obs_type"pixels_agent_pos""pixels" o "pixels_agent_pos"
camera_names"head_camera,left_camera,right_camera"Cámaras activas separadas por comas
observation_height240Altura en píxeles de la cámara
observation_width320Ancho de píxeles de la cámara

Envío al ranking

Los resultados pueden enviarse al tablero de clasificación de RoboTwin 2.0. El protocolo oficial requiere:

  • Entrenamiento con 50 demo_clean demostraciones por tarea
  • Evaluando 100 episodios por tarea
  • Tasa de éxito reportada por separado para los ajustes fácil (demo_clean) y diffícil (demo_randomized)

Para obtener instrucciones de envío, consulte la documentación de RoboTwin 2.0.

Update on GitHub