LeRobot documentation

RoboMME

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.7.0).
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 est un benchmark de manipulation augmenté par mémoire, construit sur ManiSkill (SAPIEN). Il évalue la capacité d’un robot à retenir et à utiliser des informations au fil d’un épisode — comptage, permanence des objets, référence et imitation.

  • 16 tâches réparties sur 4 suites de compétences en mémoire
  • 1 600 démonstrations d'entraînement (100 par tâche, 50 val, 50 test)
  • Jeu de données : lerobot/robomme — LeRobot v3.0, 768K images à 10 ips
  • Simulateur : ManiSkill / SAPIEN, bras Panda, Linux uniquement

RoboMME benchmark tasks overview

Tâches

SuiteTâches
Comptage (mémoire temporelle)BinFill, PickXtimes, SwingXtimes, StopCube
Permanence (mémoire spatiale)VideoUnmask, VideoUnmaskSwap, ButtonUnmask, ButtonUnmaskSwap
Référence (mémoire objet)PickHighlight, VideoRepick, VideoPlaceButton, VideoPlaceOrder
Imitation (mémoire procédurale)MoveCube, InsertPeg, PatternLock, RouteStick

Installation

RoboMME nécessite Linux (ManiSkill/SAPIEN utilise le rendu Vulkan). Docker est recommandé pour isoler les conflits de dépendances.

Natif (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'

Note sur les dépendances : mani-skill (tiré par robomme) fixe gymnasium==0.29.1 et numpy<2.0.0, ce qui entre en conflit avec la base numpy>=2.0.0 de lerobot. C'est pourquoi robomme n'est pas un extra pyproject — utilisez l'installation avec surcharge ci-dessus, ou l'approche Docker ci-dessous pour éviter tout conflit.

Docker (recommandé)

Exécutez RoboMME dans son propre image de simulateur, afin que ses versions figées de numpy/gymnasium ne soient jamais en conflit avec celles de la politique :

lerobot-env-server --config_path=docker/sim/configs/robomme.yaml --docker=true

Puis évaluez avec --env.type=robomme --env.server.endpoint=tcp/127.0.0.1:7448 (voir Simulation : locale ou servie).

Exécution de l'évaluation

Par défaut (tâche unique, épisode unique)

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

Évaluation multi-tâches

Évaluez plusieurs tâches en une seule exécution en séparant les noms de tâches par des virgules. Utilisez task_ids pour contrôler les épisodes évalués par tâche. Recommandation : 50 épisodes par tâche pour la partition de test.

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

Options CLI principales pour env.type=robomme

OptionPar défautDescription
env.taskPickXtimesL'un des 16 noms de tâches ci-dessus (séparés par des virgules)
env.dataset_splittesttrain, val ou test
env.action_spacejoint_anglejoint_angle (8-D) ou ee_pose (7-D)
env.episode_length300Nombre maximal d'étapes par épisode
env.task_idsnullListe des indices d'épisodes à évaluer (null = [0])

Jeu de données

Le jeu de données lerobot/robomme est au format LeRobot v3.0 et peut être chargé directement :

from lerobot.datasets.lerobot_dataset import LeRobotDataset

dataset = LeRobotDataset("lerobot/robomme")

Caractéristiques du jeu de données

FonctionnalitéFormeDescription
image(256, 256, 3)Caméra avant RGB
wrist_image(256, 256, 3)Caméra RGB au poignet
actions(8,)Angles articulaires + pince
state(8,)Positions des articulations + état du gripper
simple_subgoalstrAnnotation de langage de haut niveau
grounded_subgoalstrAnnotation de langage ancrée
episode_indexintID de l'épisode
frame_indexintImage au sein de l'épisode

Alignement des clés de fonctionnalités (entraînement)

Le wrapper d’environnement expose ses caméras sous pixels/<camera_name>, nommées par RoboMMEEnvConfig.front_camera_name et RoboMMEEnvConfig.wrist_camera_name (camera1 et camera2 par défaut). La politique les reçoit sous la forme observation.images.camera1 et observation.images.camera2, et l’état (agent_pos) sous la forme observation.state.

Les colonnes brutes du jeu de données ne correspondent pas à ces clés de politique, passez donc --rename_map lors de l’ajustement fin :

--rename_map='{"image": "observation.images.camera1", "wrist_image": "observation.images.camera2", "state": "observation.state", "actions": "action"}'

Remplacez --env.front_camera_name / --env.wrist_camera_name si vous entraînez avec des noms de clés différents, afin que les observations d'évaluation correspondent aux clés sur lesquelles la politique a été entraînée.

Espaces d'actions

TypeDimDescription
joint_angle87 angles articulaires + 1 pince (−1 fermée, +1 ouverte, absolu)
ee_pose7xyz + roulis/tangage/lacet + pince

Défini via --env.action_space=joint_angle (par défaut) ou --env.action_space=ee_pose.

Notes sur la plateforme

  • Linux uniquement : ManiSkill nécessite SAPIEN/Vulkan. macOS et Windows ne sont pas pris en charge.
  • GPU recommandé : Le rendu est possible sur CPU mais lent ; CUDA + Vulkan offre la vitesse maximale.
  • conflit entre gymnasium et numpy : voir la note d’installation ci-dessus. L’image Docker gère cela automatiquement.
  • Fork de ManiSkill : robomme dépend d'un fork spécifique de ManiSkill (YinpeiDai/ManiSkill), récupéré automatiquement via le package robomme.
Update on GitHub