三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

主流VLA技术实现路线与动作序列关系(总结篇)

主流VLA技术实现路线与动作序列关系(总结篇)

你这个问题触及了机器人从"语义"到"物理"的全链路。我们一步步拆。

一、6维目标位姿 → 关节动作序列的完整链路

以"机械臂+夹爪抓取饮料瓶"为例,这条链路至少有4 个层级

第①层:任务指令(语义空间) "抓取饮料瓶" ↓ 第②层:6维目标位姿(任务空间) 视觉定位给出 [X, Y, Z, RX, RY, RZ] = 瓶子抓取点上方10cm,夹爪垂直向下 ↓ 【逆运动学 IK】 第③层:目标关节角(关节空间) [J1, J2, J3, J4, J5, J6] + 夹爪开合度 = 机械臂到达该位姿的关节角解 ↓ 【轨迹规划/插值】 第④层:关节动作序列(时间序列) [Action_0, Action_1, ..., Action_N] 每个 Action_i 是同一时刻的7维关节值 ↓ 底层控制器 → 电机扭矩 → 物理运动

关键认知:6维位姿→关节序列不是一步变换,而是IK 求解 + 轨迹插值两步。

第②→③步:逆运动学(IK)

已知末端目标位姿,反求各关节角度。这一步有几个工程现实 :

  • 多解性:同一个6维位姿,6轴机械臂通常存在最多8组解析解(肩左/右、肘上/下、腕翻/不翻)
  • 筛选准则:过滤不符合关节限位的 → 在剩余解中选"关节角度变化量最小"的解(总变化量 = Σ|目标角度i - 当前角度i|)
  • 奇异位形规避:剔除接近奇异点的解
  • 求解方法:几何解析法(快、适合固定构型)或数值迭代法如雅可比伪逆(通用)

第③→④步:轨迹规划/插值

得到目标关节角后,从当前关节角到目标关节角之间需要平滑过渡。最常用的是五次多项式插值

# 五次多项式:保证位置、速度、加速度都连续,避免冲击q(t)=a0+a1*t+a2*+a3*+a4*t⁴+a5*t⁵# 6个约束:起终点的位置、速度、加速度 → 解出6个系数

抓取饮料瓶的典型动作序列:

阶段1:移动到瓶子上方(夹爪张开) Action_0 = [J1=10°, J2=0°, J3=0°, J4=-90°, J5=0°, J6=0°, G=0°] Action_1 = [J1=10°, J2=-5°, J3=5°, J4=-85°, J5=2°, J6=0°, G=0°] ...(插值过渡) 阶段2:向下接近 Action_k = [J1=10°, J2=-45°, J3=10°, J4=-45°, J5=5°, J6=0°, G=0°] ... 阶段3:闭合夹爪(抓取) Action_m = [..., G=0°→80°] # 夹爪逐渐闭合 阶段4:抬起 Action_n = [J1=10°, J2=-30°, J3=15°, J4=-60°, J5=8°, J6=0°, G=80°] ...

二、一组动作序列包含多少个关节动作?由什么决定?

这个问题没有单一答案,取决于你在哪一层看:

在传统运动规划里(如 MoveIt)

序列长度 N 由以下公式决定 :

N = 控制频率 × 轨迹时长

具体受这些因素影响:

  • 控制频率:机械臂通常 100Hz~1000Hz(如 π0 支持 50Hz )
  • 轨迹时长:由起始关节角到目标关节角的距离决定,受最大关节速度/加速度限制
  • 插值方法:五次多项式插值时,时长由边界条件(起终点速度/加速度=0)和最大加速度共同决定
  • 平滑性约束:为保证位置、速度、加速度连续,至少需要一定时间跨度

举例:若控制频率 100Hz,从当前位姿到抓取点需要 2 秒平滑运动,则 N = 100 × 2 = 200 个关节动作。

在 VLA 模型里(如 π0)

序列长度由action chunk(动作块)大小决定 :

模型Chunk 大小控制频率单次推理覆盖时长
π050 步50Hz1 秒
π0-FAST30-60 个密集 token-压缩比 10 倍
StarVLA-OFT并行回归连续动作-取决于配置
StarVLA-π流匹配去噪生成连续动作块-取决于配置

