
发布边界:合成接口与示意时序不得写成公开模型原生 Schema、作者实测或安全认证;公开频率和动作维度只用于对应论文系统。
摘要
VLA 能输出动作,不代表它已经能接到真实机器人。输入必须带时间和版本,动作必须声明坐标、单位、范围、频率、归一化与有效期,执行层还要核对安全责任。本文比较五类动作表示和四类动作生成路线,给出跨本体适配与项目启动清单。
关键词
VLA、Action Contract、Cross Embodiment、Action Chunk、Robot Interface
目录
- 一、先定义 VLA 的系统边界
- 二、输入不是四个张量,而是四组带时序语义的证据
- 三、动作合同表:任何输出头最终都要落到这些字段
- 四、五种动作表示各自改变了什么
- 五、动作表示、生成头和控制频率必须分三层记录
- 六、跨本体适配:哪些字段应冻结,哪些必须转换,哪些通常要再训练
- 七、三种跨模块接口样例
- 八、评价 VLA:离线动作误差只能回答很小一部分问题
- 九、VLA 项目启动检查清单
- 结论
一个 VLA 在离线验证里能根据图像和指令输出动作,并不意味着它已经可以接到真实机器人。以下数值是用于说明问题的合成场景,不是公开事故或作者实测:相机帧比关节状态晚了 120 毫秒;模型输出的是工具坐标系中的增量,执行器却按基座坐标系解释;训练动作以 20 Hz 记录,部署控制器以 100 Hz 重复同一值;“张开夹爪”的归一化方向在新机器人上恰好相反。真正的风险通常不在模型参数里,而在这些接口缝隙里。
VLA落地首先不是选“回归、Token、Diffusion还是 Flow”,而是签一份动作接口合同。合同要规定 Observation、Language Goal、Proprioception和 History如何对齐,动作的语义、坐标、单位、范围与有效期是什么,策略多快刷新,低层控制器承担什么,以及超限或过期时谁有权拒绝执行。没有这份合同,模型输出只能算张量,不能算可执行动作。
一、先定义 VLA 的系统边界
本文把 VLA限定为条件策略:
[ a_{t:t+H-1} \sim \pi_\theta(\cdot\mid O_{\le t},L,Q_{\le t},A_{<t}) ]
其中,(O)是视觉等外部观测,(L)是语言目标,(Q)是本体状态,(A)是已执行动作历史,输出可以是单步动作或长度为 (H)的动作块。这个定义只说明模型根据多模态条件生成动作,不说明它已经包含任务规划、状态估计、碰撞检查、实时伺服或硬件安全。
RT-1把视觉历史与语言指令映射为离散化动作变量;OpenVLA以视觉—语言骨架自回归生成离散动作 Token;Octo使用可适配的输入 Tokenizer和 Diffusion动作头;π0在 VLM旁加入 Action Expert,以条件 Flow Matching生成连续动作块;FAST则是动作序列的离散 Tokenizer,不是独立控制器。[G1-S01][G1-S03][G1-S04][G1-S05][G1-S06] 这些路线只有接入明确的动作合同,才可被放在同一机器人系统中比较。

