Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

8.1.1 输入模态:视觉、语言、状态、历史轨迹

在 VLA 中,输入不再只是“图像 + 文字”这么简单,而是一个多模态的时序信息流。形式上,可以把当前时刻的决策看成是下面这个映射:

\[ a_t = \pi\big( I_{1:t}, L, s_{1:t}, a_{1:t-1} \big) \]

其中 \(\displaystyle I\) 是视觉观测(图像/视频),\(\displaystyle L\) 是语言指令,\(\displaystyle s\) 是机器人状态,\(\displaystyle a\) 是历史动作。不同工作会对这些量做不同的简化,但整体思路类似:把“机器人看到的、听到的、感觉到的、以及刚刚做过什么”统一编码成一串 token,再交给 Transformer 这类序列模型处理。Gato、RT-1、RT-2、OpenVLA 等代表性系统都采用了类似的多模态序列建模范式。(OpenReview)

【示意图:VLA 输入结构。左侧一列为多帧相机图像,中间为一行文本指令,上方为机器人关节状态曲线,下方为历史动作时间轴,右侧箭头指向“Transformer 编码器”。】


8.1.1.1 视觉输入

视觉输入是 VLA 的“眼睛”。它通常来自:

  • 单目 / 双目 / 多相机 RGB 图像
  • RGB-D(带深度)图像
  • 直接的点云或投影到图像平面的 3D 特征

(1)单帧 vs 多帧 在最简单的设置里,模型每次看到一帧图像,基于这张图像和指令输出动作。但对于大多数操作任务,一张图不足以捕捉运动趋势:比如杯子是不是被刚刚推了一点、抽屉是打开还是正在打开。 因此,很多系统会输入最近的若干帧图像,让模型通过时间上的差异感知动态信息。比如 RT-1 就将一段短历史图像序列与任务描述一起输入 Transformer,再输出当前一步的动作。(LibreTranslate Community)

(2)原始像素 vs 中间表征 从工程角度看,视觉输入有两种常见形态:

  1. 原始像素(raw RGB/RGB-D)
    • 优点:信息最完整;端到端训练时,模型可以自己学“看到什么重要”。
    • 缺点:维度高,对数据和算力要求大。
  2. 中间视觉特征(例如由 ResNet、ViT、DINOv2 等 backbone 提取的特征图或 token)(维基百科):
    • 优点:可以直接复用大规模视觉预训练的能力(如自监督学习得到的泛化特征),显著提升样本效率。
    • 缺点:感知模块与决策模块之间形成“模块边界”,端到端微调时需要注意稳定性与接口设计。

目前主流 VLA,如 RT-1/RT-2、OpenVLA,多采用“预训练视觉 backbone + Transformer 决策头”的结构,在机器人数据上只微调部分层。(Google Research)

(3)多视角与 3D 信息 对于抓取、插入等 3D 要求较高的任务,仅靠单视角 RGB 信息往往不够可靠,因此会引入:

  • 双目相机:由视差估计深度;
  • 额外的顶视/侧视相机:从不同角度减少遮挡;
  • 深度相机 / LiDAR:直接提供点云或深度图。

这些 3D 信息要么被编码成额外的通道(如将深度图与 RGB 堆叠),要么单独通过 3D backbone(如 PointNet/3D-CNN)编码,再与图像特征在后续进行融合。

【示意图:上图为桌面场景真实 RGB 图像,下方为对应深度图和点云示意,箭头指向“视觉编码器”,输出若干视觉 token。】


8.1.1.2 语言输入

语言输入是 VLA 的“耳朵和任务说明书”。与传统机器人“通过 API 调参”不同,这里希望人类可以直接用自然语言描述任务,如:

“把最靠近红杯子的蓝色方块放进抽屉里。”

语言在 VLA 中主要承担三类角色(将在 4.4 展开,这里只做结构层面说明):

  1. 任务目标描述(goal specification) 用一句话或几句话给出当前要完成的任务,这是最基础的形式。
  2. 约束与偏好 例如“轻拿轻放”“不要碰到桌上的笔记本电脑”等,可视为对规划和控制的软约束。
  3. 交互式纠偏 / 解释 在任务执行过程中用户追加指令:“速度再慢一点”“换另一只手抓”等,这些更新需要和当前状态一起被送入模型。