π0 的执行策略 :

  • UR5e/Franka (20Hz):每 0.8 秒推理一次,执行 16 步后重新规划
  • 其他机器人 (50Hz):每 0.5 秒推理一次,执行 25 步后重新规划
  • 采用开环执行(流匹配生成的动作块本身一致性高)

💡核心洞察:π0 一次输出 50 步的动作块,但不会傻等 1 秒执行完才重新感知——而是执行一部分(如 16 步)后就重新推理,用新观测修正后续动作。这是"开环动作块 + 闭环重规划"的混合策略。

决定序列长度的关键因素总结

┌─────────────────────────────────────────┐ │ 1. 控制频率(机器人硬件决定) │ │ 2. 轨迹时长(由起止关节距离÷最大速度) │ │ 3. Action Chunk 大小(VLA 模型超参) │ │ 4. 平滑性约束(五次多项式插值的边界条件) │ │ 5. 重规划周期(开环执行多少步后重新推理) │ └─────────────────────────────────────────┘

三、π 系列、VLA 系列、StarVLA 各自覆盖哪一层?

这是你问题里最深刻的部分。我们把"任务指令 → 动作序列"链路标上层号,再看每个项目覆盖到哪层:

第①层:任务指令(语义空间) "抓取饮料瓶" ↓ 第②层:6维目标位姿 [X, Y, Z, RX, RY, RZ] ↓ ← ← ← ← ← ← ← ← ← ← ← ← ← ← 第③层:目标关节角 【IK 逆运动学】 [J1, J2, J3, J4, J5, J6, G] ↓ ← ← ← ← ← ← ← ← ← ← ← ← ← ← 第④层:关节动作序列 【轨迹插值】 [Action_0, Action_1, ..., Action_N] ↓ 底层控制器

π0 系列(Physical Intelligence)

覆盖范围:第①层 → 第④层(端到端)

  • 输入:图像 + 语言指令 + 本体感受(当前关节角)
  • 输出连续动作块(50步未来动作序列)
  • 训练数据:9.03 亿个专有机器人数据时间步 + 开源数据(OXE、Bridge v2、DROID),涵盖 7 种机器人配置
  • 动作表示:连续动作空间(18 维统一向量,通过零填充适配不同机器人)
  • 关键:π0直接输出关节动作序列(或末端位姿增量),IK 和轨迹规划被"吸收"进了神经网络的映射能力
  • 训练目标:流匹配损失,学习从噪声到动作块的向量场

📌 π0 的训练数据直接是"图像+语言+关节动作序列"三元组——它跳过了显式的 IK 和轨迹规划层,让模型自己学出"看到瓶子→输出抓取关节序列"的端到端映射。

VLA 系列(OpenVLA、RT-2 等)

覆盖范围:第①层 → 第④层(端到端,但动作离散化)

  • 输入:图像 + 语言指令
  • 输出:离散化的动作 token(如 OpenVLA 把每个关节角离散成 256 个 bin)
  • 训练数据:OpenX-Embodiment 等大规模机器人数据集
  • 动作表示:离散 token 自回归生成
  • 局限:离散化损失影响灵巧操作精度,控制频率通常 <10Hz

📌 与 π0 的区别:VLA 系列同样端到端输出动作序列,但用离散 token 表示动作,精度和频率低于 π0 的连续动作。

StarVLA(港科大开源框架)

覆盖范围:框架层,支持第①层 → 第④层的多种范式

StarVLA 在统一接口下实现了4 种动作解码范式,训练数据接口统一为"图像+语言+动作+可选本体感受":

动作头输出方式对应第④层动作表示
StarVLA-FAST自回归离散 token离散化关节动作序列
StarVLA-OFT轻量 MLP 并行回归连续关节动作序列
StarVLA-π流匹配去噪连续动作块(类似 π0)
StarVLA-GR00T双系统(VLM 慢推理 + DiT 快动作)连续动作序列

训练数据:通过 LeRobotMixtureDataLoader 统一加载多源数据,支持 LIBERO/RoboTwin/Calvin/RoboCasa/Behavior/Franka 等 ,数据格式为"图像+语言+动作+本体感受"。

