为什么要让机器人接上大模型
传统机器人的能力是「写死」的:抓取有抓取的代码,堆叠有堆叠的代码,换一个任务就要重新标定、重新编程、重新调试。这种方式的稳定性和精度都很高,但几乎没有泛化能力——面对没有预先定义过的物体或指令,机器人只能停下。
大模型改变的正是接口层。语言模型可以把「把桌上的红色积木放进盒子」这类自然语言指令,拆解成导航、抓取、放置等技能序列;视觉语言模型能理解场景语义,判断哪个是红色积木、哪个是盒子。于是机器人不再需要为每个任务写一套程序,而是从一个可泛化的策略出发,按指令现场组合技能。
大模型给机器人带来的是任务接口的通用化:语言负责表达意图,视觉负责理解场景,动作模型负责把意图落到关节上。
- VLA 模型把视觉、语言与动作放进同一个网络,输入图像与指令,直接输出动作。
- 操作大模型面向机器人操作任务训练的策略模型,关注接触与精细动作。
- 动作空间关节空间、任务空间与末端位姿增量,选择它决定模型输出什么。
- 协同架构慢思考的大模型负责规划,快执行的 VLA 与控制器负责实时动作。
VLA 模型:把图像、语言与动作统一
VLA 是视觉-语言-动作(Vision-Language-Action)的缩写。它的核心主张很直接:不要再把感知、理解与执行拆成三个互不相干的模块,而是用一个模型同时吃进图像与语言,直接吐出动作。图像与文本被编码成同一组特征,动作则被切成离散的 token 或连续的动作块,与它们一起放进序列中解码。
这样做的好处是跨模态对齐:模型在训练中看到的每一次「看到什么、听到什么、做了什么」都被放在同一条样本里,语言里的「红色」与图像里的红色区域、动作里的对应轨迹会在特征空间里自然靠近。坏处是对数据要求高,而且动作的精度受离散化粒度影响。
# VLA 模型的推理流程
frames = camera.capture() # 当前与历史的相机观测
instruction = "把红色积木放进盒子" # 人类用自然语言下达的任务
vision = vision_encoder(frames) # 视觉编码:图像变成特征序列
text = language_encoder(instruction) # 语言编码:指令变成语义特征
tokens = fuse(vision, text) # 跨模态融合:对齐视觉与语言
actions = action_decoder(tokens) # 动作解码:输出一段动作序列
robot.execute(actions) # 在真机上执行,并观察执行结果
实际系统里,动作通常不是一帧一帧输出的,而是一次性预测未来若干步的动作块,再交给控制器平滑执行。这样既降低了推理频率的压力,也减少了动作抖动,是当前 VLA 落地时最常见的一个工程选择。
操作大模型与动作空间
动作空间是 VLA 设计里最先要做的决定,因为它决定了模型输出的物理含义,也决定了控制器如何接手。常见的有三种表示:
| 动作表示 | 含义 | 优点 | 局限 |
|---|---|---|---|
| 关节位置 | 直接输出各关节的目标角度 | 与控制层衔接直接,不依赖运动学求解 | 不同构型不通用,泛化到新本体困难 |
| 末端位姿增量 | 输出末端执行器的平移与旋转增量 | 跨本体可迁移,语义直观 | 需要逆运动学求解,奇异点附近不稳定 |
| 动作 token | 把动作离散成词表里的符号 | 可与语言模型共用解码结构 | 精度受离散粒度限制,需要量化处理 |
面向操作任务训练的策略模型,通常称为操作大模型。它和通用视觉语言模型的最大差别在于数据:通用模型见过的是海量图文,操作模型见过的必须是「动作」——遥操作演示、人类视频里的手部动作、仿真里生成的轨迹。这些数据的采集成本高、标注难度大,也直接决定了模型能做到多精细。
- 先看本体本体固定、追求精度时用关节位置;需要跨本体复用时优先末端位姿增量。
- 再看数据已有大量遥操作关节数据时,硬换动作空间会浪费数据价值。
- 留好接口无论选哪种,都在模型与控制器之间留一层统一的目标描述。
具身智能体与大模型的协同架构
把大模型直接接到机器人的关节上并不可行:语言模型一次推理可能要几百毫秒,而控制回路需要每秒上百次刷新。因此主流做法是分层协同,通常被概括为「慢思考 + 快执行」:大模型在慢环路负责任务理解与技能规划,VLA 策略或控制器在快环路负责把技能变成具体动作。
两层之间靠一份结构化的「技能清单」交接。上层输出的是可解释的技能序列与参数,下层只关心如何执行。这种设计还带来一个额外好处:技能层可以单独测试,规划出错和执行出错能被清楚地区分开。
# 具身智能体与大模型的协同消息结构
planner:
model: large_language_model
input: natural_language_instruction
output: skill_sequence
skills:
- name: navigate_to
target: table_front
- name: pick_object
object: red_block
- name: place_object
target: box_inside
executor:
model: vla_policy
frequency_hz: 10
action_chunk: 16
observation: [rgb_front, wrist_camera, joint_state]
safety:
max_torque: 40.0
collision_check: true
这份结构里,action_chunk 与 frequency_hz 是两个关键工程参数:前者决定一次推理要覆盖多少步动作,后者决定策略的刷新频率。两者相乘决定了模型单次推理必须覆盖多长的时间窗口,也决定了它对延迟的容忍度。
VLA 训练流程与数据构成
VLA 的训练通常分两步走。第一步是大规模预训练:用海量的机器人演示、人类视频与仿真数据,让模型建立视觉、语言与动作之间的通用对应关系;第二步是目标任务微调:用相对少量但高质量的场景数据,把模型对齐到具体本体与具体任务上。
数据构成是这一路线最现实的门槛。遥操作演示的动作标签最可靠,但采集最慢;人类视频数量充足,却只有观测没有动作,需要额外的对齐处理;仿真数据可以大批量生成,但存在仿真与真机的分布差距。三者通常是按比例混合使用。
# 训练阶段与数据配比设置
stage_pretrain:
dataset: robot_demonstration_large
episodes: 120000
batch_size: 256
learning_rate: 0.0001
stage_finetune:
dataset: tabletop_pick_mixed
episodes: 8000
batch_size: 64
learning_rate: 0.00002
data_mix:
teleoperation: 0.5 # 遥操作演示,动作标签最可靠
human_video: 0.3 # 人类视频,只有观测没有动作
simulation: 0.2 # 仿真数据,可大批量生成
微调阶段的学习率通常比预训练低一个量级,目的是在不破坏通用表征的前提下适配新任务。除此之外还有两个容易被忽视的细节:一是不同来源数据的动作频率不一致,必须先统一到同一时间基准;二是相机参数与坐标系差异会直接污染动作标签,标定工作必须在训练前完成。
评测基准与常见问题
VLA 类模型的评测比纯语言模型困难得多,因为同一句指令在不同初始状态下的成功与否,取决于环境而不是文本。实践中最常见的问题集中在以下几类:
- 只看平均成功率:平均分掩盖了长尾失败,需要按物体类别、初始位姿分组统计。
- 忽略执行次数:不记录每次尝试的步数与耗时,就无法区分「稳」和「蒙对」。
- 评测场景泄漏:训练时出现过的物体与场景会让指标虚高,评测集必须真正隔离。
- 语言泛化被高估:换一种说法指令就失败,说明模型记住的是模板而不是语义。
- 延迟未纳入指标:推理延迟过高的模型在真机上无法闭环,离线指标再好也没意义。
建议的评测做法是:固定一组标准化场景,每种场景重复多次并记录成功率和耗时,同时单独构造「同义指令」与「新物体」两个子集,用来分别检验语言泛化与视觉泛化。这样得到的结论才有区分度。
落地路径与展望
把一个 VLA 系统从论文做到能用的产品,通常要按下面的顺序推进:
- 先定动作空间:根据本体与已有数据确定输出形式,这一步会锁定后续的控制器与数据采集方案。
- 搭评测台:在训练前就把评测场景、重复次数与成功判据定好,避免最后被指标牵着走。
- 小规模跑通:用一个受限场景验证「语言指令到动作」的端到端链路,先求通再求好。
- 补数据短板:按失败类型定向补采遥操作数据,而不是无差别扩大数据量。
- 加安全约束:力矩上限、碰撞检测与人工接管通道必须在发出第一版之前就位。
从趋势看,机器人与大模型的结合正在从「用语言模型做规划」走向「一个模型端到端处理视觉、语言与动作」。但无论架构如何变化,衡量标准始终没有变:能不能在真实环境里稳定完成任务、能不能在没见过的场景下保持可用、能不能把失败控制在安全范围内。
大模型给了机器人通用的大脑,但真正决定产品能否落地的,仍然是数据、延迟与安全这三件工程上的事。