# NVIDIA RoboLab

RoboLab, NVIDIA Isaac Lab ile simüle edilen ve Isaac Sim'in RTX rendercisi ile görüntülenen, bir DROID robotu (Robotiq 2F-85 kavrayıcılı Franka Panda kol) için **120 masaüstü manipülasyon görevinden** oluşan bir referans testidir. Görevler; alma ve yerleştirme, yığma, sıralama, yeniden yönlendirme ve dil koşullu varyantları (uzamsal ilişkiler, renkler, sayma, belirsiz talimatlar) kapsamaktadır ve basit, orta veya karmaşık olarak derecelendirilmiştir.

- Makale: [RoboLab: Görev Genelcisi Politikalarının Analizi için Yüksek Sadakatli Bir Simülasyon Çizelgesi](https://arxiv.org/abs/2604.09860)
- GitHub: [NVlabs/RoboLab](https://github.com/NVlabs/RoboLab)
- Proje sayfası ve liderlik tablosu: [research.nvidia.com/labs/srl/projects/robolab](https://research.nvidia.com/labs/srl/projects/robolab/)

## Gereksinimler ve lisanslar

- **GPU**: NVIDIA RTX GPU (Isaac Sim, RTX ile render alır). Bir görevin bir env'i, Isaac Sim dahil olmak üzere yaklaşık 7 GB VRAM kullanır; aynı görevdeki her ek env yaklaşık 1 ila 2 GB ekler (RoboLab'ın kılavuzu, görevine bağlı olarak 48 GB GPU'da 30 ila 100 env sığdırır). Politikanızın kendi bellek ihtiyacı bunun üzerine eklenir.
- **Isaac Sim**: RoboLab burada Isaac Sim 6.0.1 ve Isaac Lab 3.0 beta 2 üzerinde çalışır, RoboLab'ın Isaac Sim 6 yığını. Isaac Sim kullanmak [NVIDIA Isaac Sim lisansını](https://docs.isaacsim.omniverse.nvidia.com/latest/common/NVIDIA_Omniverse_License_Agreement.html) kabul etmeyi gerektirir; Docker görüntüsü bunu sizin için kabul eder, tıpkı RoboLab'ın kendi görüntüsünün yaptığı gibi.
- **Varlıklar**: RoboLab'ın sahneleri, nesneleri ve robot modelleri (git LFS'den yaklaşık 6 GB) büyük ölçüde **CC BY-NC-SA 4.0** lisansına tabidir, bazıları ise farklı koşullara sahiptir; RoboLab'ın [THIRD_PARTY_NOTICES.md](https://github.com/NVlabs/RoboLab/blob/main/THIRD_PARTY_NOTICES.md) dosyasına bakın. LeRobot bunları dağıtmaz: görüntü, oluşturulduğunda bunları NVlabs'tan indirir.
- Aşağıdaki sunulan yapılandırma için **Docker**, görüntüyü oluşturmak için [BuildKit (`docker buildx`)](https://docs.docker.com/go/buildx/) ve konteynerin GPU kullanabilmesi için [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html).

## Sunucu olarak çalıştırın (önerilen)

Isaac Lab 3.0 beta sürümü `transformers==4.57.6` (dolayısıyla `huggingface-hub<1.0`), `numpy==2.3.1` ve `packaging==26.0` sürümlerini sabitler; LeRobot'un kendi bağımlılıkları bu sürümleri kabul etmez. RoboLab'ı kendi Docker görüntüsünde, `lerobot-env-server` arkasında çalıştırın ve politikanızı (policy) alışıldık LeRobot ortamınızda çalıştırın:

```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
```

Sunucu, yapılandırılmış görevlerinden herhangi birini çalıştırır: istemci, istediği görevi açar ve sunucu bunu çalışan Isaac Sim içinde oluşturur (birkaç saniye). Isaac Sim'in kendisini başlatmak saniyelerden birkaç dakikaya kadar sürebilir. Konteynerde GPU bulunamazsa (`ERROR_INCOMPATIBLE_DRIVER`), [Simulation](./simulation#serve-an-environment) bölümündeki Vulkan notuna bakın.

## Yerel olarak çalıştırın

Ortamınıza Isaac Sim ve RoboLab yüklendikten sonra `--env.server.endpoint` parametresini ekleyin ve `lerobot-eval` komutunu çalıştırın; bu komut RoboLab'ı kendi sürecinde çalıştırır. Docker görüntüsünün yaptığı gibi önce RoboLab'ın yığınını, ardından bağımlılıkları olmadan LeRobot'u yükleyin:

```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
```

Bu ortamda `transformers` 5 gerektiren politikalar için yer yoktur (π₀.₅, SmolVLA, ...): bunları sunulan (served) olarak çalıştırın.

## Görevler

RoboLab'ın 120 görevinin her biri tek bir görev kimliğine sahip kendi başına bir test setidir, bu nedenle `lerobot-eval` görev başına ve genel başarı oranını raporlar. `--env.task`, virgülle ayrılmış bir görev adı listesi alır, örneğin `BananaInBowlTask,RubiksCubeAndBananaTask`; tüm 120 görev için boş bırakın. Görev adları, talimatlar ve zorluk seviyeleri RoboLab'ın [görev meta verilerinde](https://github.com/NVlabs/RoboLab/blob/main/robolab/tasks/_metadata/task_metadata.json) listelenmiştir.

Bir görevin tüm env'leri GPU'da tek bir Isaac Lab dünyasını paylaşır: `--eval.batch_size=N`, o dünyada N bölümü aynı anda çalıştırır.

## Gözlemler ve eylemler

| Anahtar                                            | Biçim          | İçerik                                                                     |
| ---------------------------------------------- | -------------- | --------------------------------------------------------------------------- |
| `observation.images.over_shoulder_left_camera` | 720 × 1280 × 3 | Robotun solundaki dış kamera                                          |
| `observation.images.wrist_cam`                 | 720 × 1280 × 3 | Bilek kamerası                                                                |
| `observation.state`                            | 8              | `joint_0.pos` … `joint_6.pos` (radyan), `gripper.pos` (0 açık, 1 kapalı)   |
| `action`                                       | 8              | 7 eklem için mutlak ortak hedefler, ardından kavrama mekanizması: 0.5 üzerinde kapalı |

Robot 15 Hz'de çalışır (fizik 120 Hz'de, eylem başına 8 fizik adımı) ve LeRobot bunu [DROID](https://huggingface.co/datasets/lerobot/droid_1.0.1)'de olduğu gibi `robot_type="Franka"` olarak kaydeder. Her bölümün, görevine ait bir zaman sınırı vardır (20 ila 300 sn, yani 300 ila 4.500 adım); başarılı bir bölüm terminated olarak, zamanı dolan bir bölüm ise truncated olarak sona erer. Görevin talimatı, env'in görev açıklamasıdır.

## Sim robot

RoboLab, `lerobot-rollout`, `lerobot-record` ve diğer robot araçlarında (bkz. [Simülasyon: yerel veya sunulan](./simulation)) gerçek bir DROID robotunun yerini alabilir:

```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 ...
```

## Ortam yapılandırma başvurusu

| Parametre                                 | Varsayılan           | Açıklama                                                                                                                     |
| ----------------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `task`                                    | empty: tümü 120    | Virgülle ayrılmış görev adları                                                                                                      |
| `cameras`                                 | `"WRIST_LEFT"`    | RoboLab'ın `robolab/registrations/droid/camera_presets.py` dosyasındaki bir kamera ön ayarı, örneğin her iki dış kamera için `WRIST_LEFT_RIGHT` |
| `instruction_type`                        | `"default"`       | Her görevin hangi talimatı verdiğini belirtir: `default`, `vague` veya `specific`                                                             |
| `observation_height`, `observation_width` | ayarlanmamış: 720 × 1280 | Kamera karelerini önce GPU'da yeniden boyutlandırın, örneğin sunucudan daha küçük kareler göndermek için                                                |

## Sıralama tablosuyla karşılaştırma

RoboLab'ın liderlik tablosu, varsayılan talimatı, `WRIST_LEFT` kameralarını ve eklem konumu eylemlerini kullanarak her görev için 10 bölüm değerlendirir; bunlar LeRobot'ın varsayılanlarıdır. Sayılarını hangi Isaac Sim sürümünün ürettiğini belirtmez ve RoboLab'ın varsayılanı Isaac Sim 5.0'dır: fizik ve renderlama, Isaac Sim sürümleri arasında farklılık gösterdiğinden, bu Isaac Sim 6.0.1 kurulumundan elde edilen sayılar doğrudan karşılaştırılabilir değildir.