📌 StarVLA 不是单个模型,而是框架——它支持训练出覆盖"第①层→第④层"的各类 VLA 模型。你选哪个动作头,就决定输出的是离散 token 还是连续动作块。

三者的本质区别

π0:端到端连续动作块(流匹配) → 训练数据:图像+语言+关节动作序列 → 输出:50步连续动作块 @ 50Hz VLA(OpenVLA):端到端离散动作 token(自回归) → 训练数据:图像+语言+离散化动作 → 输出:离散 token 序列 StarVLA:框架,4 种动作头任选 → 训练数据:统一的图像+语言+动作+本体感受 → 输出:取决于所选动作头(离散/连续/流匹配/双系统)

四、回到你的核心问题:6维位姿在这一切中的位置

关键澄清:在经典机器人 pipeline 里,6维位姿是第②层,IK+轨迹规划在第②③和③④层之间。

但在现代 VLA(如 π0)里:

  • 6维位姿不是显式的中间表示
  • VLA 直接从像素+语言映射到关节动作序列
  • IK 和轨迹规划被**端到端学习"吸收"**进了神经网络

两种工程范式对比

范式 A:模块化 pipeline(传统)

视觉定位 → 6维位姿 → IK → 目标关节角 → 轨迹插值 → 动作序列
  • 每层可独立调试
  • 需要精确的相机标定和机器人模型
  • 适合结构化环境

范式 B:端到端 VLA(现代)

图像 + 语言 → VLA → 关节动作序列(直接输出)
  • 跳过显式 IK 和 6维位姿表示
  • 训练数据是"图像+语言+关节动作序列"三元组
  • 适合非结构化、需要泛化的场景
  • 6维位姿在这一范式里不作为中间表示存在

范式 C:混合(当前趋势)

图像 + 语言 → VLA → 6维目标位姿 → IK → 目标关节角 → 轨迹插值 → 动作序列
  • VLA 只负责"末端要去哪"
  • IK 和轨迹规划用成熟库(MoveIt! + TRAC-IK)
  • 兼顾语义理解和执行可靠性
  • 6维位姿作为 VLA 的输出接口

五、给你的实操建议

💡如果你的目标是训练一个 VLA 抓取饮料瓶

  1. 采集数据:用 ALOHA 或示教器采集"图像+语言指令+关节动作序列"三元组,50-500 条演示
  2. 选框架:用 StarVLA + OFT 动作头(最简单稳定)或 StarVLA-π(更复杂但更精细)
  3. 训练:端到端训练,让模型自己学习"看到瓶子→输出关节序列"
  4. 6维位姿的角色:仅作为数据预处理时的中间表示(用于数据增广或校验),不作为模型输入/输出

如果你用传统 pipeline

  1. 视觉系统输出 6维位姿
  2. MoveIt! 做 IK + 轨迹规划
  3. 输出关节动作序列
  4. 这里不需要 VLA——用规则/脚本即可

一句话总结

一组关节动作序列的长度,在传统 pipeline 里由"控制频率 × 轨迹时长"决定;在 VLA 里由"action chunk 大小"决定(π0 是 50 步 @ 50Hz)。

π0 系列和 VLA 系列都端到端覆盖"任务指令→关节动作序列"全链路,训练数据直接是"图像+语言+关节动作"三元组,IK 和轨迹规划被神经网络吸收;StarVLA 作为框架,通过 4 种可插拔动作头支持这种端到端训练,数据接口统一为"图像+语言+动作+本体感受"。

6维位姿在端到端 VLA 里不作为显式中间表示——它是传统模块化 pipeline 的产物,在现代 VLA 训练中被"吸收"进了从像素到关节的端到端映射中。

其他补充

范式A跟现代VLA没有直接关系——它是传统的模块化机器人控制链路,不包含VLM/VLA参与决策。但范式B和范式C在现代VLA里都有对应,而且界限比想象中更模糊。

范式A:传统模块化pipeline(与VLA无关)

视觉定位 → 6维位姿 → IK → 目标关节角 → 轨迹插值 → 关节序列
  • 决策模块:规则/脚本/传统视觉算法(如AprilTag、点云配准)
  • 无VLM参与:不理解语言指令,不做语义推理
  • 典型应用:工业流水线上"看到marker→抓取"的固定任务
  • 与VLA的关系:❌ 无关。这是VLA出现之前的经典方案

