跳转到内容

一句“把杯子拿来”,背后到底有多少算法?

从拿杯子的任务出发,认识感知、规划、策略、控制和反馈闭环。

正式课程约 18 分钟更新于 2026.10.24

这是《让机器人学会做事》的第一篇。你不需要懂编程、机器学习或机器人,只需要想象一张桌子和一个杯子。

读完后,你应该能说清楚三件事:机器人完成任务时要解决哪些问题;OpenVLA、π 这类模型大致处在哪里;为什么一次成功的演示还不等于真正学会。


开场:它答应得很快,然后呢?

Section titled “开场:它答应得很快,然后呢?”

设想你坐在桌前,对机器人说:

“把杯子拿来。”

机器人回答:“好的。”

一秒过去了。两秒过去了。杯子还在原处。

你追问:“你不知道杯子是什么吗?”

它流利地介绍了杯子的用途、材质,以及保温杯和马克杯的区别。

你听得很满意,但还是有点渴。

这个小场景藏着具身智能的核心挑战:把一句要求变成真实世界中可完成、可检查的行动。

“具身”可以先这样理解:智能系统通过身体上的传感器获取信息,通过身体的动作影响环境。机器人看到的是相机画面,改变世界靠的是轮子、机械臂、夹爪等部件。身体的形状、能感知什么、能怎样运动,都会影响它能做什么。

那么,拿一次杯子到底需要多少算法?

没有一个固定数字。 有的系统把工作拆成多个模块,有的用一个学习模型承担其中几项工作。我们先认识这些工作,再认识算法名字。

这里的“算法”,可以先理解为解决问题的一套计算方法;“模型”则常指用数据训练得到、用于进行预测或决策的计算系统。一类问题,可能有很多种算法可以解决。


先约定:怎样才算“拿来了”?

Section titled “先约定:怎样才算“拿来了”?”

为了把第一课讲清楚,我们先给任务一个具体版本:

桌上只有一个空塑料杯。一个固定在桌边的机械臂,要把杯子竖着放进你面前的托盘,松开夹爪,杯子还稳稳留在那里。

暂时不用找厨房,也不用边走边端杯子。机械臂前端的两片“手指”叫夹爪;相机提供桌面画面,关节传感器帮助系统知道手臂当前的位置。

先把要求说清楚很有必要。碰到杯子、把杯子举起来、把杯子送到托盘,是三个不同的结果。

真实任务可能更含糊:桌上有两个杯子,“拿来”是放到桌边,还是递到人手里?这时,系统需要结合上下文确定目标;信息不够时,询问也可以是合理行动。我们这一课先把这些歧义消掉。

下面这场“杯子搬家”,是一段帮助理解算法的假想实验。


相机拍到了一张照片:杯子在左边,托盘在右边。

对人来说,接下来伸手就行。对机器人来说,照片里的一块区域,还没有自动变成“夹爪应该到达的位置”。

它至少需要从观察中得到对任务有用的信息:

  • 哪一块是杯子,哪一块是托盘?
  • 杯子离手有多远?朝哪个方向摆着?
  • 从哪里接近,比较容易夹住?
  • 手臂自己现在在哪里?

这组问题属于感知与表征。

感知,是从传感器信息中了解当前情况。表征,是把复杂的原始信息整理成后续计算能使用的形式:可以是位置、形状,也可以是模型内部的一组数字特征。

再认识一个有点拗口、但很好用的词:可供性。它关心的是“这个物体适合怎样交互”。同样一只杯子,识别出“这是杯子”和判断“这里可以抓、这里容易滑”,是不同的问题。

可以把它想成两种不同的眼光:逛商店时,你看杯子的颜色;准备拿起它时,你开始关心哪里好握。

有些机器人会明确计算杯子的三维位置和抓取点;有些学习模型直接利用图像与机器人自身状态生成动作。不必每套系统都先做出一张完整的三维地图,但输出动作时仍须对得上真实机器人的位置、方向和接口。

到这里,它获得了“当前是什么情况”的线索。下一步,才轮到“打算怎么办”。


第二关:先夹住,再抬起,顺序不能反

Section titled “第二关:先夹住,再抬起,顺序不能反”

假如你给机器人写一张小纸条,上面只有三个词:

夹住、抬起、放下。

这张纸条漏了很多东西:先张开夹爪,再接近杯子并对准;抬起来以后,要移到托盘上方;放稳之后,才可以松手。

