VLA 系统学习第 1 课:VLA 到底在干什么?

第一课先不碰 ACT、Diffusion Policy、OpenVLA、π0 这些具体模型,而是只解决最基础的一条链:

Camera / Language / Robot State → Policy → Action → Robot Controller → Real Robot

并重点弄清楚 Observation、Robot State、Language、Action,以及 Action 为什么还不是电机命令。 Pasted text


1. 先用一句话理解 VLA

VLA,全称:

Vision-Language-Action

可以先粗略翻译为:

看见环境 + 听懂任务 → 决定机器人下一步做什么。

例如给机器人一句指令:

"把桌上的红色方块放进左边盒子。"

机器人可能同时拿到:

  • 相机图像;
  • "把红色方块放进左边盒子"这句话;
  • 当前机械臂关节位置;
  • 当前夹爪开合状态。

然后模型输出:

下一步机械臂应该采取什么动作。

所以整个问题,本质上可以先画成:

复制代码
环境
 ↓
相机看到什么
+
人要求做什么
+
机器人现在是什么姿态
 ↓
VLA / Robot Policy
 ↓
下一步动作
 ↓
机器人控制系统
 ↓
机器人真的运动

这一课最重要的事情,就是把上面每一个词弄明白。


2. VLA 最核心的数学形式

以后你会看到大量复杂模型,但最底层都可以先抽象成:

\ a_t = \\pi(o_t, l) \\

先不要害怕这个公式。

这里:

  • \(\pi\):policy,策略;
  • \(o_t\):机器人在时刻 \(t\) 得到的 observation;
  • \(l\):language instruction,语言指令;
  • \(a_t\):时刻 \(t\) 输出的 action。

中文就是:

策略根据当前观察和任务指令,决定当前应该采取什么动作。

如果把机器人的自身状态单独写出来,也经常写成:

\ a_t = \\pi(I_t, s_t, l) \\

其中:

  • \(I_t\):图像;
  • \(s_t\):Robot State;
  • \(l\):语言;
  • \(a_t\):动作。

这其实就是 VLA 最核心的一条线。

以后 ACT、Diffusion Policy、OpenVLA、π0 再复杂,最终我们都要回来问:

它到底怎么从这些输入,算出了 Action?


3. Observation 到底是什么?

这是第一个必须真正理解的词。

3.1 Observation = 机器人当前"能够观察到的信息"

假设你站在房间里。

房间真实情况可能包含:

  • 桌子的准确三维位置;
  • 所有物体的位置;
  • 空气温度;
  • 每个物体的质量;
  • 每个物体内部结构;
  • 所有人的位置。

但你的眼睛并不能直接知道所有这些东西。

你实际拿到的是:

  • 眼睛看到的图像;
  • 耳朵听到的声音;
  • 手感觉到的力;
  • 身体姿态感觉。

这些东西就是你的 Observation。

机器人也是一样。

它并不是直接知道"世界真相"。

它只能通过传感器观察。


3.2 机器人常见 Observation

例如一个机械臂系统可能拥有:

复制代码
RGB Camera
Depth Camera
Joint Position
Joint Velocity
Gripper State
Force Sensor
Previous Action
历史图像

这些都可能属于 Observation。

例如:

\ o_t = \\{ I_t, q_t, g_t \\} \\

这里:

  • \(I_t\):当前相机图像;
  • \(q_t\):当前关节角;
  • \(g_t\):当前夹爪状态。

所以:

Observation 并不等于"图片"。

这是初学 VLA 非常容易出现的第一个误区。


4. Vision 到底给模型什么?

现在先只考虑 RGB 相机。

机器人看到一张图片:

复制代码
桌子
红色方块
蓝色方块
盒子
机械臂

计算机当然看不到"红色方块"这几个汉字。

它真正收到的是一个数字数组。

一张 RGB 图片通常可以表示成 Tensor:

\ I \\in \\mathbb{R}\^{3\\times H\\times W} \\

这里:

  • \(3\):RGB 三个颜色通道;
  • \(H\):图片高度;
  • \(W\):图片宽度。

如果加入 batch:

\ I \\in \\mathbb{R}\^{B\\times 3\\times H\\times W} \\