(1)语言编码方式 在现代 VLA 中,语言通常通过预训练大语言模型或轻量 Transformer 编码成 token 序列或句向量。RT-2 的一个关键设计,就是把机器人动作和自然语言统一表示为“文本 token”,这样模型在训练时可以在同一输出空间内既学回答问题,又学输出控制命令。(arXiv)

(2)上下文与多轮指令 VLA 常会把整个指令对话历史拼接起来,一并作为语言输入,让模型理解“之前已经说过什么”。这与 ChatGPT 等对话式 LLM 的做法类似,只是这里下游任务变成了“输出动作 token 序列”,而不仅仅是自然语言回复。

【示意图:一条时间轴,上方是用户多轮语言指令气泡(如对话框),下方是机器人执行示意,箭头连接至“语言编码器”输出 token 序列。】


8.1.1.3 机器人状态

如果视觉是“外感知”,机器人状态就是“本体感知(proprioception)”:机器人自己知道关节在哪里、动得快不快、有没有受力等。

典型的状态变量包括:

  • 关节角度 \(\displaystyle q\)、关节速度 \(\dot{q}\)、(可选)关节力矩 \(\tau\);
  • 末端执行器的位姿(位置 + 姿态)、末端速度;
  • 轮式底盘的位置和速度(对移动平台而言);
  • 手爪开合程度、吸盘是否吸附成功等执行器状态;
  • 力/力矩传感器、碰撞开关等触觉/接触信息。

在很多通用 agent(如 Gato)中,这些状态会被离散化或量化为 token,和文本、图像一起作为序列输入。(Patrick LLGC)

从工程上看,状态向量通常会:

  • 做归一化(normalization),例如线性缩放到 \(([-1, 1])\) 区间,便于不同关节、不同机器人共享模型;
  • 做子集选择,只保留与当前任务高度相关的维度(例如只给出末端姿态而不必给全部关节角)。

在决策逻辑上,状态信息对“接触与力控”特别关键:视觉可能看不到当前接触力,但力/力矩传感器可以直接告诉模型“已经顶到墙了,不能再推”。


8.1.1.4 历史轨迹

现实世界通常是部分可观测 的:一帧图像未必包含全部信息。例如机器人刚才是否已经把抽屉打开了一半,从当前视角可能看不清,但历史图像和动作是知道的。这就是为什么许多通用模型会把“历史轨迹”也一并编码进去。

所谓历史轨迹,可以简单理解为:

\[ \mathcal{H}_{t} = \big{(I_1, s_1, a_1), (I_2, s_2, a_2), \dots, (I_{t-1}, s_{t-1}, a_{t-1})\big} \]

在序列建模框架下,这些元素被串成一个长序列,交替出现“观测 token、分隔符 token、动作 token”等,Transformer 每一步在整个上下文上自注意力,然后输出下一步动作 token。Gato 就明确采用这种“观测–动作交错 token 序列”的形式,并在一个固定的上下文窗口(如 1024 token)内滚动地进行决策。(arXiv)

实践中,历史轨迹建模有几个常见技巧:

  • 使用滑动窗口:只保留最近 \(\displaystyle K\) 步历史,越久远的信息越不重要,避免序列过长导致计算量爆炸;
  • 引入时间编码:类似位置编码,在每个 token 上叠加时间步 index 或相对时间,使模型区分“刚刚发生的”和“很久以前发生的”;
  • 将长历史压缩为摘要 token:例如用一个小网络对过去几十步进行编码,输出一个“记忆向量”,再附加到当前输入中。

【示意图:时间轴上依次排列观测 token(图像/状态)、动作 token,颜色不同表示不同模态,外层一个大括号表示”Transformer 上下文窗口“。】


8.1.2 输出模态:动作 token / 连续动作的离散化