一个更完整的任务安排可能是:

  1. 接近杯子,让夹爪处于合适位置。
  2. 合拢夹爪,检查是否夹住。
  3. 抬起杯子,移动到托盘上方。
  4. 把杯子放下,松开夹爪。
  5. 检查杯子是否稳定留在托盘里。

这属于任务推理与规划:把目标分成子任务,选择技能,并安排顺序。

如果杯子在柜子里,计划还得加上“打开柜门”。如果机械臂根本够不到柜门,文字上再合理的计划也执行不了。

因此,规划不仅要考虑“这一步对目标有没有帮助”,也要考虑“现在做不做得到”。SayCan 就研究了把语言层面的任务判断与机器人技能的可行性结合起来选择行动。

不过,简单任务不一定需要一张显式写出来的步骤表;一个训练好的策略也可能直接完成这串动作。这里拆步骤,是为了帮助我们看清问题。


第三关:“接近杯子”到底要怎么接近?

Section titled “第三关:“接近杯子”到底要怎么接近?”

计划说:“接近杯子。”

机械臂却不能靠这四个字移动。

它还需要更具体的选择:现在往哪个方向动?移动多少?手腕怎么转?什么时候闭合夹爪?

根据当前观察和目标,决定下一步怎样行动的规则或模型,叫作策略。

“策略”在这里不一定是一份长远谋划。它可以很具体:看到杯子偏左,就调整手的位置;发现夹爪还没对准,就暂时不闭合。

策略输出的动作也有不同形式:可能是一组关节目标,也可能是夹爪末端应移动的距离和方向,还可能是一小段连续动作。

你可以把任务规划和策略先区分成两句话:

任务规划:“下一件事是拿起杯子。”

动作策略:“根据现在的画面和手的位置,接下来这样动。”

一些方法会一次预测一段动作,称为动作块。比如 ACT 研究从示范中学习这样的动作序列;Diffusion Policy 用生成模型产生动作序列,并结合新的观察继续规划后续动作。

一次预测一段,并不意味着必须闭着眼把整段执行到底。实际系统可以先执行其中一部分,再根据新情况更新后续动作。

这些方法怎样训练,后面还会说。先记住:策略负责把当前信息变成行动选择。


第四关:知道往哪去,手臂也可能撞桌子

Section titled “第四关:知道往哪去,手臂也可能撞桌子”

现在,机器人已经决定让夹爪到达杯子旁边。

但想象一下:杯子和手之间多了一个盒子。

如果手直线穿过去,终点很对,过程很糟。

这就引出了运动规划与控制。这里有两项相关但不同的工作:

工作在拿杯子时要解决什么
运动规划找到一条可执行的路径或轨迹,考虑障碍物、手臂能否够到、关节能否这样运动
控制根据实际位置等反馈,调整驱动命令,让手臂尽量跟上目标运动

我们坐车时会说“去图书馆”。导航给出路线,驾驶员一路修正方向和速度。机器人也需要把目标落实为运动,并不断处理执行误差。

其中,“夹爪要到那里,各个关节该摆成什么样”属于逆运动学关心的问题。今天不用计算它,只要知道:机械臂有自己的关节结构,手想去的位置不一定到得了。

策略、运动规划和控制之间的边界可以变化。有的策略直接输出关节目标,有的输出末端移动量,再由控制器处理。这是不同层次的描述,不是一条所有机器人都必须照搬的装配线。


夹爪合上,手臂开始抬起。

杯子却滑回了桌面。

如果机器人照着原来的动作继续,它可能会认真地把一团空气运进托盘。

问题出在哪里?原来的计划假定“杯子已经在手里”,真实世界却没有配合。

因此,机器人必须再次观察:杯子是不是跟着手动了?夹爪的状态是否符合预期?有触觉或力传感器时,它们也能提供线索。

行动之后获取新信息,再用新信息调整后续行动,这叫反馈闭环。

机器人反馈闭环:目标与观察、选择动作、执行、获取新观察,完成后结束任务

点击图片查看大图

图中最值得留意的是那条返回箭头:新的观察会影响接下来怎么做。

反馈也不是万能补丁。如果相机被手挡住,或者系统没有学会识别抓空,它仍可能判断错误。所以“知道自己失败了”和“知道怎样恢复”,本身就是需要研究的问题。

还有一个容易混淆的地方:调整动作,不等于重新训练模型。

