# NVIDIA IsaacLab Arena & LeRobot

يدعم LeRobot EnvHub الآن **محاكاة مُسرَّعة بواسطة وحدة معالجة الرسوميات (GPU)** عبر IsaacLab Arena لتقييم السياسات على نطاق واسع. درِّب سياسات التعلم بالتقليد وقيِّمها باستخدام محاكاة عالية الدقة — كل ذلك مُدمج في منظومة LeRobot.

<img
  src="https://huggingface.co/nvidia/isaaclab-arena-envs/resolve/main/assets/Gr1OpenMicrowaveEnvironment.png"
  alt="IsaacLab Arena - GR1 Microwave Environment"
  style={{ maxWidth: "100%", borderRadius: "8px", marginBottom: "1rem" }}
/>

يتكامل [IsaacLab Arena](https://github.com/isaac-sim/IsaacLab-Arena) مع NVIDIA IsaacLab لتوفير:

- 🤖 **الأجسام البشرية الآلية**: GR1 وG1 وGalileo بإعدادات مختلفة
- 🎯 **مهام التلاعب والتحرك والتلاعب**: فتح الأبواب، التقاط الأشياء ووضعها، الضغط على الأزرار، والمزيد
- ⚡ **توليدات مُسرَّعة بواسطة وحدات معالجة الرسوميات**: تنفيذ متوازٍ للبيئات على وحدات معالجة الرسوميات من NVIDIA
- 🖼️ **RTX Rendering**: تقييم السياسات القائمة على الرؤية باستخدام تصيير واقعي مع انعكاسات وانكسارات
- 📦 **مجموعات بيانات متوافقة مع LeRobot**: جاهزة للتدريب مع GR00T N1x وPI0 وSmolVLA وACT وسياسات الانتشار
- 🔄 **تكامل EnvHub**: تحميل البيئات من HuggingFace EnvHub بسطر واحد

## التثبيت

### المتطلبات

متطلبات العتاد مشتركة مع Isaac Sim، وهي موضحة بالتفصيل في [متطلبات Isaac Sim](https://docs.isaacsim.omniverse.nvidia.com/5.1.0/installation/requirements.html).

- وحدة معالجة رسومات من NVIDIA تدعم CUDA
- سائق NVIDIA المتوافق مع IsaacSim 5.1.0
- Linux (أوبونتو 22.04 / 24.04)

### الإعداد

```bash
# 1. Create conda environment
conda create -y -n lerobot-arena python=3.11
conda activate lerobot-arena
conda install -y -c conda-forge ffmpeg=7.1.1

# 2. Install Isaac Sim 5.1.0
pip install "isaacsim[all,extscache]==5.1.0" --extra-index-url https://pypi.nvidia.com

# Accept NVIDIA EULA (required)
export ACCEPT_EULA=Y
export PRIVACY_CONSENT=Y

# 3. Install IsaacLab 2.3.0
git clone https://github.com/isaac-sim/IsaacLab.git
cd IsaacLab
git checkout v2.3.0
./isaaclab.sh -i
cd ..

# 4. Install IsaacLab Arena
git clone https://github.com/isaac-sim/IsaacLab-Arena.git
cd IsaacLab-Arena
git checkout release/0.1.1
pip install -e .
cd ..

# 5. Install LeRobot (evaluation extra for env/policy evaluation)
git clone https://github.com/huggingface/lerobot.git
cd lerobot
pip install -e ".[evaluation]"

# 6. Install additional dependencies
pip install onnxruntime==1.23.2 lightwheel-sdk==1.0.1 vuer[all]==0.0.70 qpsolvers==4.8.1
pip install numpy==1.26.0 # Isaac Sim 5.1 depends on numpy==1.26.0, this will be fixed in next release
```

## تقييم السياسات

### سياسات مُدرَّبة مسبقًا

السياسات المدرَّبة التالية متاحة:

| سياسة                      | البنية | المهمة          | رابط                                                                     |
| :-------------------------- | :----------- | :------------ | :----------------------------------------------------------------------- |
| pi05-arena-gr1-microwave    | PI0.5        | GR1 ميكروويف | [HuggingFace](https://huggingface.co/nvidia/pi05-arena-gr1-microwave)    |
| smolvla-arena-gr1-microwave | SmolVLA      | GR1 ميكروويف | [HuggingFace](https://huggingface.co/nvidia/smolvla-arena-gr1-microwave) |

### تقييم SmolVLA

```bash
pip install -e ".[smolvla]"
pip install numpy==1.26.0 # revert numpy to version 1.26
```

```bash
lerobot-eval \
    --policy.path=nvidia/smolvla-arena-gr1-microwave \
    --env.type=isaaclab_arena \
    --env.hub_path=nvidia/isaaclab-arena-envs \
    --rename_map='{"observation.images.robot_pov_cam_rgb": "observation.images.robot_pov_cam"}' \
    --policy.device=cuda \
    --env.environment=gr1_microwave \
    --env.embodiment=gr1_pink \
    --env.object=mustard_bottle \
    --env.headless=false \
    --env.enable_cameras=true \
    --env.video=true \
    --env.video_length=10 \
    --env.video_interval=15 \
    --env.state_keys=robot_joint_pos \
    --env.camera_keys=robot_pov_cam_rgb \
    --trust_remote_code=True \
    --eval.batch_size=1
```

### تقييم PI0.5

```bash
pip install -e ".[pi]"
pip install numpy==1.26.0 # revert numpy to version 1.26
```

يتطلب PI0.5 تعطيل torch compile للتقييم:

```bash
TORCH_COMPILE_DISABLE=1 TORCHINDUCTOR_DISABLE=1 lerobot-eval \
    --policy.path=nvidia/pi05-arena-gr1-microwave \
    --env.type=isaaclab_arena \
    --env.hub_path=nvidia/isaaclab-arena-envs \
    --rename_map='{"observation.images.robot_pov_cam_rgb": "observation.images.robot_pov_cam"}' \
    --policy.device=cuda \
    --env.environment=gr1_microwave \
    --env.embodiment=gr1_pink \
    --env.object=mustard_bottle \
    --env.headless=false \
    --env.enable_cameras=true \
    --env.video=true \
    --env.video_length=15 \
    --env.video_interval=15 \
    --env.state_keys=robot_joint_pos \
    --env.camera_keys=robot_pov_cam_rgb \
    --trust_remote_code=True \
    --eval.batch_size=1
```

  لتغيير عدد البيئات المتوازية، استخدم علم ```--eval.batch_size```.

### ما يمكن توقعه

أثناء التقييم، ستظهر شريط تقدم يعرض معدل النجاح الجاري:

```
Stepping through eval batches:   8%|██████▍    | 4/50 [00:45<08:06, 10.58s/it, running_success_rate=25.0%]
```

### تسجيل الفيديو

لتفعيل تسجيل الفيديو أثناء التقييم، أضف الأعلام التالية إلى أمر

```bash
--env.video=true \
--env.video_length=15 \
--env.video_interval=15
```

لمزيد من التفاصيل حول تسجيل الفيديو، راجع [توثيق تسجيل IsaacLab](https://isaac-sim.github.io/IsaacLab/main/source/how-to/record_video.html).

عند التشغيل بدون واجهة باستخدام `--env.headless=true`، يجب عليك أيضًا تمكين الكاميرات صراحةً للبيئات التي تدعم الكاميرات:

```bash
--env.headless=true --env.enable_cameras=true
```

### مجلد الإخراج

تُحفظ مقاطع الفيديو الخاصة بالتقييم في مجلد الإخراج وفق البنية التالية:

```
outputs/eval/<date>/<timestamp>_<env>_<policy>/videos/<task>_<env_id>/eval_episode_<n>.mp4
```

على سبيل المثال:

```
outputs/eval/2026-01-02/14-38-01_isaaclab_arena_smolvla/videos/gr1_microwave_0/eval_episode_0.mp4
```

## سياسات التدريب

للتعرف على المزيد حول سياسات التدريب مع LeRobot، يُرجى الرجوع إلى وثائق التدريب:

- [SmolVLA](./smolvla)
- [Pi0.5](./pi05)
- [GR00T N1.7](./groot)

تتوفر مجموعات بيانات IsaacLab Arena نموذجية على HuggingFace Hub للتجربة:

| مجموعة البيانات                                                                                                   | الوصف                | الإطارات |
| :-------------------------------------------------------------------------------------------------------- | :------------------------- | :----- |
| [Arena-GR1-Manipulation-Task](https://huggingface.co/datasets/nvidia/Arena-GR1-Manipulation-Task-v3)      | التلاعب بالموجات الدقيقة في GR1 | ~4K    |
| [Arena-G1-Loco-Manipulation-Task](https://huggingface.co/datasets/nvidia/Arena-G1-Loco-Manipulation-Task) | G1 loco-manipulation       | ~4K    |

## إعداد البيئة

### خيارات التكوين الكاملة

```python
from lerobot.envs.configs import IsaaclabArenaEnvConfig

config = IsaaclabArenaEnvConfig(
    # Environment selection
    environment="gr1_microwave",      # Task environment
    embodiment="gr1_pink",            # Robot embodiment
    object="power_drill",             # Object to manipulate

    # Simulation settings
    episode_length=300,               # Max steps per episode
    headless=True,                    # Run without GUI
    device="cuda:0",                  # GPU device
    seed=42,                          # Random seed

    # Observation configuration
    state_keys="robot_joint_pos",     # State observation keys (comma-separated)
    camera_keys="robot_pov_cam_rgb",  # Camera observation keys (comma-separated)
    state_dim=54,                     # Expected state dimension
    action_dim=36,                    # Expected action dimension
    camera_height=512,                # Camera image height
    camera_width=512,                 # Camera image width
    enable_cameras=True,              # Enable camera observations

    # Video recording
    video=False,                      # Enable video recording
    video_length=100,                 # Frames per video
    video_interval=200,               # Steps between recordings

    # Advanced
    mimic=False,                      # Enable mimic mode
    teleop_device=None,               # Teleoperation device
    disable_fabric=False,             # Disable fabric optimization
    enable_pinocchio=True,            # Enable Pinocchio for IK
)
```

### استخدام Environment Hub مباشرةً للاستخدام المتقدم

أنشئ ملفًا باسم `test_env_load_arena.py` أو [حمّله من EnvHub](https://huggingface.co/nvidia/isaaclab-arena-envs/blob/main/tests/test_env_load_arena.py):

```python
import logging
from dataclasses import asdict
from pprint import pformat
import torch
import tqdm
from lerobot.configs import parser
from lerobot.configs.eval import EvalPipelineConfig

@parser.wrap()
def main(cfg: EvalPipelineConfig):
    """Run random action rollout for IsaacLab Arena environment."""
    logging.info(pformat(asdict(cfg)))

    from lerobot.envs import make_env

    env_dict = make_env(
        cfg.env,
        n_envs=cfg.env.num_envs,
        trust_remote_code=True,
    )
    env = next(iter(env_dict.values()))[0]
    env.reset()
    for _ in tqdm.tqdm(range(cfg.env.episode_length)):
        with torch.inference_mode():
            actions = env.action_space.sample()
            obs, rewards, terminated, truncated, info = env.step(actions)
            if terminated.any() or truncated.any():
                obs, info = env.reset()
    env.close()

if __name__ == "__main__":
    main()
```

شغّل باستخدام:

```bash
python test_env_load_arena.py \
    --env.environment=g1_locomanip_pnp \
    --env.embodiment=gr1_pink \
    --env.object=cracker_box \
    --env.num_envs=4 \
    --env.enable_cameras=true \
    --env.seed=1000 \
    --env.video=true \
    --env.video_length=10 \
    --env.video_interval=15 \
    --env.headless=false \
    --env.hub_path=nvidia/isaaclab-arena-envs \
    --env.type=isaaclab_arena
```

## إنشاء بيئات جديدة

أنشئ أولاً بيئة جديدة لـ IsaacLab Arena باتباع [توثيق IsaacLab Arena](https://isaac-sim.github.io/IsaacLab-Arena/release/0.1.1/index.html).

استنسخ مستودع EnvHub الخاص بنا:

```bash
git clone https://huggingface.co/nvidia/isaaclab-arena-envs
```

عدّل ملف `example_envs.yaml` بناءً على بيئتك الجديدة. [ارفع](./envhub#step-3-upload-to-the-hub) المستودع المعدّل إلى HuggingFace EnvHub.

  يجب أن يكون كود بيئة IsaacLab Arena الخاص بك متاحًا محليًا أثناء التقييم. يمكن للمستخدمين استنساخ مستودع بيئتك بشكل منفصل، أو يمكنك تضمين كود البيئة والأصول مباشرةً في مستودع EnvHub الخاص بك.

ثم، عند التقييم، استخدم بيئتك الجديدة:

```bash
lerobot-eval \
    --env.hub_path=<your-env-hub-path>/isaaclab-arena-envs \
    --env.environment=<your new environment> \
    ...other flags...
```

ننتظر مساهماتكم!

## استكشاف الأخطاء وإصلاحها

### نفاد ذاكرة CUDA

قلّل `batch_size` أو استخدم وحدة معالجة رسومية (GPU) بذاكرة VRAM أكبر:

```bash
--eval.batch_size=1
```

### لم يتم قبول اتفاقية ترخيص المستخدم النهائي

اضبط متغيرات البيئة قبل التشغيل:

```bash
export ACCEPT_EULA=Y
export PRIVACY_CONSENT=Y
```

### عدم عمل تسجيل الفيديو

تفعيل الكاميرات عند التشغيل بدون واجهة:

```bash
--env.video=true --env.enable_cameras=true --env.headless=true
```

### عدم تطابق بُعد مخرجات السياسة

تأكد من أن `action_dim` يتطابق مع سياستك:

```bash
--env.action_dim=36
```

### أخطاء libGLU.so.1 أثناء تهيئة Isaac Sim

تأكد من تثبيت التبعيات التالية، ومن المرجح أن يحدث ذلك على الأجهزة الخالية من الواجهة الرسومية.

```bash
sudo apt update && sudo apt install -y libglu1-mesa libxt6
```

## انظر أيضاً

- [توثيق EnvHub](./envhub) - الاستخدام العام لـ EnvHub
- [مستودع IsaacLab Arena على GitHub](https://github.com/isaac-sim/IsaacLab-Arena)
- [توثيق IsaacLab](https://isaac-sim.github.io/IsaacLab/)

## Lightwheel LW-BenchHub

يُقدّم [Lightwheel](https://www.lightwheel.ai) مجموعات `Lightwheel-Libero-Tasks` و`Lightwheel-RoboCasa-Tasks` التي تضم 268 مهمةً إلى منظومة LeRobot. يجمع LW-BenchHub ويولّد مجموعات بيانات واسعة النطاق عبر التشغيل عن بُعد، متوافقةً مع مواصفة LeRobot، مما يتيح سير عمل للتدريب والتقييم جاهزًا للاستخدام فورًا. وبفضل الواجهة الموحّدة التي يوفرها EnvHub، يمكن للمطوّرين بناء خطوط تجريبية من الطرف إلى الطرف بسرعة.

### التثبيت

بافتراض أنك اتبعت خطوات [التثبيت](#installation)، يمكنك تثبيت LW-BenchHub باستخدام:

```bash
conda install pinocchio -c conda-forge -y
pip install numpy==1.26.0 # revert numpy to version 1.26

sudo apt-get install git-lfs && git lfs install

git clone https://github.com/LightwheelAI/lw_benchhub
cd lw_benchhub
git lfs pull # Ensure LFS files (e.g., .usd assets) are downloaded

pip install -e .
```

للحصول على تعليمات أكثر تفصيلاً، يُرجى الرجوع إلى [وثائق LW-BenchHub](https://docs.lightwheel.net/lw_benchhub/usage/Installation).

### مجموعة بيانات مهام Lightwheel

تتوفر مجموعات بيانات LW-BenchHub على HuggingFace Hub:

| مجموعة البيانات                                                                                                       | الوصف             | المهام | الإطارات |
| :------------------------------------------------------------------------------------------------------------ | :---------------------- | :---- | :----- |
| [Lightwheel-Tasks-X7S](https://huggingface.co/datasets/LightwheelAI/Lightwheel-Tasks-X7S)                     | X7S LIBERO وRoboCasa | 117   | ~10.3M |
| [Lightwheel-Tasks-Double-Piper](https://huggingface.co/datasets/LightwheelAI/Lightwheel-Tasks-Double-Piper)   | Double-Piper LIBERO     | 130   | ~6.0M  |
| [Lightwheel-Tasks-G1-Controller](https://huggingface.co/datasets/LightwheelAI/Lightwheel-Tasks-G1-Controller) | G1-Controller LIBERO    | 62    | ~2.7M  |
| [Lightwheel-Tasks-G1-WBC](https://huggingface.co/datasets/LightwheelAI/Lightwheel-Tasks-G1-WBC)               | G1-WBC RoboCasa         | 32    | ~1.5M  |

بالنسبة لتدريب السياسات، يُرجى الرجوع إلى قسم [سياسات التدريب](#training-policies).

### تقييم السياسات

#### سياسات مُدرَّبة مسبقًا

السياسات المدرَّبة التالية متاحة:

| سياسة                   | البنية | المهمة                           | التخطيط     | روبوت           | رابط                                                                                  |
| :----------------------- | :----------- | :----------------------------- | :--------- | :-------------- | :------------------------------------------------------------------------------------ |
| smolvla-double-piper-pnp | SmolVLA      | L90K1PutTheBlackBowlOnThePlate | libero-1-1 | DoublePiper-Abs | [HuggingFace](https://huggingface.co/LightwheelAI/smolvla-double-piper-pnp/tree/main) |

#### تقييم SmolVLA

```bash
lerobot-eval \
  --policy.path=LightwheelAI/smolvla-double-piper-pnp \
  --env.type=isaaclab_arena \
  --rename_map='{"observation.images.left_hand_camera_rgb": "observation.images.left_hand", "observation.images.right_hand_camera_rgb": "observation.images.right_hand", "observation.images.first_person_camera_rgb": "observation.images.first_person"}' \
  --env.hub_path=LightwheelAI/lw_benchhub_env \
  --env.kwargs='{"config_path": "configs/envhub/example.yml"}' \
  --trust_remote_code=true \
  --env.state_keys=joint_pos \
  --env.action_dim=12 \
  --env.camera_keys=left_hand_camera_rgb,right_hand_camera_rgb,first_person_camera_rgb \
  --policy.device=cuda \
  --eval.batch_size=10 \
  --eval.n_episodes=100
```

### إعداد البيئة

يمكن بدء التقييم بسرعة عن طريق تعديل إعدادات `robot` و`task` و`layout` في ملف الإعدادات.

#### خيارات التكوين الكاملة

```yml
# =========================
# Basic Settings
# =========================
disable_fabric: false
device: cuda:0
sensitivity: 1.0
step_hz: 50
enable_cameras: true
execute_mode: eval
episode_length_s: 20.0 # Episode length in seconds, increase if episodes timeout during eval

# =========================
# Robot Settings
# =========================
robot: DoublePiper-Abs # Robot type, DoublePiper-Abs, X7S-Abs, G1-Controller or G1-Controller-DecoupledWBC
robot_scale: 1.0

# =========================
# Task & Scene Settings
# =========================
task: L90K1PutTheBlackBowlOnThePlate # Task name
scene_backend: robocasa
task_backend: robocasa
debug_assets: null
layout: libero-1-1 # Layout and style ID
sources:
  - objaverse
  - lightwheel
  - aigen_objs
object_projects: []
usd_simplify: false
seed: 42

# =========================
# Object Placement Retry Settings
# =========================
max_scene_retry: 4
max_object_placement_retry: 3

resample_objects_placement_on_reset: true
resample_robot_placement_on_reset: true

# =========================
# Replay Configuration Settings
# =========================
replay_cfgs:
  add_camera_to_observation: true
  render_resolution: [640, 480]
```

### انظر أيضاً

- [مستودع LW-BenchHub على GitHub](https://github.com/LightwheelAI/LW-BenchHub)
- [توثيق LW-BenchHub](https://docs.lightwheel.net/lw_benchhub/)