二、输入不是四个张量,而是四组带时序语义的证据
Observation:记录“看到什么”以及“什么时候看到”
视觉输入至少应携带:传感器标识、采集时间戳、时钟域、帧序号、曝光或滚动快门信息、内外参版本、坐标系名称、图像有效区、是否丢帧。多相机不能只按数组顺序约定“第一个是头部相机”,应给稳定的 sensor_id和 frame_id。
策略收到的是某一时刻的观测证据,不是当前世界本身。若图像在网络、编码和队列中滞留,动作生成时它可能已经过期。合同应给 observation_age_ms、允许的最大时差和同步策略:严格同步、近似同步,还是由状态估计器外推到统一参考时刻。
Language Goal:语言不是无版本字符串
语言目标需要 goal_id、创建时间、版本、优先级、约束、终止条件和取消语义。用户说“把杯子放到盘子旁边”,后续又补充“不要碰玻璃瓶”,系统必须知道这是修订同一目标还是新任务。对指代表达,还要记录目标对象的 Grounding结果和有效期,不能让旧的“这个”在场景变化后继续绑定原对象。
Proprioception:顺序、单位和坐标必须显式化
本体状态不应只是一维浮点数组。至少要定义关节名与顺序、位置/速度/力矩单位、夹爪语义、末端位姿、控制模式、状态时间戳和质量标记。ROS REP 103之类的规范能提供 SI单位和右手坐标约定,但具体系统仍要声明基座、工具中心点、相机和世界坐标变换。[G1-S10][G1-S11]
History:记录实际发生的事,而不是模型想做的事
动作历史应区分 commanded、accepted、clamped、executed和 aborted。如果安全层把模型输出从 0.20 m位移裁剪到 0.03 m,而下一轮策略仍把原始命令当作已执行历史,内部状态会快速偏离真实机器人。历史还应包含执行结果、接触事件、失败码、目标版本变化和人工接管。
三、动作合同表:任何输出头最终都要落到这些字段
| 合同字段 | 必须明确的内容 | 典型失败 |
|---|---|---|
action_type | Joint target/delta、EE pose/delta、velocity、torque、token、skill call | 同一数组被不同模块解释成位置或速度 |
reference_frame | base、world、tool、camera等,及变换版本 | Delta Pose方向反转或旋转轴错位 |
units | m、rad、m/s、rad/s、N、Nm或无量纲归一化 | 角度与弧度、毫米与米混用 |
dimension_schema | 维度名称、顺序、可选掩码、机器人型号 | 关节顺序错位,夹爪维度被当手腕轴 |
absolute_or_delta | 绝对目标、相对当前值、相对 Chunk首状态 | 反复累积 Delta导致漂移 |
horizon与dt | Chunk长度、每个动作的时间间隔、起始时刻 | 模型输出 1秒轨迹,执行端以错误频率播放 |
valid_from/to | 动作有效窗口和过期策略 | 延迟动作在新状态下继续执行 |
range与normalization | 物理边界、训练归一化统计、反归一化版本 | 新本体按旧机器人分位数解码 |
control_mode | 位置、速度、力矩、阻抗、技能执行 | 上层动作与低层控制模式不匹配 |
execution_policy | 全 Chunk开环、滚动重规划、重叠融合、首步执行 | 延迟和抖动导致动作块断裂 |
safety_envelope | 速度、加速度、力、区域、碰撞、权限限制 | 模型输出直接越过安全层 |
ack/status | 接受、裁剪、执行、完成、失败与原因 | 下一轮策略无法知道真实结果 |
这张表不是某个模型的训练配置,而是 VLA、动作适配器、运动控制器与安全层之间的共享协议。
合同还必须可版本化。模型权重、动作 Tokenizer、归一化统计、机器人 Schema、坐标树和安全配置应分别有稳定 ID,并在每条命令中记录兼容组合。升级模型但继续使用旧的反归一化统计,或更换夹爪却沿用旧动作维度,都可能生成数值合法、物理语义错误的命令。部署端应采用显式兼容矩阵:字段缺失、版本未知、时间戳过期或坐标变换不可用时直接拒绝,而不是猜测默认值。
责任链也要独立记录。VLA负责提出候选动作,Adapter负责解释和变换,安全层负责硬限制,控制器负责跟踪,执行器负责产生物理效果;每一层都应返回自己的接受、裁剪、失败和完成状态。只有将原始输出与最终执行结果同时写入历史,下一轮策略才不会把被拒绝的命令误认为已经完成。 接口测试还应覆盖降级路径:观测过期时停止、变换缺失时拒绝、模型超时时保持安全姿态,而不是继续消费旧动作。

四、五种动作表示各自改变了什么
1. 关节动作
输出每个关节的位置、增量、速度或力矩。优点是接口直接、能表达本体细节;缺点是强依赖自由度、关节顺序、限位和控制模式。跨机器人迁移时,七轴机械臂的关节增量不能直接复制到六轴机械臂。
2. 末端 Delta Pose
输出工具中心点的平移、旋转和夹爪变化,通常比关节空间更接近任务语义。但必须说明 Delta相对于哪个坐标系、旋转使用欧拉角、轴角还是四元数、增量是在当前姿态左乘还是右乘,以及逆运动学失败时如何处理。OpenVLA官方模型说明给出的典型输出是归一化的 7-DoF末端增量,并要求按机器人/数据集统计反归一化,这本身就是动作合同的一部分。[G1-S03]

3. 离散动作 Token
RT-1把各动作维度量化为离散 Bin,自回归策略预测动作 Token;OpenVLA也采用动作 Token输出。[G1-S01][G1-S03] Token化便于复用语言模型训练接口,但 Token ID没有天然物理意义。部署必须携带 Tokenizer版本、分箱范围、维度顺序、越界规则和反量化方法。离散化误差、序列长度和自回归延迟都要独立测量。
4. 连续 Action Chunk
ACT、Diffusion Policy、Octo和 π0等路线一次生成多步连续动作。[G1-S04][G1-S05][G1-S08][G1-S09] Chunk能平滑动作并摊薄大模型推理延迟,但引入新合同:Chunk覆盖多长时间,执行端每次使用全部、首段还是滚动窗口;新观测到达时是否截断旧 Chunk;重叠 Chunk如何融合;模型延迟超过剩余缓冲时怎样降级。
5. 技能调用
模型输出 pick(object_id)、navigate(target)之类高层调用,把精细轨迹交给技能控制器。它降低动作带宽并增强可审计性,但需要严格定义技能版本、前置条件、参数模式、超时、可取消性、成功判据和失败码。技能调用不是“更高级的动作 Token”,而是跨进程 API合同。