输入统一成 token 序列之后,一个核心问题就是:机器人动作如何也变成“token”,从而可以用同一套语言建模技术来预测。

真实机器人控制量通常是连续的(力矩、速度、位置等),而 Transformer/LLM 天然擅长预测离散 token 序列 。VLA 的一大关键设计,就是在“连续动作空间”与“离散 token 空间”之间搭建桥梁。


8.1.2.1 连续动作空间

在传统控制和强化学习中,机器人动作一般被表示为一个实数向量:

\[ a_t \in \mathbb{R}^d \]

其中 \(\displaystyle d\) 可以是:

  • 机械臂末端的 6D 位姿增量(位置 3 维 + 姿态 3 维),再加一个抓手开合,凑成 7 维;
  • 每个关节的目标位置/速度/力矩,一共若干维;
  • 移动底盘的线速度 \(\displaystyle v\) 和角速度 \(\omega\) 等。

连续动作的优点:

  • 表达精细,可直接对应物理量,易与现有控制器(如力矩控制、速度控制)对接;
  • 在局部光滑条件下,易于用梯度方法优化(例如在模型预测控制 MPC 里做连续优化)。

缺点也很明显:

  • 连续空间需要数值优化或函数逼近,直接塞进“下一个 token 预测”框架比较别扭;
  • 不同机器人、不同任务的动作空间维度和范围差异巨大,想要共享一个统一策略会比较困难。

因此,很多 VLA 工作会在“机器人实际控制接口”和“模型内部表示”之间,再加一层 动作离散化 + 解码 模块。


8.1.2.2 动作离散化

动作离散化(action discretization)的核心思想是: 把连续向量划分为若干有限的“动作符号”,这些符号可以当作 token 来预测

常见方式包括:

(1)逐维均匀量化 以 RT-1 为例,它将每个动作维度(如末端位移、旋转、抓手状态)离散成 256 个 bins,相当于把实数区间切成 256 段,每段对应一个离散 index。(Google Research)

  • 优点:实现简单、直观;
  • 缺点:维数较高时,动作组合空间非常大,需要一些结构设计(如逐维预测、分组预测)才能训练得动。

维基百科对 VLA 的总结同样指出,许多系统会把 6-DoF 末端位姿和抓手状态量化为 256 个离散等级,再通过“动作解码器”恢复到连续控制命令。(维基百科)

(2)非均匀量化与 codebook 学习 另一个思路是从数据中学习一组“常用动作原语”:

  • 先对示教轨迹中的动作进行聚类(如 k-means),得到若干中心向量;
  • 每个聚类中心视为一种“动作 token”;
  • 训练时模型只需选择这些 token 的 index。

这种方式本质上是做“动作向量的向量量化(VQ)”,能够把模型注意力集中在训练数据中出现频繁的动作模式上,而不是覆盖整个理论上的连续空间。

(3)高层离散技能 在层级控制框架中,还可以把“技能(skill)”看作高层离散动作,比如:

  • open_drawer
  • pick(red_block)
  • place_in(box)

每个技能内部由专门的低层控制器或策略实现,VLA 只需要在技能级别做离散决策。这种做法在 SayCan 等“LLM+技能库”的工作中已经得到验证。(SayCan)

【示意图:左侧是连续动作空间中的点云,右侧是若干离散“簇中心”(动作原语)和均匀量化区间,分别标注为不同 token ID。】


8.1.2.3 动作 token 序列

在完成离散化之后,动作就可以像语言一样被表示为 token 序列:

  • 每一个动作维度(或动作原语)对应一个 token;
  • 整个动作向量可以是多个 token 的组合;
  • 跨时间步的动作序列自然就变成一个长 token 序列。

Gato 这样的通用 agent 就是用统一的 token 库来表示文本、图像特征索引、机器人状态以及动作,并在同一个 Transformer 中按 autoregressive 方式预测“下一个 token”。(arXiv)

RT-2 更进一步,直接把机器人动作编码成“伪文本 token”,与自然语言 token 混在一起训练,使得同一个模型既能输出文字(回答问题),也能输出可执行动作序列。(arXiv)

