DeepSeek、ChatGPT 这些大语言模型不仅能检索信息,还能对话、写作、推理,甚至在一定程度上理解人的意图。但是如果把大模型放到机器人身上,新的问题就来了:它要怎么从“会说话”变成“会干活”?
比如你对机器人说:“把桌上的红色方块抓起来。”它需要看见桌面、理解指令、判断自己的夹爪和目标物体之间的关系,然后移动过去、对准、下降、闭合夹爪,最后把物体拿起来。这中间就发生了一个关键变化:模型的输出不再只是语言,而是动作。
从大语言模型到机器人具身智能,中间有一条很重要的技术路线,叫 VLA。VLA 的全称是 Vision-Language-Action,也就是“视觉-语言-动作”。如果说 ChatGPT 等大语言模型 LLM 解决的是“怎么和人对话”,视觉-语言模型 VLM 解决的是“怎么看懂图片和文字”,那么 VLA 要解决的就是:看见之后,怎么行动。
这篇文章就用一个最简单的抓取任务,讲清楚 VLA 是怎么从“会看、会说”,一步步走向“会动”的。
VLM:先让模型看懂,再让它“说出动作”
第一步,是直接借用 VLM 的能力。
VLM 是 Vision-Language Model,也就是视觉语言模型。它原本擅长的是“看图回答问题”。比如给它一张抓取场景图片,它能看懂里面有夹爪、有红色方块,也能理解“抓起红色方块”这句话是什么意思。
最直接的 VLA 想法,就是让 VLM 不只回答问题,而是直接输出动作描述。比如模型看到图像后输出:向右移动一点,向前靠近,下降,闭合夹爪。
再进一步,还可以把动作也变成 token。token 可以简单理解成模型处理信息的基本单位。文字可以是 token,动作也可以被切成 token。比如:向左、向右、向前、向后、上升、下降、打开夹爪、闭合夹爪。这样,动作就变得像文字一样,可以被模型一步一步预测出来。
这一步的好处是非常直观。原来大模型是在预测下一句话,现在它可以预测下一步动作。它看见夹爪在左边、红色方块在右边,就输出“向右”;看到夹爪接近物体,就输出“下降”和“闭合夹爪”。
但它的问题也很明显:聊天里说“向右一点”通常没问题,但机器人控制里,“一点”到底是多少?1 厘米、2 厘米,还是 0.3 厘米?这些差别在文字里不大,在真实抓取里可能就是抓住和抓空的区别。
所以,直接让 VLM 输出动作,是理解 VLA 最容易的一步,但还不够适合精细控制。
Action Head:把“看懂了”变成连续动作
第二步,是在 VLM 后面加一个 action head。
Action head 可以理解成“动作输出头”。VLM 负责看懂图像和语言,action head 负责把这种理解结果翻译成机器人能执行的动作数值。
比如 VLM 先理解到:红色方块在夹爪右前方,当前任务是把它抓起来。接下来 action head 不再输出“向右一点”这种话,而是输出一组具体数字:
[Δx, Δy, Δz, gripper]
这里的 Δx、Δy、Δz 表示机器人末端在空间里的移动量,gripper 表示夹爪开合。比如它可以表示:末端向右移动 1.2 厘米,向前移动 0.8 厘米,高度暂时不变,夹爪保持打开。真实系统里还可能加入姿态角、关节角、末端速度等信息。
所以,action head 解决的是一个更根本的接口问题:大模型原本擅长输出文字,但机器人需要的是连续动作向量。Action head 就是在大模型和机器人控制系统之间搭了一座桥。
它确实能减少动作离散化带来的误差。比如原来只能在“向右一小步”和“向右一大步”之间选,现在可以直接输出“向右 1.2 厘米”。但它真正重要的地方,是把“看懂任务”接到了“控制机器人”。
不过,只输出下一步动作仍然不够。真实抓取是一小段连续过程。中间每一步都要连贯,不能一会儿向左、一会儿向右。只预测下一步就会让机器人犹豫不决,自我否定之前的决策。
Action Chunking:一次生成一小段动作
所以第三步,是从“预测下一步动作”,变成“预测一小段动作”。
这一小段动作就叫action chunk。chunk 可以理解成“一段动作片段”。在机器人里,它通常指模型一次预测出的未来几步到几十步的连续控制量,每一步中包括机器人末端该怎么移动、姿态该怎么变化、夹爪该什么时候闭合。比如抓取红色方块时,模型会一次给出未来一小段时间内的动作序列。我们从语义上可以把它理解成“靠近、对准、下降、闭合、抬起”,但真正交给机器人的,是一串可以连续执行的动作数值。机器人执行时也不是把这一段动作从头到尾死板跑完。更常见的方式是滚动更新:模型先预测未来一小段动作,机器人先执行其中前几步;与此同时,相机继续观察环境,模型再根据新的图像和机器人状态,重新预测下一段动作。这样机器人就能一边执行、一边修正,而不是完全依赖一开始生成的那段动作。
为什么要这么做?因为机器人运动需要连续性。如果模型每一帧都只想“下一步”,动作可能会变得犹豫、抖动、不连贯。就像一个人走路,如果每一步都重新思考“下一只脚往哪里放”,动作会很僵硬。更自然的方式,是提前想好接下来几步怎么走,然后边走边调整。
Action chunk 的意义就在这里:它让 VLA 不再只输出孤立动作,而是输出一段更连贯的动作过程。对抓取任务来说,它更像是在生成一个小计划:靠近、对准、下降。这个计划不一定很长,但足够让机器人动作更稳定。
Flow Matching:让动作生成更自然、更连续
第四步,是用更强的生成方法来产生 action chunk。
前面说的 action chunk,只是说明模型要一次输出一小段动作。但这段动作具体怎么生成,仍然是关键问题。Flow Matching 要做的,就是学习一条从“随机动作”到“真实动作”的变化路径:训练时,模型会看到大量真实机器人操作数据,也会看到被扰动后的动作片段;模型要学会在当前图像、语言指令和机器人状态下,应该沿着什么方向,把一段不太合理的动作逐步推向真实动作。
回到抓取任务里,一开始可以先有一段比较随机的动作序列,它可能还不像一个真正的抓取过程。Flow Matching 会根据画面中夹爪和红色方块的位置关系,不断修正这段动作,让它逐渐变成“靠近目标、对准中心、下降、闭合夹爪、向上抬起”的连续轨迹,最后输出一段可以执行的 action chunk。
为什么不直接用 action head 回归这一整段动作?因为真实机器人任务往往有很多种可行做法。抓同一个红色方块,可以从左边靠近,也可以从右边靠近;可以先调整姿态再下降,也可以边靠近边微调。简单回归容易把多种可行动作“平均”在一起,生成一条看似居中、实际不好执行的轨迹。
Flow Matching 这类生成式方法的价值,就在于它更适合表达“动作有多种可能”。它在视觉、语言和机器人状态的约束下,生成一段更自然、更平滑、更接近真实操作的动作片段。换句话说,它让 VLA 输出更像人类示教、更适合机器人执行的动作。
从“看懂”到“会动”
VLA 的技术发展,基本就是按照这条主线:VLM 让模型看懂任务,action head 让模型输出动作数值,action chunking 让模型一次生成一小段动作,flow matching 让这段动作更自然、更连续。
当然,VLA 还远没有走到终点,它也不是具身智能的唯一答案。现在大家都还在探索:到底怎样的模型结构、数据方式和系统架构,才能让机器人稳定、可靠地完成真实任务。VLA 只是其中一条很有代表性的路线,而且这条路还在继续往前走。
相关推荐:
文章来源于公众号-机器人技术笔记,仅用于学习分享,如有侵权请私聊删除

全部评论