五、动作表示、生成头和控制频率必须分三层记录
动作表示回答“输出变量是什么”;动作生成头回答“如何建模这个分布”;频率回答“何时生成和何时执行”。三者不能互相代替。
- 直接回归头输出连续动作参数,通常优化 MSE或相关损失。实现简单,但在多种动作都可成功时容易产生平均化。
- 自回归头逐 Token预测离散动作。它可以使用普通语言模型式交叉熵,但推理时间随 Token数增长。
- Diffusion动作头从噪声迭代生成连续动作块,适合多峰动作分布;Octo与 Diffusion Policy提供了代表性实例。[G1-S04][G1-S08]
- Flow动作头回归连续向量场并通过数值积分得到动作块;π0属于这一类。[G1-S05]
FAST说明了“动作 Tokenizer”和“动作头”为什么要分开:它先对归一化动作 Chunk做 DCT、量化和 BPE,再让自回归模型预测压缩后的 Token。[G1-S06] 换 Tokenizer会改变序列长度与重建误差,但不自动改变视觉编码器或低层控制器。
频率至少有三种:传感器更新频率、VLA策略刷新频率、低层伺服频率。π0论文中的动作 Chunk长度和最高控制频率是特定系统配置,不是所有 Flow VLA的固定属性。[G1-S05] 以一组示意时序为例,大模型可以每 200 毫秒生成一次 1 秒动作块,执行器以 50 Hz 消费动作,伺服回路则可能在 1 kHz 运行;这些数字不代表某个公开模型或作者项目的实测配置。任何“模型支持 50 Hz”的说法都必须说明指的是动作样本率、策略调用率还是电机控制率。

六、跨本体适配:哪些字段应冻结,哪些必须转换,哪些通常要再训练
| 类别 | 字段 | 处理原则 |
|---|---|---|
| 语义合同 | 任务 ID、成功条件、对象角色、约束优先级 | 尽量冻结语义,防止同一指令在不同机器人上含义漂移 |
| 时间合同 | 时钟域、时间戳含义、动作 dt、有效期、历史状态机 | 冻结字段语义,数值可按平台配置 |
| 几何合同 | 坐标系名称、外参、TCP定义、旋转表示 | 必须显式转换并版本化,不能隐式猜测 |
| 动作维度 | 关节顺序、自由度、夹爪、底盘、掩码 | 建立机器人专用 Schema与 Adapter |
| 数值合同 | 单位、范围、分位数/均值方差、裁剪 | 按数据集和本体重新计算或严格复用匹配统计 |
| 动力学合同 | 负载、速度/加速度、控制模式、延迟 | 需要控制器适配,通常还需本体数据微调 |
| 感知合同 | 相机数量、视角、分辨率、内外参、同步 | 通过 Tokenizer/Adapter兼容;重大变化通常需微调 |
| 安全合同 | 工作区、力限、碰撞、权限、急停 | 平台本地冻结为强约束,不交给模型自行学习 |
Open X-Embodiment通过标准化数据格式聚合多种机器人经验,Octo强调可通过适配器和微调接入新的传感器与动作空间,OpenVLA与 openpi都要求正确处理每个机器人/数据集的动作统计。[G1-S03][G1-S04][G1-S07][G1-S12] “跨本体”不是把所有动作硬塞进同一数组,而是把公共语义与平台特定几何、数值和动力学边界分离。

