🤲 论文原文 · RoboTwin 2.0
🌐 项目主页 · RoboTwin Platform
💻 代码仓库 · RoboTwin-Platform/RoboTwin
最近突然想弄清楚一个问题:机器人论文里,一个模型在某项任务上“表现更好”,究竟是怎么测出来的?任务如何选、训练演示给多少、测试重复多少次,场景变化又是否被计入结果?
带着这个问题读 RoboTwin 2.0 很合适,因为它不仅生成双臂操作数据,也把模型放进不同任务、不同难度和真实环境中统一测评。双臂操作需要两只机械臂分工、同步和避碰,真实数据采集却很难同时覆盖大量任务、物体、场景与机器人本体;仿真可以扩大规模,但如果任务代码仍靠人工编写、场景过于干净,最终的测评也很容易只反映一个狭窄分布。
RoboTwin 2.0 (Chen 等 2025年) 的重点,是把仿真从一个“执行人工脚本的环境”推进成一条能够自动生成任务、检查失败并制造分布变化的双臂操作数据引擎。
| 组成部分 | 解决的问题 |
|---|---|
| 自动专家程序生成 | 减少为每个任务手写控制脚本的成本 |
| 仿真闭环反馈 | 自动发现执行失败并修复代码 |
| RoboTwin-OD | 为视觉、语言和操作提供统一的物体资产与 affordance 标注 |
| 强域随机化 | 让训练分布覆盖更接近真实世界的变化 |
| 跨本体适配 | 为不同自由度与工作空间生成可行抓取方式 |
| 统一 benchmark | 同时评估任务完成能力与域偏移下的鲁棒性 |
从一句任务描述到专家轨迹
系统首先接收任务名称、自然语言目标、可调用的技能 API、函数示例和约束,然后由代码智能体生成 Python 专家程序。程序进入仿真执行后,结果不会直接被当作训练数据,而是要经过检查与修正。
一次代码迭代主要包含四步:
- 生成程序:代码智能体把语言目标转换为一系列双臂动作调用。
- 重复执行:每轮在仿真中运行 10 次,记录不可执行代码、左右臂抓取失败和目标位置错误等结果。
- 定位错误:VLM 逐步观察执行图像,判断失败发生在哪一步以及可能原因。
- 修复代码:代码智能体结合执行日志和视觉诊断修改程序;成功率超过阈值则通过,否则最多继续修正 5 轮。
多模态反馈的价值不只是判断“成功或失败”,而是指出错误位置。RoboTwin 2.0 的平均代码执行成功率从一次生成的 62.1% 提升到多模态反馈后的 71.3%;同时,初始程序平均长度从 RoboTwin 1.0 的 1236.6 tokens 降到 569.4 tokens。
Strong Domain Randomization:随机化什么
论文没有只更换背景颜色,而是把变化放进五个会真实影响策略的维度。
| 随机化维度 | 具体做法 |
|---|---|
| 🧸 场景杂物 | 放置任务无关物体,同时排除容易与目标混淆的相似物体 |
| 🧱 背景与表面 | 从 20,000 张生成纹理中人工筛选 11,000 张高质量纹理 |
| 💡 光照 | 改变光源颜色、类型、强度和位置 |
| 📏 桌面高度 | 在合理范围内改变高度,从而改变视角、空间关系与可达性 |
| 💬 语言指令 | 为任务与物体生成不同粒度的描述,并在轨迹级随机组合 |
这里的关键是:视觉、空间和语言变化同时进入训练轨迹。干净数据可以教会模型完成任务,却不一定能教会它在杂乱、陌生背景或不同表达下继续完成任务。
RoboTwin-OD:物体不只是一个 mesh
RoboTwin-OD 包含 147 个类别、731 个物体实例。除了几何模型,每个物体还带有抓取点、功能点、放置点、物体轴与抓取轴,以及形状、材质、功能和部件等多粒度语言描述;每个物体有 15 条经过人工检查的描述。
这些标注让对象成为生成流程的接口:语言可以指向具体物体,技能 API 可以读取功能点和抓取方向,运动规划器再根据机器人本体筛选可达姿态。
同一个任务,不同机器人不能照搬动作
RoboTwin 2.0 支持 Aloha-AgileX、ARX-X5、Piper、Franka 和 UR5 五种本体。高自由度 Franka 可以从上方精确抓取,而工作空间更受限的 Piper 可能更适合侧向抓取,因此系统会为物体准备多个操作方向,再结合可达性扰动与并行运动规划寻找候选动作。
跨五种本体统计时,自适应抓取让自动采集成功率平均提高 8.3 个百分点;其中受运动空间限制更明显的 Piper 提高 22.7 个百分点,说明本体适配主要帮助那些无法直接复用标准抓取姿态的机械臂。
数据集与 benchmark
框架提供 50 个双臂协作任务,并预先采集超过 100,000 条专家轨迹。任务覆盖搬运、交接、堆叠、开合、按压、排序和工具使用等不同交互结构。
Benchmark 为每个任务提供 50 条干净演示,并分别在 Easy(干净场景)和 Hard(杂物、光照、纹理与高度随机化)条件下测试 100 次。五类策略的平均成功率如下:
| 策略 | Easy | Hard |
|---|---|---|
| RDT | 34.5% | 13.7% |
| \pi_0 | 46.4% | 16.3% |
| ACT | 29.7% | 1.7% |
| Diffusion Policy | 28.0% | 0.6% |
| DP3 | 55.2% | 5.0% |
Easy 上的任务完成率并不能代表鲁棒性。即使是表现最好的预训练 VLA,进入 Hard 设置后也出现明显下降;非预训练策略的平均成功率则接近于零。
Sim-to-Real:合成数据有没有真正帮到真实机器人
真实实验使用四个任务和四种环境组合:已见/未见背景,与干净/杂乱桌面交叉测试。
- 10 条真实演示:四种环境的平均成功率为 17.0%。
- 10 条真实演示 + 1,000 条合成轨迹:平均成功率升至 41.4%,提高 24.4 个百分点。
- 最难的未见背景 + 杂乱环境:从 9.0% 升至 42.0%,对应摘要所说的 367% 相对提升。
- 纯合成数据零样本迁移:在同一最难环境达到 29.5%,相对 9.0% 基线提高约 228%。
我更关心:模型和任务是怎么测的
这次读 RoboTwin 2.0,我最初并不是想深入研究仿真平台,而是想理解模型与任务的测评方式。论文把测评拆成了三个层次:
| 测评层次 | 具体设置 | 能回答的问题 |
|---|---|---|
| 任务能力 | 50 个任务,每个任务 50 条演示、100 次测试 | 模型能否学会不同类型的双臂任务 |
| 域偏移鲁棒性 | 同一任务分别在 Easy 与 Hard 环境测试 | 成功是否依赖干净背景和固定场景 |
| Sim-to-Real | 4 个真实任务,交叉改变背景与杂物 | 仿真中获得的能力能否迁移到真实机器人 |
这种设计让我意识到,任务成功率必须和测试分布一起看。只报告 Easy 场景中的平均成功率,无法区分模型是真的理解任务,还是记住了固定物体、背景和相机条件;Easy/Hard 成对测试则能直接暴露这种差距。真实机器人实验又进一步检查了合成数据带来的提升是否只存在于仿真中。
从结果看,模型在干净环境里“会做任务”并不等于具备稳健能力:Hard 条件下最好的平均成功率只有 16.3%。同时,这套测评仍有边界——真实实验只覆盖四个任务和一种策略骨干,自动生成也依赖预先设计的技能 API、物体标注和成功判定。因此,RoboTwin 2.0 更像一套用于持续生成任务、扩大测试分布并比较模型鲁棒性的基础设施,而不是对通用双臂智能的最终证明。