VLA 给出动作以后,机器人为什么还不能直接动?
统计 阅读时间大约9分钟(3465字)

2026-07-10 VLA 给出动作以后,机器人为什么还不能直接动?

来源:豆包
出品:机器人技术笔记把杯子放进水槽这件事,人做的时候几乎不会想太多。看到杯子,伸手,调整角度,碰到杯沿时稍微让一下,最后松开。整个动作像是一口气完成的,所以当V...

出品:机器人技术笔记

把杯子放进水槽这件事,人做的时候几乎不会想太多。

看到杯子,伸手,调整角度,碰到杯沿时稍微让一下,最后松开。整个动作像是一口气完成的,所以当 VLA(视觉-语言-动作模型)也能根据图像和指令给出动作时,很自然会觉得:那机器人是不是可以直接照着动了?

问题就卡在“照着动”这三个字上。

在一些 VLA 系统里,模型给机械臂的可能只是七个数:前六个数描述末端下一步往哪里移动、转多少角度,最后一个数控制夹爪开合。对模型来说,这已经是一条动作;对真机来说,它更像一个还没落地的目标。

这个目标属于哪个坐标系?机械臂能不能到达?途中会不会碰到桌沿?杯子偏了几毫米以后,夹爪应该继续合拢,还是停下来重新对准?如果下一次模型推理迟到了,电机又该听谁的?

这些问题不会因为模型已经输出动作而自动消失。

真正决定机器人能不能稳定执行的,是模型输出之后那段经常被省略的接口:动作如何与本体对齐,如何受约束,如何被底层控制器持续跟踪,又如何在失败时停下或恢复

f197b24b0bb5d5e01c65291ee7ebba20.png

这张图不是所有 VLA 机器人的统一架构。有的系统保留逆运动学、轨迹规划和碰撞检测,有的系统让学习策略直接输出关节目标,把传统中间模块压缩掉。

方框可以合并,责任不能凭空消失。

VLA 说的动作,可能根本不是同一种东西

讨论 VLA 能不能直接控制机器人,先要问一个很朴素的问题:它输出的动作究竟是什么?

RT-2 把机器人动作表示成离散 token。一次输出中包含终止标记、末端位置和旋转的变化量,以及夹爪动作,再把这些 token 解码回连续控制量。[1]

OpenVLA 采用相似思路。它公开的模型输出是归一化的 7 维末端增量:三维位置、三维旋转,再加一个夹爪维度。[2] 在两套 Franka 任务上,论文项目页给出的部署频率分别是 5 Hz 和 15 Hz。[3]

这两类输出表达的是末端下一步该怎么变。它们没有直接告诉七个关节各自转到哪里,更没有告诉每台电机应该通多大电流。

π0.5 的接口更靠下。它用 action chunking 一次生成一小段连续动作,在公开的移动操作系统中,以 50 Hz 给双臂、夹爪和升降机构发送目标位姿,同时给底盘发送目标速度。这些目标仍由 PD 控制器跟踪。[4]

把三个系统放在一起看,会发现 VLA 的动作至少可能处在三个不同层次:

• 末端位姿或位姿增量;• 关节位置、关节速度等本体动作;• 一段未来动作,也就是 action chunk。

它们都可以叫动作,下面需要补的控制工作却完全不同。

所以我不太建议只凭端到端三个字判断系统结构。更有用的判断方式是继续追问:模型的输出落在哪一层?单位、坐标系和控制频率是什么?输出下面还有谁在工作?

第一段接口:让模型动作与这台机器人对上

假设 OpenVLA 给出一个末端向前移动 2 厘米的目标。

机器人要执行它,至少要先弄清楚这个向前属于相机坐标系、基座坐标系还是末端坐标系。相机外参一旦变化,同一组数字可能指向完全不同的方向。

接下来还要把末端运动映射到关节运动。这一步看起来只是逆运动学,实际会同时碰到关节限位、多解和奇异位形。末端移动很小,不代表每个关节都只需轻微转动;在某些姿态附近,末端速度要求甚至会被放大成剧烈的关节运动。

