

RoboTwin 2.0 论文精读:用可规模化仿真数据提升双臂操作鲁棒性
精读 RoboTwin 2.0:MLLM 闭环代码生成、RoboTwin-OD、五轴域随机化与 embodiment-aware grasping 如何共同缩小双臂操作的 sim-to-real gap。
RoboTwin 2.0 把 MLLM 代码生成、仿真反馈、RoboTwin-OD 资产库和五轴域随机化组合成可扩展的双臂数据工厂,并用 embodiment-aware grasping 提升 sim-to-real 鲁棒性。
1. 论文概述#
【Paper】 RoboTwin 2.0 面向双臂协作操作,提供数据生成器、超过 100,000 条专家轨迹、50 个任务、5 种双臂 embodiment 和统一 benchmark。核心不是提出一个新的 policy 网络,而是把“任务程序如何生成、场景如何变、不同机器人如何执行”变成可自动扩展的基础设施。

一句话总结#
【Analysis】 RoboTwin 2.0 将仿真从“干净场景中的固定脚本”升级为一个带视觉反馈的程序合成闭环:MLLM 写任务代码,仿真执行十次暴露失败,VLM 定位原因,代码代理再修复;随后在物体、杂乱、光照、背景、桌高和语言上做结构化随机化,生成能迁移到真实双臂平台的数据。
核心贡献#
【Paper】
- RoboTwin-OD:731 个物体实例、147 个类别,带 placement、functional、grasp point/axis 与多粒度语言描述。
- MLLM + simulation-in-the-loop 的专家代码生成器,在 10 次模拟试验和最多 5 轮修复中筛选可执行程序。
- 五个域随机化轴:clutter、lighting、background、tabletop height、language;并针对不同 DoF 的机器人生成候选抓取姿态。
- 50+ 双臂任务、5 种 embodiment 和 benchmark;代码生成 ASR 提升 10.9 个百分点,合成数据显著改善 VLA 的仿真与真实环境鲁棒性。
2. 背景与相关工作#
【Paper】 双臂任务涉及交接、协同装配、工具使用和双物体同步移动。真实示教同时覆盖多种物体、语言、光照和硬件,采集成本随组合数快速增长,因此 simulation-based synthesis 很有吸引力。
已有工作主要有三类短板:
- 生成质量不可控:一次生成的脚本可能抓空、放错位置或根本无法运行,失败轨迹会污染训练集。
- 随机化过于表面:只换颜色或相机,而没有把 clutter、物理可行性、桌面高度和语言变化一起纳入。
- 忽视 embodiment 差异:Franka 的高 DoF 机械臂可以 top-down 抓取,Piper 等低 DoF 平台可能只能侧向接近;相同脚本并不等于相同可达性。
【Analysis】 因而 RoboTwin 2.0 的研究问题是数据工厂问题:如何让“任务程序质量”“环境覆盖度”和“跨机器人可执行性”同时可扩展,而不是只增加轨迹数量。
3. 问题定义#
【Paper】 给定任务名称与自然语言目标,系统要输出能在指定 embodiment 上完成任务的 Python task program,并由它生成视觉、本体感知和动作轨迹。单条 episode 的 observation 包括多视角 RGB、关节状态和语言 instruction;action 是由 task API 驱动的末端位姿/夹爪控制序列,而非一个统一的离散 action token。
| 维度 | RoboTwin 2.0 设定 |
|---|---|
| 任务 | 50+ 个双臂协作任务,如 Handover Block、Stack Bowls、Open Laptop |
| 资产 | RoboTwin-OD 731 instances / 147 categories |
| Embodiment | Aloha-AgileX、Piper、Franka、UR5、ARX-X5 |
| 数据 | 每个任务支持 clean 与 domain-randomized 轨迹;论文报告超过 100,000 条 |
| 目标 | 生成高成功率专家程序,并评估 Easy/Hard 环境中的泛化 |
4. 方法#
4.1 Overall Architecture#

