本章摘要: 本章标志着我们从“比特世界”正式跨入“原子世界”。具身智能(Embodied AI)不仅仅是给 ChatGPT 装上摄像头,它要求模型理解物理规律、空间几何以及自身形态。我们将深入剖析 Vision-Language-Action (VLA) 模型的架构,探讨如何将连续的物理动作“Token 化”,如何通过“动作分块”解决推理延迟问题,以及如何构建一个“仿真-现实”闭环的开发管线。 学习目标:
- 架构理解:掌握 VLA 模型(如 RT-2, Octo)如何将图像和语言联合解码为控制信号。
- 动作设计:学会设计动作空间(Action Space),理解末端位姿(EE Pose)与关节空间(Joint Space)的权衡。
- 工程落地:掌握 Sim2Real(仿真到现实)的关键技术:域随机化与动作分块(Chunking)。
- 安全护栏:设计独立于 AI 模型的安全拦截层。
在具身场景中,Agent 的输出不再是单纯的信息,而是对物理状态的干预。这引入了全新的挑战:不可逆性、实时性要求和物理约束。
具身任务通常按照认知复杂度分层:
Pick(obj) / Place(loc) / Push(obj, dir)现代具身 Agent 普遍采用端到端 Transformer 架构。
[Multi-modal Input Stream]
|
v
+---------------------------------------------------------------+
| Vision Encoder (e.g., ViT, SigLIP) |
| -> Extracts visual patches (Obs_t, Obs_t-1...) |
+---------------------------------------------------------------+
| |
v (Visual Tokens) v (Text Tokens)
+---------------------------------------------------------------+
| Large Language Backbone (e.g., PaLM, Llama, Qwen) |
| [System Prompt] [User Instr] [Img_History] [Img_Curr] |
| |
| Attention Mechanism fuses Vision & Language contexts |
+---------------------------------------------------------------+
|
v (Autoregressive Decoding)
+---------------------------------------------------------------+
| Output Token Stream: |
| "I will pick up the apple." <ACT_X_128> <ACT_Y_050> ... |
+---------------------------------------------------------------+
|
v (De-tokenization)
[Robot Controller] -> Execute Action
大语言模型擅长处理离散符号,而机器人控制需要连续数值。如何桥接这两者是 VLA 设计的核心。
| 层级 | 空间类型 | 定义 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|---|
| High | 语义原语 | Pick(Apple), GoTo(Kitchen) |
模型极易学习,推理步数少 | 严重依赖底层算法的鲁棒性 | 移动机器人、简单抓 |
| Mid | 笛卡尔空间 (EE Pose) | 直观,符合人类空间直觉,易于泛化 | 需要逆运动学 (IK) 解算,可能遇到奇异点 | 机械臂操作 (VLA 主流) | |
| Low | 关节空间 (Joint Space) | 机器人直接执行,无 IK 错误 | 非线性极强,数据量大,难以跨机型复用 | 极其精细的操作、柔性体控制 |
Rule of Thumb (经验法则) 对于通用 VLA Agent,首选“末端执行器 (End-Effector) 的 Delta Pose”。
- Delta: 输出相对当前位置的增量(如前移 1cm),比绝对坐标更容易学习。
- EE Pose: 使得模型与具体机械臂构型解耦(6轴和7轴机械臂可以在同一笛卡尔空间训练)。
为了让 Transformer 像预测下一个单词一样预测动作,我们需要将连续的动作数值离散化为 Token。
192 Token <ACT_192>。<X_token> <Y_token> <Z_token> ... <Gripper_token>。VLA 模型推理一次可能需要 200ms~500ms,而机器人控制通常需要 10ms~20ms 的响应周期。如果每推理一次只走一步,机器人会像树懒一样慢且卡顿。
解决方案:Action Chunking (如 ACT 算法) 模型一次推理预测未来 步的动作序列(一个 Chunk)。
模型需要学会“什么样的视觉特征对应什么样的动作”。
AI 模型通常在相机坐标系或图像像素空间工作,而机器人需要在基座坐标系 (Base Frame) 运动。
其中 由像素坐标 和深度 反投影得到:
常见坑点:Eye-in-Hand (眼在手上) vs Eye-to-Hand (眼在手外)。
- Eye-in-Hand: 相机装在机械臂末端。 是动态变化的(随机械臂运动而变),必须实时读取正向运动学数据来计算外参。
- Eye-to-Hand: 相机固定在三脚架上。 是静态常量,但在标定时极其容易出错。
在现实世界采集 100 万条器人轨迹是不可能的(昂贵、磨损、不安全)。我们必须依赖仿真。
为了防止模型“过拟合”到仿真的完美环境,我们需要在训练时疯狂地加入随机噪声。
| 类型 | 随机化参数 | 目的 |
|---|---|---|
| 视觉随机化 | 光照、纹理、背景图、相机位置微扰、噪点 | 让模型学会忽略颜色,关注几何形状 |
| 动力学随机化 | 物体质量、摩擦系数、阻尼、电机扭矩增益 | 让策略能够适应现实中未知的物理参数 |
| 系统随机化 | 通信延迟、传感器丢帧、控制频率抖动 | 增强系统鲁棒性 |
最有效的策略不是纯仿真,而是“大规模仿真数据 + 少量现实微调数据”。
具身 Agent 的输出来自概率模型,存在“幻觉”风险。在物理世界,幻觉 = 事故。 必须构建一个确定性的安全层 (Deterministic Safety Layer)。
[ VLA Model Output ]
| (Proposed Action)
v
+-----------------------------+
| Safety Filter |
| 1. Kinematic Checks (IK) | -> Is target reachable?
| 2. Workspace Bounds | -> Is it hitting the table?
| 3. Self-Collision | -> Will it hit itself?
| 4. Force/Torque Limits | -> Is the push too hard?
+-----------------------------+
| (Approved / Clamped / Rejected)
v
[ Robot Hardware ]
Rule of Thumb: 安全层的代码行数可能比模型训练代码多。如果是移动底盘,必须有独立的硬件急停(E-stop)按钮。
Q1: VLA 输入构建 构建一个用于“整理桌面”任务的 VLA 模型输入 Prompt 结构。不仅要包含图像,还要包含历史信息。
Hint: 机器人动作具有连贯性,单帧图像无法推断速度和加速度。
Q2: 动作空间选择 你需要训练一个机器人拧开瓶盖。你会选择“笛卡尔空间位姿控制”还是“关节阻抗控制”?为什么?
Hint: 拧瓶盖涉及螺旋运动和接触力。
Q3: 设计 Sim2Real 视觉对齐实验 在仿真中,苹果是完美的红色球体。在现实中,苹果有斑点、光泽,且光照条件复杂。设计一个数据处理流程,使得在仿真训练的模型能识别现实中的苹果。
Hint: 除了域随机化,还能如何让输入图像在“特征空间”上更接近?
Q4: 解决“死锁”与“重复动作” VLA 模型常见的一个 Bug 是陷入死循环:机械臂伸过去抓物体,没抓到,缩回来,再伸过去,一直重复。请设计一种机制来检测并打破这种死锁。
Hint: 仅靠视觉很难判断“没抓到”。需要什么反馈?
Q5: 具身智能的“ImageNet 时刻” 目前的具身数据主要来自各个实验室不同的机器人(Franka, UR5, Tiago 等)。这些数据互不兼容(不同的手臂长度、关节定义)。如何利用这些异构数据训练一个通用的 “Generalist Robot Policy”?
Hint: 思考如何将不同机器人的动作归一化。
鬼影:透明物体(玻璃杯)、高反光物体(金属)会产生错误的深度读数。