典型的控制循环可以被描述为:

  1. 将最新的视觉、语言、状态以及历史动作编码为 token 序列;
  2. Transformer 在这些 token 上自回归地生成接下来若干动作 token;
  3. 将这些动作 token 解码为连续控制量,发送给机器人;
  4. 环境反馈新的图像和状态,周而复始。

【示意图:一条 token 序列,前一部分是“文本 token + 视觉 token + 状态 token”,后面是待预测的“动作 token”,Transformer 自回归地一个一个生成,最后再通过“动作解码器”恢复到连续动作向量。】


8.1.3 单步决策 vs 序列决策

有了统一的输入和动作 token 表示之后,还要回答一个问题: 模型每次决策,是只输出“下一步动作”,还是直接输出“一整段动作序列”?

这对应到控制理论,就是“闭环单步控制”与“开环/有限时域规划”的区别。不同任务、不同平台、不同安全需求,对这两种方式的偏好会不同。


8.1.3.1 单步决策

单步决策(step-wise / reactive policy)是当前现实机器人中最常见的方式。形式上,它实现的是:

\[ a_t \sim \pi(a_t \mid I_{1:t}, L, s_{1:t}, a_{1:t-1}) \]

每次只输出当前时刻的一个动作(或一组动作 token),然后等待环境给出新的传感输入,再进行下一步。这本质上是一个闭环反馈控制 过程。

以 RT-1 为例,它每一控制周期读取最近几个图像帧和当前任务描述,Transformer 输出一个离散化动作向量,立即执行,再继续下一轮。(LibreTranslate Community)

优点:

  • 对扰动、噪声和建模误差更鲁棒——环境有变化,下一步动作可以立刻调整;
  • 更接近传统 RL/BC 的框架,算法和分析比较成熟;
  • 易于与安全约束和低层控制器结合(例如每一步都可以进行可行性检查)。

缺点:

  • 需要频繁调用大模型进行前向推理,算力和延迟开销较大;
  • 难以显式表示“长远计划”,特别是在长时间、长距离导航或复杂多阶段操作任务中。

8.1.3.2 序列决策

序列决策(sequence prediction / trajectory generation)的思路是: 模型在当前时刻一次性生成未来若干步的动作序列

\[ (a_t, a_{t+1}, \dots, a_{t+H}) \sim \pi(\cdot \mid I_{1:t}, L, s_{1:t}, a_{1:t-1}) \]

这些动作可以在一段时间内作为“开环计划”执行,也可以在 MPC(模型预测控制)风格的框架中,只执行前几步再重规划。

利用序列决策的工作经常会:

  • 把未来动作序列看作“要预测的 token 序列”,用自回归或扩散模型在动作 token 空间上进行生成;(NIPS 论文集)
  • 或者同时预测未来动作和未来观测(如未来视频帧),利用“想象的未来”来评估不同计划的好坏,再选择其中最优的一条。

优势:

  • 便于在计划阶段统一考虑长期约束,例如避障、能量消耗、任务时间等;
  • 可以减少在线调用大模型的频率:一次生成多步动作,在低层快速执行。

但它的弱点也很明显:

  • 对环境建模误差更敏感,一旦真实世界偏离预测,后续的开环动作可能变得不合理甚至危险;
  • 序列越长,对模型的长期预测能力要求越高,对数据质量也越敏感。

8.1.3.3 折中方案

在实际系统里,常见的做法不是“纯单步”或“纯序列”,而是各种折中与层级设计。几种典型思路:

(1)有限时域滚动规划(MPC 风格 VLA)

  • 模型每次生成一个有限长度 \(\displaystyle H\) 的动作序列;
  • 实际执行时只执行前 \(\displaystyle k\) 步(通常 \((k < H)\));
  • 然后重新获取传感信息,再生成新的序列。

这样既能利用“多步规划”的优势,又保持对环境变化的适应性。很多现代操作系统隐含地采用了这种模式,只是把“序列”压缩为“几个关键帧”或“里程碑子目标”。