七、三种跨模块接口样例
以下均为合成接口示例,不代表任何公开模型的真实输出格式或真实数值。
样例 A:VLA → 末端轨迹适配器
schema: synthetic.vla.ee_delta_chunk.v1
command_id: cmd-1842
generated_at_ns: 1785230012345000000
valid_until_ns: 1785230012545000000
reference_frame: base_link
tool_frame: tool0
action_type: ee_delta_pose
rotation_repr: axis_angle
units: {translation: m, rotation: rad, gripper: normalized}
dt_s: 0.02
horizon: 10
values: [[0.002, -0.001, 0.000, 0.0, 0.0, 0.01, -0.02], ...]
execution_policy: receding_horizon_first_4
safety_profile: manipulation_slow_v3
适配器必须验证时间戳、坐标变换、数组长度、范围和安全配置,再转成控制器可接受的轨迹。模型进程不直接发送电机命令。
样例 B:自回归 VLA → 动作 Detokenizer
{
"schema": "synthetic.action_tokens.v1",
"tokenizer_id": "robot_family_x-fastlike-2026-07",
"norm_stats_id": "dataset_r17_quantile_v2",
"robot_schema": "arm7_gripper1",
"chunk_start_state_id": "state-9017",
"tokens": [114, 87, 902, 41, 6, 6, 275],
"max_decode_age_ms": 80
}
Detokenizer先验证版本,再恢复连续动作 Chunk。若归一化统计、自由度或 Chunk首状态不匹配,应拒绝解码,而不是返回“近似可用”的数组。
样例 C:VLA/任务策略 → 技能执行器
schema: synthetic.skill_call.v1
skill: place_object
skill_version: 3
arguments:
object_track_id: obj-27
target_region_id: tray-left
constraints:
avoid_region_ids: [glass-zone]
max_contact_force_n: 12
precondition_snapshot: state-5521
deadline_ms: 5000
cancel_on_goal_revision: true
技能执行器负责运动规划、碰撞检查和闭环控制,并返回 accepted/running/succeeded/failed/cancelled及原因。语言目标被修订时,旧技能可按合同取消。
八、评价 VLA:离线动作误差只能回答很小一部分问题
同一状态常有多条可行轨迹,因此 MSE或 Token准确率不能代表任务成功。项目验收至少覆盖五类指标:
- 真实成功:在预先定义的任务、初始状态和失败判据下,统计端到端成功率与完成时间。
- 泛化:分别改变对象、背景、摆放、指令表达、相机和机器人,不把单一“未见过”混成一个数字。
- 恢复:人为制造抓空、遮挡、对象滑动、工具失败和目标修订,测是否检测并重试或安全退出。
- 延迟:测相机采集到动作接受的 P50/P95/P99、Chunk缓冲余量、过期率和抖动,不只测 GPU前向。
- 安全:测越界命令拦截、力/速限制、碰撞、急停、人工接管和错误动作造成的最大后果。
离线重放可以筛选模型,仿真可以扩大覆盖,但真实接触、通信延迟和控制器交互必须在真实系统验收。任何“通用 VLA”结论都应保留机器人、任务、数据、控制频率和安全配置范围。
九、VLA 项目启动检查清单

- 写清 VLA只负责哪一段:动作建议、动作块、技能调用,还是其他接口。
- 给每个传感器、本体状态和语言目标定义时间戳、时钟域与版本。
- 建立统一参考时刻,规定不同模态最大允许时差和过期策略。
- 固定坐标系树、TCP、单位、旋转表示和变换责任方。
- 为动作建立 Schema:维度名、顺序、范围、掩码、绝对/增量语义。
- 固定归一化统计的来源、版本、反归一化和裁剪顺序。
- 分别记录动作表示、生成头、策略刷新率、动作样本率和伺服频率。
- 决定 Chunk执行方式:全量开环、滚动首段、重叠融合或异步缓冲。
- 让历史记录实际执行值、裁剪值和失败状态,而不是只记录模型原始输出。
- 在 VLA之后保留硬约束安全层、控制器状态机和急停链路。
- 为跨本体建立 Adapter测试:坐标、单位、关节顺序、夹爪方向和统计一致性。
- 设计真实成功、泛化、恢复、延迟和安全五类验收,不以离线损失代替。
- 对代码、权重、许可证和模型卡按正式来源留档,避免依据二手模型清单判断可用性。
结论
VLA不是“视觉加语言再输出几个数”,而是一条跨越感知、语义、状态、动作生成和控制执行的接口链。关节动作、末端 Delta、离散 Token、连续 Chunk和技能调用只是不同动作表示;回归、自回归、Diffusion和 Flow只是不同生成头;策略频率、动作频率和低层控制频率又是另一组系统参数。真正决定模型能否落地的,是时间戳、坐标、单位、归一化、有效期、执行责任和安全边界是否被写成可验证合同。先签动作合同,再谈模型路线,才能把 VLA从演示张量变成机器人系统中的可执行模块。
FAQ
动作 Token 能直接发给控制器吗?
不能。Token 需要 Detokenizer、归一化统计、机器人 Schema、坐标与单位映射后才有物理意义。
支持 50 Hz 是否代表模型每 20 毫秒推理一次?
不一定;它可能指动作样本率或执行频率,必须与策略调用率和伺服频率分开。
统一动作空间能否消除跨本体适配?
不能。公共语义可以统一,但关节、坐标、动力学、传感器和安全范围仍是本体特定合同。