其中:

  • \(B\):一次送入模型多少张图片。

例如:

复制代码
images
shape = [B, 3, H, W]

现在先不用关心具体到底是 224×224、256×256 还是别的尺寸。

不同模型不同。

真正重要的是:

VLA 的 Vision 输入,本质上最终都会变成 Tensor。


5. Robot State 是什么?

这是第二个很容易混淆的概念。

Robot State 可以理解为:

机器人对"自己当前是什么状态"的描述。

最常见的是关节位置。

假设机械臂有 6 个关节:

\ q_t = \[q_1,q_2,q_3,q_4,q_5,q_6 \]

例如:

\ q_t = \[0.2,-0.7,1.1,0.3,-0.5,0.8 \]

这些数字可以代表 6 个关节当前的位置。

于是:

复制代码
robot_state
shape = [6]

如果加入 batch:

复制代码
robot_state
shape = [B, 6]

但 Robot State 不一定只有 Joint Position。

还可能有:

复制代码
Joint Position
Joint Velocity
End-Effector Pose
Gripper State
Force / Torque

5.1 为什么只有图片还不够?

假设相机看到:

夹爪在杯子附近。

但机器人自己最好还要知道:

我的 6 个关节现在到底在哪。

否则仅凭图像,很难非常精确地知道自己的机械状态。

你可以类比人类。

你闭上眼睛,把手伸出去。

即使看不到手,你大概也知道:

我的手在哪里。

这种身体内部状态感知叫:

Proprioception

中文通常翻译为:

本体感觉 / 本体感知

在 Robot Learning 里非常重要。

所以你以后会经常看到:

复制代码
proprioception

大多数时候,可以先理解成:

机器人自己身体状态的信息。


6. Language 到底怎么进入模型?

现在假设人输入一句:

Pick up the red block.

计算机不能直接处理这句话。

最基本过程是:

复制代码
文字
 ↓
Tokenizer
 ↓
Token
 ↓
Token ID
 ↓
Embedding
 ↓
神经网络

这一课暂时不用深入 Transformer。

只需要知道:

Language 最终也要被转换成数字。

例如一句话经过 tokenizer 后,可能变成:

复制代码
[101, 2345, 117, 8912, 102]

这只是示意,不对应任何特定模型。

可以抽象成:

\ L \\in \\mathbb{N}\^{B\\times N} \\

其中:

  • \(B\):batch size;
  • \(N\):token 数量。

随后模型把 Token ID 转换成向量。


7. 为什么必须有 Language?

如果没有 Language,机器人看到:

复制代码
红色方块
蓝色方块
杯子
盒子

它并不知道:

你到底想让我干什么?

同一幅画面可以有无数种任务:

复制代码
拿红色方块
拿蓝色方块
把杯子移动到右边
把红色方块放进盒子
把蓝色方块推走

视觉告诉机器人:

世界现在是什么样。

语言告诉机器人:

你希望世界变成什么样。

这个区别非常重要。


8. Policy 到底是什么?

现在三个东西准备好了:

复制代码
Image
Robot State
Language

于是进入:

Policy

Policy 可以先理解成:

决定机器人该怎么行动的函数。

也就是:

\ \\pi: (\\text{Observation},\\text{Language}) \\rightarrow \\text{Action} \\

例如:

复制代码
Image
+
Robot State
+
Language
        ↓
      Policy
        ↓
      Action

Policy 可以是:

  • 很简单的神经网络;
  • Transformer;
  • Diffusion Model;
  • VLM + Action Head;
  • Flow Matching 模型;
  • 其他结构。

但先不用管。

第一课只要记住:

Policy 的任务不是"理解世界"就结束了,而是最终必须产生可以用于机器人行为的 Action。

这就是 Robot Learning 和普通图像分类、普通聊天模型最大的区别之一。


9. Action 到底是什么?

这是整门课最重要的概念之一。

很多初学者看到:

复制代码
action = model(obs)

会自然认为:

Action 就是电机转多少。

实际上通常不是。

Action 是:

Policy 输出的机器人行为表示。

具体表示什么,要看模型怎么定义 Action Space。


10. 常见 Action 类型

以后你会反复遇到这些。

第一类:Joint Position

