LeRobot documentation

RoboMME

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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

RoboMME benchmark tasks overview

Tareas

SuiteTareas
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 por robomme) fija gymnasium==0.29.1 y numpy<2.0.0, lo cual entra en conflicto con la base de lerobot numpy>=2.0.0. Por eso robomme no 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=true

Luego 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=1

Evaluació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=50

Opciones principales de CLI para env.type=robomme

OpciónPredeterminadoDescripción
env.taskPickXtimesCualquiera de los 16 nombres de tareas anteriores (separados por comas)
env.dataset_splittesttrain, val o test
env.action_spacejoint_anglejoint_angle (8-D) o ee_pose (7-D)
env.episode_length300Pasos máximos por episodio
env.task_idsnullLista 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ísticaFormaDescripció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_subgoalstrAnotación de alto nivel
grounded_subgoalstrAnotación de lenguaje con base
episode_indexintID del episodio
frame_indexintMarco 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

TipoDimDescripción
joint_angle87 ángulos articulares + 1 pinza (−1 cerrada, +1 abierta, absoluta)
ee_pose7xyz + 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: robomme depende de un fork específico de ManiSkill (YinpeiDai/ManiSkill), que se incorpora automáticamente a través del paquete robomme.
Update on GitHub