更换本体后,问题会再来一遍。

单臂数据里的 7 维动作不能原样控制双臂和移动底盘。不同机器人还可能采用不同的关节正方向、夹爪量程和控制模式。即使动作维度相同,归一化范围不一致,也可能让一个看似温和的输出变成突然的大幅运动。

MoveIt Servo 接收末端位姿、末端速度或关节速度命令后,仍会处理运动学映射,并检查奇异位形、碰撞以及关节位置和速度限制。[5] VLA 项目不一定要用 MoveIt,但这些检查提示了一个真实的工程责任:模型输出必须先翻译成当前本体真正听得懂的命令。

这层翻译也可以学进模型。代价是,本体接口从显式程序转移到了训练数据和策略内部。换一台机器人时,动作定义、数据分布和控制接口依然需要重新对齐。

接口并没有消失,只是变得不那么容易看见。

第二段接口:让可达动作变成可执行动作

逆运动学找到一组关节角,只能说明目标在几何上可能到达。

机器人真正运动时,还要守住关节位置、速度和加速度限制,避开自身、桌面和旁边的人;目标也不能在相邻周期里突然跳变,让电机去追一个物理上来不及完成的动作。

这里常见两种路线。

一种是保留显式约束层。运动规划器寻找无碰路径,时间参数化给轨迹补上速度和加速度,实时安全模块负责限幅、减速或停止。MoveIt 的轨迹处理和 Servo 安全检查、ros2_control 的命令限幅,都属于这类思路。[5][6][7]

另一种是让策略和数据承担更多运动生成责任。π0.5 的公开系统没有额外的轨迹规划和碰撞检测,模型直接给出目标,再由 PD 控制器跟踪。[4]

这条路线很有价值,因为它说明学习策略确实可以向下覆盖传统控制栈的一部分。但它不能被简化成碰撞和约束已经不存在。更准确的说法是:这些问题被交给了策略、训练数据和系统测试。

责任转移以后,验证要求反而更值得追问。

训练数据有没有覆盖桌面高度变化?人突然伸手时,系统怎样处理?从实验环境换到工具高速运动、人员混行或有安全认证要求的场景,原来的策略边界是否还成立?

一次成功演示可以证明系统完成过任务,不能单独证明所有失效情况都已被覆盖。

第三段接口:模型给目标,控制器负责让身体跟上

空中接近杯子时,几毫米误差可能只是抓取姿态不够漂亮。夹爪真正接触杯子后,同样的误差会变成力。

杯子偏了一点,夹爪可能先碰到一侧;桌面高度估计不准,末端可能继续向下压;杯子开始滑动时,半秒前生成的抓取动作已经过时。

这就是为什么提高 VLA 的动作频率很重要,却仍不能替代底层闭环。

VLA 擅长结合图像、语言和机器人状态,判断接下来做什么、动作往哪里修正。关节伺服和电机控制则要在更短的时间尺度里跟踪目标、抑制扰动,并处理编码器、电流、力矩或触觉反馈。

两者不是简单的高低级之分,而是面对不同的时间压力。

模型一次推理慢了几十毫秒,底层控制器不能跟着停摆。它需要继续执行已有目标,或者按照事先约定保持、减速、停止。否则,网络抖动和推理延迟就会直接变成机械冲击。

接触任务还会提出更具体的问题:系统到底控制位置、力,还是位置与力之间的动态关系?插接、打磨、拧紧和人与机器人接触,对传感器、执行器和控制方法的要求都不一样。

VLA 可以决定我要把插头插进去,却仍需要底层系统回答:接触以后允许多大的力,偏了以后怎样让开,什么时候必须停止。

这也是本系列后面要继续拆的主题:机器人碰到环境以后,到底应该硬一点还是软一点?

Action chunk 缓解机器人犹豫不决

