作者|沙丘智库研究团队

来源|沙丘社区(www.shaqiu.cn)

这段记录来自伦敦大学学院和卡内基梅隆大学的作者发布的OpenRUA论文中的一次仿真实验。机械臂要把番茄酱瓶放进篮子,却在第一次抓取时碰倒了瓶子。负责指挥它的Claude Code从夹爪间距和相机画面中发现抓取失败,随后重新读取深度数据,测量瓶子倒下后的姿态,再试了一次。这回,瓶子被直立放进了篮子。

研究者没有为它预设“瓶子倒了怎么办”的补救流程。重新测量、调整抓取,这些步骤所需的程序,是Agent在执行任务时编写的。

图1|从左到右、从上到下:比较场景变化、首次抓取失手、重新观测瓶子、放入篮子。原论文图7,LIBERO-PRO仿真测试中的单次执行记录。

机械臂早就能按程序自动工作。工程师可以先设定运动路径、编好操作流程,再由控制器执行;不需要人盯着每一步发指令。

OpenRUA把针对具体任务编程和调试的工作,交给了Claude Code。用过这类编程Agent的开发者应该很熟悉:给它一个目标,它会读文件、写代码、运行程序,出错后再修改。在这里,它读取的是机器人文档和相机画面,写出的程序用来测量物体位置、安排抓取和处理失误。实际的关节运动仍由机器人已有的控制器执行。

10月1日,来自伦敦大学学院和卡内基梅隆大学的作者公开了这项研究及其开源项目。本文介绍的主要实验使用Claude Code,调用的模型是Claude Opus 5。

研究团队给出的是完整任务,比如“把瓶子放进篮子”或“把带孔零件套到柱子上”。他们要验证的是:不给这些任务的示范,也不预先写好专用操作流程,编程Agent能否靠机器人文档和接口,自己写程序把任务做完。测试既看各类任务的完成率,也看物体位置或任务要求改变后,它还能不能完成任务。

01

给它文档和接口,让它自己写程序

OpenRUA为Agent准备了一个工作目录,里面有README、机器配置、接口文档,以及少量能直接运行的基础脚本,比如保存相机图像、发送关节运动轨迹。

这些资料说明了机器人有哪些传感器、各关节的运动范围,以及控制接口怎么调用。Agent通过机器人常用的软件框架ROS 2读取相机画面和关节状态,也通过它向控制器发送运动指令。

接到任务后,Agent自己查文档、看画面,决定该测量什么、运行什么程序,以及怎样检查结果。代码、图像和执行日志都保存在工作目录里,供同一次任务的后续步骤使用。

此前已有研究让编程Agent控制机器人,常见做法是先为它准备好物体定位、抓取等专用工具,或让它调用训练好的机器人模型。OpenRUA直接开放机器人已有的软件接口,配上文档和基础脚本。针对眼前的任务,瓶子的位置怎么测、夹爪该张多宽、抓偏了怎么调整,由Agent在执行时编程处理。

论文所说的“零样本”,是指测试前不提供机器人任务示范,不让Agent预先练习这些任务,也不为这些任务微调模型。每次试验都从新的工作目录开始,不沿用上一轮的代码和经验。Claude本身已经经过训练;这里省去的是针对这些机器人任务的额外训练和练习。

图2|Agent读取相机和传感器数据、编写程序,通过ROS 2调用控制器,再读取新的数据检查执行结果。沙丘社区依据论文方法部分绘制,所示实验在仿真环境中进行。

02

看见瓶子后,还得算出往哪里夹

相机拍到了瓶子,机械臂却不能凭一句“在画面左边”就伸手抓取。它需要具体的三维坐标,还要知道夹爪该张多宽、从哪个方向靠近。

OpenRUA把相机图像、深度数据和机器人状态保存为文件。Agent打开图像辨认物体,再写Python程序处理数据。深度数据提供距离;结合相机参数,程序可以把画面中的位置换算成机械臂能使用的三维坐标。

开篇的瓶子倒下后,原来的抓取位置和角度已经不适用了。Agent根据新的图像和深度数据重建瓶子的三维形状,估计朝向,重新规划抓取。动作完成后,再查看画面,确认瓶子是否进了篮子。

论文还记录了一项套孔装配任务,原文称为Nut:机器人要拿起一个带孔零件,将它套到柱子上。Agent先从俯视图中找到零件和柱子,再写程序按高度筛选深度数据,把桌面上的物体分离出来,计算各自的位置。为了看清零件把手的方向和宽度,它把局部图像裁出、放大,还加上了像素网格。

图3|从左到右、从上到下:俯视图、按高度处理的深度图、加网格的局部图、抓取后的腕部相机画面。原论文图4,套孔装配任务的仿真环境。