💡 但有个灰色地带:如果把VLA当作"视觉定位模块"嵌入范式A——即VLA只输出6维位姿,后面接传统IK——这就变成了范式C。所以严格说,范式A+“VLA替换视觉定位”= 范式C。

范式B:端到端VLA(图像+语言 → 关节动作序列)

核心特征:VLA直接输出关节动作序列,IK和轨迹规划被神经网络"吸收"。

对应我们之前讨论过的这些算法:

① OpenVLA系列(离散token自回归)

  • 输出:256-bin离散化的关节动作序列(自回归一个个token生成)
  • 训练数据:图像+语言+关节动作序列(OpenX-Embodiment)
  • 典型案例:OpenVLA、RT-2、RT-1
  • 特点:离散化损失影响精度,控制频率<10Hz

② π0系列(流匹配连续动作)

  • 输出50步连续动作块@ 50Hz(UR5e/Franka上16步后重规划)
  • 训练数据:9.03亿机器人时间步+OXE/Bridge/DROID,直接是关节动作序列
  • 典型案例:π0、π0-FAST(30-60个密集token)
  • 特点:连续动作空间,精度高,频率高

③ StarVLA-OFT / StarVLA-π

  • StarVLA-OFT:轻量MLP并行回归 →连续关节动作序列
  • StarVLA-π:流匹配去噪 →连续动作块(类似π0)
  • 训练数据:统一的"图像+语言+动作+本体感受"格式

④ ACT(Action Chunking Transformer)

  • 输出动作块(chunk)连续关节序列
  • 训练数据:ALOHA示教数据(关节动作序列)
  • 虽不是严格意义的VLA(早期ACT不带VLM),但是VLA时代动作块概念的奠基者

范式B的共同特征

训练数据格式: (图像, 语言) → 关节动作序列 推理输出: 关节动作序列(直接下发给底层控制器) IK和轨迹规划: 被吸收进神经网络

范式C:VLA输出6维位姿 + 外部IK/规划

核心特征:VLA只输出末端执行器6维目标位姿,IK和轨迹规划由传统库(MoveIt! + TRAC-IK)完成。

对应这些算法/实践:

① 3D Diffuser Actor

  • 输出:末端位姿的扩散分布(6维位姿)
  • 后续:外部IK把6维位姿转成关节角
  • 定位:VLA负责"末端去哪",传统模块负责"关节怎么动"

② SpatialVLA

  • 输出空间增强的3D位姿预测
  • 强调3D空间理解,输出更适合直接作为6维位姿
  • 后续:外接IK

③ RoboPoint系列

  • 输出:3D点/6维位姿
  • 明确设计为"VLA as 视觉定位器"
  • 后续:传统控制模块接管

④ 部分OpenVLA的工程变种

  • 实际部署时,有工程师把OpenVLA的离散动作输出解释为6维位姿的离散化,然后外接IK
  • 这不是原版OpenVLA的设计意图,但是工程上的常见折中

⑤ StarVLA框架下的潜在组合

  • StarVLA是框架不是单一模型
  • 理论上可以用StarVLA训练一个"输出6维位姿"的VLA(把动作头改为位姿回归头)
  • 然后外接MoveIt!做IK和轨迹规划

范式C的共同特征

训练数据格式: (图像, 语言) → 6维目标位姿 推理输出: 6维位姿 后续处理: IK + 轨迹规划 → 关节动作序列

三者的本质区别与对应关系

