LeRobot documentation
RoboMME
RoboMME
RoboMME는 ManiSkill(SAPIEN)을 기반으로 구축된 메모리 증강 조작 벤치마크입니다. 이 벤치마크는 에피소드 전반에 걸쳐 정보를 유지하고 활용하는 로봇의 능력을 평가하며, 구체적으로 카운팅, 객체 영속성, 참조, 모방을 측정합니다.
- 4개의 메모리-스킬 스위트에 걸친 16개 작업
- 1,600개의 학습 데모 (태스크당 100개, 검증 50개, 테스트 50개)
- 데이터셋:
lerobot/robomme— LeRobot v3.0, 10 fps 기준 768K 프레임 - 시뮬레이터: ManiSkill / SAPIEN, Panda 암, Linux 전용
![]()
작업
| Suite | 작업 |
|---|---|
| 카운팅(시간 기억) | BinFill, PickXtimes, SwingXtimes, StopCube |
| 영속성(공간 기억) | VideoUnmask, VideoUnmaskSwap, ButtonUnmask, ButtonUnmaskSwap |
| 참고 (객체 메모리) | PickHighlight, VideoRepick, VideoPlaceButton, VideoPlaceOrder |
| 모방(절차적 기억) | MoveCube, InsertPeg, PatternLock, RouteStick |
설치
RoboMME에는 Linux가 필요합니다(ManiSkill/SAPIEN은 Vulkan 렌더링을 사용함). 의존성 충돌을 격리하기 위해 Docker 사용을 권장합니다.
네이티브(Linux)
uv pip install --override <(printf 'gymnasium==0.29.1\nnumpy==1.26.4\n') \
-e '.[smolvla,av-dep]' \
'robomme @ git+https://github.com/RoboMME/robomme_benchmark.git@main'의존성 참고:
robomme에 의해 가져오는mani-skill은gymnasium==0.29.1과numpy<2.0.0을 고정(pins)하고 있어, lerobot의 기본numpy>=2.0.0와 충돌합니다. 따라서robomme은 pyproject extra가 아닙니다. 충돌을 완전히 피하려면 위의 override 설치 방법을 사용하거나, 아래 Docker 방식을 사용하세요.
Docker (권장)
# Build the RoboMME evaluation image from the repo root
docker build -f docker/Dockerfile.benchmark.robomme -t lerobot-benchmark-robomme .벤치마크 Dockerfile은 공개된 huggingface/lerobot-gpu:latest 이미지를 확장한 후 gymnasium==0.29.1과 numpy==1.26.4를 오버라이드합니다. 두 버전 모두 lerobot의 실제 API 사용에 대해 런타임 안전합니다.
평가 실행
기본값 (단일 작업, 단일 에피소드)
lerobot-eval \
--policy.path=<your_policy_repo> \
--env.type=robomme \
--env.task=PickXtimes \
--env.dataset_split=test \
--env.task_ids=[0] \
--eval.batch_size=1 \
--eval.n_episodes=1멀티 태스크 평가
쉼표로 작업 이름을 구분하여 한 번의 실행에서 여러 작업을 평가합니다. task_ids를 사용하여 작업별로 평가할 에피소드를 제어합니다. 권장 사항: 테스트 분할의 경우 작업당 50개 에피소드.
lerobot-eval \
--policy.path=<your_policy_repo> \
--env.type=robomme \
--env.task=PickXtimes,BinFill,StopCube,MoveCube,InsertPeg \
--env.dataset_split=test \
--env.task_ids=[0,1,2,3,4,5,6,7,8,9] \
--eval.batch_size=1 \
--eval.n_episodes=50env.type=robomme의 주요 CLI 옵션
| 옵션 | 기본값 | 설명 |
|---|---|---|
env.task | PickXtimes | 위 16개 작업 이름 중 하나(쉼표로 구분) |
env.dataset_split | test | train, val 또는 test |
env.action_space | joint_angle | joint_angle(8차원) 또는 ee_pose(7차원) |
env.episode_length | 300 | 에피소드당 최대 스텝 |
env.task_ids | null | 평가할 에피소드 인덱스 목록 (null = [0]) |
데이터셋
데이터셋 lerobot/robomme는 LeRobot v3.0 형식이며 직접 로드할 수 있습니다:
from lerobot.datasets.lerobot_dataset import LeRobotDataset
dataset = LeRobotDataset("lerobot/robomme")데이터셋 기능
| 기능 | Shape | 설명 |
|---|---|---|
image | (256, 256, 3) | 전면 카메라 RGB |
wrist_image | (256, 256, 3) | 손목 카메라 RGB |
actions | (8,) | 관절 각도 + 그립퍼 |
state | (8,) | 관절 위치 + 그립퍼 상태 |
simple_subgoal | str | 고수준 언어 어노테이션 |
grounded_subgoal | str | 근거 기반 언어 주석 |
episode_index | int | 에피소드 ID |
frame_index | int | 에피소드 내 프레임 |
Feature key 정렬 (학습)
env 래퍼는 RoboMMEEnv.front_camera_name과 RoboMMEEnv.wrist_camera_name(기본값은 camera1과 camera2)로 명명된 카메라를 pixels/<camera_name> 아래에 노출합니다. RoboMMEEnv의 features_map는 policy를 위해 이들을 각각 observation.images.camera1과 observation.images.camera2에 매핑합니다. 상태는 agent_pos로 노출되며 observation.state에 매핑됩니다.
데이터셋의 원본 열이 해당 정책 키와 일치하지 않으므로, 파인튜닝 시 --rename_map을 전달하세요:
--rename_map='{"image": "observation.images.camera1", "wrist_image": "observation.images.camera2", "state": "observation.state", "actions": "action"}'다른 키 이름으로 학습한 경우, 평가 시 관측값이 정책이 학습된 키와 일치하도록 --env.front_camera_name / --env.wrist_camera_name을(를) 오버라이드하세요.
액션 스페이스
| 유형 | 차원 | 설명 |
|---|---|---|
joint_angle | 8 | 7개의 관절 각도 + 1개의 그리퍼(−1: 닫힘, +1: 열림, 절대값) |
ee_pose | 7 | xyz + roll/pitch/yaw + gripper |
--env.action_space=joint_angle(기본값) 또는 --env.action_space=ee_pose로 설정합니다.
플랫폼 참고 사항
- Linux 전용: ManiSkill은 SAPIEN/Vulkan이 필요합니다. macOS와 Windows는 지원되지 않습니다.
- GPU 권장: 렌더링은 CPU에서도 가능하지만 느립니다. CUDA + Vulkan을 사용하면 전체 속도를 낼 수 있습니다.
- gymnasium / numpy 충돌: 위 설치 참고 사항을 확인하세요. Docker 이미지가 이를 자동으로 처리합니다.
- ManiSkill 포크:
robomme는robomme패키지를 통해 자동으로 가져오는 특정 ManiSkill 포크(YinpeiDai/ManiSkill)에 의존합니다.