上图中的数据流是:RoboTwin-OD 与 skill API 提供可操作对象和动作原语,MLLM 生成 task code,模拟器执行并记录结果,VLM observer 给出视觉诊断,修复后的程序再进入随机化数据采集与 benchmark。
4.2 核心模块#
RoboTwin-OD 与 affordance annotations#
【Paper】 534 个自建 RGB-to-3D 物体、153 个 Objaverse 物体和 44 个 PartNet-Mobility articulated 物体组成资产库。每个对象有 15 条经人工核验的描述,以及 placement point、functional point、grasp point 和 grasp axis。

【Code】 官方仓库把对象与任务 API 放在 assets/、envs/ 和 envs/utils.py,具体任务类(例如 envs/stack_bowls_two.py)通过 grasp_actor、place_actor、move 等原语读写这些标注。这样新物体主要是资产和关键点配置问题,而不是重新手写整套控制器。
MLLM expert code generation#

【Paper】 code-generation agent 读取 API 列表、函数调用示例、层级约束和任务描述,先生成 Python 程序。每轮执行 10 次,日志记录不可运行代码、左右臂抓取失败、错误放置和规划失败;VLM observer 逐帧查看关键步骤,报告失败时间点与可能原因。代码代理融合定量日志和定性视觉诊断,最多连续修复 5 轮,达到设置的成功率阈值即停止。
【Code】 code_gen/task_generation_mm.py 会写出 envs_gen/gpt_task.py(其中 task 是任务名),调用 insert_observation_points 注入观测点,再由 run() 汇总 success_rate、error_message 和 run_records。仓库默认每个候选程序最多尝试 5 次,test_gen_code.py 中的模拟评估以 10 次 rollout 形成成功率。
五轴 domain randomization#

【Paper】
- Clutter:从 OD 采样任务无关物体,使用碰撞感知放置,并排除与目标物视觉/语义相似的 distractor。
- Background:由 1,000 个表面描述生成 20,000 张候选纹理,经人工筛选得到 11,000 张。
- Lighting:随机化颜色温度、光源类型、数量、强度和位置。
- Tabletop height:在合理范围内改变桌面高度,改变视角和空间关系。
- Language:MLLM 生成任务模板与对象描述,再组合成多种 instruction。
【Code】 envs/_base_task.py 读取 domain_randomization 配置;官方 env_cfg/task_config/demo_randomized.yml 打开 random_background、cluttered_table、random_light,并把 random_table_height 设为 0.03。get_cluttered_table() 负责杂乱物体插入,table_z_bias 通过均匀采样改变桌高。
Embodiment-aware grasp adaptation#
【Paper】 对每个对象预先标注多个抓取轴和接近方向,再叠加带 reachability bias 的角度扰动,并行尝试 motion planning。该模块为同一语义任务生成“适合当前手臂”的候选姿态,而不是强迫所有机器人复用一种 grasp。
4.3 关键公式#
【Paper】 令任务程序为 ,场景随机变量为 ,模拟器执行结果为 。代码生成阶段的目标可写成:
其中 包含动力学、感知和场景随机性。论文用 10 次 rollout 的平均值估计该期望;达到阈值便接受程序。
【Analysis】 对策略训练而言,随机化数据近似扩大了训练分布:
这不是论文提出的新损失,而是解释为什么 clean 与 randomized 轨迹混合后,policy 对未见背景、clutter 和桌高变化更稳定。
4.4 Training#
【Paper】 论文将生成的专家轨迹用于 ACT、DP、RDT、Pi0、DP3 等 policy。域随机化预训练实验使用 32 个任务、9,600 条轨迹(每任务 300 条),再在 5 个未见任务上用 50 条 clean demonstrations 做单任务适配。真实实验中 RDT 使用 1,000 条合成轨迹与 10 条真实示教,另设 synthetic-only 对照。
【Code】 数据采集入口是 scripts/collect_data.py 与 collect_data.sh;demo_clean.yml 和 demo_randomized.yml 控制场景开关,默认保存 RGB、qpos 和双腕相机数据。策略训练本身不在 RoboTwin 主仓库中,而是通过 XPolicyLab/外部 policy 代码读取 HDF5 或转换后的 LeRobot 数据。
- MLLM 根据任务约束生成 Python task program。
- 在模拟器中执行 10 次,记录每次成功/失败及错误类型。
- VLM 检查关键帧并定位逻辑、抓取或放置失败。
- 代码代理修复程序;最多 5 轮,达到阈值后接受。
- 对对象、场景、光照、桌高和语言采样,运行 task API 采集轨迹。
- 将 clean/randomized 轨迹提供给下游 imitation/VLA 训练。
4.5 Inference#
【Paper】 benchmark 推理时固定 50 条 clean demonstrations 进行单任务训练,再在 Easy(干净)和 Hard(clutter、光照、纹理、桌高随机化)各执行 100 次 rollout。真实部署在 COBOT-Magic 双臂平台上,测试 seen/unseen background 与 clean/cluttered 四种组合。
【Code】 scripts/eval_policy.sh 统一启动 policy server 与 simulator;eval_policy_multitask.py 从任务配置读取 domain randomization,eval_policy_xpolicylab.py 将观测中的 language instruction 传给策略。RoboTwin 本身负责环境与成功判定,具体 action decoding 由 ACT、RDT、Pi0 等适配器实现。
- 加载指定 embodiment、对象实例和随机化种子。
- 渲染多视角 RGB/状态观测,并将 instruction 发送给 policy。
- 执行策略动作,直到任务成功、失败或达到 step limit。
- 重复 100 次,分别统计 Easy 与 Hard 成功率。
4.6 代码实现对照#
| 论文概念 | 官方代码位置 | 对照结论 |
|---|---|---|
| MLLM 代码生成 | code_gen/task_generation_mm.py | 生成、插入观测点、执行和迭代修复均有实现 |
| VLM observer | code_gen/observation_agent.py | 读取 episode 图像,输出步骤级诊断 |
| Task API | envs/_base_task.py、envs/utils.py | grasp/place/move 等原语支撑任务脚本 |
| 域随机化 | envs/_base_task.py、env_cfg/task_config/demo_randomized.yml | 五轴中的视觉/空间轴在配置中可开关 |
| 数据采集 | scripts/collect_data.py | 支持多 embodiment、RGB/qpos/wrist camera 保存 |
| Policy 训练 | XPolicyLab 与外部仓库 | RoboTwin 仓库提供环境和数据,不内置完整 VLA 训练器 |
5. 实验#
5.1 Experimental Setup#

