# RoboTwin 2.0

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

RoboTwin 2.0 是一个基于 SAPIEN 物理引擎构建的**大规模双臂操作基准**。它为双臂机器人策略提供了标准化的评估协议，涵盖 50 项任务（截至上游 `main`），并具备强大的域随机化能力（包括杂乱、光照、背景、桌面高度以及语言指令）。

- 论文：[RoboTwin 2.0：一种具有强域随机化、用于鲁棒双手机器人操作的可扩展数据生成器与基准](https://arxiv.org/abs/2506.18088)
- GitHub: [RoboTwin-Platform/RoboTwin](https://github.com/RoboTwin-Platform/RoboTwin)
- 排行榜：[robotwin-platform.github.io/leaderboard](https://robotwin-platform.github.io/leaderboard)
- 数据集：[lerobot/robotwin_unified](https://huggingface.co/datasets/lerobot/robotwin_unified)

![RoboTwin 2.0 benchmark overview](https://www.aitntnews.com/pictures/2025/7/8/9a7f79cb-5ba9-11f0-8581-fa163e47d677.png)

## 概述

| 属性      | 值                                                    |
| ------------- | -------------------------------------------------------- |
| 任务         | 50 个双臂操作任务                           |
| 机器人         | Aloha-AgileX 双臂（14 自由度，每臂 7 个）                |
| 动作空间  | 14 维关节空间，在 `[-1, 1]` 内连续              |
| 相机       | `head_camera`, `left_camera`, `right_camera`             |
| 模拟器     | SAPIEN（而非 MuJoCo）                                      |
| 评估协议 | 每个任务 100 集，50 个 demo_clean 演示          |
| 评估设置 | **简单**（`demo_clean`）和 **困难**（`demo_randomized`） |

## 可用任务

RoboTwin 2.0 在其上游 `envs/` 目录中提供了 50 个双臂操作任务。标准列表是 `src/lerobot/sim/integrations/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`            | Articulated obj   |
| 印章               | `stamp_seal`             | 精度位置   |
| 扫描对象              | `scan_object`            | 移动操作     |

向 `--env.task` 传入逗号分隔的列表，即可在单次评估中运行多个任务。

  `open_laptop` 目前在上游存在缺陷（其 `check_success()` 使用了 `self.arm_tag`，而该变量仅在脚本化专家 `play_once()` 路径中设置，因此在常规策略评估期间不可用）。在上游修复该缺陷之前请避免使用它，或者对任务进行修补，在 `load_actors()` 中将 `self.arm_tag = "left"` 设为默认值。

## 数据集

RoboTwin 2.0 数据集以 **LeRobot v3.0 格式** 在 Hugging Face Hub 上可用：

```
lerobot/robotwin_unified
```

它包含所有 50 个任务中超过 100,000 条预先收集的轨迹（79.6 GB，Apache 2.0 许可证）。无需格式转换——它已经采用正确的 LeRobot v3.0 架构，包含视频观测数据和动作标签。

您可以使用 HF Datasets 库直接加载它：

```python
from datasets import load_dataset

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

## 安装

RoboTwin 2.0 需要配备 NVIDIA GPU 的 **Linux** 系统（SAPIEN 使用 Vulkan 进行渲染）。其规划器 CuRobo 和 pytorch3d 针对 torch 2.7.1 编译 CUDA 代码，这与 LeRobot 的 torch 版本不匹配，因此 RoboTwin 在 `lerobot-env-server` 后方的独立环境中运行，而策略端仅需 LeRobot。

### 已提供的图像（推荐）

```bash
lerobot-env-server --config_path=docker/sim/configs/robotwin.yaml --sim.task=beat_block_hammer --docker=true
```

首次运行会构建`docker/Dockerfile.sim`中的`robotwin_native`阶段（大约需要 20 分钟，主要耗时在 pytorch3d 和 CuRobo 上）。在小型机器上，请先自行构建镜像并限制内存；之后服务器将直接复用该镜像：

```bash
docker build -f docker/Dockerfile.sim --build-arg SIM=robotwin \
  --build-arg MAX_JOBS=1 --build-arg CUROBO_CUDA_ARCHS=8.6 -t lerobot-sim-robotwin:local .
```

其中 `8.6` 是您 GPU 的计算能力。请在下面的评估命令中添加 `--env.server.endpoint=tcp/127.0.0.1:7448`。

### 原生环境

要在不使用 Docker 的情况下运行服务器，请在单独的虚拟环境中复现 `docker/Dockerfile.sim` 的 `robotwin_native` 阶段，这是经过测试的配方：CUDA 12.8 `nvcc`、torch 2.7.1、固定的 RoboTwin commit 和 assets、CuRobo v0.7.8，以及 RoboTwin 的 mplib 和 SAPIEN 补丁。然后使用 `--no-deps` 加上 `docker/sim/requirements.txt` 安装 LeRobot，并从上述命令中移除 `--docker=true`（参见 [Simulation: local or served](./simulation)）。

## 评估

### 标准评估（推荐）

使用官方协议（100 个回合）在单个任务上评估策略：

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

### 单任务快速检查

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

### 多任务扫描

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

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

### 完整基准测试（全部 50 项任务）

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

  `open_laptop` 由于上游 `self.arm_tag` 的 bug 而在上述内容中被有意省略（参见 **可用任务** 部分）。待上游修复后，请将其重新添加。

## 相机配置

默认情况下，包含所有三个摄像头：

| 相机键     | 描述                    |
| -------------- | ------------------------------ |
| `head_camera`  | 躯干安装顶部视图    |
| `left_camera`  | 左臂手腕处安装的摄像头  |
| `right_camera` | 右臂手腕处安装的摄像头 |

要使用摄像头的子集，请覆盖 `--env.camera_names`：

```bash
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"`                    | 以逗号分隔的任务名称       |
| `fps`                | `25`                                     | 模拟 FPS                     |
| `episode_length`     | `1200`                                   | 每集最大步数              |
| `obs_type`           | `"pixels_agent_pos"`                     | `"pixels"` 或 `"pixels_agent_pos"` |
| `camera_names`       | `"head_camera,left_camera,right_camera"` | 以逗号分隔的激活相机     |
| `observation_height` | `240`                                    | 相机像素高度                |
| `observation_width`  | `320`                                    | 相机像素宽度                 |

## 排行榜提交

结果可以提交至 [RoboTwin 2.0 排行榜](https://robotwin-platform.github.io/leaderboard)。官方协议要求：

- 每个任务使用 50 个 `demo_clean` 演示进行训练
- 每个任务评估 100 个回合
- 分别报告**简单**（`demo_clean`）和**困难**（`demo_randomized`）设置下的成功率

有关提交说明，请参阅 [RoboTwin 2.0 文档](https://robotwin-platform.github.io/doc/)。

