# NVIDIA RoboLab

RoboLab هو معيار تقييم يتكوّن من **120 مهمة للتعامل مع الأشياء على سطح الطاولة** لروبوت DROID (ذراع Franka Panda مزودة بمقبض Robotiq 2F-85)، ويُحاكى باستخدام NVIDIA Isaac Lab ويُعرض باستخدام عارض RTX الخاص بـ Isaac Sim. تتنوّع المهام بين الالتقاط والوضع، والتكديس، والفرز، وإعادة التوجيه، بالإضافة إلى متغيرات مشروطة باللغة (العلاقات المكانية، والألوان، والعدّ، والتعليمات الغامضة)، وتُصنَّف إلى بسيطة أو متوسطة أو معقدة.

- الورقة: [RoboLab: معيار محاكاة عالي الدقة لتحليل سياسات المهام العامة](https://arxiv.org/abs/2604.09860)
- GitHub: [NVlabs/RoboLab](https://github.com/NVlabs/RoboLab)
- صفحة المشروع ولوحة الصدارة: [research.nvidia.com/labs/srl/projects/robolab](https://research.nvidia.com/labs/srl/projects/robolab/)

## المتطلبات والتراخيص

- **GPU**: بطاقة رسومات NVIDIA RTX (حيث يعتمد Isaac Sim على تقنية RTX للعرض). يستهلك كل بيئة واحدة من مهمة واحدة حوالي 7 غيغابايت من ذاكرة الفيديو (VRAM)، بما في ذلك Isaac Sim؛ بينما تضيف كل بيئة إضافية ضمن نفس المهمة حوالي 1 إلى 2 غيغابايت (تدعم أدلة RoboLab تشغيل 30 إلى 100 بيئة على بطاقة رسومات بسعة 48 غيغابايت، وذلك حسب طبيعة المهمة). بالإضافة إلى ذلك، يحتاج نموذجك (Policy) إلى ذاكرته الخاصة.
- **Isaac Sim**: يعمل RoboLab هنا على Isaac Sim 6.0.1 و Isaac Lab 3.0 beta 2، أي حزمة Isaac Sim 6 الخاصة بـ RoboLab. باستخدام Isaac Sim، فإنك توافق على [ترخيص NVIDIA Isaac Sim](https://docs.isaacsim.omniverse.nvidia.com/latest/common/NVIDIA_Omniverse_License_Agreement.html)؛ ويقبل صورة Docker هذا الترخيص نيابةً عنك، تمامًا كما تفعل صورة RoboLab الخاصة.
- **الموارد**: مشاهد RoboLab وأجسامه ونماذج روبوته (حوالي 6 غيغابايت، من git LFS الخاص به) مرخّصة في الغالب بموجب **CC BY-NC-SA 4.0**، مع وجود بعضها تحت شروط أخرى؛ راجع [THIRD_PARTY_NOTICES.md](https://github.com/NVlabs/RoboLab/blob/main/THIRD_PARTY_NOTICES.md) الخاص بـ RoboLab. لا توزّع LeRobot هذه الموارد: يقوم التنزيل من NVlabs عند بناء الصورة.
- **Docker**، لإعداد الخادم الوارد أدناه: [BuildKit (`docker buildx`)](https://docs.docker.com/go/buildx/) لبناء الصورة، و[NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) حتى يتمكن الحاوية من استخدام وحدة معالجة الرسوميات.

## تشغيله كخدمة (موصى به)

تثبّت إصدار Isaac Lab 3.0 التجريبي `transformers==4.57.6` (وبالتالي `huggingface-hub<1.0`)، و`numpy==2.3.1` و`packaging==26.0`، وهي إصدارات لا تقبلها تبعيات LeRobot الخاصة به. شغّل RoboLab في صورة Docker مستقلة، خلف `lerobot-env-server`، وشغّل سياستك في بيئة LeRobot المعتادة لديك:

```bash
# Build the image on first use (Isaac Sim and the assets: a long first build), then serve every task
lerobot-env-server --config_path=docker/sim/configs/robolab.yaml --docker=true

# In your LeRobot environment
lerobot-eval \
  --policy.path=<your DROID joint-position policy> \
  --env.type=robolab \
  --env.task=BananaInBowlTask \
  --env.server.endpoint=tcp/127.0.0.1:7448 \
  --rename_map='{"observation.images.over_shoulder_left_camera": "observation.images.<exterior>", "observation.images.wrist_cam": "observation.images.<wrist>"}' \
  --eval.batch_size=1 \
  --eval.n_episodes=10
```

تشغّل الخادم أيّاً من المهام المُهيّأة له: يفتح العميل المهمة التي يطلبها، ويبنيها الخادم في Isaac Sim قيد التشغيل (بضع ثوانٍ). أما بدء تشغيل Isaac Sim نفسه فيستغرق من ثوانٍ إلى بضع دقائق. إذا لم يجد الخادم وحدة معالجة رسومية (GPU) داخل الحاوية (`ERROR_INCOMPATIBLE_DRIVER`)، فراجع ملاحظة Vulkan في [Simulation](./simulation#serve-an-environment).

## شغّله محليًا

بعد تثبيت Isaac Sim و RoboLab في بيئتك، أضف `--env.server.endpoint` وشغّل `lerobot-eval` ليعمل RoboLab في عملية مستقلة. ثبّت حزمة RoboLab أولاً، ثم ثبّت LeRobot دون تبعياته، كما تفعل صورة Docker:

```bash
GIT_LFS_SKIP_SMUDGE=1 git clone https://github.com/NVlabs/RoboLab.git && git -C RoboLab lfs pull
uv venv --python 3.12 && source .venv/bin/activate
uv pip install "isaaclab[isaacsim]==3.0.0b2.post1" -e ./RoboLab \
  --extra-index-url https://pypi.nvidia.com --index-strategy unsafe-best-match
uv pip install --no-deps -e ./lerobot
uv pip install draccus termcolor eclipse-zenoh  # what the rest of LeRobot's simulation code imports
export OMNI_KIT_ACCEPT_EULA=YES                 # accepts the Isaac Sim license
```

لا يتوفر في هذه البيئة مساحة لسياسات تتطلب `transformers` 5 (π₀.₅، SmolVLA، ...): شغّل تلك التي تُقدَّم كخدمة.

## المهام

كل مهمة من مهام RoboLab الـ 120 تشكّل مجموعة مستقلة بمعرّف مهمة واحد، لذا يُبلّغ `lerobot-eval` عن معدل نجاح لكل مهمة وعن المعدل الإجمالي. يقبل `--env.task` قائمة بأسماء مهام مفصولة بفواصل، مثل `BananaInBowlTask,RubiksCubeAndBananaTask`؛ اتركه فارغًا لتشمل جميع المهام الـ 120. تُدرَج أسماء المهام والتعليمات ومستوى الصعوبة في [بيانات المهام الوصفية](https://github.com/NVlabs/RoboLab/blob/main/robolab/tasks/_metadata/task_metadata.json) الخاصة بـ RoboLab.

تشارك جميع بيئات المهمة عالم Isaac Lab واحدًا على وحدة معالجة الرسوميات: `--eval.batch_size=N` يشغّل N حلقة في آنٍ واحد في ذلك العالم.

## الملاحظات والإجراءات

| المفتاح                                            | الشكل          | المحتوى                                                                     |
| ---------------------------------------------- | -------------- | --------------------------------------------------------------------------- |
| `observation.images.over_shoulder_left_camera` | 720 × 1280 × 3 | كاميرا خارجية، على يسار الروبوت                                          |
| `observation.images.wrist_cam`                 | 720 × 1280 × 3 | كاميرا معصم                                                                |
| `observation.state`                            | 8              | `joint_0.pos` … `joint_6.pos` (بالراديان)، `gripper.pos` (0 مفتوح، 1 مغلق)   |
| `action`                                       | 8              | الأهداف المطلقة المشتركة للمفاصل السبعة، ثم القابض: مغلق عند تجاوز 0.5 |

يعمل الروبوت بتردد 15 هرتز (الفيزياء بتردد 120 هرتز، أي 8 خطوات فيزيائية لكل إجراء)، ويسجّل LeRobot ذلك على أنه `robot_type="Franka"`، كما في [DROID](https://huggingface.co/datasets/lerobot/droid_1.0.1). لكل حلقة حد زمني خاص بمهمتها (من 20 إلى 300 ثانية، أي من 300 إلى 4,500 خطوة)؛ تنتهي الحلقة الناجحة كمنتهية، وتنتهي الحلقة التي تنفد فيها المهلة كمنقوصة. تعليمات المهمة هي وصف المهمة الخاص بالبيئة.

## روبوت المحاكاة

يمكن أن يحل RoboLab محل روبوت DROID الحقيقي في `lerobot-rollout` و`lerobot-record` وأدوات الروبوتات الأخرى (انظر [المحاكاة: محلية أو مُقدَّمة](./simulation)):

```bash
lerobot-rollout \
  --robot.type=sim --robot.env.type=robolab --robot.env.task=BananaInBowlTask --robot.task_id=0 \
  --robot.env.server.endpoint=tcp/127.0.0.1:7448 \
  --policy.path=<your policy> --fps=15 ...
```

## مرجع إعدادات البيئة

| معامل                                 | افتراضي           | الوصف                                                                                                                     |
| ----------------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `task`                                    | empty: جميع 120    | أسماء المهام مفصولة بفواصل                                                                                                      |
| `cameras`                                 | `"WRIST_LEFT"`    | إعداد مسبق للكاميرا من `robolab/registrations/droid/camera_presets.py` الخاص بـ RoboLab، مثل `WRIST_LEFT_RIGHT` للكاميرتين الخارجيتين |
| `instruction_type`                        | `"default"`       | التعليمات التي يمنحها كل مهمة: `default` أو `vague` أو `specific`                                                             |
| `observation_height`, `observation_width` | غير مُعيّن: 720 × 1280 | قم بتغيير حجم إطارات الكاميرا على وحدة معالجة الرسوميات (GPU) أولاً، على سبيل المثال لإرسال إطارات أصغر من الخادم                                                |

## المقارنة مع لوحة الصدارة

تقيّم لوحة صدارة RoboLab 10 حلقات لكل مهمة باستخدام التعليمات الافتراضية، وكاميرات `WRIST_LEFT`، وإجراءات موضع المفاصل، وهي الإعدادات الافتراضية في LeRobot. ولا يحدد النص إصدار Isaac Sim الذي أنتج أرقامه، والإعداد الافتراضي في RoboLab هو Isaac Sim 5.0: حيث تختلف الفيزياء والعرض بين إصدارات Isaac Sim، لذا فإن الأرقام الناتجة عن إعداد Isaac Sim 6.0.1 هذا غير قابلة للمقارنة المباشرة.

