# 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)は、日常のキッチンタスクにおける**汎用ロボット**の学習とベンチマークを行うための大規模シミュレーションフレームワークです。PandaOmron 12-DOFモバイルマニピュレーター（ホロノミックベース上のFrankaアーム）上で、2,500のキッチン環境、3,200以上のオブジェクトアセット、600時間以上の人間のデモデータとともに、365の多様なマニピュレーションタスクを提供します。

- 論文: [RoboCasa: 汎用ロボットのための日常タスクの大規模シミュレーション](https://arxiv.org/abs/2406.02523)
- GitHub: [robocasa/robocasa](https://github.com/robocasa/robocasa)
- プロジェクトウェブサイト: [robocasa.ai](https://robocasa.ai)
- 事前学習済みポリシー: [`lerobot/smolvla_robocasa`](https://huggingface.co/lerobot/smolvla_robocasa)
- 単一タスクデータセット (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%"
/>

## 利用可能なタスク

RoboCasa365 は、365 タスクを 2 つのファミリーと 3 つの上流ベンチマークグループに分類しています。LeRobot はこれらを `--env.task` ショートカットとして第一級に公開しています:

| ファミリー    | タスク | 説明                                                                     |
| --------- | ----- | ------------------------------------------------------------------------------- |
| アトミック    | ~65   | 単一スキルタスク: ピック&プレイス、ドア/引き出しの操作、家電製品の制御 |
| 複合 | ~300  | 60以上のカテゴリにわたるマルチステップタスク: 料理、掃除、整理整頓など     |

**アトミックタスクの例:** `CloseFridge`、`OpenDrawer`、`OpenCabinet`、`TurnOnMicrowave`、`TurnOffStove`、`NavigateKitchen`、`PickPlaceCounterToStove`。

**複合タスクカテゴリ:** 焼き、茹で、抽出、刻み、テーブルの片付け、食品の解凍、食器洗い機のセット、紅茶の淹れ、食品の電子レンジ加熱、食器洗い、など。

`--env.task` は3つの形式を受け入れます:

- 単一のタスク名(`CloseFridge`)
- カンマ区切りのリスト(`CloseFridge,OpenBlenderLid,PickPlaceCoffee`)
- ベンチマークグループのショートカット — `atomic_seen`、`composite_seen`、`composite_unseen`、`pretrain50`、`pretrain100`、`pretrain200`、`pretrain300` — であり、アップストリームのタスクリストに自動展開され、データセットの`split`（`target`または`pretrain`）を自動設定します。

## インストール

RoboCasaとその依存関係である`robosuite`はPyPIに公開されておらず、RoboCasa自身の`setup.py`は`lerobot==0.3.3`をハードコードしており、このリポジトリの`lerobot`と競合します。そのため、LeRobotは`robocasa`エクストラを**公開していません**。2つのパッケージをeditableなクローンとして手動でインストールしてください（`robocasa`には`--no-deps`を付けて、シャドウされている`lerobot`のピン留めをスキップします）:

```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にはMuJoCoが必要です。学習または評価の前にレンダリングバックエンドを設定してください:

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

### オブジェクトレジストリ

デフォルトでは、env は `lightwheel` レジストリ（`--type objs_lw` が提供するもの）からオブジェクトのみをサンプリングします。これにより、objaverse / aigen パックがディスク上に存在しない場合の `Probabilities contain NaN` クラッシュを回避できます。フルアセットセットをダウンロードした場合は、実行時にフルレジストリを有効にしてください。

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

## 評価

以下のすべての評価スニペットは、CI コマンドを反映しています（`.github/workflows/benchmark_tests.yml` を参照）。`--rename_map` 引数は、RoboCasa のネイティブなカメラキーを、公開されている `smolvla_robocasa` ポリシーが学習に使用した 3 カメラ（`camera1` / `camera2` / `camera3`）の入力レイアウトにマッピングします：`robot0_agentview_left` → `camera1`、`robot0_agentview_right` → `camera2`、`robot0_eye_in_hand` → `camera3`。この対応付けは、ポリシーの学習時のマッピングと一致する必要があります（チェックポイントの `train_config.json` 内の `rename_map` を参照）。3 つのビューはすべて同じ形状を共有しているため、2 つのカメラキーを入れ替えてもエラーにはなりません。

デフォルトでは、各タスクはRoboCasaによって登録されたロールアウトホライズンを使用します。`--env.episode_length=<steps>`を設定することで、選択したすべてのタスクに同じ明示的なホライズンを適用できます。

### 単一タスク評価（クイックな反復に推奨）

```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"}'
```

### マルチタスク評価

カンマ区切りのタスクのリストを渡します:

```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"}'
```

### ベンチマークグループの評価

アップストリームのグループ全体を実行します（例：`split=target` を使用して、`atomic_seen` タスクの全18件）：

```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"}'
```

### 推奨される評価エピソード

再現可能なベンチマークのために、**タスクごとに20エピソード**を実行します。公開されている結果で使用されているプロトコルと一致しています。

## ポリシーの入力と出力

**観察**（生のRoboCasaカメラ名はそのまま保持されます）：

- `observation.state` — 16次元のプロプライオセプティブ状態（ベース位置、ベース四元数、相対エンドエフェクタ位置、相対エンドエフェクタ四元数、グリップqpos）
- `observation.images.robot0_agentview_left` — 左エージェントビュー、256×256 HWC uint8
- `observation.images.robot0_eye_in_hand` — 手首カメラの視点、256×256 HWC uint8
- `observation.images.robot0_agentview_right` — 右エージェントビュー、256×256 HWC uint8

**アクション:**

- `Box(-1, 1, shape=(12,))` における連続制御 — 基本モーション（4次元）+ 制御モード（1次元）+ エンドエフェクタ位置（3次元）+ エンドエフェクタ回転（3次元）+ グリッパー（1次元）。

## トレーニング

### 単一タスクの例

すぐに使用できる単一タスクのデータセットがHubにあります: [`pepijn223/robocasa_CloseFridge`](https://huggingface.co/datasets/pepijn223/robocasa_CloseFridge)。

`CloseFridge`でSmolVLAベースをファインチューニングします:

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

生成されたチェックポイントを評価します:

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

## 公開された結果の再現

公開されたチェックポイント [`lerobot/smolvla_robocasa`](https://huggingface.co/lerobot/smolvla_robocasa) は、[Evaluation](#evaluation) セクションに記載のコマンドで評価されます。CI は、ベンチマークに変更を加えるすべての PR に対して、10 個の原子タスクのスモーク評価（各 1 エピソード）を実行します。この際、objaverse アセットパックを必要としない、フィクスチャ中心のタスクが選択されます。