【Paper】 评估分为四部分:自动专家代码生成、embodiment-aware grasping、策略鲁棒性预训练、真实世界 sim-to-real,以及 50 任务 benchmark。主要 backbone 包括 ACT、DP、RDT、Pi0、DP3。
5.2 Main Results#
【Paper】
| 实验 | 关键结果 |
|---|---|
| 代码生成 | RoboTwin 2.0 + MM feedback 的 ASR 为 71.3%,Vanilla 为 62.1%;Top5-ASR 为 78.6% |
| 迭代效率 | MM feedback 的平均修复轮数 CR-Iter 为 1.76,RoboTwin 1.0 为 2.42 |
| 抓取适配 | 五种 embodiment 平均成功率从 52.2% 提升到 60.5%,增幅 8.3 个百分点 |
| 仿真鲁棒性 | RDT + randomized 平均 24.8%,相对其 pretrained baseline 提升 31.9%;Pi0 + randomized 为 29.1% |
| 真实 few-shot | 10 条真实示教 + 1,000 条合成轨迹,在四种条件下平均提升 24.4 个百分点 |
| 真实 zero-shot | 仅合成数据在 unseen background 条件下仍提升 21.0/20.5 个百分点 |
【Analysis】 改进主要出现在低 DoF 平台和复杂环境:Franka/UR5 已有较大可达空间,抓取候选扩展的边际收益小;Piper 的成功率提升 22.7 个百分点,说明“数据多”之外,动作是否对 embodiment 可行同样关键。
5.3 Ablation Study#
【Paper】 代码生成消融把 Vanilla、仅执行日志反馈(FB)和日志 + VLM(MM FB)分开。RoboTwin 2.0 上 ASR 依次为 62.1%、66.7%、71.3%,说明符号日志和视觉诊断具有互补性;单独视觉反馈并不是替代执行器,而是帮助定位语义层错误。
域随机化消融比较 clean 与 randomized 预训练。RDT 的平均成功率从 14.6% 提升到 24.8%,Pi0 从 24.9% 提升到 29.1%;增益在未见任务和随机化测试中更明显。
5.4 Generalization#
【Paper】 benchmark 在 50 个任务上使用 50 条 clean demonstrations 训练,并用 100 rollouts 测 Easy/Hard。Hard 平均成功率为:RDT 13.7%、Pi0 16.3%、ACT 1.7%、DP 0.6%、DP3 5.0%。预训练 VLA 更抗域偏移,但 Pi0 从 Easy 到 Hard 仍下降 30.1 个百分点,说明通用预训练不能替代专门的 randomized data。
【Analysis】 DP3 在 clean few-shot 条件下较强,部分原因是仿真 point cloud 和背景分割近乎完美;这提醒我们 benchmark 的传感器假设会影响模型排名,真实部署时应报告感知噪声和标定误差。
6. 方法分析#
6.1 为什么有效?#
【Analysis】 RoboTwin 2.0 同时作用于三个误差源:MLLM 闭环减少“程序语义错误”,affordance/embodiment 适配减少“运动学不可行”,域随机化减少“训练与部署分布差异”。三者串联后,合成数据不再只是数量扩张,而是带有质量控制和覆盖度设计。
6.2 核心创新#
- 程序级闭环:把执行结果变成可解释的 code repair 信号。
- 结构化随机化:五个轴分别对应真实部署中的视觉、空间和语言变化。
- 跨 embodiment affordance:抓取姿态候选显式编码机器人可达性。
- 生成器 + benchmark 一体化:同一任务 API 同时用于采集、训练和评测,降低复现实验的接口成本。
6.3 与已有方法的本质区别#
【Analysis】 GenSim 类方法重点是从语言生成新任务;RoboTwin 2.0 更进一步,把任务生成、失败诊断、随机化和多机器人执行放在同一闭环。它的主要产物是“可反复运行的数据生成系统”,而非一次性的 task script 或单一 policy。
6.4 关键假设#
- 模拟器中的碰撞、摩擦、相机和控制误差足以覆盖真实变化的主要部分。
- 物体 affordance 标注和 skill API 能表达 50+ 任务的关键交互。
- MLLM/VLM 的诊断能从十次 rollout 中定位可修复原因。
- 语言、视觉和桌面随机化的组合不会引入与任务目标冲突的歧义。
7. 局限性#
7.1 作者明确提出的局限#
【Paper】 作者指出合成数据仍可能遗漏真实传感器噪声和罕见 edge case;embodiment adaptation 尚未建模 force/tactile feedback,因此对精细接触控制有限。未来工作包括提高 sim-to-real fidelity、支持更复杂的多物体任务与真实部署。
7.2 自己分析得到的局限#
【Analysis】
- VLM observer 依赖视觉帧和外部模型,诊断成本与延迟可能随任务长度增长;论文没有报告完整的 API 调用成本或失败诊断准确率。
- 50 个任务虽覆盖广,但大多仍是桌面短时操作;长时序、动态物体和接触力主导任务的外推尚未验证。
- 真实实验只在 COBOT-Magic 上展示四类任务,跨平台真实部署证据仍少于仿真 benchmark。
- benchmark 的 Hard 条件主要是视觉/空间随机化,尚未系统加入遮挡、深度缺失、执行器延迟等更强感知与控制扰动。
8. 启发与研究思考#
【Analysis】 RoboTwin 2.0 给 VLA 数据工程的启发是:扩充数据时要同时问“覆盖了哪些变化”“轨迹是否真的可执行”“是否适合目标硬件”。对后续研究,可以沿三条线推进:
- 将 tactile、force 和接触事件加入 affordance 与 success checker,让随机化从视觉域扩展到交互域。
- 把代码生成器产生的失败日志整理成可学习的 recovery policy,而不只用于离线修复脚本。
- 在 benchmark 中拆分语言、视觉、运动学和传感器噪声的独立贡献,报告每个域轴的 scaling law。
如果你的目标是训练一个新的 bimanual VLA,较稳妥的起点是先用 demo_randomized 数据做跨任务预训练,再用少量真实 demonstrations 做 embodiment 与相机标定适配;不要只在 clean simulation 上追求高成功率。