(2)高层序列 + 低层单步控制(层级架构) SayCan 是一个代表性例子:LLM 在高层输出一串“技能序列”(如“移动到桌边 → 抓取杯子 → 放入抽屉”),然后每个技能由经过 RL/BC 训练的低层策略在闭环方式下执行。(SayCan)

在更一般的层级 VLA 中,高层可能输出:

  • 一串子目标位姿(waypoints);
  • 一组动作原语的调用序列;
  • 或者自然语言形式的子任务列表。

低层则专注于:给定局部目标,每个控制周期做单步闭环决策。

(3)在线修正的计划执行 另一类折中是让 VLA 生成一段动作序列,但同时引入:

  • 在线视觉/力觉监控模块,在发现偏离预期或出现危险时打断计划;
  • 或者一个额外的“纠偏网络”,根据当前偏差对后续计划进行重参数化。

这类设计可以理解为“计划–执行并行”:计划提供长远结构,执行提供即时报错和调整。

【示意图:上半部分是“高层序列规划模块”,输出一串关键帧/技能;下半部分是“低层闭环控制模块”,每一小步根据当前观测微调动作;两者通过时间轴连接。】


8.1.4 统一模型 vs 模块化架构思路

到目前为止,我们都在假定“存在一个 VLA 模型 \(\pi\)”,它吃进一堆输入 token,吐出动作 token。但在现实系统中,这个“模型”到底是一整个端到端的大网络,还是多个模块的组合,是一个非常重要的系统设计问题。

简化地说,有三种典型风格:

  1. 完全统一的端到端模型;
  2. 明确拆分的模块化架构;
  3. 兼顾两者优点的折中设计(部分统一、部分模块化)。

8.1.4.1 统一端到端模型

统一端到端(monolithic, end-to-end)模型的代表包括 Gato、RT-1、RT-2、OpenVLA 等。(Google DeepMind)

共同特点是:

  • 统一序列建模: 把图像特征、语言 token、机器人状态、历史动作统统映射到一个统一的 token 序列里;
  • 单一 Transformer 主干: 一个大型 Transformer 网络负责所有模态间的交互和时序建模;
  • 统一输出空间: 输出的 token 既可以代表文字,又可以代表动作、按钮、离散化连续量等。

优势:

  1. 表示共享:不同任务、不同机器人、不同模态之间共享参数,利于涌现出通用的感知与决策能力;
  2. 端到端优化:理论上可以把“视觉–语言–决策–动作”的整个链路一起训练,最大化最终任务成功率;
  3. 系统结构简洁:对外暴露的是一个统一的“黑盒策略接口”,使用者只需要关心输入与输出。

但代价也不小:

  • 需要巨量数据与算力支持大模型训练;
  • 调试困难——出了问题很难定位是视觉没看懂、语言没理解,还是决策策略本身有缺陷;
  • 在安全关键场景(如人机协作、医疗机器人)中,监管机构往往更倾向于“可解释、可验证”的模块化设计。

8.1.4.2 模块化架构

模块化架构更接近传统机器人系统:

感知(Perception) → 世界建模 / 语义理解 → 规划(Planning) → 控制(Control)

在引入大模型之后,模块化思路通常会:

  • 使用 VLM/LLM 做高层语义理解与规划
  • 使用传统或基于学习的视觉模块做目标检测、场景重建;
  • 使用经典运动规划(如 MoveIt, RRT*, TrajOpt)和控制(如 PID、力控制)作为低层执行器。

SayCan 就是一个典型的模块化/层级系统:LLM 根据语言指令和环境文本描述计算“技能有多有用”,再结合 RL 训练得到的 value function 评价“技能在当前状态下有多可行”,两者合成后选择要执行的技能。(SayCan)

近期的一些层级框架(如 RoBridge、分层 MA-LLM 等)进一步将“高层认知规划、符号中间表示、低层具身执行”拆成三个相对独立的子系统:(arXiv)

  • 高层:大规模 VLM/LLM 做任务理解与策略规划;
  • 中层:构造与物理直觉一致的符号表示(如拓扑地图、可操作对象集合);
  • 低层:具身 agent 根据中层指令进行精确控制与执行。

