# RoboCasa365

  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/robocasa.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)).

[RoboCasa365](https://robocasa.ai) adalah kerangka simulasi berskala besar untuk melatih dan menguji **robot generalis** dalam tugas-tugas dapur sehari-hari. Kerangka ini menyediakan 365 tugas manipulasi yang beragam di 2.500 lingkungan dapur, 3.200+ aset objek, dan 600+ jam data demonstrasi manusia, pada manipulator mobile PandaOmron 12-DOF (lengan Franka di atas basis holonomik).

- Makalah: [RoboCasa: Simulasi Skala Besar Tugas Sehari-hari untuk Robot Generalis](https://arxiv.org/abs/2406.02523)
- GitHub: [robocasa/robocasa](https://github.com/robocasa/robocasa)
- Situs web proyek: [robocasa.ai](https://robocasa.ai)
- Kebijakan pra-terlatih: [`lerobot/smolvla_robocasa`](https://huggingface.co/lerobot/smolvla_robocasa)
- Dataset tugas tunggal (CloseFridge): [`pepijn223/robocasa_CloseFridge`](https://huggingface.co/datasets/pepijn223/robocasa_CloseFridge)

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/robocasa-banner.webp"
  alt="RoboCasa365 benchmark overview"
  width="85%"
/>

## Tugas yang tersedia

RoboCasa365 mengorganisasikan 365 tugasnya ke dalam dua keluarga dan tiga grup benchmark hulu yang LeRobot paparkan sebagai pintasan `--env.task` kelas pertama:

| Keluarga    | Tugas | Deskripsi                                                                     |
| --------- | ----- | ------------------------------------------------------------------------------- |
| Atomik    | ~65   | Tugas keterampilan tunggal: pick-and-place, manipulasi pintu/laci, kontrol peralatan |
| Komposit | ~300  | Tugas multi-langkah di lebih dari 60 kategori: memasak, membersihkan, merapikan, dll.     |

**Contoh tugas atomik:** `CloseFridge`, `OpenDrawer`, `OpenCabinet`, `TurnOnMicrowave`, `TurnOffStove`, `NavigateKitchen`, `PickPlaceCounterToStove`.

**Kategori tugas komposit:** memanggang, merebus, menyeduh, memotong, membersihkan meja, mencairkan makanan, mengisi mesin pencuci piring, membuat teh, memanaskan makanan di microwave, mencuci piring, dan lainnya.

`--env.task` menerima tiga bentuk:

- nama tugas tunggal (`CloseFridge`)
- daftar yang dipisahkan koma (`CloseFridge,OpenBlenderLid,PickPlaceCoffee`)
- shortcut grup benchmark — `atomic_seen`, `composite_seen`, `composite_unseen`, `pretrain50`, `pretrain100`, `pretrain200`, `pretrain300` — yang otomatis diperluas menjadi daftar tugas upstream dan otomatis mengatur `split` dataset (`target` atau `pretrain`).

## Instalasi

RoboCasa dan dependensinya `robosuite` tidak dipublikasikan di PyPI, dan `setup.py` milik RoboCasa sendiri meng-hardcode `lerobot==0.3.3`, yang bertentangan dengan `lerobot` di repo ini. Oleh karena itu, LeRobot tidak **mengexpose** extra `robocasa` — instal kedua paket secara manual sebagai clone editable (gunakan `--no-deps` pada `robocasa` untuk melewati pin `lerobot` yang ter-shadow):

```bash
# After following the standard LeRobot installation instructions.

git clone https://github.com/robocasa/robocasa.git ~/robocasa
git clone https://github.com/ARISE-Initiative/robosuite.git ~/robosuite
pip install -e ~/robocasa --no-deps
pip install -e ~/robosuite

# Robocasa's runtime deps (the ones its setup.py would have pulled, minus
# the bad lerobot pin).
pip install numpy numba scipy mujoco pygame Pillow opencv-python \
            pyyaml pynput tqdm termcolor imageio h5py lxml hidapi \
            tianshou gymnasium

python -m robocasa.scripts.setup_macros
# Lightweight assets (lightwheel object meshes + textures). Enough for
# the default env out of the box.
python -m robocasa.scripts.download_kitchen_assets \
  --type tex tex_generative fixtures_lw objs_lw
# Optional: full objaverse/aigen registries (~30GB) for richer object
# variety. Enable at eval time via --env.obj_registries (see below).
# python -m robocasa.scripts.download_kitchen_assets --type objs_objaverse
```

RoboCasa memerlukan MuJoCo. Atur backend rendering sebelum pelatihan atau evaluasi:

```bash
export MUJOCO_GL=egl  # for headless servers (HPC, cloud)
```

### Daftar objek

Secara default, env mengambil sampel objek hanya dari registry `lightwheel` (yang dikirim oleh `--type objs_lw`), yang menghindari crash `Probabilities contain NaN` ketika paket objaverse / aigen tidak ada di disk. Jika Anda telah mengunduh set aset lengkap, aktifkan registry lengkap saat runtime:

```bash
--env.obj_registries='[objaverse,lightwheel]'
```

## Evaluasi

Semua cuplikan eval di bawah ini mencerminkan perintah CI (lihat `.github/workflows/benchmark_tests.yml`). Argumen `--rename_map` memetakan kunci kamera asli RoboCasa ke tata letak input tiga kamera (`camera1` / `camera2` / `camera3`) yang digunakan untuk melatih kebijakan `smolvla_robocasa` yang dirilis: `robot0_agentview_left` → `camera1`, `robot0_agentview_right` → `camera2`, `robot0_eye_in_hand` → `camera3`. Pasangan ini harus sesuai dengan pemetaan saat pelatihan kebijakan (lihat `rename_map` di `train_config.json` checkpoint); pertukaran dua kunci kamera akan diterima secara diam-diam, karena ketiga tampilan berbagi bentuk yang sama.

Secara default, setiap tugas menggunakan horizon rollout yang didaftarkan oleh RoboCasa. Atur `--env.episode_length=<steps>` untuk menerapkan horizon eksplisit yang sama ke setiap tugas yang dipilih.

### Evaluasi tugas tunggal (disarankan untuk iterasi cepat)

```bash
lerobot-eval \
  --policy.path=lerobot/smolvla_robocasa \
  --env.type=robocasa \
  --env.task=CloseFridge \
  --eval.batch_size=1 \
  --eval.n_episodes=20 \
  --eval.use_async_envs=false \
  --policy.device=cuda \
  '--rename_map={"observation.images.robot0_agentview_left": "observation.images.camera1", "observation.images.robot0_agentview_right": "observation.images.camera2", "observation.images.robot0_eye_in_hand": "observation.images.camera3"}'
```

### Evaluasi multi-tugas

Lewatkan daftar tugas yang dipisahkan koma:

```bash
lerobot-eval \
  --policy.path=lerobot/smolvla_robocasa \
  --env.type=robocasa \
  --env.task=CloseFridge,OpenCabinet,OpenDrawer,TurnOffStove \
  --eval.batch_size=1 \
  --eval.n_episodes=20 \
  --eval.use_async_envs=false \
  --policy.device=cuda \
  '--rename_map={"observation.images.robot0_agentview_left": "observation.images.camera1", "observation.images.robot0_agentview_right": "observation.images.camera2", "observation.images.robot0_eye_in_hand": "observation.images.camera3"}'
```

### Evaluasi kelompok benchmark

Jalankan seluruh grup upstream (misalnya semua 18 tugas `atomic_seen` dengan `split=target`):

```bash
lerobot-eval \
  --policy.path=lerobot/smolvla_robocasa \
  --env.type=robocasa \
  --env.task=atomic_seen \
  --eval.batch_size=1 \
  --eval.n_episodes=20 \
  --eval.use_async_envs=false \
  --policy.device=cuda \
  '--rename_map={"observation.images.robot0_agentview_left": "observation.images.camera1", "observation.images.robot0_agentview_right": "observation.images.camera2", "observation.images.robot0_eye_in_hand": "observation.images.camera3"}'
```

### Episode evaluasi yang direkomendasikan

**20 episode per tugas** untuk benchmarking yang dapat direproduksi. Sesuai dengan protokol yang digunakan dalam hasil yang dipublikasikan.

## Input dan output kebijakan

**Observasi** (nama kamera RoboCasa mentah dipertahankan apa adanya):

- `observation.state` — keadaan proprioseptif 16-dimensi (posisi basis, kuaternion basis, posisi ujung-efektor relatif, kuaternion ujung-efektor relatif, qpos gripper)
- `observation.images.robot0_agentview_left` — tampilan agen kiri, 256×256 HWC uint8
- `observation.images.robot0_eye_in_hand` — tampilan kamera pergelangan tangan, 256×256 HWC uint8
- `observation.images.robot0_agentview_right` — tampilan agen kanan, 256×256 HWC uint8

**Aksi:**

- Kontrol kontinu dalam `Box(-1, 1, shape=(12,))` — gerakan dasar (4D) + mode kontrol (1D) + posisi ujung efektor (3D) + rotasi ujung efektor (3D) + gripper (1D).

## Pelatihan

### Contoh tugas tunggal

Dataset tugas tunggal yang siap digunakan tersedia di Hub: [`pepijn223/robocasa_CloseFridge`](https://huggingface.co/datasets/pepijn223/robocasa_CloseFridge).

Lakukan fine-tuning pada SmolVLA base untuk `CloseFridge`:

```bash
lerobot-train \
  --policy.type=smolvla \
  --policy.repo_id=${HF_USER}/smolvla_robocasa_CloseFridge \
  --policy.load_vlm_weights=true \
  --policy.push_to_hub=true \
  --dataset.repo_id=pepijn223/robocasa_CloseFridge \
  --env.type=robocasa \
  --env.task=CloseFridge \
  --output_dir=./outputs/smolvla_robocasa_CloseFridge \
  --steps=100000 \
  --batch_size=4 \
  --env_eval_freq=5000 \
  --eval.batch_size=1 \
  --eval.n_episodes=5 \
  --save_freq=10000
```

Evaluasi checkpoint yang dihasilkan:

```bash
lerobot-eval \
  --policy.path=${HF_USER}/smolvla_robocasa_CloseFridge \
  --env.type=robocasa \
  --env.task=CloseFridge \
  --eval.batch_size=1 \
  --eval.n_episodes=20
```

## Mereproduksi hasil yang dipublikasikan

Checkpoint yang dirilis [`lerobot/smolvla_robocasa`](https://huggingface.co/lerobot/smolvla_robocasa) dievaluasi dengan perintah pada bagian [Evaluation](#evaluation). CI menjalankan smoke eval 10-atomic-task (satu episode masing-masing) pada setiap PR yang menyentuh benchmark, dengan memilih tugas yang berpusat pada fixture dan tidak memerlukan paket aset objaverse.

