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

O RoboTwin 2.0 é um benchmark de manipulação com dois braços em larga escala construído sobre o motor de física SAPIEN. Ele fornece um protocolo de avaliação padronizado para políticas robóticas bimanuais em 50 tarefas (conforme o main upstream), com forte randomização de domínio (desordem, iluminação, fundo, altura da mesa e instruções em linguagem natural).

RoboTwin 2.0 benchmark overview

Visão geral

PropriedadeValor
Tarefas50 tarefas de manipulação com dois braços
RobôAloha-AgileX bimanual (14 GDL, 7 por braço)
Espaço de ações14-dim espaço conjunto, contínuo em [-1, 1]
Câmerashead_camera, left_camera, right_camera
SimuladorSAPIEN (não MuJoCo)
Protocolo de avaliação100 episódios/tarefa, 50 demonstrações demo_clean
Configurações de avaliaçãoFácil (demo_clean) e Difícil (demo_randomized)

Tarefas disponíveis

O RoboTwin 2.0 inclui 50 tarefas de manipulação com braços duplos em seu diretório envs/ no repositório de origem. A lista canônica é a tupla ROBOTWIN_TASKS em src/lerobot/sim/integrations/robotwin.py, espelhada literalmente do repositório de origem. Exemplos de tarefas:

TarefaNome da CLICategoria
Bata no bloco com o martelobeat_block_hammerUso de ferramentas
Clique no sino / despertadorclick_bellImpressão de precisão
Blocos da pilha (2 / 3)stack_blocks_two/threeEmpilhamento
Empilhar tigelas (2 / 3)stack_bowls_two/threeEmpilhamento
Bloco de passagem de bastão / microfonehandover_blockCoord. bimanual
Leve a panelalift_potLevantamento bimanual
Agite o frascoshake_bottleMovimento contínuo
Alternarturn_switchObjeto articulado
Selo de carimbostamp_sealLocal de precisão
Objeto de varredurascan_objectManipulação móvel.

Passe uma lista separada por vírgulas para --env.task para executar várias tarefas em uma única varredura de avaliação.

`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()`.

Conjunto de dados

O conjunto de dados RoboTwin 2.0 está disponível no formato LeRobot v3.0 no Hugging Face Hub:

lerobot/robotwin_unified

Ele contém mais de 100.000 trajetórias pré-coletadas em todas as 50 tarefas (79,6 GB, licença Apache 2.0). Não é necessária conversão de formato — ele já está no esquema LeRobot v3.0 correto, com observações em vídeo e rótulos de ação.

Você pode carregá-lo diretamente com a biblioteca HF Datasets:

from datasets import load_dataset

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

Instalação

O RoboTwin 2.0 requer Linux com uma GPU NVIDIA (o SAPIEN renderiza com Vulkan). Seus planejadores, CuRobo e pytorch3d, compilam código CUDA contra o torch 2.7.1, que não corresponde ao torch do LeRobot, portanto o RoboTwin é executado em seu próprio ambiente por trás do lerobot-env-server e o lado da política apenas precisa do LeRobot.

Imagem servida (recomendado)

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

A primeira execução compila o estágio robotwin_native do docker/Dockerfile.sim (cerca de 20 minutos, principalmente pytorch3d e CuRobo). Em uma máquina pequena, compile a imagem você mesmo primeiro com memória limitada; o servidor a reutilizará em seguida:

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 .

onde 8.6 é a capacidade de computação da sua GPU. Adicione --env.server.endpoint=tcp/127.0.0.1:7448 aos comandos de avaliação abaixo.

Ambiente nativo

Para executar o servidor sem Docker, reproduza o estágio robotwin_native do docker/Dockerfile.sim em um ambiente virtual separado, que é a receita testada: o CUDA 12.8 nvcc, torch 2.7.1, o commit e os assets fixados do RoboTwin, CuRobo v0.7.8, e os patches de mplib e SAPIEN do RoboTwin. Em seguida, instale o LeRobot com --no-deps mais docker/sim/requirements.txt, e remova --docker=true do comando acima (veja Simulação: local ou servida).

Avaliação

Avaliação padrão (recomendado)

Avalie uma política em uma única tarefa com o protocolo oficial (100 episódios):

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

Verificação rápida de tarefa única

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

Varredura multi-tarefa

Avalie em várias tarefas em uma única execução:

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

Benchmark completo (todas as 50 tarefas)

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.

Configuração da câmera

Por padrão, todas as três câmeras são incluídas:

Chave da câmeraDescrição
head_cameraVisão superior montada no torso
left_cameraCâmera de pulso no braço esquerdo
right_cameraCâmera de pulso do braço direito

Para usar um subconjunto de câmeras, substitua --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

Referência de configuração de ambiente

Principais parâmetros para RoboTwinEnvConfig:

ParâmetroPadrãoDescrição
task"beat_block_hammer"Nome(s) de tarefa(s) separados por vírgula
fps25FPS da simulação
episode_length1200Máximo de etapas por episódio
obs_type"pixels_agent_pos""pixels" ou "pixels_agent_pos"
camera_names"head_camera,left_camera,right_camera"Câmeras ativas separadas por vírgulas
observation_height240Altura em pixels da câmera
observation_width320Largura do pixel da câmera

Envio para o ranking

Os resultados podem ser enviados para o RoboTwin 2.0 leaderboard. O protocolo oficial exige:

  • Treinamento com 50 demo_clean demonstrações por tarefa
  • Avaliando 100 episódios por tarefa
  • Relatando a taxa de sucesso separadamente para as configurações Fácil (demo_clean) e Difícil (demo_randomized)

Para as instruções de envio, consulte a documentação do RoboTwin 2.0.

Update on GitHub