直接输出目标关节位置:

\ a_t = \[q_1\^\*,q_2\^\*,...,q_n\^\* \]

意思是:

希望各个关节运动到这些位置。


第二类:Joint Delta

输出:

\ \\Delta q \\

例如:

\ \\Delta q = \[0.01,-0.02,0,0.01,0,0 \]

表示:

在当前关节位置基础上稍微移动一点。

于是:

\ q_{target}=q_t+\\Delta q \\


第三类:Joint Velocity

输出:

\ \\dot q \\

也就是:

每个关节应该以什么速度运动。


第四类:End-Effector Pose

不是直接控制每个关节,而是告诉机器人:

我要夹爪到这个位置和姿态。

例如:

\ a_t = \[x,y,z,r_x,r_y,r_z \]

然后由后面的运动学和控制系统决定各关节怎么运动。


第五类:Delta End-Effector Pose

输出:

\ \[\\Delta x,\\Delta y,\\Delta z, \\Delta r_x,\\Delta r_y,\\Delta r_z \]

含义是:

夹爪相对于当前姿态,再移动一点。

这种表示在 Robot Learning 中非常常见。


第六类:Gripper Action

例如:

\ g\\in\\{0,1\\} \\

可以表示:

复制代码
0 → 打开
1 → 闭合

也可能采用连续值。


11. 一个 Action Tensor 可能长什么样?

假设某个机器人策略定义:

复制代码
Δx
Δy
Δz
Δrx
Δry
Δrz
gripper

那么:

\ a_t = \[ \\Delta x, \\Delta y, \\Delta z, \\Delta r_x, \\Delta r_y, \\Delta r_z, g \]

Action Dimension 就是:

\ D_a=7 \\

Tensor 可能是:

复制代码
action
shape = [B, 7]

但是一定要记住:

这个 7 只是这个示例的 Action Space。

不能看到别的 VLA 就默认:

复制代码
Action Dimension = 7

以后看真实论文和 GitHub,我们都会重新查。


12. 最重要的问题:Action 是电机命令吗?

通常不是。

这是第一课最应该彻底弄清的一点。

例如 VLA 输出:

\ \\Delta x=0.01m \\

它表达的是:

末端向 x 方向移动 1 cm。

但电机根本不认识:

复制代码
向 x 方向移动 1 cm

电机底层可能只认识:

复制代码
目标位置
目标速度
目标电流
PWM
Step Pulse
Torque Command

所以中间还有很多层。


13. 真正的机器人执行链

一个典型系统可以粗略写成:

复制代码
VLA
 ↓
Action
 ↓
Action Adapter
 ↓
Robot Controller
 ↓
Joint Command
 ↓
Servo / Motor Driver
 ↓
Motor
 ↓
Robot Motion

比如 VLA 输出:

\ \\Delta x=1cm \\

之后可能发生:

复制代码
末端向右移动 1 cm
        ↓
计算新的末端目标位置
        ↓
逆运动学 IK
        ↓
目标关节位置
        ↓
轨迹规划 / 插值
        ↓
关节控制器
        ↓
电机驱动器
        ↓
电机转动

所以:

VLA 决定"做什么动作",底层控制系统负责"怎样让电机把这个动作执行出来"。

这是一个非常关键的层级关系。


14. 一个特别重要的分层

可以把整个机器人系统粗略分成三层。

第一层:决策 / Policy

回答:

我现在应该干什么?

例如:

复制代码
夹爪向杯子靠近

第二层:运动 / Control

回答:

为了让夹爪这样运动,各个关节应该怎么动?

例如:

复制代码
Joint 1 → 0.31 rad
Joint 2 → -0.72 rad
Joint 3 → 1.14 rad
...

第三层:Motor

回答:

为了让关节真的运动,电机应该输出什么?

例如:

复制代码
位置环
速度环
电流环
PWM
脉冲

所以不能把:

复制代码
VLA Action

直接等同于:

复制代码
Motor Command

15. 用一个完整例子走一遍

现在假设任务是:

把红色方块放进盒子。


第一步:Vision

Camera 拍到:

复制代码
红色方块
盒子
机械臂末端
桌面

得到:

\ I_t \\


第二步:Language

语言:

复制代码
Put the red block into the box.

经过 tokenizer 和语言编码,得到语言信息:

\ l \\


第三步:Robot State

机器人当前知道:

\ s_t \\

里面可能包含:

复制代码
Joint Position
Gripper State

第四步:Policy

输入:

\ (I_t,s_t,l) \\

经过 Policy:

\ a_t=\\pi(I_t,s_t,l) \\


第五步:Action

假设输出:

复制代码
末端向前移动 2 cm
末端向左移动 1 cm
夹爪保持打开

也就是:

\ a_t \\


第六步:机器人控制系统

Action 被转换为:

复制代码
目标末端姿态
 ↓
IK
 ↓
目标关节位置
 ↓
控制器
 ↓
电机

机械臂真的移动一点。


16. 然后是不是结束了?

不是。

机器人运动之后:

世界已经变了。

于是下一时刻重新拍图:

\ I_{t+1} \\

同时机器人状态也变成:

\ s_{t+1} \\

然后再运行:

\ a_{t+1} = \\pi(I_{t+1},s_{t+1},l) \\

所以实际运行往往是一个循环:

复制代码
Observe
 ↓
Policy
 ↓
Action
 ↓
Execute
 ↓
Observe Again
 ↓
Policy
 ↓
Action
 ↓
...

这就是非常重要的:

闭环执行思想。


17. 为什么机器人需要不断重新观察?

想象你闭着眼睛抓杯子。

你提前规划:

复制代码
手向前 30 cm
向右 5 cm
手指闭合

然后从头到尾不再看。

只要:

  • 杯子位置偏了;
  • 手的位置偏了;
  • 桌子碰了一下;
  • 前面的动作有一点误差;

最后就可能抓空。

因此 Robot Policy 很重要的一件事是:

机器人执行动作之后,可以重新观察环境,再决定下一步。

后面我们学习:

  • Action Chunking;
  • Receding Horizon;
  • Diffusion Policy;
  • VLA 推理循环;

都会重新遇到这个思想。


18. VLA 和传统机器人到底是什么关系?

这是第三个特别容易误解的问题。

有些宣传容易让人产生一种感觉:

有了 VLA,以前机器人学全部不要了。

这是错误的理解。


传统机器人系统

传统机器人通常可能采用:

复制代码
Camera
 ↓
Object Detection
 ↓
Pose Estimation
 ↓
Task Planning
 ↓
Motion Planning
 ↓
IK
 ↓
Trajectory
 ↓
Controller
 ↓
Motor

每个模块职责比较明确。

例如:

视觉模块:

杯子坐标在这里。

规划模块:

先移动到杯子上方。

IK:

对应哪些关节角?

Controller:

怎么让关节稳定运动过去?


19. VLA 做了什么改变?

VLA 希望学习:

复制代码
Vision
+
Language
+
Robot State
 ↓
Policy
 ↓
Action

也就是说,一部分原来需要人工设计规则、视觉算法、任务逻辑的过程,可以由学习模型完成。

例如过去可能需要:

复制代码
if object == red_block:
    locate(red_block)
    plan_grasp()
    move_to(...)

而学习型 Policy 则希望从 demonstration 中学习:

\ \\text{Observation} \\rightarrow \\text{Action} \\


但是后面的:

复制代码
Safety
Control
Motor Driver
Motor

仍然存在。

所以更准确的理解是:

VLA 并不是把整个机器人控制系统替掉,而是把视觉、语言理解和机器人行为决策连接起来。


20. VLA 和 VLM 最大区别是什么?

你以后还会学 VLM。

VLM:

Vision-Language Model

例如输入:

复制代码
图片
+
问题

输出:

复制代码
文本

例如:

复制代码
图片:桌上有一个红色方块
问题:桌上有什么?

输出:

There is a red block.

它完成的是:

\ Vision + Language \\rightarrow Language \\


VLA 则更强调:

\ Vision + Language \\rightarrow Action \\

例如:

复制代码
图片
+
"拿起红色方块"
 ↓
机器人动作

所以关键区别在最后一个字母:

L

Language

vs

A

Action

VLA 最终必须和行为联系起来。


21. 一个很重要的认识:Action 不是唯一标准形式