即使模型内部学到的数值设置(称为“参数”)保持不变,策略也可以因为输入画面改变而输出不同动作。训练通常发生在事先;运行时用已经学到的模型计算输出,叫作推理。让模型在运行过程中继续学习,是另外一种设计,并非闭环控制的必备条件。


进阶彩蛋:动手前,能不能先预演?

Section titled “进阶彩蛋:动手前,能不能先预演?”

我们再给杯子加一点难度:它靠近桌沿。

直接向外推,可能会让它掉下去;从内侧接近,也许更合适。

有些方法会学习一个世界模型:根据当前情况和候选动作,预测接下来可能出现的状态、画面或其他内部表征,再利用这些预测帮助选择行动或训练策略。

可以把这种功能想成“试着预演几种后果”。不过,预演可能出错,预测出一段看起来合理的视频,也不等于准确掌握了物理规律。

DreamerV3 是理解“学习世界模型,再利用想象中的轨迹改善策略”的一个代表入口。这并不是说它已经替我们完成了本文这个拿杯子的实验。

世界模型是值得认识的一类研究方法,但并非每个拿杯子的系统都必须单独配备它。 很多策略可以直接从当前观察生成动作,再通过真实反馈调整。

至此,你已经遇到了知识库算法主库里的五类问题:

类别一句话记住它
感知与表征当前是什么情况,哪些信息有用?
任务推理与规划为了完成目标,先做哪件事?
策略与动作生成根据现在的情况,具体怎样行动?
运动规划与控制运动能否执行,实际执行有没有跟上?
世界模型与预测如果这样行动,接下来可能发生什么?

它们是理解问题的地图。一个模型可以同时涉及其中几类;一个系统也可以不显式设置某个模块。


插播:这些本事是怎么学来的?

Section titled “插播:这些本事是怎么学来的?”

到这里,机器人仿佛已经什么都会了。但故事省略了一个大问题:谁教它的?

常见的办法可以先认识三种,它们也能组合使用。

第一种,人写规则或建立数学模型。

例如,在已知的环境中设计抓取流程,用几何关系计算位置,按照机器人结构求解运动。有些问题直接用规则和数学计算就能解决。

第二种,看示范学,叫模仿学习。

人操作机器人完成任务,记录它当时看到什么、身体是什么状态、执行了什么动作。模型从这些配对数据中学习行为。

难点是:老师演示时杯子总在桌面中央,学生实际操作时杯子却在边缘。它会模仿熟悉的情况,未必会处理没见过的偏差。

第三种,通过结果反馈改善行为,叫强化学习。

我们定义任务目标,并设计用于评价行为结果的奖励信号。学习算法利用交互经验或已有数据改进策略。怎样获得足够的经验、奖励有没有鼓励错事情,都是重要问题;它并不是“随便试一试就会了”。

可以用“跟师傅学”和“通过练习改进”帮助记忆,但真实算法还有很多细节。

注意它们和前面的地图是两个维度:

“这是一个动作策略”,说的是它负责什么。

“它通过模仿学习训练”,说的是它怎样学会。

因此,强化学习、VLA、导航不能简单当成三个互斥门派:它们分别涉及学习方式、模型类别和任务类型。


OpenVLA、π 系列,应该放在哪里?

Section titled “OpenVLA、π 系列,应该放在哪里?”

现在终于可以把这些名字放回地图了。

VLA 是 Vision–Language–Action 的缩写,可以先记成“视觉—语言—动作”:模型利用视觉信息、语言要求,以及具体设计中可能加入的机器人自身状态,生成机器人动作。

在我们的故事里,输入大致是:

桌面画面 + “把杯子放进托盘”的要求 + 可能需要的机器人状态。

输出则是机器人接口能解释的动作表示,而不只是“好的,我这就拿”。

原始 OpenVLA 将视觉语言模型接到动作预测上,输出离散的动作符号,再转换成连续动作值。π0 则采用流匹配来生成连续动作。你现在不用理解“流匹配”的数学,只需要知道:它们在研究怎样把观察和语言要求变成可执行的动作,具体生成方式有所不同。

这些模型可能把感知、语言处理和动作生成等工作融合在一起。我们因此不必在每两步之间都手工写一个接口。