模块化的优势:

  1. 可解释、可验证:每个模块有清晰的输入/输出接口,便于单独测试和验证;
  2. 工程复用性高:可以直接用成熟的 SLAM、路径规划、控制库,而不是全靠大模型“自己学”;
  3. 安全与调试友好:系统出错时容易定位在哪一环节,并可针对性增加“安全壳层”。

缺点在于:

  • 模块之间的接口常常是“手工定义”的,中间表示不一定是最利于学习和泛化的;
  • 端到端优化困难,可能导致整体性能被最弱的模块限制;
  • 不同模块的分布偏移和误差会相互放大(error compounding)。

【示意图:典型模块化系统框图,左侧为「视觉模块」和「语言理解模块」,中间是「任务规划 / 技能选择」,右侧是「运动规划」和「低层控制」,箭头表示信息流向。】


8.1.4.3 折中设计

现实中,很多最新的 VLA 系统都采用了介于“完全统一”和“完全模块化”之间的折中方案 。几类常见设计:

(1)预训练 backbone + 端到端决策头 例如 RT-2:

  • 视觉与语言部分采用预训练的 VLM(如 PaLM-E / PaLI-X)作为 backbone;
  • 在其输出的多模态特征之上,增加一个轻量的动作头,把动作也当作 token 进行训练;
  • 整体上保留端到端的 VLA 训练,但大部分参数来自稳定的预训练模型。(arXiv)

类似地,OpenVLA 采用 DINOv2 + CLIP 的组合视觉特征,再加上 Llama-2 语言 backbone,在统一的 Transformer 里输出离散动作 token,但同时支持参数高效微调和量化,以适应不同机器人平台。(维基百科)

(2)统一高层脑 + 模块化低层身体 另一类折中是:

  • 高层完全交给一个大 VLA/LLM 模型,负责理解任务、规划子目标或技能序列;
  • 低层则继续使用传统运动规划与控制器,对每个子目标进行精确执行和安全校验。

RoBridge 等工作就采用了“高层认知规划(基于 VLM)、中层符号桥接、低层具身控制”的三层架构。(arXiv)

这种方式既能充分利用大模型在语义和知识层面的优势,又不会完全丢弃现有机器人系统几十年积累下来的可靠控制和规划技术。

(3)统一模型内部的“软模块化” 还有一些设计在一个统一模型内部,通过:

  • 不同的 prompt 模式(推理模式、执行模式);
  • 不同的输入前缀(如“你现在是一个规划器” vs “你现在是一个控制器”);
  • 或者不同的 adapter 分支

来实现一种“软模块化”:在参数上高度共享,但在功能上分工明确。

总体来看,统一与模块化不存在绝对优劣。对于读者将来自己设计系统,可以参考如下经验性判断:

  • 以研究和原型为主:倾向统一或半统一模型,尝试涌现出更通用的能力;
  • 以安全可靠部署为主:倾向模块化或层级架构,将 VLA 放在高层决策位置,与传统感知/规划/控制模块协同工作;
  • 从长远发展看:更大规模、更统一的具身基础模型很可能会逐步取代一部分手工模块,但在可预见的未来,“统一模型 + 安全壳层 + 工程模块”的混合形态将长期共存。

【示意图:一张二维坐标图,横轴为“统一程度”(从完全模块化到完全端到端),纵轴为“安全/可解释性”,在中间区域标出 RT-2 / OpenVLA / RoBridge 等代表工作,说明它们处于不同折中点。】


本节从输入模态、输出动作表示、决策粒度到整体架构,对 VLA 的“接口与形态”做了系统梳理。后续章节将在此基础上更具体地讨论视觉/语言编码模块(8.2)、动作解码与控制(8.3),以及多模态融合与条件建模(8.4),帮助读者把“接口层的直觉”逐渐深化为具体可实现的模型设计。