LeRobot documentation

RoboCasa365

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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 是一个用于在厨房日常任务中训练和评估通用机器人的大规模仿真框架。它提供了 365 个多样化的操作任务,涵盖 2,500 个厨房环境、3,200 多个物体资产以及 600 多小时的真人演示数据,运行于 PandaOmron 12 自由度移动操作平台(全向底盘上的 Franka 机械臂)之上。

RoboCasa365 benchmark overview

可用任务

RoboCasa365 将其 365 个任务划分为两个系列和三个上游基准组,LeRobot 将这些组作为一等 --env.task 快捷方式暴露出来:

家族任务描述
原子~65单一技能任务:抓取与放置、门/抽屉操作、家电控制
复合~300涵盖烹饪、清洁、整理等 60 多个类别的多步骤任务

原子任务示例: CloseFridge、OpenDrawer、OpenCabinet、TurnOnMicrowave、TurnOffStove、NavigateKitchen、PickPlaceCounterToStove。

复合任务类别:烘焙、煮沸、冲泡、切菜、清理餐桌、解冻食物、装载洗碗机、泡茶、微波加热食物、洗碗等。

--env.task 接受三种形式:

  • 单个任务名称(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 额外依赖项——请手动以可编辑克隆的方式安装这两个包(对 robocasa 使用 --no-deps 以跳过其被遮蔽的 lerobot 版本固定):

# 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 requires MuJoCo. Set the rendering backend before training or evaluation:
export MUJOCO_GL=egl  # for headless servers (HPC, cloud)

对象注册表

默认情况下,env 仅从 lightwheel 注册表(即 --type objs_lw 所附带的内容)中采样对象,从而避免在 objaverse / aigen 数据包未位于磁盘上时出现 Probabilities contain NaN 崩溃。如果您已下载完整的资产集,请在运行时启用完整注册表:

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

评估

以下所有评估代码片段均与 CI 命令保持一致(参见 .github/workflows/benchmark_tests.yml)。--rename_map 参数将 RoboCasa 的原生相机键映射到已发布的 smolvla_robocasa 策略所训练的三相机(camera1 / camera2 / camera3)输入布局:robot0_agentview_left → camera1,robot0_agentview_right → camera2,robot0_eye_in_hand → camera3。此配对必须与策略训练时的映射一致(参见检查点 train_config.json 中的 rename_map);交换两个相机键会被静默接受,因为所有三个视图具有相同的形状。

默认情况下,每个任务使用 RoboCasa 注册的 rollout horizon。设置 --env.episode_length=<steps> 可为所有选定的任务应用相同的显式 horizon。

单任务评估(推荐用于快速迭代)

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

多任务评估

传入以逗号分隔的任务列表:

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

基准组评估

运行整个上游组(例如,所有 18 个 atomic_seen 任务,且 split=target):

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,)) 中的连续控制 — 基础运动(4D)+ 控制模式(1D)+ 末端执行器位置(3D)+ 末端执行器旋转(3D)+ 夹爪(1D)。

训练

单任务示例

Hub 上有一个可直接使用的单任务数据集:pepijn223/robocasa_CloseFridge。

在 CloseFridge 上微调 SmolVLA 基础模型:

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

评估生成的检查点:

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 使用 评估 部分中的命令进行评估。CI 会在每个触及该基准的 PR 上运行一个包含 10 个原子任务的冒烟评估(每个任务一个 episode),并选择以 fixture 为中心、无需 objaverse 资产包的任务。

Update on GitHub