MIT团队ENCORE:五条示范让机器人学会叠衣服,效果如何
你有没有想过,为什么教机器人叠衣服这么难,但教一个人怎么倒水却只要示范一两次?这背后藏着一个让机器人研究者头疼了很多年的矛盾。你给机器人一句话指令,比如"把苹果放进碗里",这句话里藏着无数没说出来的细节:怎么抓苹果,用几分力气,先碰哪里,什么时候算放好了。人类听到这句话会自动补全这些细节,因为我们见过...
教机器人叠衣服为什么这么费劲,教人倒水示范一两次就够,这问题有人琢磨过吗?
机器人研究者被一个矛盾困扰了很多年。你给机器人下一句指令,比如“把苹果放进碗里”,这话里其实埋着大量没讲明的细节:从哪儿下爪、使多大劲、先碰哪一块、到什么程度算放稳。人一听就能自动补齐,因为抓苹果往碗里放这事见过太多回了。机器人没这份常识,只能一遍遍试错去摸,或者等人喂它成千上万条标注数据。
矛盾就摆在这儿:能不能仅凭几条示范,就让机器人上手一个新任务,而不必拿海量数据去训?MIT、2077AI开源基金会等机构合作的论文ENCORE,瞄准的正是这一点。
答案是可以,不过做法有些出人意料。
**难点究竟在哪**
先说这个领域眼下被什么卡住。
在ENCORE之前,走法大体有两种。一种叫模仿学习,拿几条人类示范直接训练神经网络。硬伤很明显:五条示范能覆盖的场景太窄,网络一碰上示范里没出现过的摆放位置就抓瞎。研究者试过用算法合成更多训练数据来补,说到底是给一个天生缺数据的模型打补丁。
另一种是近几年兴起的“代码即策略”,让大语言模型直接写代码控制机器人,写完就执行,出错再改。代表工作是ASPIRE,属于目前LIBERO-PRO基准测试上最强的智能体系统之列。它的路子是不断试错,系统里内置了不少人工写好的判断规则,比如夹爪张到多大算抓住、张到多大算抓空。这套系统报告的成功率在旧模型上是71.7%,换更强的opus-5模型重跑后达到89.3%。问题在于:它压根不看示范,全凭语言理解加反复试验去猜任务里所有藏着的细节。
那给它示范会不会好一点?论文做了实验,把示范的原始轨迹文件直接喂进ASPIRE系统,500次试验里只多对了6次,这点差距落在统计误差内,跟没用差不多。
这个结果有些反直觉。多给信息总该帮上点忙吧?可原始轨迹文件是密集的多模态数据流,几百个时间步、多个摄像头视角、大量关节状态通道全混在一起。真正决定成败的关键瞬间或许只占一小块,其余都是噪音。整段轨迹原样丢给智能体,它反倒被无关细节淹没,抓不住重点。
打个比方,教朋友做一道菜,你不会把两小时的手机录像直接甩过去让他自己看,而会把关键步骤剪出来:下锅那一下、翻炒的手法、出锅前的火候变化。录像不是信息不够,是太多了,关键信息埋在擦汗、接电话、找调料这些无关画面里。真把两小时录像给朋友,他多半看十分钟就划走了,哪一步决定菜好不好吃,根本抓不住。
**蒸馏示范:把示范变成能读的证据**
ENCORE的第一招叫示范蒸馏器。
示范蒸馏器*:一段确定性程序,把整条人类示范轨迹提炼成结构化的“证据包”,不直接拿去训练模型。
证据包里装五样东西:任务的意图描述;关键帧集合,即示范者夹爪状态发生变化(张开变闭合或闭合变张开)、手腕转向突然急转的那些时刻的多视角画面和完整状态;夹爪事件表,记录每次开合的时间、哪条手臂、张开多宽;按固定间隔抽取的完整轨迹路径;以及完整的动作流。
这里有个巧妙的设计。蒸馏器只依据示范者自身产生的信号挑关键帧,比如夹爪开合的瞬间、运动方向骤变的瞬间,却不告诉智能体这些信号意味着什么。论文里说得很直白:蒸馏器要是直接标注哪一帧是“松开”,等于它自己把本该留给智能体做的推理先做掉了一半。
这个思路让人想到另一件事。好老师带学生做实验,不会在实验报告旁写满“这里出现沉淀说明反应完成了”这类结论性批注,只会标出“第3分钟溶液颜色突然变化”这种客观观察点,让学生自己去想它代表什么。结论都替学生写好,学生记住的是答案,没学会怎么从现象推结论,下回换个实验条件又不会了。ENCORE的蒸馏器就是这种只标现象、不给结论的老师。
还有个细节:证据包会用白名单过滤器,把与任务无关的信息一律砍掉,包括模拟器内部状态、物体的精确坐标、文件路径等。目的是防止智能体抄近道,从底层数据里偷看答案,而不是真去理解示范。
**感知和动作接口:划清能力的边界**
ENCORE的第二个核心设计,是给智能体一套固定的感知与动作接口,这套接口在模拟环境和真实机器人上完全一致。
接口*:智能体操控机器人所用的工具集合,含感知类(拍照、测距、读取夹爪状态)、理解类(物体分割、文字问答)、动作类(移动到某个坐标、设置夹爪张合)。
接口划出一条清晰边界:机器人能看能动,但不知道抓哪个物体、怎么抓、抓完放哪、怎么算任务完成。这些具体的任务知识,得由智能体自己从示范包里读出来,或者在开发阶段自己测出来。
另外,每次调用接口都有次数上限,智能体没法靠疯狂调用传感器把成功率堆上去。
这条边界其实很关键。接口里若直接内置“抓取规划器”这类高级功能(就像ASPIRE那样提供抓取规划器和物体包围盒拟合工具),智能体不读示范也能把任务做出来,示范到底起了多大作用就无从验证。ENCORE故意把这些高级能力拿掉,只留最基础的感知和动作原语,逼着智能体必须去读示范,才能摸清任务的关窍。
这好比考试时发给学生一台能直接查答案的计算器,解题方法有没有真学会,根本测不出来。换成最基础的加减乘除工具,他才不得不调动自己的理解去搭解题过程。ENCORE想观察和利用的,正是这个被逼着调用理解的过程。不这样设计,实验结果就会失真——示范起了作用,还是接口自带的高级功能起了作用,根本分不清。
**开发循环:写代码、跑、看结果、改**
证据包和接口备齐之后,就该看智能体怎么真正干活了。
开发循环的流程是这样:每个任务配一个全新的智能体,它自行编写分析代码去翻证据包,写出策略程序,在一批开发阶段的初始状态上反复运行、反复修改,最后冻结一个版本,提交去做正式的密封评测。
规则卡得很死:评测阶段,任务是否成功的信号,智能体一眼都看不到。判断逻辑得自己写进程序里,靠机械臂自身的位置感知加上摄像头画面,去确认“我是不是抓住了”“我是不是放对了”。系统还会做静态检查,任何偷看模拟器“任务终止标志”的程序一律拒收,每个程序都必须自带一套验证机制。
这个思路其实贴近真实世界里机器人部署的处境。工厂里干活的机械臂,旁边没人随时告诉它“这次做对了”或者“这次做错了”,任务进展只能靠自己的传感器判断。训练阶段就允许偷看成功信号,部署到现实的那一刻就会立刻失效,现实世界根本不会给这个信号。
论文举了一个很直观的例子,把这种开发循环讲得很清楚。任务要求打开底部抽屉,可演示视频里打开的偏偏是中间那个抽屉,任务文字写的又是底部抽屉。论文里把没有示范的智能体称作K=0组,它试了整整20个版本,侧着捏、从下往上勾、压住把手往外硬拽,各种抓法轮番上阵,结果全部落空。它得出的结论写进了自己的笔记:这套接口根本抓不住底部把手的结构,手比把手下方的缝隙还要厚,勾手需要的凹槽也不够深。最后它固化出一个只能打开中间和顶部抽屉的程序,密封测试拿到的分数是0。
而拿到三条示范的K=3组情况就不同了。示范里有个关键细节被它捕捉到了:示范者拉抽屉时,手腕全程保持在水平线以下15到36度的倾斜角度,持续往外、往下使劲。它把张开的指尖搭在把手上方,照着这个持续下压外拖的动作做,底部抽屉便拉开了。
这里头有门道。没示范的智能体并非在偷懒,它确实做了大量成体系的尝试,问题在于搜索方向一开始就偏了:它一门心思要“捏住”把手,从没往“拖拽”上想。搜索失败不等于任务做不成,只是说明搜索的人没找对路子。示范给出的,恰好就是被这次搜索漏掉的那个方向。
这有点像学一道从没吃过的菜。你自己瞎琢磨,火候和刀法试了二十来种,味道还是不对,于是断定家用灶具做不出这道菜。可师傅随手示范一遍,你才发现要害既不在火候也不在刀法,而是下锅前得先腌上半小时,这步你压根没想到。方向错了,不是因为你不用功,而是示范补上了一个你自己想不到去试的维度。
**结果:示范到底帮了多少**
方法说完了,接下来看数字层面上示范到底值多少钱。
论文在LIBERO-PRO基准上做了细致测试。这个基准从两个方向扰动原始任务:一个是POS轴,把物体连同承载它的家具挪到新位置;另一个是TASK轴,重写任务指令,成功判定标准也随之改变。两条扰动轴都没有配专属示范。
在POS轴上(只挪位置、指令不变),三条示范组写出的第一版程序已经在11/30个格子上、在某些开发状态中跑通了,平均成功率29%;没示范的组第一版程序则一处都没成功。有示范的组平均到第2个版本就首次成功,没示范的组要等到第4个版本。不过最终冻结后的成功率相差不大,一边是1454,另一边是1437(满分1500),因为没示范的智能体在15次开发尝试中,差不多也把示范包里隐含的那些信息摸了出来。
TASK轴改了指令,要求重新组合技能,两边的差距在这里拉得更开。三条示范组的第一版程序就在18/30个格子里成功,平均成功率53%;没示范组只成功了1个格子,成功率2%。看最终冻结结果,三条示范组赢10个、输2个、平18个,密封测试总成绩1435/1500,没示范组则是1409/1500。
把这些数字拼起来看,整个60个扰动格子(POS加TASK)里,三条示范组密封测试总成绩是2889/3000,达到96.3%;没示范组是2846/3000,达到94.9%;而重新用opus-5模型跑的ASPIRE系统是89.3%,论文原始发布的成绩是71.7%。
| 方法 | 整体POS成功率 | 整体TASK成功率 |
|---|---|---|
| π0.5 | 25% | 1% |
| CaP-Agent0 | 20% | 16% |
| ASPIRE(opus-4.6) | 77% | 67% |
| ASPIRE(opus-5重跑) | 90% | 89% |
| ENCORE K=0 | 96% | 94% |
| **ENCORE K=3** | **97%** | **96%** |
有个失败案例值得单独拿出来说。任务是“把盘子放到柜子顶上”。三条示范组试了11个版本,一直没找到既能稳稳拿起盘子、又能把它带到柜顶的抓法,最后放弃,密封测试0/50。没示范组反倒反复搜索了23个版本,自己摸出一种沿弧线提起盘子的抓法,最终拿到50/50。
示范并不是万能钥匙。它能大幅压缩搜索时间,却保证不了搜索一定走到对的地方。要是示范里展示的抓法恰好不适合新场景,有时反而把智能体带偏,让它过早放弃本该继续试的路径。
**目标没说清楚:RoboDojo这道关**
LIBERO-PRO这个基准虽然改写了任务指令,但好歹还算清楚。ENCORE团队又找了个更刁钻的测试场,叫RoboDojo。
RoboDojo*是个双臂机器人模拟测试平台,不少任务的指令本身就没把目标讲明白。比如“用木块和木板搭个塔”,这句话没告诉你塔该搭成什么形状,打分全靠系统自带的判定程序。
在这个基准上,没有示范的智能体一个任务都没成功。论文挑出10个任务做对比:三条示范组在450次测试里拿下95次成功,没示范组是0次。95次成功集中在4个任务上。论文还引用了一句没示范智能体留下的笔记,挺耐人寻味:“操作本身已经解决了,但不知道该搭成什么结构。”
这句话点到了问题的本质。机器人的手部动作能力并不缺,缺的是知道该把这个能力往哪个方向用。示范包里的关键帧图片恰好补上了这一块,它展示的不是怎么抓怎么放,而是最终应该长成什么样子。
但研究者发现了一个反直觉的结果:光给图片不够。他们单独做了个对照实验,把三条示范简化成只有关键帧图片,姿态数据、夹爪读数、动作记录全部去掉。结果在需要精细接触的任务上(堆叠积木、互换两个T形块、插管子),成绩大幅下降,有些甚至比完全没示范还差。智能体光看一张抓取动作的照片,还原不出精确的抓取力度和角度,只能花掉宝贵的开发预算去反复试探猜测这些数值,结果比什么都没有更糟。
这个结果说明:图片能告诉你“结果长什么样”,但告诉不了你“怎么用力才能做到这个结果”。跟看菜谱配图学做菜很像。照片能让你知道这道菜最后该是什么颜色什么形状,但那张照片永远教不会你翻锅的手腕力度和下盐的精确克数,这些东西只有看着完整的操作过程才能学会。菜谱只给最终成品照,你反而会在猜测具体手法上浪费更多时间,还不如没有照片去自由发挥。
**真实机器人上的验证**
研究者还把系统部署到了真实双臂机械臂上做验证,用的是 Trossen WidowX AI,同时接入 4 个摄像头。真实示范录了两类:一类是双臂之间传递魔方,另一类是把倒扣的杯子翻过来摆正到桌面。两类任务各自只依赖 5 条人类遥操作示范。
传递魔方的示范里藏着一个任务说明完全没提到的细节:接收方的夹爪要转90度,让两个手指的平面和递交方的手指平面呈十字交叉,而且接收方要先闭合夹爪,递交方才能松开。这正是文章开头那张图里强调的重叠环节,是示范专门捕捉下来、指令文字完全没有体现的隐藏技巧。
翻正杯子的流程更绕一些,夹爪得开合四次,并非抓、放两下就能完成:先夹住竖立杯子的侧面将其推倒,杯子放倒后再调整抓取方式,改为夹住杯底附近,随后转动手腕,让杯口朝下扣到桌面上。
两个任务在真实世界的10次密封测试里都拿到9/10,最终判定由一个没参与开发的人来做。
**写在后面**
读完这篇论文,有个点一直在脑子里打转:示范不是用来教机器人“怎么动胳膊”的,而是用来教它“该往哪个方向思考”。
这个区分很微妙,也很关键。传统意义上,示范被当成动作数据,学了动作数据就能复刻动作。ENCORE让智能体自己去读示范、自己去写代码,示范真正起作用的方式,是帮智能体缩小假设空间,让它少走弯路地找到藏在任务指令背后的“隐藏目标”或者“隐藏策略”。打开抽屉那个案例里,没有示范的智能体耗费20个版本得出“这个任务做不到”的错误结论,而示范只是悄悄告诉它一个它从未想过的用力方向。
示范蒸馏器的设计也让人印象很深,那种克制是有意为之。它完全可以更贴心一点,直接告诉智能体“这一帧是松手”“这个动作是在抓取”,但它偏偏不这么做,只给出客观信号(夹爪开合时刻、运动方向突变点),把解读的权力完全留给智能体。这种选择背后似乎藏着一种判断:预先告诉答案的系统学不到迁移的能力,只有自己推理过的东西,才能在新场景里灵活套用。教育里常说的“授人以渔”是同一个道理,只不过放在了机器人系统设计这个很具体的工程语境里。
还有一个反复被琢磨的问题:这套系统目前在六个需要极其精细接触的任务上(插充电器、插钥匙、拧螺丝、烤面包、放笔记本电脑、挂马克杯)全部失败,成功率是零。这是不是说明,靠几条示范加语言模型写代码这条路,终究会在某个精细度的门槛前撞墙?那道墙具体在哪里,是靠更好的感知接口能跨过去,还是有些任务天生就不适合用这种“读示范写代码”的范式去解决?论文没给出答案,留给了后面的人。
Q&A
Q1:ENCORE是什么?
A:ENCORE 这套框架的思路,是让机器人只读少量人类示范,就能生成操作程序。智能体看过示范材料后会自行编写控制机械臂的代码,经过多轮试跑与修改,最后锁定一版程序用于正式测试。
Q2:ENCORE和直接用示范数据训练模型有什么区别?
A:如果直接训练模型,拿到手的是个黑箱网络,少量示范能覆盖的情形太有限,摆放位置一变就很容易失手。ENCORE 的做法是让语言模型把示范当作证据来读,再自行写出可读、可修改的程序,因而更能适应此前没见过的新布局。
Q3:没有示范的话机器人能完成任务吗?
有人问,完全不给示范,机器人还能不能干成?答案是分情况。任务只是换了位置、指令没变的话,智能体靠一遍遍试错,最后也能把成功率追到差不多的水平,代价是花的时间明显更长。可要是目标本身就没交代清楚——RoboDojo 里有部分任务就是这样——不给示范就一点辙都没有,根本做不成。