RoboTwin 2.0

RoboTwin 2.0 是一个基于 SAPIEN 物理引擎构建的大规模双臂操作 benchmark。它为双臂机器人 policy 提供了标准化评估协议,涵盖 50 个任务(截至上游 main),并具有强大的域随机化(杂乱、光照、背景、桌面高度和语言指令)。

RoboTwin 2.0 benchmark overview

概览

属性
任务50 个双臂操作任务
机器人Aloha-AgileX 双臂(14 自由度,每臂 7 个)
action space14 维关节空间,在 [-1, 1] 内连续
相机head_cameraleft_cameraright_camera
simulation 器SAPIEN(不是 MuJoCo)
评估协议每个任务 100 个 episode,50 个 demo_clean demonstration
评估设置Easydemo_clean)和 Harddemo_randomized

可用任务

RoboTwin 2.0 在上游 envs/ 目录中提供 50 个双臂操作任务。权威列表是 src/lerobot/envs/robotwin.py 中的 ROBOTWIN_TASKS 元组,逐字镜像自上游仓库。示例任务:

任务CLI 名称类别
用锤子敲击方块beat_block_hammer工具使用
点击铃/闹钟click_bell精密按压
堆叠方块(2 / 3)stack_blocks_two/three堆叠
堆叠碗(2 / 3)stack_bowls_two/three堆叠
交接方块/麦克风handover_block双臂协调
提起锅lift_pot双臂提起
摇晃瓶子shake_bottle连续运动
转动开关turn_switch铰接物体
盖印章stamp_seal精密放置
扫描物体scan_object移动操作

--env.task 传入逗号分隔的列表,以在单次评估扫描中运行多个任务。

`open_laptop` 目前在上游已损坏(其 `check_success()` 使用了 `self.arm_tag`,而它只在脚本专家 `play_once()` 路径中被设置,因此在普通 policy 评估期间不可用)。在上游 bug 修复之前请避免使用它,或者修补该任务,使其在 `load_actors()` 中默认 `self.arm_tag = "left"`。

dataset

RoboTwin 2.0 dataset 以 LeRobot v3.0 格式在 Hugging Face Hub 上提供:

lerobot/robotwin_unified

它包含所有 50 个任务的超过 100,000 条预采集轨迹(79.6 GB,Apache 2.0 许可证)。无需格式转换——它已经是正确的 LeRobot v3.0 模式,包含视频 observation 和 action 标签。

你可以直接使用 HF Datasets 库加载它:

from datasets import load_dataset

ds = load_dataset("lerobot/robotwin_unified", split="train")

安装

RoboTwin 2.0 需要 Linux 和 NVIDIA GPU(建议 CUDA 12.1)。安装大约需要 20 分钟。

1. 创建 conda 环境

conda create -n robotwin python=3.10 -y
conda activate robotwin

2. 安装 LeRobot

git clone https://github.com/huggingface/lerobot.git
cd lerobot
pip install -e "."

3. 安装 RoboTwin 2.0

git clone https://github.com/RoboTwin-Platform/RoboTwin.git
cd RoboTwin
bash script/_install.sh
bash script/_download_assets.sh

安装脚本会处理所有 Python 依赖,包括 SAPIEN、CuRobo、mplib 和 pytorch3d。

如果自动安装失败,请手动安装:
pip install -r requirements.txt
pip install "git+https://github.com/facebookresearch/pytorch3d.git@stable"
cd envs && git clone https://github.com/NVlabs/curobo.git && cd curobo
pip install -e . --no-build-isolation

然后应用所需的 mplib 修复:在 mplib/planner.py 第 807 行,从条件中移除 or collide

4. 将 RoboTwin 添加到 PYTHONPATH

RoboTwin 任务模块必须能被 LeRobot 导入。在 RoboTwin/ 目录中:

export PYTHONPATH="${PYTHONPATH}:$(pwd)"

将此添加到你的 shell 配置文件中以使其永久生效。

评估

标准评估(推荐)

使用官方协议(100 个 episode)在单个任务上评估 policy:

lerobot-eval \
  --policy.path="your-hf-policy-id" \
  --env.type=robotwin \
  --env.task=beat_block_hammer \
  --eval.batch_size=1 \
  --eval.n_episodes=100

单任务快速检查

lerobot-eval \
  --policy.path="your-hf-policy-id" \
  --env.type=robotwin \
  --env.task=beat_block_hammer \
  --eval.batch_size=1 \
  --eval.n_episodes=5

多任务扫描

在一次运行中评估多个任务:

lerobot-eval \
  --policy.path="your-hf-policy-id" \
  --env.type=robotwin \
  --env.task=beat_block_hammer,click_bell,handover_block,stack_blocks_two \
  --eval.batch_size=1 \
  --eval.n_episodes=100

完整 benchmark(全部 50 个任务)

lerobot-eval \
  --policy.path="your-hf-policy-id" \
  --env.type=robotwin \
  --env.task=adjust_bottle,beat_block_hammer,blocks_ranking_rgb,blocks_ranking_size,click_alarmclock,click_bell,dump_bin_bigbin,grab_roller,handover_block,handover_mic,hanging_mug,lift_pot,move_can_pot,move_pillbottle_pad,move_playingcard_away,move_stapler_pad,open_microwave,pick_diverse_bottles,pick_dual_bottles,place_a2b_left,place_a2b_right,place_bread_basket,place_bread_skillet,place_burger_fries,place_can_basket,place_cans_plasticbox,place_container_plate,place_dual_shoes,place_empty_cup,place_fan,place_mouse_pad,place_object_basket,place_object_scale,place_object_stand,place_phone_stand,place_shoe,press_stapler,put_bottles_dustbin,put_object_cabinet,rotate_qrcode,scan_object,shake_bottle,shake_bottle_horizontally,stack_blocks_three,stack_blocks_two,stack_bowls_three,stack_bowls_two,stamp_seal,turn_switch \
  --eval.batch_size=1 \
  --eval.n_episodes=100
由于上游的 `self.arm_tag` bug(见**可用任务**部分),上面的内容刻意省略了 `open_laptop`。待上游修复发布后,请重新添加它。

相机配置

默认情况下,包含所有三个相机:

相机键描述
head_camera躯干安装的俯视图
left_camera左臂腕部安装相机
right_camera右臂腕部安装相机

若要使用相机的子集,请覆盖 --env.camera_names

lerobot-eval \
  --policy.path="your-hf-policy-id" \
  --env.type=robotwin \
  --env.task=beat_block_hammer \
  --env.camera_names="head_camera,left_camera" \
  --eval.batch_size=1 \
  --eval.n_episodes=10

环境配置参考

RoboTwinEnvConfig 的关键参数:

参数默认值描述
task"beat_block_hammer"逗号分隔的任务名称
fps25simulation FPS
episode_length300每个 episode 的最大步数
obs_type"pixels_agent_pos""pixels""pixels_agent_pos"
camera_names"head_camera,left_camera,right_camera"逗号分隔的启用相机
observation_height240相机像素高度
observation_width320相机像素宽度

排行榜提交

结果可以提交到 RoboTwin 2.0 排行榜。官方协议要求:

  • 每个任务使用 50 个 demo_clean demonstration 进行训练
  • 每个任务评估 100 个 episode
  • 分别报告 Easydemo_clean)和 Harddemo_randomized)设置的成功率

有关提交说明,请参阅 RoboTwin 2.0 文档

在 GitHub 上更新