单步预测每次只给一个很短的动作。模型推理稍有波动,机器人就可能停顿;连续几次预测方向不一致,动作也容易犹豫。

Action chunk 一次生成未来一小段动作,下层可以在等待下一次推理时继续执行,擦桌子、叠衣服这类连续任务也更容易保持节奏。

但动作段不是越长越好。

它越长,系统对高频重算的依赖越小;环境突然变化时,后半段动作也越容易过时。把整段执行完再观察,反应可能太慢;只执行前几步就重新预测,又要处理新旧动作怎样平滑接续。

因此,我更愿意把 action chunk 看成 VLA 对未来一小段运动的临时承诺。控制器负责把它连续执行,新的观测到来后,策略再决定保留、修正还是丢弃剩余动作。

它主要缓解动作连续性和推理节奏问题。碰撞检查、接触稳定性、超时保护和失败判定,仍要在完整系统里找到负责人。

第四段接口:失败以后,谁来接管?

夹爪闭合,只代表闭合命令被发出,不代表杯子已经抓稳。

系统还要根据视觉、夹爪位置、电流或触觉判断:杯子有没有离开桌面,是否正在滑落,夹爪是不是抓空了。

如果失败,下一步也不是统一的再试一次。

杯子没抓稳,可以让策略重新观察、调整抓取点;控制器跟踪误差持续增大,可能要停止当前动作;通信超时、关节超速或有人进入危险区域,则应该交给更确定、离硬件更近的保护机制。

这里要分清任务恢复和安全保护。

前者追求把事情做完,可以利用 VLA 的视觉理解和策略能力;后者先保证机器人进入可接受状态,不能把希望押在下一次模型推理上。

VLA 可以学会从部分失败中恢复,但不应该兼任急停装置。

真机接入前,先确定好接口

如果你正在把 VLA 接到机器人上,我会把模型选型往后放一步,先把下面五件事写清楚。

输出是什么。 是末端位姿增量、关节位置、关节速度,还是一段 action chunk?它的单位、坐标系、归一化范围和更新频率分别是什么?

谁负责翻译。 坐标变换、逆运动学和本体适配放在哪里?换相机、换夹爪或换机器人以后,哪些参数和数据必须重做?

谁负责约束。 关节限位、速度限制、碰撞、奇异位形和动作平滑,由显式模块处理,还是由策略承担?如果交给策略,用什么测试证明覆盖范围?

谁负责持续跟踪。 两次 VLA 输出之间,哪个控制器继续运行?推理超时、通信中断和目标跳变时,机器人保持、减速还是停止?

谁负责失败与接管。 抓空、滑落、控制器报错和安全停机分别由谁发现?哪些情况允许模型重试,哪些情况必须交给确定性保护或人工处理?

这五项写清楚,才算建立了 VLA 与真实机器人之间的接口合同。

从VLA到一次可靠动作,中间没有魔法

回到开头 VLA 输出的七个数。

它们可以让机械臂末端向杯子靠近,却不能单独保证坐标正确、路径安全、接触稳定,也不能决定失败以后该怎样收场。

VLA 正在向控制栈更深处延伸。RT-2、OpenVLA 和 π0.5 展示了从动作 token、末端增量到连续 action chunk 的不同接口,也说明传统模块的边界会继续变化。

但端到端描述的是系统怎样学习、模块怎样连接,不是机器人获得了绕开物理约束的能力。

下次看到 VLA 直接控制机器人,可以多问三句:它直接输出到哪一层?目标下面还有什么控制器?出错以后谁负责停下和恢复?

这三句问完,模型输出的动作,才开始接近一条能够交给真机的命令。

如果还没看上一篇,可以先读《一张图理清人形机器人控制系统:从 VLA 到电流环,到底分几层?》,补齐整条控制链路。

推荐阅读
{{item.author_display_name}}
{{item.author_display_name}}
{{item.author_user_occu}}
{{item.author_user_sign}}
×
右键可直接复制图片
×