LeRobot documentation
RoboMME
RoboMME
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/robomme.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)).
RoboMME es un benchmark de manipulación con memoria, construido sobre ManiSkill (SAPIEN). Evalúa la capacidad de un robot para retener y utilizar información a lo largo de un episodio: conteo, permanencia de objetos, referencia e imitación.
- 16 tareas en 4 suites de habilidades de memoria
- 1.600 demostraciones de entrenamiento (100 por tarea, 50 de validación, 50 de prueba)
- Conjunto de datos:
lerobot/robomme— LeRobot v3.0, 768K fotogramas a 10 fps - Simulador: ManiSkill / SAPIEN, brazo Panda, solo Linux
![]()
Tareas
| Suite | Tareas |
|---|---|
| Conteo (memoria temporal) | BinFill, PickXtimes, SwingXtimes, StopCube |
| Permanencia (memoria espacial) | VideoUnmask, VideoUnmaskSwap, ButtonUnmask, ButtonUnmaskSwap |
| Referencia (memoria de objetos) | PickHighlight, VideoRepick, VideoPlaceButton, VideoPlaceOrder |
| Imitación (memoria procedural) | MoveCube, InsertPeg, PatternLock, RouteStick |
Instalación
RoboMME requiere Linux (ManiSkill/SAPIEN usa renderizado con Vulkan). Se recomienda usar Docker para aislar conflictos de dependencias.
Nativo (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'Nota sobre dependencias:
mani-skill(traído porrobomme) fijagymnasium==0.29.1ynumpy<2.0.0, lo cual entra en conflicto con la base de lerobotnumpy>=2.0.0. Por esorobommeno es un extra de pyproject: usa la instalación con anulación anterior o el enfoque con Docker a continuación para evitar conflictos por completo.
Docker (recomendado)
Ejecuta RoboMME en su propia imagen de simulador para que sus fijaciones de numpy/gymnasium nunca coincidan con las de la política:
lerobot-env-server --config_path=docker/sim/configs/robomme.yaml --docker=trueLuego evalúe con --env.type=robomme --env.server.endpoint=tcp/127.0.0.1:7448 (consulte Simulación: local o servida).
Ejecución de la evaluación
Predeterminado (tarea única, episodio único)
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=1Evaluación multitarea
Evalúe varias tareas en una sola ejecución separando los nombres de tareas con comas. Use task_ids para controlar qué episodios se evalúan por tarea. Recomendado: 50 episodios por tarea para la división de prueba.
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=50Opciones principales de CLI para env.type=robomme
| Opción | Predeterminado | Descripción |
|---|---|---|
env.task | PickXtimes | Cualquiera de los 16 nombres de tareas anteriores (separados por comas) |
env.dataset_split | test | train, val o test |
env.action_space | joint_angle | joint_angle (8-D) o ee_pose (7-D) |
env.episode_length | 300 | Pasos máximos por episodio |
env.task_ids | null | Lista de índices de episodios a evaluar (null = [0]) |
Dataset
El conjunto de datos lerobot/robomme está en formato LeRobot v3.0 y se puede cargar directamente:
from lerobot.datasets.lerobot_dataset import LeRobotDataset
dataset = LeRobotDataset("lerobot/robomme")Características del conjunto de datos
| Característica | Forma | Descripción |
|---|---|---|
image | (256, 256, 3) | Cámara frontal RGB |
wrist_image | (256, 256, 3) | Cámara RGB de muñeca |
actions | (8,) | Ángulos articulares + pinza |
state | (8,) | Posiciones articulares + estado del agarre |
simple_subgoal | str | Anotación de alto nivel |
grounded_subgoal | str | Anotación de lenguaje con base |
episode_index | int | ID del episodio |
frame_index | int | Marco dentro del episodio |
Alineación de claves de características (entrenamiento)
El env wrapper expone sus cámaras bajo pixels/<camera_name>, nombradas por RoboMMEEnvConfig.front_camera_name y RoboMMEEnvConfig.wrist_camera_name (camera1 y camera2 por defecto). La política las recibe como observation.images.camera1 y observation.images.camera2, y el estado (agent_pos) como observation.state.
Las columnas crudas del conjunto de datos no coinciden con esas claves de política, por lo que pase un --rename_map al realizar el ajuste fino:
--rename_map='{"image": "observation.images.camera1", "wrist_image": "observation.images.camera2", "state": "observation.state", "actions": "action"}'Sobrescribe --env.front_camera_name / --env.wrist_camera_name si entrenas con nombres de clave diferentes, para que las observaciones de evaluación coincidan con las claves en las que se entrenó la política.
Espacios de acciones
| Tipo | Dim | Descripción |
|---|---|---|
joint_angle | 8 | 7 ángulos articulares + 1 pinza (−1 cerrada, +1 abierta, absoluta) |
ee_pose | 7 | xyz + roll/pitch/yaw + pinza |
Establecido mediante --env.action_space=joint_angle (predeterminado) o --env.action_space=ee_pose.
Notas de la plataforma
- Solo Linux: ManiSkill requiere SAPIEN/Vulkan. macOS y Windows no son compatibles.
- Se recomienda GPU: El renderizado es posible con CPU pero lento; CUDA + Vulkan ofrece la velocidad completa.
- conflicto entre gymnasium y numpy: consulte la nota de instalación anterior. La imagen de Docker lo gestiona automáticamente.
- Fork de ManiSkill:
robommedepende de un fork específico de ManiSkill (YinpeiDai/ManiSkill), que se incorpora automáticamente a través del paqueterobomme.