LeRobot documentation
RoboTwin 2.0
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은 SAPIEN 물리 엔진을 기반으로 구축된 대규모 양팔 조작 벤치마크입니다. 50개 작업(현재 main 기준)에 걸쳐 양손 로봇 정책의 표준화된 평가 프로토콜을 제공하며, 강한 도메인 랜덤화(클러터, 조명, 배경, 테이블 높이, 언어 지시)를 지원합니다.
- 논문: RoboTwin 2.0: 견고한 양손 로봇 조작을 위한 강력한 도메인 랜덤화를 갖춘 확장 가능한 데이터 생성기 및 벤치마크
- GitHub: RoboTwin-Platform/RoboTwin
- 리더보드: robotwin-platform.github.io/leaderboard
- 데이터셋: lerobot/robotwin_unified

개요
| 속성 | 값 |
|---|---|
| 작업 | 50개의 양팔 조작 작업 |
| 로봇 | Aloha-AgileX 양팔 (14 DOF, 팔당 7개) |
| 액션 공간 | [-1, 1] 범위의 14차원 결합 공간, 연속 |
| 카메라 | head_camera, left_camera, right_camera |
| 시뮬레이터 | SAPIEN (MuJoCo 아님) |
| 평가 프로토콜 | 100 episodes/task, 50 demo_clean 데모 |
| 평가 설정 | 쉬움 (demo_clean) 및 어려움 (demo_randomized) |
사용 가능한 작업
RoboTwin 2.0은 상위 envs/ 디렉터리에 50개의 듀얼 암 조작 태스크를 제공합니다. 공식 목록은 상위 저장소에서 그대로 복사된 src/lerobot/sim/integrations/robotwin.py의 ROBOTWIN_TASKS 튜플입니다. 태스크 예시:
| 작업 | CLI 이름 | 카테고리 |
|---|---|---|
| Beat block with hammer | beat_block_hammer | 도구 사용 |
| 벨/알람 시계 클릭 | click_bell | 정밀 프레스 |
| Stack blocks (2 / 3) | stack_blocks_two/three | 스택킹 |
| 그릇 쌓기 (2 / 3) | stack_bowls_two/three | 스택킹 |
| 인계 블록 / 마이크 | handover_block | 양수 좌표 |
| 냄비를 들어 올립니다 | lift_pot | 양손으로 들어 올리기 |
| 병을 흔들어 주세요 | shake_bottle | 연속적인 움직임 |
| 스위치 전환 | turn_switch | 관절형 객체 |
| Stamp seal | stamp_seal | 정밀도 위치 |
| Scan object | scan_object | 모바일 조작 |
--env.task에 쉼표로 구분된 목록을 전달하여 단일 eval sweep에서 여러 작업을 실행할 수 있습니다.
`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()`.
데이터셋
RoboTwin 2.0 데이터셋은 Hugging Face Hub에서 LeRobot v3.0 형식으로 사용할 수 있습니다:
lerobot/robotwin_unified
모든 50개 작업에 걸쳐 사전 수집된 100,000개 이상의 궤적을 포함합니다(79.6 GB, Apache 2.0 라이선스). 포맷 변환이 필요하지 않으며, 이미 비디오 관측값과 액션 라벨을 갖춘 올바른 LeRobot v3.0 스키마로 제공됩니다.
HF Datasets 라이브러리로 직접 로드할 수 있습니다:
from datasets import load_dataset
ds = load_dataset("lerobot/robotwin_unified", split="train")설치
RoboTwin 2.0은 NVIDIA GPU가 장착된 Linux가 필요합니다(SAPIEN은 Vulkan으로 렌더링합니다). 그 플래너인 CuRobo와 pytorch3d는 torch 2.7.1에 대해 CUDA 코드를 컴파일하는데, 이는 LeRobot의 torch와 일치하지 않으므로 RoboTwin은 lerobot-env-server 뒤에서 자체 환경에서 실행되며, 정책 측에는 LeRobot만 필요합니다.
서빙된 이미지 (권장)
lerobot-env-server --config_path=docker/sim/configs/robotwin.yaml --sim.task=beat_block_hammer --docker=true첫 실행 시 docker/Dockerfile.sim의 robotwin_native 단계가 빌드됩니다(약 20분 소요, 대부분 pytorch3d와 CuRobo 빌드). 작은 머신에서는 먼저 메모리 한도를 설정하여 이미지를 직접 빌드한 후 서버가 이를 재사용하도록 하세요:
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 .여기서 8.6은 GPU의 compute capability입니다. 아래 평가 명령에 --env.server.endpoint=tcp/127.0.0.1:7448을 추가하세요.
네이티브 환경
Docker 없이 서버를 실행하려면, 테스트된 레시피인 docker/Dockerfile.sim의 robotwin_native 단계를 별도의 가상 환경에서 재현하십시오. 여기에는 CUDA 12.8 nvcc, torch 2.7.1, 고정된 RoboTwin 커밋 및 자산, CuRobo v0.7.8, 그리고 RoboTwin의 mplib 및 SAPIEN 패치가 포함됩니다. 그런 다음 --no-deps와 docker/sim/requirements.txt를 추가하여 LeRobot을 설치하고, 위의 명령에서 --docker=true를 제거하십시오(Simulation: local or served 참고).
평가
표준 평가 (권장)
공식 프로토콜(100 에피소드)을 사용하여 단일 작업에서 정책을 평가합니다:
lerobot-eval \
--policy.path="your-hf-policy-id" \
--env.type=robotwin \
--env.task=beat_block_hammer \
--eval.batch_size=1 \
--eval.n_episodes=100단일 작업 빠른 확인
lerobot-eval \
--policy.path="your-hf-policy-id" \
--env.type=robotwin \
--env.task=beat_block_hammer \
--eval.batch_size=1 \
--eval.n_episodes=5멀티 태스크 스윕
한 번의 실행에서 여러 작업을 평가합니다:
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전체 벤치마크(모든 50개 작업)
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.
카메라 구성
기본적으로 세 개의 카메라가 모두 포함됩니다:
| 카메라 키 | 설명 |
|---|---|
head_camera | 몸통에 장착된 상부 시점 |
left_camera | 왼쪽 손목에 장착된 카메라 |
right_camera | 오른쪽 손목에 장착된 카메라 |
카메라의 하위 집합을 사용하려면 --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환경 구성 참조
RoboTwinEnvConfig의 주요 매개변수:
| 매개변수 | 기본값 | 설명 |
|---|---|---|
task | "beat_block_hammer" | 쉼표로 구분된 작업 이름 |
fps | 25 | 시뮬레이션 FPS |
episode_length | 1200 | 에피소드당 최대 스텝 |
obs_type | "pixels_agent_pos" | "pixels" 또는 "pixels_agent_pos" |
camera_names | "head_camera,left_camera,right_camera" | 쉼표로 구분된 활성 카메라 |
observation_height | 240 | 카메라 픽셀 높이 |
observation_width | 320 | 카메라 픽셀 폭 |
리더보드 제출
결과를 RoboTwin 2.0 리더보드에 제출할 수 있습니다. 공식 프로토콜은 다음을 요구합니다:
- 각 작업당 50개의
demo_clean데모로 학습 - Each task is evaluated over 100 episodes.
- Easy(
demo_clean)와 Hard(demo_randomized) 설정에 대해 성공률을 각각 보고
제출 지침에 대해서는 RoboTwin 2.0 문서를 참조하세요.
Update on GitHub