但模型仍然要接入机器人的观测与执行系统。是否直接输入关节位置等机器人状态,取决于具体设计;动作的单位、坐标与执行方式,也必须匹配具体机器人。把模型名字装进电脑,不会让任何一条机械臂立刻会做所有事情。

同样,ACT、Diffusion Policy 也有各自值得学习的设计。理解这些基础方法,会帮助我们更清楚地比较 VLA 到底新增了什么、保留了什么,以及付出了什么代价。


这次成功了。杯子稳稳站在托盘里,夹爪也松开了。

先别急着给机器人发毕业证。我们可以逐步换几道题:

  • 杯子向左挪一点,还能拿到吗?
  • 换一个外形不同的杯子呢?
  • 桌上再放一个杯子,要求只拿红色那个呢?
  • 第一次抓空之后,还能继续完成任务吗?

这些变化在检查不同的泛化能力:学到的本事能否用于与训练情况不同的输入、任务或环境。

评测还要先说清成功标准、测试次数、初始条件和失败如何记录。一个漂亮片段能说明“这次做到了”,更多可重复的测试才帮助我们判断“在什么条件下可靠”。

等到我们把场景扩展为“去厨房把杯子拿来”,新问题才会陆续进场:导航负责去哪里、怎样到达;移动操作把走动和操作连接起来;人形或腿式机器人还需要处理身体平衡。今天这张桌子,是整个领域的一个入口。


轮到你:当一分钟机器人调试员

Section titled “轮到你:当一分钟机器人调试员”

不需要安装软件。请读下面四个现象,先想一想:你会优先检查哪类问题?

  1. 杯子换了位置,机械臂还去原来的位置抓。
  2. 手的终点是对的,但途中撞到了挡路的盒子。
  3. 杯子已经滑掉,机器人却继续完成后半段“搬运”。
  4. 模型没有重新训练,但每次看见杯子的位置不同,就会输出不同动作。这算不算在运行中学习?

先停一下,给自己一点作答时间。下面是参考思路,不是仅凭现象就能作出的唯一诊断。

查看参考答案

第 1 题: 优先检查当前观察有没有正确进入系统、位置或动作坐标有没有处理对,以及策略是否适应位置变化。失败可能跨越多个环节,不能只凭“抓偏了”就认定模型不够大。

第 2 题: 优先检查运动路径和碰撞约束,以及执行是否偏离计划。终点正确,不保证过程可行。

第 3 题: 优先检查失败检测、反馈是否被使用,以及策略有没有恢复行为。原来的“已经抓住”假设需要被新观察推翻。

第 4 题: 仅凭这一现象,不能说它在运行中学习。固定模型根据不同输入产生不同输出,是正常推理;如果它利用新经验更新了策略或模型,才需要进一步讨论在线学习。

你还可以做一个纸笔练习:写下“从抓到杯子到任务完成”之间的三个检查点。如果你的清单只有“手到了托盘上方”,试着补上“杯子是否真的在手里”和“松手后是否放稳”。


第一课最值得带走的是三件事:

  1. 任务完成有具体条件。 认出杯子、抓住杯子、把杯子放稳,不能互相替代。
  2. 算法分工不等于模型数量。 感知、规划、策略、控制和预测可以拆开实现,也可以部分融合。
  3. 真实世界会偏离预期。 观察、行动、检查结果、继续调整,这条回路贯穿机器人工作过程。

现在再听到“把杯子拿来”,你大概已经不会只盯着机械臂那几秒钟的动作了。你会开始留意:它看到了什么,凭什么决定这样动,又怎么知道自己做成了。

下一篇已发布:第 02 课|机器人看到的世界长什么样?。从同一只杯子的不同观测线索,到一小段公开数据记录,看看相机画面、自身状态和动作怎样放在一起。也可在学习路线查看后续安排,或浏览算法地图。


这些材料是延伸阅读,不需要现在就读懂英文论文。可以先看项目里的任务演示,再带着本篇的问题回来看。

  • SayCan:语言要求怎样帮助选择可执行技能。
  • ACT / ALOHA:从人类示范学习一段动作。
  • Diffusion Policy:生成动作序列,并结合新观察继续行动。
  • OpenVLA:视觉和语言怎样接到动作预测。
  • π0:连续动作生成的另一种模型设计。
  • DreamerV3:学习环境变化,并利用想象中的轨迹改善策略。

本文用假想的拿杯子任务串联概念;所列研究有各自的机器人、任务与实验条件。资料核验:2026-10-23。