欢迎光临
我们一直在努力

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,而不是一次生成所有动作然后盲目执行?

赞(0)
未经允许不得转载:171主机测评 » VLA 系统学习第 1 课:VLA 到底在干什么?
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址