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 هو معيار تقييم للتلاعب يعتمد على الذاكرة، مبني على ManiSkill (SAPIEN). يقيّم قدرة الروبوت على الاحتفاظ بالمعلومات واستخدامها عبر حلقة كاملة — بما في ذلك العدّ، وثبات الكائنات، والإشارة، والمحاكاة.
- 16 مهمة عبر 4 مجموعات مهارات الذاكرة
- 1,600 عرض تدريب (100 لكل مهمة، 50 للتحقق، 50 للاختبار)
- مجموعة البيانات:
lerobot/robomme— LeRobot v3.0، 768 ألف إطار بمعدل 10 إطارات في الثانية - المحاكي: 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'ملاحظة حول الاعتماديات: يُثبّت
mani-skill(الذي يجلبهrobomme) الإصدارgymnasium==0.29.1وnumpy<2.0.0، مما يتعارض مع الإصدار الأساسي لـ lerobot وهوnumpy>=2.0.0. ولهذا السبب، لا يُعدّrobommeإضافة في pyproject — استخدم تثبيت التجاوز المذكور أعلاه، أو اتبع نهج Docker أدناه لتجنّب التعارضات بالكامل.
Docker (موصى به)
شغّل RoboMME في صورة محاكي خاصة به، حتى لا تتعارض إصدارات numpy/gymnasium المثبتة فيه مع إصدارات السياسة:
lerobot-env-server --config_path=docker/sim/configs/robomme.yaml --docker=trueثم قيّم باستخدام --env.type=robomme --env.server.endpoint=tcp/127.0.0.1:7448 (انظر المحاكاة: محلية أو مُقدَّمة).
تشغيل التقييم
الافتراضي (مهمة واحدة، حلقة واحدة)
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=50خيارات سطر الأوامر الرئيسية لـ env.type=robomme
| خيار | افتراضي | الوصف |
|---|---|---|
env.task | PickXtimes | أي من أسماء المهام الستة عشر المذكورة أعلاه (مفصولة بفواصل) |
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")خصائص مجموعة البيانات
| ميزة | الشكل | الوصف |
|---|---|---|
image | (256, 256, 3) | كاميرا أمامية RGB |
wrist_image | (256, 256, 3) | كاميرا معصم RGB |
actions | (8,) | زوايا المفاصل + القابض |
state | (8,) | مواضع المفاصل + حالة الماسك |
simple_subgoal | str | التعليق بلغة عالية المستوى |
grounded_subgoal | str | التعليق اللغوي الموثق |
episode_index | int | معرف الحلقة |
frame_index | int | الإطار داخل الحلقة |
محاذاة مفاتيح الميزات (التدريب)
تُعرّض غلاف البيئة كاميراته تحت pixels/<camera_name>، حيث تُسمّى بواسطة RoboMMEEnvConfig.front_camera_name وRoboMMEEnvConfig.wrist_camera_name (وcamera1 وcamera2 افتراضياً). يستقبلها السياسة كـ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.
ملاحظات المنصة
- لنكس فقط: يتطلب ManiSkill استخدام SAPIEN/Vulkan. لا يتم دعم macOS و Windows.
- يُوصى باستخدام وحدة معالجة رسومية: يمكن تنفيذ العرض على وحدة المعالجة المركزية لكنه بطيء؛ بينما يوفر كل من CUDA وVulkan السرعة الكاملة.
- تعارض بين gymnasium و numpy: راجع ملاحظة التثبيت أعلاه. يتعامل صورة Docker مع هذا تلقائيًا.
- نسخة مشتقة من ManiSkill: يعتمد
robommeعلى نسخة مشتقة محددة من ManiSkill (YinpeiDai/ManiSkill)، يتم جلبها تلقائيًا عبر حزمةrobomme.