┌─────────────────────────────────────────────────────────┐ │ │ │ 范式A:传统模块化(无VLA) │ │ 视觉 → 6维位姿 → IK → 关节序列 │ │ ✗ 与VLA无关 │ │ │ │ ─────────────────────────────────────────────────── │ │ │ │ 范式B:端到端VLA │ │ 图像+语言 → VLA → 关节动作序列 │ │ ✓ OpenVLA(离散token) │ │ ✓ π0 / π0-FAST(流匹配连续) │ │ ✓ StarVLA-OFT / StarVLA-π │ │ ✓ ACT(动作块奠基) │ │ │ │ ─────────────────────────────────────────────────── │ │ │ │ 范式C:VLA + 传统控制 │ │ 图像+语言 → VLA → 6维位姿 → IK → 关节序列 │ │ ✓ 3D Diffuser Actor │ │ ✓ SpatialVLA │ │ ✓ RoboPoint │ │ ✓ OpenVLA的工程变种 │ │ ✓ StarVLA(理论可训练位姿回归头) │ │ │ └─────────────────────────────────────────────────────────┘

一个关键澄清:范式B和C的区别在于"训练监督信号落在哪一层"

维度范式B(端到端)范式C(混合)
训练标签关节动作序列6维目标位姿
IK的角色被神经网络吸收显式存在,传统库
轨迹规划被神经网络吸收显式存在,五次多项式等
训练数据需求需要大量关节空间示教只需6维位姿标注(更容易获取)
泛化性强(学到关节级映射)中等(IK求解可能失败)
执行可靠性依赖VLA输出质量高(IK保证运动学可行)
代表算法OpenVLA, π0, StarVLA-OFT/π3D Diffuser Actor, SpatialVLA

为什么会有这两种范式并存?

范式B(端到端)的优势

  • 数据效率:直接从像素到关节,减少中间表示的信息损失
  • 泛化:学会"看到瓶子→关节动作"的直觉映射
  • 适应非标:能处理IK难以建模的场景(柔顺控制、接触-rich任务)

范式B的劣势

  • 需要大量关节空间示教数据(昂贵)
  • 训练不稳定(动作空间维度高)
  • 黑盒:难以调试为什么输出这个关节角

范式C(混合)的优势

  • 数据获取容易(只需6维位姿标注,可用人类示范/合成数据)
  • 执行可靠(IK保证运动学可行,避开奇异点)
  • 模块化:VLA出错时IK仍可工作

范式C的劣势

  • 6维位姿→关节角的IK可能无解(目标不可达)
  • 信息瓶颈:VLA被迫用6维表示所有意图,丢了细节
  • 两段式误差累积

当前趋势:范式B是主流,但范式C在特定场景有价值

范式B占据主流

  • π0、OpenVLA、StarVLA-OFT/π 都是范式B
  • 学术 benchmarks(LIBERO、RoboTwin、CALVIN)上的SOTA全是范式B
  • 原因是:benchmark任务足够复杂,范式C的6维位姿瓶颈限制了性能

范式C的适用场景

  • 工业抓取:目标明确,6维位姿足以描述意图
  • 数据稀缺:只能用人类示范标注6维位姿,没有关节示教
  • 安全关键:需要IK保证运动学可行,不能有"关节角越界"
  • 跨 embodiment:同一个VLA输出的6维位姿,可以被不同构型的机器人各自IK执行

回到StarVLA的具体定位

StarVLA作为框架,理论上是范式中立的:

  • OFT动作头→ 范式B(输出连续关节序列)
  • π动作头→ 范式B(输出连续动作块)
  • FAST动作头→ 范式B(输出离散关节token)
  • 自定义的位姿回归头→ 范式C(输出6维位姿)

但目前StarVLA开源的4种动作头(OFT/π/FAST/GR00T)都是范式B——输出关节动作序列。范式C在StarVLA里需要自己扩展动作头。

一句话总结

范式A与VLA无关(传统模块化);范式B对应OpenVLA、π0、π0-FAST、StarVLA-OFT/π、ACT——端到端输出关节动作序列;范式C对应3D Diffuser Actor、SpatialVLA、RoboPoint——VLA输出6维位姿后外接IK。

两者的本质区别在于训练监督信号落在哪一层:范式B直接监督关节动作序列,范式C只监督6维目标位姿。当前学术主流是范式B(性能上限更高),范式C在工业抓取、数据稀缺、安全关键场景仍有价值。

如果你的目标是在LIBERO/RoboTwin等仿真benchmark上刷指标→ 选范式B(StarVLA-OFT或π)。
如果你的目标是工业落地,需要可靠的运动学保障→ 选范式C(VLA输出6维位姿+MoveIt! IK)。

← 返回列表