LeRobot documentation
NVIDIA RoboLab
NVIDIA RoboLab
RoboLab은 NVIDIA Isaac Lab으로 시뮬레이션하고 Isaac Sim의 RTX 렌더러로 렌더링된 DROID 로봇(Franka Panda 암과 Robotiq 2F-85 그리퍼 구성)을 위한 120개의 테이블 위 조작 작업 벤치마크입니다. 작업은 픽 앤 플레이스, 스택킹, 분류, 재배향 및 언어 조건 변형(공간 관계, 색상, 카운팅, 모호한 지시)을 포함하며, 난이도는 단순, 중간, 복잡으로 등급이 나뉩니다.
- 논문: RoboLab: Task Generalist Policies 분석을 위한 고충실도 시뮬레이션 벤치마크
- GitHub: NVlabs/RoboLab
- 프로젝트 페이지 및 리더보드: research.nvidia.com/labs/srl/projects/robolab
요구 사항 및 라이선스
- GPU: NVIDIA RTX GPU (Isaac Sim은 RTX로 렌더링합니다). 하나의 태스크에 대한 하나의 env는 Isaac Sim을 포함하여 약 7 GB의 VRAM을 사용합니다. 같은 태스크에서 추가되는 각 env는 약 1~2 GB를 추가로 사용합니다 (RoboLab 가이드에 따르면, 태스크에 따라 48 GB GPU에 30~100개의 env를 실행할 수 있습니다). 정책(policy)에는 이 외에 자체 메모리가 필요합니다.
- Isaac Sim: RoboLab은 여기에서 Isaac Sim 6.0.1과 Isaac Lab 3.0 beta 2, 즉 RoboLab의 Isaac Sim 6 스택을 기반으로 실행됩니다. Isaac Sim을 사용하면 NVIDIA Isaac Sim 라이선스에 동의하게 되며, Docker 이미지는 RoboLab 자체 이미지와 마찬가지로 이를 대신 동의해 줍니다.
- Assets: RoboLab의 장면, 객체 및 로봇 모델(약 6 GB, git LFS에서 제공)은 대부분 CC BY-NC-SA 4.0 라이선스를 따르며 일부는 다른 조건이 적용됩니다. 자세한 내용은 RoboLab의 THIRD_PARTY_NOTICES.md를 참조하세요. LeRobot은 이를 배포하지 않으며, 이미지를 빌드할 때 NVlabs에서 다운로드합니다.
- 아래 서빙 설정을 위해 Docker, 이미지를 빌드하는 BuildKit (
docker buildx), 그리고 컨테이너가 GPU를 사용할 수 있도록 하는 NVIDIA Container Toolkit이 필요합니다.
서빙으로 실행(권장)
Isaac Lab 3.0 beta는 transformers==4.57.6(따라서 huggingface-hub<1.0), numpy==2.3.1, packaging==26.0을 고정하고 있으며, 이는 LeRobot 자체의 종속성이 허용하지 않는 버전입니다. RoboLab은 lerobot-env-server 뒤에서 자체 Docker 이미지로 실행하고, 정책은 평소 사용하던 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=10서버는 구성된 작업 중 하나를 실행합니다. 클라이언트는 요청한 작업을 열고, 서버는 실행 중인 Isaac Sim에서 해당 작업을 빌드합니다(몇 초 소요). Isaac Sim 자체를 시작하는 데는 몇 초에서 몇 분까지 걸립니다. 컨테이너에서 GPU를 찾지 못하면(ERROR_INCOMPATIBLE_DRIVER), Simulation의 Vulkan 참고 사항을 확인하세요.
로컬에서 실행
환경에 Isaac Sim과 RoboLab이 설치되어 있으면, --env.server.endpoint를 제거하고 lerobot-eval을 실행하면 RoboLab이 자체 프로세스에서 실행됩니다. Docker 이미지가 수행하는 방식과 동일하게, 먼저 RoboLab 스택을 설치한 후 의존성 없이 LeRobot을 설치하세요.
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 license이 환경에서는 transformers 5가 필요한 정책(π₀.₅, SmolVLA, …)을 실행할 공간이 없습니다: 해당 정책은 서빙된 상태로 실행하세요.
작업
RoboLab의 120개 작업은 각각 하나의 작업 ID를 가진 독립적인 스위트이므로 lerobot-eval은 작업별 및 전체 성공률을 보고합니다. --env.task에는 쉼표로 구분된 작업 이름 목록을 지정하며, 예를 들어 BananaInBowlTask,RubiksCubeAndBananaTask와 같습니다. 비워 두면 120개 전체가 대상이 됩니다. 작업 이름, 지침 및 난이도는 RoboLab의 task metadata에 나열되어 있습니다.
태스크의 모든 env는 GPU에서 하나의 Isaac Lab world를 공유합니다: --eval.batch_size=N은 해당 world에서 N개의 에피소드를 동시에 실행합니다.
관찰과 행동
| 키 | Shape | 콘텐츠 |
|---|---|---|
observation.images.over_shoulder_left_camera | 720 × 1280 × 3 | 로봇 왼쪽의 외부 카메라 |
observation.images.wrist_cam | 720 × 1280 × 3 | 손목 카메라 |
observation.state | 8 | joint_0.pos … joint_6.pos (라디안), gripper.pos (0 열림, 1 닫힘) |
action | 8 | 7개 관절의 절대적 공동 목표값, 그다음 그리퍼: 0.5 이상이면 닫힘 |
로봇은 15 Hz로 동작하며(물리 시뮬레이션은 120 Hz, 액션당 8개의 물리 스텝), DROID와 마찬가지로 robot_type="Franka"로 LeRobot에 기록됩니다. 각 에피소드는 해당 작업의 시간 제한(20~300초, 즉 300~4,500 스텝)을 가지며, 성공한 에피소드는 terminated로, 시간 초과로 종료된 에피소드는 truncated로 처리됩니다. 작업의 지시문은 env의 작업 설명입니다.
Sim 로봇
RoboLab은 lerobot-rollout, lerobot-record 및 기타 로봇 도구에서 실제 DROID 로봇을 대신할 수 있습니다(시뮬레이션: 로컬 또는 서브 참고):
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 ...
환경 구성 참조
| 매개변수 | 기본값 | 설명 |
|---|---|---|
task | empty: 120개 | 쉼표로 구분된 작업 이름 |
cameras | "WRIST_LEFT" | RoboLab의 robolab/registrations/droid/camera_presets.py에 있는 카메라 프리셋, 예: 외부 카메라 양쪽에 사용되는 WRIST_LEFT_RIGHT |
instruction_type | "default" | 각 작업이 부여하는 지침: default, vague 또는 specific |
observation_height, observation_width | unset: 720 × 1280 | 서버에서 더 작은 프레임을 전송하기 위해 GPU에서 먼저 카메라 프레임을 리사이즈합니다. |
리더보드와 비교
RoboLab의 리더보드는 LeRobot의 기본값인 기본 지시문, WRIST_LEFT 카메라, 관절 위치 액션을 사용하여 각 태스크당 10에피소드를 평가합니다. 어떤 Isaac Sim 버전으로 수치를 산출했는지 명시하지 않으며, RoboLab의 기본값은 Isaac Sim 5.0입니다. Isaac Sim 버전 간에 물리 시뮬레이션과 렌더링이 다르므로, 이 Isaac Sim 6.0.1 환경에서 산출된 수치는 직접 비교할 수 없습니다.