抓取前,Agent估算把手宽度约为30.4毫米;抓取后,读到的夹爪间距是30.35毫米。它对照这两个数值,再结合腕部相机画面,检查零件是否夹住了。

03

动作执行到一半,也要检查有没有出错

夹住零件、移动到柱子上方,还不算完成任务。接下来的插入过程需要检查接触情况,只计算目标坐标还不够。

在论文记录的一次套孔装配任务中,Agent编写的程序把插入分成七段,每完成一段就读取一次接触力数据。它调用机器人已有的传感器接口,给这次插入动作加上了中途检查。

拉抽屉时也有类似做法。Agent写出的程序分段拉动,每拉一段就检查位移和夹爪间距。如果抽屉不动了,或夹持状态不对,程序就停止并返回信息。

这些检查由运行中的程序完成,不必每读一次传感器都调用大模型。Claude Code查看程序返回的日志和新图像后,再决定下一步怎么做。

执行时读取哪些传感器、遇到什么情况停下来,都写在程序里。后续步骤需要时,Agent可以继续调用这些程序,也可以根据返回结果修改。

04

哪些任务成功率达到99%?

作者在三套机器人仿真测试中评估了OpenRUA。下面列出的是Claude Code配合Claude Opus 5的成绩。

这里按一次任务是否达标来计算成功率。评测程序依据各套测试规定的成功条件判定,不以Agent自己声称“完成了”为准,也不统计机械臂做了多少次动作。一次任务中可以反复尝试,抓偏后重新抓取也包含在这次试验里。

CaP-Bench包括抓起物体、堆叠、擦拭、套孔装配、重新堆叠、双臂抬举和双臂交接七类任务,每类测试100次,共700次。LIBERO-PRO进行了800次试验。RoboCasa365测试了50个指定任务,表中只列出其中“新任务组合”这一组的结果。

评测范围

主要考察什么

成功率

CaP-Bench,七类任务

抓取、堆叠、擦拭、装配及双臂操作等

99.0%

LIBERO-PRO,四组任务、两种变化条件

物体初始位置或任务指令改变后的表现

87.0%

RoboCasa365,新任务组合

包含多个步骤的厨房任务

28.1%

数据来自论文表1、表4。“新任务组合”对应原文的“未见复合任务”(Composite-Unseen),指任务模板未出现在RoboCasa365提供的训练示范中,不能据此断言Claude从未接触过相关知识。

99%是CaP-Bench这七类任务的总体成绩,既包括单臂任务,也包括双臂协作。在RoboCasa365的新任务组合测试中,成功率只有28.1%。面对需要连续完成多个步骤的厨房任务,OpenRUA仍有大量试验无法达标。

论文也用OpenAI的编程AgentCodex做了独立对比测试,搭配的模型是GPT-6 Astra。作者让Codex和Claude Code分别通过同一套机器人接口执行任务。Codex的成绩列在LIBERO-10的对比实验中,上表引用的三项主要成绩均来自Claude Code配合Claude Opus 5。

失败记录也很具体。有时物体太宽,夹爪无法稳定夹持;有时物体在搬运途中滑落。Agent还会发错控制指令,或漏掉检查,没发现任务尚未完成。前面那些测量和反馈程序,在实际执行中也会出错。

与其他系统的比较同样需要注意条件:部分成绩引自其他论文,各自使用的基础模型、积累的经验和接口条件都有差异。成绩差距究竟有多少来自OpenRUA的设计,还需要在相同条件下验证。这些结果也不足以说明专用机器人模型可以被替代。

05

仿真可以暂定,真实环境不会等它

这些实验还有一个关键前提:Agent思考时,仿真时间暂停;执行动作时,仿真才继续运行。

也就是说,模型读文档、看图、写代码期间,仿真里的瓶子可以停在原地。现实中,物体可能滑动,人可能走进画面,其他设备也可能继续运行。等模型想好下一步,刚才看到的场景未必还成立。

Agent写出的程序可以在运行时读取反馈,但后续操作如何安排,仍然要等模型做决定。这些等待会有多大影响,本次实验没有完整验证。真实相机还可能缺失部分深度数据,测量噪声、相机标定误差也会影响坐标计算。作者把真实机器人上的验证留到了后续研究。

对机器人开发者来说,OpenRUA值得仔细看的,是Agent在执行任务时写出的测量和检查程序。它们已经能在仿真中帮助机械臂完成指定任务,并在部分失误后继续尝试。要用到真实机器人上,还得验证这些程序能否处理有误差的传感器数据,以及模型能否在场景变化前及时给出下一步指令。


 

· 论文:OpenRUA: Robot-Use Agents Are Zero-Shot Visuomotor Policies,Zhaoyang Chu等,2026年10月1日,https://arxiv.org/html/2610.02459v1

· 代码仓库:https://github.com/terminalworld/OpenRUA