VLA 并没有规定:

所有模型必须输出同一种 Action。

完全不是。

不同方法可能输出:

复制代码
Joint Position
Joint Delta
Joint Velocity
End-Effector Pose
Delta End-Effector Pose
Action Chunk
Discrete Action Token
Continuous Action

以后我们阅读任何模型,都必须先问:

这个模型的 Action 到底是什么?

这是后续读论文时非常重要的习惯。


22. 再区分两个非常容易混淆的词

State

理论上描述系统真正状态。

例如:

复制代码
物体真实 3D 坐标
真实速度
真实机器人姿态

Observation

机器人实际能够测到的东西。

例如:

复制代码
RGB 图像
深度图
关节编码器
夹爪状态

现实机器人里经常不能直接获得完整 State。

所以 Policy 通常更准确地写成:

\ a_t=\\pi(o_t) \\

而不是默认:

\ a_t=\\pi(s_t) \\

在强化学习里我们以后还会专门讲 State 和 Observation 的区别。


23. 把今天所有东西压缩成一张图

现在应该建立下面这个脑图:

复制代码
                    Language
                       │
                       │
Camera ──────→ Observation
                       │
Robot Sensors ─→ Robot State
                       │
                       ▼
                    Policy
                       │
                       ▼
                    Action
                       │
                       ▼
               Action Adapter
                       │
                       ▼
               Robot Controller
                       │
                       ▼
                Motor Command
                       │
                       ▼
                     Robot
                       │
                       ▼
                  Environment
                       │
                       └────→ Camera

注意这是一个循环。

不是:

复制代码
Input → Model → Output

之后就结束。

而是:

\ o_t \\rightarrow a_t \\rightarrow o_{t+1} \\rightarrow a_{t+1} \\rightarrow\\cdots \\


24. 今天真正应该记住的 7 句话

① Observation

机器人通过传感器实际获得的信息。

② Robot State

机器人自身状态,例如关节位置、夹爪状态等。

③ Language

描述当前任务目标。

④ Policy

根据 Observation 和任务生成 Action。

\ a_t=\\pi(o_t,l) \\

⑤ Action

Policy 输出的机器人行为表示。

⑥ Action ≠ Motor Command

中间通常还有运动学、轨迹、控制器、驱动器等环节。

⑦ VLA 不等于替代传统机器人控制

它主要负责:

感知 + 语言理解 + 行为决策

底层机器人控制依然非常重要。


25. 第一课自测

先不要查答案,看看现在能不能自己解释下面 6 个问题。

1. 为什么相机图像属于 Observation,但 Observation 不等于相机图像?

2. Robot State 和相机图像有什么区别?

3. 下面这个公式每一项是什么意思?

\ a_t=\\pi(I_t,s_t,l) \\

4. 如果 Policy 输出"末端向右移动 2 cm",为什么不能直接把它发给电机?

5. VLA 和普通 VLM 最核心的输出区别是什么?

6. 为什么真实机器人往往需要执行 Action 后重新获取 Observation,而不是一次生成所有动作然后盲目执行?

相关推荐
鲲穹AI种草3 小时前
AI 壁纸生成工具怎么选?鲲穹 AI 壁纸工具功能实测与横向对比
人工智能·壁纸生成工具
科技林总3 小时前
向量与重排模型
人工智能
楚楚2513 小时前
2026企业AI办公工具选型指南:落地评估与效果衡量体系
大数据·人工智能
小马9263 小时前
2026年9月30日热点速览:AI智能体大战升级、房贷贴息新政落地、硬科技多点突破
人工智能·科技·chatgpt
2601_962885723 小时前
如何用 Python 自动识别股票的支撑位与压力位?
开发语言·python
SPFFC189380330533 小时前
旋翼式水表工作原理智能水表工作原理
人工智能·显示器·智能手表·平板·大屏端
stormzhangV3 小时前
A 社为什么反超了
人工智能·ai编程·claude
北冥有鱼被烹3 小时前
VCSEL全景解析:与光模块NPO CPO的关系、市场量化分析与产业链影响
python
库拉镜像AI牛牛4 小时前
工作室标准化出片体系:知漫剧小说转漫剧落地应用
人工智能