世界模型与具身智能 World Models & Embodied AI
如果说 2023–2025 年是让模型「会说话」,2026 年则是在往「会在物理世界里行动」推进。世界模型的目标是让智能体在采取行动前先在内部「想象」后果;VLA 模型则把感知、推理、行动压缩进一个端到端网络。这是把大模型的经验迁移到物理世界的战场,也是资本与人才最集中的方向之一。本阶段标记为「按需 / 可跳过」:它的深度目标是建立判断力与理解原理,而不是让你去从零训练一个机器人基础模型——除非你要直接进入机器人 / 自动驾驶方向。
阶段总览
- 能说清世界模型与 LLM 的本质区别:预测下一个 token vs 预测下一个状态 / 画面
- 理解世界模型的三种用途(预测 / 规划 / 仿真)以及为什么 2026 年它重新变重要
- 掌握三大代表路线(Genie 3 自回归帧预测、Dreamer 潜空间想象、JEPA 联合嵌入预测)的差异与取舍
- 理解 VLA 的三段式架构(视觉编码 + LLM 主干 + 动作头)与端到端取代模块化的原因
- 熟悉代表工作 RT-1/RT-2、OpenVLA、π0/π0.5、Gemini Robotics,以及动作表示(离散 token vs 连续 flow matching)的权衡
- 理解动作频率与控制系统回路:推理延迟必须低于控制周期,否则系统失稳
- 了解机器人数据来源、仿真环境、sim2real 差距来源与域随机化
- 能看懂 LIBERO / SimplerEnv / 真实机器人成功率等基准,判断一个具身场景的真实可行性
- 明确「什么情况值得投入、什么情况理解原理即可」的判断标准
| 周次 | 主题 | 交付物 |
|---|---|---|
| 第 1 周 | 世界模型概念、与 LLM 关系、三用途、代表路线 | 对比报告:Genie 3 / Dreamer / JEPA 路线差异 |
| 第 2 周 | VLA 架构、代表工作、动作表示、控制回路 | 读 π0 / π0.5 / OpenVLA 并画结构图 |
| 第 3 周 | 数据、仿真环境、sim2real 与域随机化 | 机器人数据来源与采集成本分析 |
| 第 4 周 | 评测基准、泛化维度、2026 现状与决策判断 | 一份具身场景可行性评估报告 |
| 第 5–6 周 | 仿真中的决策 Agent(M12,可跳过) | 在仿真环境里跑通感知-规划-执行的闭环 |
1. 世界模型:让 AI 学会“想象后果”
学习路径
- 读 1.1:对照「下一 token vs 下一状态」判据表,写下你的可干预性判断
- 跑内置代码:对比两个预测目标的输出,观察潜表示 vs 逐像素的空间差异
- 完成自测:用 1.6 判据核对「动作条件化」「反事实预测」理解
- 对接 M12:在仿真环境里给 planner 加世界模型误差观测,对比带与不带干预的规划
核心知识点详解
- 动作条件化是分界线:判据只有一条:能否被动作驱动。对同一初始状态 s0 施加动作 a1 / a2 必须得到不同下一状态;若输出与动作无关,它就只是视频生成器、不配做规划。对应代码:
np.linalg.lstsq(X, Y)拟合的动力学输入含 a,才可回答「推它一下会怎样」、才能反事实。 - 潜表示 vs 逐像素:预测不必重建像素。Dreamer 在 512 维潜状态做动力学转移(
p(s_t | s_{t-1}, a_{t-1})),JEPA 在抽象表征空间预测下一表示;而逐帧生成输出4096 token/帧,同视界 H=50 时量级是潜空间的 8 倍(4096×50 / 512×50)。潜在空间省算力且更可控,适合闭环规划。 - 反事实预测是硬指标:能否回答「如果当时推它一把会怎样」决定能否用于规划与安全撤销。做法:把输入里的动作 a 去掉重训一次——MAE 可能不变,但模型退化为「同一状态只会给同一输出」,反事实能力归零。用「删动作对照」最直观地验证是否真·动作条件化。
- 常见坑:把能生成连贯视频的模型误判成世界模型。演示只证明预测能力,不证明可控性;要能输出动作条件化、且被测动作改变时输出确定性改变,否则规划会沿错误方向优化。
学习路径
- 读 1.2:梳理预测 / 规划 / 仿真三种用途,记下模拟使用率 <1% 的含义
- 跑内置代码:运行 latent rollout 规划小例,对比想象轨迹与真实走位的误差
- 完成自测:能区分「数据工厂」「安全校验否决」在什么场景该用
- 对接 M12:为仿真 env 实现 receding-horizon planner,用量化误差触发失败重规划
核心知识点详解
- 三用途分线:同一模型有预测(模拟相机)、规划(内部沙盘)、仿真(数据工厂)三种用法,产出与失败模式完全不同。判据:预测要可见,规划要可控,仿真要分布可信。一句话:预测强≠规划强(不可控没用),规划强≠仿真可用(数据偏分布迁移必失败)。
- latent rollout 规划:在潜空间反复 rollout 候选动作序列,用折扣回报
gamma**t加权求和后取 argmax(示例gamma=0.9, H=5得想象回报[-4.095, -3.978, -4.212]选第二组)。一次规划只花 H 次前向,真机试 5 步要几十秒+硬件损耗——这是 model-based RL 的样本效率来源。 - 模拟使用率 <1% 的结论:2026 年研究发现:拥有模拟能力的 Agent,其模拟使用时间占比不足 1%、误用预测轨迹比例约 15%,某实验中引入模拟反而使性能下降最多 5%。难点不只是造更好模型,更是让 Agent 知道何时该用模型、怎么用对预测。
- 常见坑:拿「预测强」直接当「仿真可用」:直接让世界模型合成训练数据而不做物理合理性校验,策略学到假规律,sim-to-real 整体失效。三用途必须分开评估、各设校验。
学习路径
- 读 1.3:对比 Genie 3 / Dreamer / JEPA 的建模空间与训练 loss 差异
- 跑内置代码:跑一帧近似示例,观察帧自回归 vs 潜空间想象在分辨率与跳变上的差别
- 完成自测:能说出三条路线各自 trade-off(精度 / 速度 / 可控性)
- 对接 M12:为仿真 env 选用一种世界模型假设并在规划里验证误差口径
核心知识点详解
- 三条路线的本质分歧:分歧在「预测发生在哪个空间」。Genie 3 在像素 / 隐空间帧自回归(约 24fps / 720p 可实时导航,物理规律隐式学到);Dreamer 在潜变量状态空间做动力学预测(latent imagination);JEPA 在抽象表征空间预测下一表示而不渲染像素。选空间的本质是选「保真 vs 算力 vs 可控」的取舍点。
- 预测空间决定成本量级:同视界下,帧预测需生成
4096 token/帧×H,潜空间只需512×H,量级比约 8 倍。高频闭环规划优先潜空间 / JEPA(省算力、可控性强);要可交互演示才选帧预测。这是选型的算力直觉(示例pixel=4096, latent=512)。 - 可交互性分层:Genie 3 / Dreamer 以动作条件可交互(导航 / RL rollout),JEPA 不生成、不可直接交互,强在表征学习与高效预测底座;Cosmos 走「推理 Transformer + 生成专家」组合,可同时吃文本 / 图像 / 视频 / 动作,面向机器人合成数据。
- 常见坑:默认「能生成视频 = 最好世界模型」。要做闭环规划选潜空间 / JEPA 更省算力,要可交互演示选帧预测,要造训练数据选生成类 + 物理校验——选错路线会让后续工程成本翻几倍。
学习路径
- 读 1.4:记下一致性 / 可控性 / 物理合理性三件套与长程漂移量法
- 跑内置代码:用跳变率与 Physics-IQ 给一个世界模型打分并读失败模式
- 完成自测:核对「泛化到未见动作」该用什么维度测
- 对接 M12:在长程任务上记录误差-步数曲线,标注漂移拐点并对比缓解手段
核心知识点详解
- 四维指标分开测:一致性(物体不凭空跳变 / 消失)、可控性(同动作稳定复现)、物理合理性(符合重力 / 碰撞 / 因果)、长程漂移(长 rollout 不崩溃 / 不重复 / 不静默)。核心代码:跳变率
(np.linalg.norm(diff) > thresh).mean()、轨迹误差np.linalg.norm(pred - gt, axis=1).mean()。必须分开测,不能只看画面好看。 - 长程漂移量化:漂移是误差随步数的累积。做法:画误差-步数曲线找漂移拐点(chips 示例梯度:信息每步失真放大)。逐帧自回归长程一致性差,潜空间 / JEPA 通过压缩表示抑制像素级误差膨胀——缓解手段按路线差异选。
- Physics-IQ 与可控性优先:多数 demo 一上量化就露馅;dm 真正可用的世界模型 可控性往往比画面质量更关键——规划器要的是「动作 A 必然得到状态 B」,而非「每次给个合理但不确的画面」。用动作-状态因果准确率、干预实验测。
- 常见坑:只主观打分画面。忽略「被干预后是否保持一致」,导致 demo 惊艳、上线即漂移;或拿跳变率 / 轨迹误差混作一个数掩盖真实分布差异。
学习路径
- 读 1.5:理解数据成本下降与长程规划回潮如何把世界模型推回前台
- 跑本章总览代码:确认哪些场景实时可交互、哪些仍受算力限制
- 完成自测:能举例说明一个「试错成本高」的落地场景并给出切入方式
- 对接 M12:把世界模型当作「仿真里先试错」的安全否决层接入决策闭环
核心知识点详解
- 四因素叠加回潮:视频生成跨越临界(Sora / Genie 3 可交互可导航)、VLA 需要可规模化数据、长程规划需求上升、算力与架构成熟(扩散 + Transformer 已能实时)。世界模型从「玩具」变成「可用工具」,这是 2026 回潮的驱动链。
- 数据成本的对比账:真实遥操作示范约 5–20 美元 / 条,训一个 VLA 需
need×real_traj_cost(示例200000×12= 240 万美元,还以月计);世界模型合成同规模算力成本降到几万美元量级。这就是「用世界模型造数据」的直接经济动因,但合成后必须过物理校验。 - 判断框架:是否该投入取决于「试错成本高 + 需要多步前瞻」。自动驾驶(试错可能出人命)、机器人(真实数据采集贵)天然契合;纯虚拟、试错便宜的场景,世界模型边际价值不大。
- 常见坑:合成数据不过物理合理性校验就进训练集——轨迹偏离真实分布,学到假规律,sim-to-real 时整体失效;或因演示亮眼而忽略了「一旦失败代价极高」的安全约束。
1.1 世界模型是什么:与 LLM 的关系
理解世界模型最好的起点,是把它和你已经熟悉的 LLM 放在同一张表里对比。LLM 训练目标是预测下一个 token,它建模的是「给定前文,下一个词是什么」;世界模型训练目标是预测下一个状态 / 下一帧画面,它建模的是「给定当前状态与某个动作,世界会变成什么样」。一句话:LLM 在语言的空间里做自回归,世界模型在物理 / 视觉的空间里做自回归。
| 维度 | LLM(下一 token) | 世界模型(下一状态) |
|---|---|---|
| 预测对象 | 离散 token 序列(词表约 10^5 量级) | 连续观测 / 状态(图像、物理量、点云) |
| 训练目标 | 最大似然预测下一个词 | 预测动作之后的未来状态或画面 |
| 能否被动作驱动 | 否(被动生成,动作不是输入) | 是(动作作为条件输入,可干预) |
| 主要用途 | 对话、写作、推理、编码 | 想象未来、在内部规划、合成训练数据 |
| 典型失败 | 幻觉、事实错误、推理不自洽 | 物理不一致、可控性差、长程漂移 |
| 可交互性 | 只能对话,不能改变环境 | 可作为可导航的交互式世界 |
一个常用的判别标准:如果你只能看,那是视频生成;如果你能干预并且结果会相应改变,那是世界模型。世界模型的核心不是画面逼真,而是「能够接受动作作为条件、预测行动之后世界的下一个状态」——也就是说,它从「渲染器」升级为「规划器」。注意:能生成视频不等于能规划,规划要求模型里显式地存在一个「动作 → 状态」的动力学。
python# 模型-based RL 的核心思想:用学到的世界模型在「想象」中做 rollout,
# 而不必在真实环境里一步一步试错——这正是世界模型相对 LLM 的关键价值。
import torch
class LatentWorldModel(torch.nn.Module):
"""Dreamer 风格:在潜空间里预测未来,而非逐像素生成。
关键组件:
表示模型 p(s_t | s_{t-1}, a_{t-1}, o_t) 把观测压成状态
动力学模型 q(s_t | s_{t-1}, a_{t-1}) 状态转移(不含观测)
奖励模型 r(s_t) 预测即时奖励
折扣因子 gamma(典型 0.99)"""
def __init__(self, dim_s=256, dim_a=8, gamma=0.99):
super().__init__()
self.dynamics = torch.nn.Sequential(
torch.nn.Linear(dim_s + dim_a, 512), torch.nn.ELU(),
torch.nn.Linear(512, dim_s))
self.reward = torch.nn.Linear(dim_s, 1)
self.gamma = gamma
def rollout(self, s0, actions, horizon=15):
"""从初始潜状态 s0 出发,按候选动作序列想象未来 horizon 步。
返回想象的奖励轨迹 —— 规划器用它挑选最优动作序列。"""
s, traj = s0, []
for a in actions: # actions: [horizon, dim_a]
s = self.dynamics(torch.cat([s, a], dim=-1))
traj.append(self.reward(s).item())
return traj # 长度 = horizon 的想象奖励
# 把想象轨迹按 gamma 折扣求和,即为该动作序列的期望回报
def imagined_return(wm, s0, actions):
r = wm.rollout(s0, actions, horizon=15)
returns = []
for t in range(len(r)):
tail = r[t:]
disc = [wm.gamma ** i for i in range(len(tail))]
returns.append(sum(x * d for x, d in zip(tail, disc)))
return max(returns) # 取想象中最优累计回报
python# 最小可运行的「世界模型」:一维质点动力学,学一个 action -> next_state 的动力学
# 目的:证明世界模型的核心是「动作条件化」,而不是画面逼真度。
import numpy as np
rng = np.random.default_rng(0)
def true_dynamics(s, a, dt=0.1, damp=0.1):
# s=[pos, vel];a=加速度;半隐式欧拉积分
pos, vel = s
vel = vel * (1 - damp) + a * dt
pos = pos + vel * dt
return np.array([pos, vel])
# 用「真实环境」采样 2000 条 (s, a, s_next),最小二乘拟合线性动力学 W
X, Y = [], []
for _ in range(2000):
s = rng.normal(0, 1, 2); a = rng.normal(0, 0.5)
X.append(np.r_[s, a]); Y.append(true_dynamics(s, a))
X, Y = np.array(X), np.array(Y)
W, *_ = np.linalg.lstsq(X, Y, rcond=None) # 学到的世界模型
print("MAE =", round(float(np.abs(X @ W - Y).mean()), 4))
# 预期输出:MAE ≈ 0.0005 —— 线性动力学下几乎完美拟合。
# 关键对比:若把动作 a 从输入去掉,模型对同一 s 只能给出同一个 s_next,
# 无法回答「推它一下会怎样」,也就不能规划。
# 世界模型与 LLM 的分界线正在于此:动作是输入,输出是「动作之后的世界」。
1.2 三种用途:预测 / 规划 / 仿真
同一个世界模型,在工程里通常被当作三种不同的工具使用。它们的产出不同、失败模式不同,落地时的考量也完全不同。
| 用途 | 做什么 | 代表方法 | 产出 | 局限 |
|---|---|---|---|---|
| 预测(想象未来) | 给定当前状态,生成未来若干帧 / 状态 | 视频扩散、Genie / Genie 3 | 未来画面或状态序列 | 长程易漂移、误差累积 |
| 规划(rollout) | 在模型内部试动作,挑选最优序列 | Dreamer、model-based RL | 最优动作序列 / 价值估计 | 模型误差会被当作真实,误导规划 |
| 仿真(生成数据) | 批量生成带标签的训练轨迹 | Cosmos、世界模型合成 | 机器人训练数据 | 需校验物理合理性,否则学到假规律 |
| 安全校验 | 在执行前预判结果,拦截危险动作 | 动作条件生成 + 规则 | 风险评分 / 否决 | 依赖模型对危险的可辨识度 |
python# 规划用途最小演示:用世界模型在「想象」里比较候选动作序列,再择优执行
gamma, H = 0.9, 5
def dyn(s, a): # 简化动力学:s=(pos, vel)
pos, vel = s
vel = vel * 0.9 + a * 0.1
return (pos + vel * 0.1, vel)
def imagine_return(s0, actions):
s, ret = s0, 0.0
for t, a in enumerate(actions):
s = dyn(s, a)
ret += (gamma ** t) * (-abs(s[0])) # 奖励:越靠近原点(pos=0)越好
return ret
cands = [[0.0]*H, [-0.5]*H, [0.5]*H] # 三条候选计划
print("想象回报:", [round(imagine_return((1.0, 0.0), c), 3) for c in cands])
# 预期输出:想象回报: [-4.095, -3.978, -4.212]
# argmax -> 第二组(持续 a=-0.5,把 pos 拉回原点),这就是 model-based 规划。
# 量级:一次规划只花 H=5 次前向;若在真机试 5 步,可能就要几十秒 + 硬件损耗。
# 现实提醒:世界模型不准时,规划会沿错误方向优化(误差不进真实世界,但决策会错)。
1.3 代表路线:Genie 3 / Dreamer / JEPA
2026 年世界模型领域三条主流路线,本质分歧在于「预测发生在哪个空间、是否可交互、训练数据要什么」。
| 路线 | 代表 | 预测空间 | 可交互 | 训练数据 | 最适用 |
|---|---|---|---|---|---|
| 自回归帧预测 | Genie / Genie 3 | 像素 / 隐空间帧 | 是(实时导航) | 游戏 / 视频 | 交互式环境、游戏仿真 |
| 潜空间想象 | Dreamer V3/V2 | 潜变量状态 | 是(RL rollout) | 像素观测 | 样本高效 RL、控制 |
| 联合嵌入预测 | JEPA / I-JEPA | 抽象表征 | 否(不生成) | 图像 / 视频自监督 | 表征学习、高效预测底座 |
| 推理 + 生成 | Cosmos | 多模态 token | 是(动作条件) | 文本/图像/视频/动作 | 合成数据、机器人训练 |
python# 三条路线的算力直觉:预测空间的「维度」决定单步预测的成本量级
pixel_tokens_per_frame = 4096 # 720p 经 patch 化后的近似 token 数/帧
latent_dim = 512 # 潜状态 / JEPA 表征维度
H = 50 # 规划视界
print("帧预测 rollout 输出 token:", pixel_tokens_per_frame * H) # 204800
print("潜空间 rollout 输出维度:", latent_dim * H) # 25600
print("量级比:", round(pixel_tokens_per_frame * H / (latent_dim * H), 1)) # 8.0
# 结论:同视界下帧预测的输出量级比潜空间大近一个数量级(此处 8x),
# 还要额外解码像素并维持长程一致性,成本更高;
# 因此高频闭环规划优先潜空间 / JEPA,要可交互演示才选帧预测。
# 提示:World Labs 的 Marble(2025 末)走的是「3D 一致场景生成」,
# 强调可编辑、可导出的三维世界而非逐帧 2D 视频,是帧预测之外的第三条产物形态。
1.4 世界模型的评测方式:一致性 / 可控性 / 物理合理性
世界模型不像分类任务有天然标签,评测必须拆成多个维度。2026 年社区逐渐形成的共识是:单看「画面好不好看」毫无意义,要看它作为「规划器 / 仿真器」是否可信。
| 指标 | 测什么 | 怎么测 | 常用做法 |
|---|---|---|---|
| 一致性 | 帧间物体身份 / 位置不跳变、不凭空出现消失 | 跟踪物体 ID 存活率、光流连贯性 | 一致性评分、Video consistency metric |
| 可控性 | 给定动作后状态按预期改变 | 动作-状态因果准确率、干预实验 | 固定动作序列看结果是否确定性变化 |
| 物理合理性 | 符合重力、碰撞、刚性与因果 | 物理规律违反计数(穿模、反重力) | Physics-IQ、物理推理基准 |
| 时序稳定性 | 长序列不崩溃、不重复、不静默 | 平均无故障步数、重复帧比例 | 长程 rollout 测试 |
| 泛化到未见动作 | 没见过的动作组合也能合理预测 | 留出动作组合做 OOD 测试 | 组合泛化基准 |
python# 世界模型评测的核心指标:一致性 / 可控性(用玩具轨迹演示)
import numpy as np
pred = np.array([[0,0],[1.0,0.1],[2.1,0.2],[3.3,0.25]]) # 预测轨迹 [T,2]
gt = np.array([[0,0],[1.0,0.0],[2.0,0.0],[3.0,0.0]]) # 真值轨迹
def jump_rate(pred, thresh=1.3):
d = np.linalg.norm(np.diff(pred, axis=0), axis=1) # 相邻帧位移
return float((d > thresh).mean()) # 跳变率,越低越好
def traj_error(pred, gt):
return float(np.linalg.norm(pred - gt, axis=1).mean()) # 同动作下与真值偏差
print("跳变率:", jump_rate(pred)) # 0.0(thresh=1.3,此例无跳变)
print("轨迹误差:", round(traj_error(pred, gt), 3)) # 0.179
# 一致性看「物体不凭空跳变 / 消失」,可控性看「给同一动作是否稳定复现」,
# 物理合理性看「是否违反重力 / 碰撞」。三者必须分开测,不能只看画面好看。
1.5 为什么 2026 年世界模型重新变重要
世界模型并不是新概念(2018 年的《World Models》论文就提出了),但它在这几年几起几落。2026 年它重新成为焦点,是四个因素叠加的结果。
| 驱动因素 | 说明 | 带来的效果 |
|---|---|---|
| 视频生成质量跨越临界点 | Sora / Genie 3 级别的画面已经可交互、可导航 | 世界模型从「玩具」变成「可用工具」 |
| VLA 需要可规模化的数据 | 真实机器人数据很贵,一条高质量示范可能要 5–20 美元 | 世界模型成为低成本「数据工厂」 |
| 长程规划需求上升 | 机器人与自动驾驶要提前想好几步,而非一步一动 | model-based 规划范式回潮 |
| 算力与架构成熟 | 扩散模型与 Transformer 已能实时运行 | 实时可交互世界在端侧 / 云端可行 |
python# 世界模型作为「数据工厂」的收益量化:为什么 2026 年它成为热点
real_traj_cost = 12 # 一条高质量真实遥操作示范约 5–20 美元,取 12
need = 200_000 # 训练一个 VLA 需要的数据量级
print("全真机采集成本(美元):", need * real_traj_cost) # 2400000
# 预期输出:2400000(约 240 万美元),且采集周期以月计。
# 换用世界模型合成同规模:算力成本约几万美元量级 + 物理校验,
# 这就是「用世界模型造数据」的直接经济动因。
# 但合成数据必须过物理合理性校验,否则学到假规律、迁移必失败。
1.6 动手练习与自测
- 用 1.1 的 lstsq 代码训练一维动力学世界模型;再把输入里的动作 a 去掉重训一次,比较 MAE 与「能否回答反事实问题」。
- 把 1.2 的想象规划改成 H=10、gamma=0.99,观察最优候选是否改变,并解释 gamma 越大越看重远期收益的机制。
- 给 1.4 的玩具轨迹手工构造一条「物体凭空跳变」的预测,验证跳变率指标能否从 0 升到 > 0。
- 一句话说明:预测能力强为什么不等价于规划能力强?
- Genie 3、Dreamer、JEPA 分别在什么空间做预测?各自最适合什么用途?
- 世界模型当「数据工厂」时,为什么必须先做物理合理性校验?
- 要做闭环高频规划,为什么潜空间 / JEPA 往往比逐帧生成更省算力?
| 题号 | 考点 | 关键判据 / 参考答案 |
|---|---|---|
| 1 | 动作条件化 | 含 a 的 MAE ≈ 0.0005;去掉 a 后同一状态预测唯一,无法做反事实与规划 |
| 2 | 折扣因子 | gamma=0.99 时远期奖励权重显著变大,最优候选可能从「立刻拉回」变为「先规划更远」 |
| 3 | 一致性指标 | 人为让某一帧位置跳变 > 阈值,跳变率由 0 升为 1/T |
| 4 | 预测 vs 规划 | 预测只要求逼真;规划要求「输入动作 A 必然得到状态 B」的确定性因果,不可控的生成模型不能当规划器 |
| 5 | 路线差异 | Genie 3 在像素/隐空间帧自回归、可交互导航;Dreamer 在潜变量状态空间做动力学,适合样本高效 RL 与控制;JEPA 在抽象表征空间预测、不生成 |
| 6 | 合成数据风险 | 合成轨迹若偏离真实物理分布,策略学到假规律,sim-to-real 时整体失效 |
| 7 | 算力量级 | 同视界下帧预测输出 token 量级比潜状态大近一个数量级(示例 4096×H vs 512×H),且需解码像素与维持一致性 |
2. VLA:端到端视觉-语言-动作模型
学习路径
- 读 2.1:拆解「视觉编码 + LLM 主干 + 动作头」三段及其数据流
- 跑内置代码:观察 action chunk 8–50 步与冻结主干 + 适配器的取舍
- 完成动手练习:用 2.6 自测核对三段式相对模块化流水线的优势
- 对接 M12:把 OBS 观测编码 + LLM 决策 + 动作头的同构管线用在自己仿真环境
核心知识点详解
- 三段数据流:视觉骨干(ViT / SigLIP)编码 OBS 观测 → LLM 语言骨干做跨模态决策 → 动作头(flow matching)输出动作。数据流:
image+text → emb → tokens → action。通常冻结主干 + 适配器,只训动作头,收敛快、算力省。 - action chunk 8–50 步:一次预测未来 8–50 步动作而非单步,降低执行频率、减轻单步抖动与误差累积。chunk 越长动作越稳、但实时性下降、对长视界预测误差更敏感——「 8–50 步」就是在这两者间取的点位,通常手势类 16–32 步。
- 端到端 vs 模块化:端到端把感知-规划-控制一起学,泛化从架构涌现(语言缩放律开始作用于物理世界),代价是数据 / 算力更大、动作头独立训练;模块化各模块误差逐级累积、接口人工设计、泛化受限。选型看数据量是否够撑端到端。
- 常见坑:把动作头接到冻结视觉骨干的输出,场景/本体一变就失效;或不冻结主干直接全量训练,小数据量下过拟合 + 算力爆炸。用
OBS → LLM → action head的最小闭环先验证数据流再铺开。
学习路径
- 读 2.2:纵向对比 RT-1 / RT-2 / OpenVLA / π0 的演进与代际差异
- 跑内置代码:用开源的 OpenVLA 权重跑一次零样本推理并观察失败样例
- 完成动手练习:判断哪种代表工作最适合自己的任务 / 算力约束
- 对接 M12:明确参考哪种代际路线来搭建自己的动作头与决策主干
核心知识点详解
- 代际演进脉络:RT-1 用离散动作 token(复用 LLM 自回归)跑通基础;RT-2 引入知识迁移(大模型预训练把语言 / 视觉知识带到机器人);OpenVLA 开源 7B 基线;π0 / π0.5 主打跨本体环泛化;Gemini Robotics 多模态进产品。演进主线是「能不能动 → 能不能泛化 → 跨本体落地」。
- 离散 token vs 连续头:RT-1 类离散 token 简单直接、直接吃 LLM 自回归,但量化误差、codebook 易崩塌,难以精确表达高维关节;π0 / π0.5 改用 flow matching 连续头,能建模多模态连续分布、动作更平滑,适合灵巧操作。工程常「粗动作离散 + 细动作连续」。
- 按算力选路线:有充足数据 / 算力走 π0 类 flow matching;只有开源权重做验证用 OpenVLA 7B(可下载零样本);要复用语言预训练知识走 RT-2 思路。个人无硬件跑仿真 + 开源即可,不必自训基础模型(成本千万级)。
- 常见坑:直接拿最新 7B VLA 线上推理当真机控制器:延迟高于控制周期、数据集分布不同导致 sim2real 失效。先跑 OpenVLA 零样本统计失败模式,再谈微调与动作头选型。
学习路径
- 读 2.3:抓住离散 token vs 连续 flow matching / 扩散头的量化差异
- 跑内置代码:比较离散量化误差与连续 flow matching 在多模态动作分布上的表现
- 完成动手练习:为你的动作空间选择表示方式并说明理由
- 对接 M12:在仿真动作头上实现「粗离散 + 细连续」并评估精度 / 平滑度
核心知识点详解
- 三种动作表示的取舍:离散 token:量化到 codebook(如成 8 / 16 个桶),可直接复用 LLM 自回归,但引入量化误差、codebook 易崩塌;连续回归:直接输出动作值,平滑但难表达多模态;flow matching / 扩散头:建模多模态连续分布、动作更平滑,代价是多步采样推理更慢。选型本质是精度 / 平滑 / 速度三角。
- 多模态动作分布是关键:同一观测常有多种合理动作(例:杯子可向左或向右抓)。连续回归求均值会把模态抹掉,flow matching 能建模分布本身——因此灵巧操作(7–20 维关节、多模态)优先用 flow matching / 扩散头。
- 粗离散 + 细连续混合:工程常用「粗动作离散 + 细动作连续」:粗分类(抓 / 放 / 用哪个手)用离散,关节坐标 / 力用连续头。兼顾可解释与精确,是 RT 系到 π0 系过渡的主流折中。
- 常见坑:低维动作非要用扩散 / flow 头,白白多花多步采样时间;或高维多模态动作用离散 token,量化误差导致轨迹抖动、末端精度不足。先量动作空间维度与多模态程度再定表示。
学习路径
- 读 2.4:理解推理延迟必须小于控制周期,否则模型不可闭环
- 跑内置代码:量一次某推断路径的端到端延迟并判断能否满足 10Hz
- 完成动手练习:设计双频解耦(快控制 + 慢规划)并做亚毫秒反射层兜底
- 对接 M12:在仿真 agent 里做「慢规划 + 快执行」解耦并记录稳定回环
核心知识点详解
- 推理延迟 < 控制周期是铁律:模型必须在控制周期内返回动作,否则系统失稳。10Hz 控制 → 周期 100ms;若模型 forward 80ms 勉强可压线,若 200ms 就完全不可闭环。先实测端到端延迟:
t0=time.time(); act=model(obs); dt=time.time()-t0,再判断能否满足目标频率。 - 双频解耦:标准解法是慢规划 + 快执行:大模型 1–5 Hz 定目标 / 轨迹,轻量策略 50–200+ Hz 做高频控制与平衡。10ms 控制周期的机械臂绝不等 80ms 模型——必须外挂高频控制层。
- 亚毫秒反射层:在两层之外再加一个纯规则 / 轻量代码的反射层(急停、限位、防碰撞、紧急回避),用亚毫秒延迟兜底安全,模型未返回时也能保命。这是 demo 与产品安全性的工程分界。
- 常见坑:只量单次模型 forward,忽略序列化 / 网络 / 解码整体延迟,算出「能闭环」实际超时;或硬让推理延迟高于控制周期的模型做闭环,导致发散。
time逐段量,按延迟选双频结构。
学习路径
- 读 2.5:理解 S2 大脑与 S1 小脑之间的职责切分与频率差异
- 跑内置代码:观察慢规划 + 快执行叠加世界模型校验的运行时序
- 完成动手练习:用自测判断哪些动作该走大脑、哪些该走小脑
- 对接 M12:集成世界模型作为 S2 的安全校验层,事前否决越界动作
核心知识点详解
- S2 大脑与 S1 小脑的分工:S2 大脑 1–5 Hz 做长程规划、语义推理、目标分解;S1 小脑 50–200 Hz 做高频控制、平衡、姿态稳定。两者频率差 10–200 倍,职责切分决定稳定性:哪层出错由哪层兜,不要让慢层接管快层的时序。
- 世界模型做安全校验:把世界模型接在 S2 规划出口:执行前预测「该动作的后果」,对高风险 / 越界动作事前否决,而不是执行后再用真机试错。这是「仿真里先试错」安全闸的落地方式。
- 慢规划 + 快执行:数据流:S2 定高层目标 → S1 把目标翻译成高频控制信号(如关节力矩)。S1 用轻量策略 / 规则保证实时,S2 只在大频率点刷新目标——牺牲一点点规划频次换取闭环稳定。
- 常见坑:只在架构图上分 S1 / S2,实际把所有决策都塞进慢层;或世界模型否决后没有给 S1 下发替代动作,导致「否决即停摆」。要定义否决后的回退 / 重规划路径并仿真验证。
2.1 架构三段式:视觉编码 + LLM 主干 + 动作头
过去机器人控制是「感知 → 规划 → 控制」的模块化流水线,每个模块独立开发,误差逐级累积。2026 年,VLA 端到端架构成为主流:输入像素与文字指令,直接输出动作信号,中间的黑盒由神经网络自动学习。本质价值是让泛化能力从架构中自然涌现——大模型在语言领域验证过的缩放律,开始在物理世界起作用。
python# VLA 的典型结构:视觉骨干 + 语言骨干 + 流匹配动作头
import torch, torch.nn as nn
class SimpleVLA(nn.Module):
def __init__(self, d_vision=1024, d_lang=2048, d_fuse=1024, action_dim=7, chunk=16):
super().__init__()
self.vision = nn.Linear(d_vision, d_fuse) # 实际是 ViT / SigLIP
self.lang = nn.Linear(d_lang, d_fuse) # 实际是 LLM 的隐藏状态
self.fuse = nn.TransformerEncoder(
nn.TransformerEncoderLayer(d_fuse, 8, batch_first=True), num_layers=6)
# action chunk:一次预测未来 chunk 步动作,显著降低误差累积
self.action_head = nn.Sequential( # 实际用 flow matching / 扩散
nn.Linear(d_fuse, d_fuse), nn.SiLU(),
nn.Linear(d_fuse, chunk * action_dim))
def forward(self, vis_feat, txt_feat):
# 交叉模态融合:图像 token 与语言 token 在同一序列里做注意力
x = self.fuse(torch.cat([self.vision(vis_feat), self.lang(txt_feat)], dim=1))
pooled = x.mean(dim=1) # 简化:实际会用专门的动作查询 token
return self.action_head(pooled) # 输出未来 chunk 步的动作序列
# 关键概念:action chunk(一次预测多步动作)显著提升长时程任务成功率,
# 因为它避免了逐步预测的误差累积与推理延迟瓶颈(chunk=16 步 × 7 维)。
- 视觉骨干:通常是 ViT 或 SigLIP,输入 2–4 路相机视图,分辨率 224×224 或 336×336,频率 10–50Hz。
- 语言骨干:LLM(如 LLaMA / Gemma / Qwen 系)提供语义与任务理解,取最后一层隐藏状态作为条件。
- 动作头:流匹配或扩散模型,输出平滑的轨迹或关节力矩;常见做法是一次预测一段动作(action chunk,典型 8–50 步)。
- 组合泛化的意义:模型见过「抓红杯子」和「如果杯子烫就用夹子」之后,无需为组合单独训练即可处理新情形——这被称为机器人领域的「GPT-3 时刻」。
python# action chunk 为什么能救长程任务:把「每步都推理」的延迟放大算清楚
control_hz = 10 # 机械臂控制频率 10Hz -> 控制周期 100ms
infer_ms = 60 # VLA 一次前向 60ms
chunk = 16 # 一次预测未来 16 步动作
per_step_mode = infer_ms # 逐步推理:每步都要一次前向
chunk_mode = infer_ms / chunk # chunk:16 步只推理一次,摊到每步
print("逐步推理每步延迟(ms):", per_step_mode) # 60
print("chunk 模式每步延迟(ms):", round(chunk_mode, 2)) # 3.75
print("延迟比:", round(per_step_mode / chunk_mode, 1)) # 16.0
# 结论:chunk=16 把每步有效推理延迟摊薄 16 倍,从「远超控制周期」变成「远低于」。
# 代价:chunk 越大越平滑,但对环境突变响应越迟钝(chunk 太大 = 动作变笨)。
# 经验区间:chunk 常取 8–50 步(π0 用 ~50,灵巧任务常用 16–32)。
2.2 代表工作:RT-1/RT-2、OpenVLA、π0/π0.5、Gemini Robotics
| 模型 | 机构 | 主干 | 动作表示 | 特点 |
|---|---|---|---|---|
| RT-1 | PaLI / EfficientNet + FiLM | 离散动作 token | 22k 机器人示范端到端,实时部署到真实机械臂 | |
| RT-2 | PaLM-E 视觉-语言-动作 | 联合嵌入动作 | 把网络知识蒸馏进动作,零样本泛化到新物体 / 新指令 | |
| OpenVLA | 社区 | Prismatic + LLaMA | 连续动作回归 | 7B 开源基线,第一次让个人能跑通 VLA 推理 |
| π0 | Physical Intelligence | VLM + flow matching | 连续 flow 头 | 跨本体预训练,组合泛化,灵巧任务表现强 |
| π0.5 | Physical Intelligence | π0 + 显式推理 | flow + 推理 | 针对更难的灵巧 / 移动操作,引入推理链提升长程 |
| Gemini Robotics | Google DeepMind | Gemini 多模态 | 连续动作 | 长程任务、安全约束、跨 embodiment 适配 |
一个值得记住的范式转移:RT-2 证明了「互联网规模的视觉-语言知识」可以直接迁移到动作空间——你可以用自然语言描述一个它从没被示范过的任务,它凭借世界知识去执行。π0 / π0.5 则把重点放到「动作头的连续化」与「跨本体」:同一套权重可以驱动不同构型的机械臂,适配新本体只需几十到上百条示范。2026 年,「预训练融入海量异构数据 + 少量人类示范快速适配」已成为可行的技术路线。
| 模型 | 参数量级 | 动作表示 | 动作 chunk | 数据规模(量级) |
|---|---|---|---|---|
| RT-2 | 55B(PaLI-X)级 | 离散 token | 1(逐步) | 数十万机器人 episode |
| OpenVLA | 7B | 连续(7 维回归) | 1 | 约 97 万条真实机器人演示 |
| π0 | ~3B | 连续 flow | ~50 | 跨多本体、上万小时异构数据 |
| π0.5 | ~3B | flow + 显式推理 | ~50 | 加推理链以提升长程灵巧任务 |
| Gemini Robotics | 10B+(未公开) | 连续动作 | 多步 | 多模态 + 长程 + 安全约束 |
2.3 动作表示:离散 token vs 连续 flow matching / 扩散头
动作如何被「写进」模型,是 VLA 设计里最微妙的决定之一。它直接决定模型能表达的动作粒度、训练稳定性和能否处理多模态动作分布。
| 表示方式 | 做法 | 优点 | 缺点 | 适用 |
|---|---|---|---|---|
| 离散动作 token | 把连续动作量化成 codebook 索引,用自回归生成 | 可直接借用 LLM 的自回归机制,训练稳 | 量化误差、codebook 崩塌、动作不平滑 | 低维、离散或可离散化的动作 |
| 连续动作回归 | 直接回归动作向量(MSE 损失) | 简单、快 | 单峰、无法表达多模态(同一观测多种合理动作) | 简单控制、单峰场景 |
| flow matching / 扩散头 | 学习把噪声推向真实动作分布的向量场 | 多模态、平滑、高维友好 | 需多步采样,推理慢数倍 | 灵巧操作、高自由度、7–20 维动作 |
| 混合 | 粗动作离散 + 细动作连续 | 兼顾效率与精度 | 实现复杂 | 工业落地常见折中 |
python# 连续动作用 flow matching / 扩散头生成(而非离散 token)
# 思想:学习一个把噪声「推」向真实动作分布的向量场 v(x, t)
import torch
def flow_matching_sample(net, cond, action_dim, steps=10, sigma_min=1e-3):
"""从噪声出发,沿学习到的向量场积分得到动作。
cond = 视觉 + 语言融合后的上下文表示(一个向量)。"""
x = torch.randn(1, action_dim) # 起点:纯噪声
ts = torch.linspace(1.0, sigma_min, steps) # 从 t=1 收敛到 t=0
with torch.no_grad():
for i in range(steps - 1):
t = ts[i].expand_as(x)
v = net(x, t, cond) # 预测当前位置的速度场
dt = ts[i + 1] - ts[i] # 负步长(向 t=0 收敛)
x = x + dt * v # 欧拉积分一步
return x.clamp(-1, 1) # 动作通常归一化到 [-1, 1]
# 与离散 token 对比:连续头直接输出 7 维关节角速度,
# 无需把动作量化成 codebook,避免了量化误差与 codebook 崩塌;
# 代价是多步采样(通常 8–16 步 ODE / 欧拉),比单步回归慢。
python# 离散动作 token 的量化误差:256 个 bin 已经是「很细」的切分
import numpy as np
bins = 256
centers = np.linspace(-1, 1, bins) # 把 [-1,1] 归一化动作切成 256 档
x = np.random.default_rng(1).uniform(-1, 1, 200000)
err = np.abs(centers[np.abs(x[:, None] - centers[None, :]).argmin(1)] - x)
print("最大量化误差:", round(float(err.max()), 5)) # 0.00392
print("平均量化误差:", round(float(err.mean()), 5)) # 0.00196
# 单看数值很小,但灵巧操作连续 50 步、每步都量化、误差还会累积;
# 且离散化把「多模态连续分布」硬切成若干点,动作不平滑。
# flow matching / 扩散头直接建模连续分布,代价是多步采样(通常 8–16 步)。
2.4 动作频率与控制系统回路
这是 VLA 落地最被低估、却最致命的工程约束:推理延迟必须低于控制周期,否则系统不稳定甚至发散。一个 1 秒才出一次动作的模型,不可能去稳定一个 5ms 就要调一次的机械臂。
| 系统 | 控制周期 | 对推理延迟的要求 | 现实做法 |
|---|---|---|---|
| 工业机械臂 | 1–10 ms | 远低于控制周期(亚毫秒级闭环) | 高频控制交给本地轻量策略,模型只做低频规划 |
| 人形平衡 | 1–5 ms | 亚毫秒级的反射级响应 | S1「小脑」高频(50–200+ Hz),S2 大脑低频 |
| 移动机器人 | 50–100 ms | 低于 50 ms | S2 规划 1–5 Hz,控制 20–50 Hz |
| 视觉伺服抓取 | 10–30 Hz | 低于 33 ms(即一帧内) | 延迟超过周期则跟踪失稳、目标跟丢 |
| 自动驾驶 | 10–100 ms | 低于控制周期 | 感知-规划-控制分频,安全关键回路本地化 |
工程上的标准解法是双系统 / 双频:把慢而聪明的大模型(VLM,跑规划,1–5 Hz)与快而精准的轻量策略(视觉运动网络,50–200+ Hz)解耦。大模型负责「想清楚下一步干什么」,轻量策略负责「在毫秒级把动作做平滑、做稳定」。这正呼应了 2.5 节的双系统架构。
python# 落地的第一道算术题:推理延迟 vs 控制周期
def feasible(control_hz, infer_ms, safety=1.0):
period = 1000 / control_hz # 控制周期(ms)
return infer_ms <= period * safety, period
ok, period = feasible(control_hz=100, infer_ms=80) # 100Hz 机械臂
print("控制周期(ms):", period, "可行:", ok) # 10.0 False
ok2, _ = feasible(control_hz=10, infer_ms=80)
print("10Hz 可行:", ok2) # True
# 结论:80ms 的模型在 10Hz(100ms) 勉强可行,在 100Hz(10ms) 完全不可行。
# 工程解法:高频闭环交给 50–200Hz 的本地小策略,大模型只做 1–5Hz 的规划。
# 2026 现实参数参考:π0 级模型单次前向常为几十 ms;RT-2(55B) 更慢,
# 因此真正上产线的 VLA 都要么降频做规划、要么配一个高频执行器。
2.5 双系统架构:慢思考 + 快控制
人形机器人等高自由度、需实时平衡的系统普遍采用双系统架构:S2「大脑」是慢而聪明的 VLM,负责场景理解、任务规划与复杂推理,运行频率低;S1「小脑」是快而精准的视觉运动策略,负责几十赫兹的高频动作控制与平衡微调。
| 系统 | 职责 | 频率 | 典型技术 |
|---|---|---|---|
| S2 大脑 | 任务理解、规划、异常处理 | 1–5 Hz | VLM / LLM + 长程规划 |
| S1 小脑 | 动作生成、平衡、力控 | 50–200+ Hz | 视觉运动策略 / VLA 动作头 |
| 世界模型 | 预测动作后果,做安全校验与子目标生成 | 按需调用 | 动作条件生成、潜空间预测 |
| 记忆与状态 | 任务进度、已尝试动作、失败记录 | 持续 | 结构化状态机 + 向量记忆 |
| 1 秒内的时间片 | S2 大脑(1–5Hz) | S1 小脑(50–200Hz) | 世界模型(按需) |
|---|---|---|---|
| 0–200ms | 解析指令、规划子目标 | 执行约 10–40 次平衡微调 | — |
| 200–400ms | 检查进度、决定下一步 | 继续高频控制 | 预判「推一下是否会倒」 |
| 400–800ms | 异常处理 / 重新规划 | 持续闭环 | — |
| 800–1000ms | 更新任务状态记忆 | 持续闭环 | 按需安全校验 |
2.6 动手练习与自测
- 某 VLA 单次前向 45ms,机械臂控制 20Hz。它能否独立闭环?若不能,给出两种工程解法。
- 把 2.1 的 action chunk 从 16 改到 50,重新计算每步有效延迟,并说明它对「响应突变」的影响。
- 为什么说 RT-2 是机器人领域的「GPT-3 时刻」?它证明了什么可以迁移到什么?
- 离散动作 token 在什么维度 / 什么任务上会明显吃亏?连量化误差量级一起说明。
- 双系统里 S2 与 S1 的分工依据是什么?为什么不用一个模型全干?
- π0 与 OpenVLA 的关键差异(动作表示、chunk、数据配方)是什么?
- 什么情况下你会给 VLA 配一个「世界模型做安全校验」?
| 题号 | 考点 | 关键判据 / 参考答案 |
|---|---|---|
| 1 | 延迟预算 | 控制周期 50ms,45ms 勉强可行但无余量;解法:外挂高频策略 / 降频做规划 / 换更小模型 |
| 2 | chunk 权衡 | 90ms/50≈1.8ms 每步;chunk 越大延迟越省,但对环境突变响应越迟钝 |
| 3 | 范式转移 | 证明了互联网规模的视觉-语言知识可直接迁移到动作空间,零样本执行未示范任务 |
| 4 | 离散化代价 | 高维(7–20 维)、多模态灵巧任务;256 bin 最大量化误差 0.00392、均值 0.00196,且逐步累积 |
| 5 | 双系统依据 | 规划需大模型与世界知识(慢贵),控制需毫秒响应(快轻),需求矛盾,强行统一两头不讨好 |
| 6 | 代表工作对比 | π0 连续 flow + chunk≈50 + 跨本体异构数据;OpenVLA 7B 连续回归、chunk=1、约 97 万条演示 |
| 7 | 安全校验 | 高风险 / 不可逆动作前,用动作条件世界模型预判结果拦截危险,再落真机 |
3. 数据、仿真与 sim2real
学习路径
- 读 3.1:对比四种数据来源的成本与质量(遥操作 / 人类视频 / 仿真 / 日志)
- 跑内置代码:体验 IDM 逆向动力学从人类视频反推动作的流程
- 完成动手练习:为你的任务算一笔数据成本账并选主数据源
- 对接 M12:用仿真数据主导决策 agent 的交互数据,并评估仿真与真机占比
核心知识点详解
- 四类来源成本-质量:遥操作约 12 美元 / 条(质量最高,最贵);人类视频可达
1e10帧(数量庞大但缺动作标注);IDM 逆向动力学从人类视频反推动作,把无标视频变可用;仿真约 0.01 美元 / 条(便宜量大但 sim2real 有落差)。排序:质量 遥操作 > 人类视频+IDM > 仿真;成本相反。 - IDM 逆向动力学:逆动力学模型
a = f(s_t, s_{t+1}):从「下一帧观测差」反推所需动作,从而把海量人类视频转为带动作标注的训练数据。代价是精度受视频-机器人运动学对齐影响,动作维度高时易出错。 - 最优配比不是全贵 / 全省:一般用仿真打底(量大廉价)学粗策略,遥操作精修(少量高质)提精度,人类视频 + IDM 补中段多样性与长尾。配比按任务成本账算:
仿真占比高 + 少量遥操作校准 + IDM 扩多样性。 - 常见坑:忽略「数据质量 > 数量」:仿真刷几百万条但分布偏,迁移必失败;或以为人类视频能直接当控制训练集,没有动作标注学不到控制信号。先算成本账再配比。
学习路径
- 读 3.2:横向对比 MuJoCo / Isaac Lab / LIBERO / RoboSuite 的特点
- 跑内置代码:在选定的仿真器里并行采样并确认吞吐量
- 完成动手练习:踩一次稀疏奖励陷阱并设计成功判定与 shaping
- 对接 M12:搭建仿真 env(观测 / 动作 / 奖励 / 回合管理)作为 agent 训练场
核心知识点详解
- 仿真器选型:MuJoCo(刚体动力学,百万步 / 秒 CPU 高效、上手快);Isaac Sim / Lab(GPU 并行,可 4096 环境并行,适合大规模 RL 与数字孪生);LIBERO(提供 130+ 语言条件操作任务,是 VLA 常用标尺);RoboSuite 等偏研究。选型看「物理保真 vs 吞吐 vs 是否有现成任务」。
- 吞吐量决定训练速度:RL 训练瓶颈常在采样吞吐。MuJoCo 出单步快但单环境;Isaac Lab 用 GPU 并行一次跑几千个环境,吞吐高一个量级,适合大规模策略学习。先实测每秒采样步数再决定。
- 稀疏奖励陷阱:只给最终成功信号(稀疏奖励)时,智能体长时间得不到正反馈学不动。解法:设成功判定 + 奖励 shaping(中间过程奖励 / 距离奖励),或用户轨迹做预置。设得好坏直接决定能否收敛。
- 常见坑:奖励全 0 + 成功判定过严,训练几乎无梯度信号;或只顾仿真空域不问物理保真,策略在真机完全失效。先跑通
reset/step/done/reward闭环,再铺大规摸采样。
学习路径
- 读 3.3:理解视觉与动力学差距如何让仿真策略失效
- 跑内置代码:开域随机化到一定强度观察跨域成功率变化,找甜点区
- 完成动手练习:加传感噪声 / 延迟模拟并评估对成功率的影响
- 对接 M12:给仿真 env 配置域随机化并量化 sim2real 迁移的丢失比例
核心知识点详解
- 差距四来源:视觉(纹理 / 光照 / 相机)、动力学(质量 / 摩擦 / 阻尼不准)、传感噪声(真实远大于仿真)、延迟与丢帧。任一来源不匹配,仿真策略在真机就可能失效——这四类都有对应的随机化手段,且要逐个缓解。
- 域随机化甜点区:在仿真里随机化让策略学到鲁棒特征,但范围有甜点区:太窄欠泛化、太宽任务不可解。做法:扫描随机化强度,画「强度 - 跨环境成功率」曲线找峰值区(示例可用
np.arange梯度扫描)。关键是有真实分布的先验、且不过度。 - 真机数据回灌与校准:降低差距的工程闭环:仿真 RL 预训练 → 真机回灌少量数据校准 → 系统辨识(把质量 / 阻尼参数调真)→ 再用仿真补齐。传感噪声与延迟也要在仿真里按真实量级建模,否则迁移时踩空。
- 常见坑:把域随机化开到「看起来全面」导致任务不可解仍刷分;或不建模传感噪声 / 延迟,仿真高分、真机崩溃。以迁移率(sim→real 成功率的保留比例)为验收口径。
学习路径
- 读 3.4:理解行为克隆误差累积与 DAgger 在线纠错的区别
- 跑内置代码:用 DAgger 采一轮并对比纯 BC 的误差曲线
- 完成动手练习:为任务定「成功判定 + 稀疏奖励」并走一遍仿真 RL 预训练
- 对接 M12:让决策 agent 在仿真里 RL 预训练后接真机回灌,记录成功率
核心知识点详解
- 行为克隆的误差累积:BC 按专家轨迹监督学习,但策略自回归时误差会随时间逐级累积——走偏一点、下一步离专家分布更远,长程的复合误差接近指数放大。这是 BC 在长程 / 未知状态下崩溃的根本原因。
- DAgger 在线纠错:DAgger 让策略自己 roll out,把访问到的状态交给专家标注并回填训练集,在线逼近专家分布,显著缓解误差累积。对比口径:纯 BC 与 DAgger 在相同 max 步数下的累计成功率,DAgger 一般在长程明显更高。
- 流匹配与隐式奖励:flow matching 动作手通过匹配数据分布学动作,可视为隐式奖励引导,对多模态动作表达更自然;配合仿真 RL 预训练(廉价环境先学粗策略)+ 真机回灌校准。奖励设计要点:成功判定 + 稀疏奖励 + shaping 三者搭配。
- 常见坑:只给最终成功信号、无 shaping,公交训练几乎无梯度;或拿纯 BC 短 / 抖就断言模型不行,没意识到是误差累积而非模型能力。先加 shaping 再对比 BC/DAgger。
3.1 数据来源:遥操作 / 人类视频 / 仿真
| 来源 | 方式 | 规模 / 成本 | 优点与局限 |
|---|---|---|---|
| 遥操作 | 人手操控机械臂 / 机器人采集 | 成本高、速度慢(约 5–20 美元 / 条) | 真实、质量高;难以规模化 |
| 动捕数据 | 亚毫米级光学动捕采集人类动作 | 可到万小时级 | 动作质量好;需重定向到不同本体 |
| 仿真数据 | 物理引擎 + 域随机化 | 可无限生成 | 便宜、可控;存在 sim-to-real 差距 |
| 人类视频 | 互联网人类操作视频 | 规模巨大(十亿级帧) | 无动作标签,需从视频推断动作(video to action) |
| 合成数据 | 用世界模型生成轨迹与场景 | 成本中等 | 2026 年热点;需校验物理合理性 |
| 真实部署日志 | 机器人在真实环境长时间运行 | 最有价值 | 含真实故障与边界情况;获取慢 |
python# 三种数据源的规模与成本量级:判断「该自采、买、还是拿视频」
sources = {
"遥操作": {"unit_cost_usd": 12, "scale": 1e4, "note": "真实但难规模化"},
"仿真": {"unit_cost_usd": 0.01, "scale": 1e7, "note": "便宜可控,有 sim2real gap"},
"人类视频": {"unit_cost_usd": 0.0, "scale": 1e10, "note": "海量但无动作标签"},
}
for k, v in sources.items():
print(k, "规模量级:", v["scale"], "单条成本:", v["unit_cost_usd"], v["note"])
# 预期输出(量级):
# 遥操作 规模量级 10000.0 单条成本 12 真实但难规模化
# 仿真 规模量级 1e7 单条成本 0.01 便宜可控,有 sim2real gap
# 人类视频 规模量级 1e10 单条成本 0.0 海量但无动作标签
# 结论:真实数据最贵最稀缺(~12 美元/条),视频最便宜但缺动作标签 ->
# 2026 的解法是「视频预训练 + 少量真机动作对齐」。
人类视频学习是 2026 年增长最快的数据方向:互联网上有海量人类操作视频,成本几乎为零,但难点在于「视频里没有动作标签」。常见做法有三类:① 用遥操作数据训练一个逆向动力学模型(IDM),把视频帧对映射成动作;② 直接用视频做预训练,只在最后用少量真实动作做对齐;③ 用世界模型把视频续写成带动作的轨迹。2026 年的标志性做法是预训练融入海量异构数据 + 少量人类示范的快速适配:某些模型在适配新本体时只需 50–100 条人类示范;另一类预训练融入数万小时真实物理数据,覆盖十几个品牌、二十余种构型。
3.2 仿真环境:MuJoCo / Isaac Sim / LIBERO / RoboSuite
动手做具身,几乎一定要从仿真起步。仿真让你以零成本获得无限带标签数据、可重复的实验、以及不担心撞坏硬件的安全空间。
| 仿真器 | 特点 | 最适用 | 速度量级 |
|---|---|---|---|
| MuJoCo | 刚体接触快、数值稳定、API 简洁 | 机械臂 / 腿足控制、算法研究 | 快(万步 / 秒级,CPU) |
| Isaac Sim / Lab | GPU 大规模并行、照片级渲染、数字孪生 | 大规模 RL、Sim2Real、工厂场景 | 中(需 GPU,可并行千环境) |
| LIBERO | 内置 130+ 操作任务基准与语言标注 | 操作策略评测、方法对比 | 中 |
| RoboSuite | 模块化、易扩展、任务定义灵活 | 算法原型、新任务快速搭建 | 中 |
| SimplerEnv | 把仿真策略映射到真实机器人做评测 | Sim2Real 泛化测试 | 中 |
python# 仿真环境的最小闭环:以 LIBERO / robosuite 风格为例
import numpy as np
class PickEnv:
"""一个抽象出来的抓取环境接口(真实用 MuJoCo / Isaac Lab)。
关键:观测空间、动作空间、奖励、终止条件都要明确定义。"""
obs_dim = 24 # 关节角 + 末端位姿 + 目标相对位置
act_dim = 7 # 6 自由度末端 + 夹爪开合
max_steps = 200 # 单回合最大步数(决定 episode 长度)
def __init__(self):
self.t = 0; self.state = self.reset()
def reset(self):
self.t = 0
return np.zeros(self.obs_dim) # 实际从仿真器采样初始状态
def step(self, action):
# 动力学:action 施加到仿真器,返回新观测 + 奖励 + 终止标志
self.t += 1
done = self.t >= self.max_steps
reward = self._sparse_reward() # 稀疏奖励:只有抓到才给 1
return self._observe(), reward, done, {}
def _sparse_reward(self):
return 1.0 if self._gripper_hold() else 0.0
python# MuJoCo / Isaac Lab 的吞吐量级:决定「一晚上能采多少数据」
mujoco_steps_per_sec = 1e6 # 简单场景单核可达百万步/秒量级(CPU)
isaac_envs = 4096 # Isaac Lab 单卡并行环境数
isaac_hz = 60 # 每环境 60Hz
print("Isaac Lab 单卡每小时步数:", f"{isaac_envs * isaac_hz * 3600:.0e}")
# 预期输出:8.8e+08(约 8.8 亿步/小时)
# 即单卡一小时产生近 9 亿步交互,相当于真实机器人跑几百年。
# 但注意:这只换来「仿真里的经验」,要过 sim2real 才算数。
3.3 sim2real 差距与域随机化
sim2real(仿真到真实)是具身智能永恒的难题。差距主要来自四个来源,每一个都有对应的缓解手段。
| 差距来源 | 在真实世界的表现 | 缓解手段 |
|---|---|---|
| 视觉差距 | 纹理、光照、摄像头参数、遮挡与仿真不一致 | 域随机化(外观 / 光照 / 相机)、仿真域自适应、真实图混合训练 |
| 动力学差距 | 质量、摩擦、阻尼、刚度不准 | 参数随机化、系统辨识(真实数据反推参数)、在线适应 |
| 传感噪声 | 真实传感器噪声远大于仿真 | 训练时注入噪声、用真实噪声分布做数据增强 |
| 延迟与丢帧 | 真实控制有延迟、相机掉帧 | 随机延迟训练、时序模型容忍丢帧 |
| 未建模物理 | 柔性物体、液体、接触非线性 | 更高保真仿真、真实数据补位 |
python# 域随机化:在仿真里随机化那些「真实与仿真不一致」的要素,
# 让策略学到对干扰鲁棒的特征,从而迁移到真实机器人。
import numpy as np
def randomized_sim_params(base):
"""对动力学与外观参数加随机扰动,覆盖 sim-to-real 的差距来源。"""
return {
"mass_scale": base["mass"] * np.random.uniform(0.7, 1.3),
"friction": base["friction"] * np.random.uniform(0.5, 1.5),
"joint_damping": base["damping"] * np.random.uniform(0.8, 1.2),
"camera_pose": base["cam"] + np.random.randn(6) * 0.02, # 视角抖动
"light_intensity": np.random.uniform(0.4, 1.6), # 光照变化
"sensor_noise": np.random.uniform(0.0, 0.02), # 传感噪声
"latency_ms": int(np.random.choice([0, 8, 16, 33])), # 控制延迟
}
# 经验法则:随机化范围要覆盖真实世界的实际分布,
# 但不能过大以至于任务变得不可解(过随机化会拖慢收敛甚至学不动)。
python# 域随机化的权衡:范围太小过拟合仿真,范围太大任务不可解
def sim2real_gap(random_frac):
too_narrow = max(0.0, 0.5 - random_frac) # 随机化不足 -> 真机掉点
too_wide = max(0.0, random_frac - 0.6) * 0.8 # 过宽 -> 学不动
return 0.05 + too_narrow * 0.5 + too_wide
for f in [0.10, 0.30, 0.45, 0.70, 0.90]:
print(f"random_frac={f:.2f} 估计 sim2real gap≈{sim2real_gap(f):.2f}")
# 预期输出(示意曲线,实操靠真机数据回灌校准):
# 0.10 gap≈0.25;0.30 gap≈0.15;0.45 gap≈0.08;0.70 gap≈0.13;0.90 gap≈0.29
# 结论:随机化存在「甜点区」,不是越宽越好——太窄过拟合,太宽任务不可解。
3.4 训练方法:模仿学习与 RL
- 行为克隆 / 模仿学习:把示范数据当成监督学习(观测 → 动作)。简单有效,但误差累积(compounding error)是核心问题——测试时一旦偏离示范分布,错误会自激放大。
- DAgger 类方法:让策略自己执行、由专家纠正错误状态,缓解分布偏移。关键是在「错误的地方」补数据。
- 流匹配回归当作隐式奖励:有工作直接用流匹配回归损失充当隐式奖励,无需额外 Critic 网络,效果优于传统 DAgger 类方法。
- 强化学习:在仿真中大规模做 RL 再迁移到真实世界;真实世界 RL 受安全性、样本效率与成本限制,通常只在仿真里放量与在真机里做微调。
- 奖励设计:物理任务的奖励设计极难,因此常用「成功判定 + 稀疏奖励 + 课程学习」的组合,避免手工奖励被策略钻空子(reward hacking)。
python# 行为克隆的误差累积:为什么「逐步回归」在长时程必然崩
import numpy as np
rng = np.random.default_rng(0)
def _ar(H, eps, drift):
e = 0.0
for _ in range(H):
e = e * (1 + drift) + rng.normal(0, eps) # 误差自激放大
return e
def rollout_err(H, eps=0.01, drift=0.05, trials=3000):
return float(np.mean([abs(_ar(H, eps, drift)) for _ in range(trials)]))
print("H=10 平均末端误差:", round(rollout_err(10), 3)) # ≈ 0.032
print("H=50 平均末端误差:", round(rollout_err(50), 3)) # ≈ 0.29
# 结论:per-step 误差仅 0.01,但误差随视界自激放大,H=50 时末端误差放大近 30 倍。
# 这正是 DAgger / 流匹配隐式奖励 / RL 微调要解决的「分布偏移(compounding error)」。
3.5 动手练习与自测
- 用 3.4 的误差累积模型,把 per-step 误差从 0.01 提高到 0.03,重算 H=50 的末端误差量级。
- 在 MuJoCo 里把 episode 长度从 200 步改为 500 步,说明为什么「稀疏奖励 + 长 episode」会让 RL 学不动,并给出两个缓解手段。
- sim2real 的四类差距来源分别是什么?域随机化主要对付哪几类?
- 为什么说「仿真里 95% 成功率」不能直接当产品指标?
- 人类视频没有动作标签,三种把它变成训练信号的做法是什么?
- Isaac Lab 能并行 4096 个环境,这对 RL 样本效率意味着什么量级?
| 题号 | 考点 | 关键判据 / 参考答案 |
|---|---|---|
| 1 | 误差累积 | 误差与 eps 近似线性;eps 三倍 -> 末端误差约 0.29×3 ≈ 0.87 量级 |
| 2 | 稀疏奖励 | 探索空间随步数指数增大;缓解:课程学习 + 示范引导 + 密集奖励塑形 |
| 3 | sim2real 差距 | 视觉 / 动力学 / 传感噪声 / 延迟与丢帧;域随机化主要覆盖视觉与动力学 |
| 4 | 仿真-真实落差 | 视觉纹理、摩擦质量、传感噪声、延迟都不一致,真机常掉到 30% 量级 |
| 5 | 人类视频 | 训练逆向动力学模型(IDM) / 视频预训练后少量动作对齐 / 世界模型续写成带动作轨迹 |
| 6 | 并行吞吐 | 单卡约 8.8e8 步/小时,等价于真实机器人跑几百年,是样本效率的关键杠杆 |
4. 评测、现状与决策
学习路径
- 读 4.1:理解 LIBERO / SimplerEnv / 真实成功率的评测口径差异
- 完成动手练习:用自测核对「平均成功率」陷阱与失败模式分布该看什么
- 对接 M12:为自己的仿真 agent 定成功率指标并统计失败模式分布
核心知识点详解
- 口径差异:LIBERO(130+ 语言条件任务,sim 内标尺)与 SimplerEnv(简化真实控制环境)、真实物理世界的成功率口径不同:sim→sim 容易虚高,sim→real 达标才有落地意义。报成功率必须写清「在哪套环境 / 哪种本体下测的」。
- 平均成功率的陷阱:平均成功率把「难任务全败 + 简单任务全对」抹平,掩盖 OOD 与长程短板。应拆失败模式分布(感知 / 规划 / 动作精度 / 抓取失败)并分难度 / 分长度口径汇报——只看一个数是自欺。
- Physics-IQ 与物理合理性:评测还要看是否符合物理(重力 / 碰撞 / 因果),
Physics-IQ类基准;同时记录失败模式分布不等于只看成功与否,能定位瓶颈在哪一环节才有修复价值。 - 常见坑:用 LIBERO 的 sim 内高分宣称可用,忽略 sim→real 落崖;或不拆失败模式,整体 70% 但不知道卡在感知还是动作。分层测、按失败模式报告。
学习路径
核心知识点详解
- 三个典型掉点:典型梯度:新指令掉约 5%,新环境掉约 35%,长程(>10 步)掉约 55%。说明泛化主要卡在物理环境变化与长程,指令层相对成熟——先拿自己数据量化这三档,才知道该补哪头。
- 组合泛化:未组合过的对象 / 布局 / 动作组合是真正的 OOD。测试应留出组合对做 OOD 评测,而不是假设「每组件见过就能任意组合」。组合泛化才是 demo 与生产的差距来源之一。
- 分层定位瓶颈:做法:分别测「新指令 / 新环境 / 进一步长程」三档成功率,定位最弱维度。若新环境掉得多,补视觉域随机化;若长程掉得多,换更长 chunk / 记忆 / 预算装。用数据佐证而不是猜。
- 常见坑:只报一条「新 K8 成功率」,不同维度混起来掩盖真瓶颈;或一味加指令多样性数据,实则瓶颈在环境视觉域。分层测后再分配补数据资源。
学习路径
核心知识点详解
- 三档成熟度:2026 现状分三档:短程抓取可落地(结构化、固定工位相对可靠);灵巧操作起步(多指精细操作仍是前沿);长程仍 demo 级(多步任务成功率低)。给自己项目定位清楚在哪一档,决定期望值。
- 四问可行性打分:四个问题:任务结构化程度(越高越好)、失败代价(高则必须人工监督 + 安全层)、数据可得性(能否拿到真实部署数据)、泛化要求(固定工位 vs 开放环境差异巨大)。四项都友好可做(分拣 / 质检),任一项很差就该等或换。
- 对标行业水平:把自己仿真 agent 的成功率对标行业档位(短程 / 灵巧 / 长程),并说明「相对行业水平高在哪 / 低在哪」——这比裸报数字更有判断力,也便于像用人话向上汇报。
- 常见坑:被通用人形机器人的演示视频误导,以为量产在望;或直接挑战长程高目标,成功率与工程成本不成比例。先占短程结构化场景建立闭环,再演进。
核心知识点详解
- 两条投入边界:进入机器人 / 自动驾驶方向 → 物理深入(能训 VLA、会仿真、懂数据管线,这是硬通货);做通用 AI / Agent / RAG → 理解原理即可,会调用世界模型、能评估供应商方案就够。先定目标方向再定投入深。
- 自训成本量级:自训基础世界模型 / VLA 成本千万级(数据 + 算力),个人无硬件不现实。合理路径是「开源权重 + 仿真 + 数据管线」,量级差在
1000 倍以上。 - 低成本切入:后端背景建议从仿真 + 数据管线 + 闭环工程切入,比一上来碰模型算法更容易形成差异化——具身智能缺「既懂系统又肯碰硬件」的人。
- 常见坑:不评估投入深度就硬拍自训,预算超支拖垮整个项目;或用「我会调 API」冒充「我能训」,面试 / 交付被一眼识破。先用四问定位,再按边界发力。
学习路径
- 读 4.5:走一遍「OpenVLA 零样本 → 失败检测重试 → 遥操作采集」的入门路线
- 完成动手练习:用 Wilson 置信区间给自己的成功率估计一个可信区间
- 对接 M12:失败检测 + 重试逻辑接入仿真 agent,观察成功率抬升
核心知识点详解
- Wilson 置信区间:小样本成功率不该报裸点估计。Wilson 区间在样本少时更稳(压缩到中间、防 0/1 夸张):
p̂ = (S + z²/2)/(n + z²),半径z·sqrt(p̂(1−p̂)/n + z²/(4n²))/(1+z²/n),z=1.96。例:20 次成功 18 次 → 边际估 90%,但真实区间可能是 70%–97%。用区间汇报。 - OpenVLA 零样本起点:入门从下载开源 OpenVLA 7B 权重,在自采 20 条指令上零样本测试开始——不花一分钱训练先摸清能力基线,并归类失败模式(感知 / 规划 / 动作精度 / 抓取)。
- 失败检测 + 重试提升:失败检测(观测一致性 / 目标未达判定)+ 重试逻辑对多数可重试操作显著抬高成功率(示例可达十几个百分点);从零样本到
失败检测重试 → 遥操作采几十条微调是性价比最高的路径。 - 常见坑:拿 10 次成功 8 次的点估计当「80% 成功率」上报;或不做失败检测重试,把可修复失败误判为模型不行。加回 W=20 遥操作 + 失败重试再谈微调。
4.1 机器人基准:LIBERO / SimplerEnv / 真实成功率
| 基准 / 场景 | 考什么 | 为什么重要 |
|---|---|---|
| LIBERO(130+ 任务) | 语言条件操作、长时程任务成功率 | VLA 最常用的标准化标尺,可比性强 |
| SimplerEnv | 仿真策略映射到真实机器人的泛化 | 专门测 sim-to-real,暴露随机化不足 |
| RoboTwin 类双臂基准 | 双臂操作、长时程任务 | 衡量通用操作能力 |
| Physics-IQ / 物理推理 | 对重力、碰撞、流体的理解 | 检验是否真的理解物理而非拟合外观 |
| RoboArena / 真实评测 | 真实硬件上的泛化 | 仿真分数与真实表现常有巨大落差 |
| 自动驾驶仿真 | 边缘场景(corner case) | 世界模型在此处价值最明确 |
| 工业分拣 / 质检 | 高重复、高精度 | 已可落地,投资回报清晰 |
| 人形通用操作 | 开放环境多任务 | 仍在早期,需谨慎评估时间表 |
python# 为什么「平均成功率」会骗人:把它拆成四类看
raw = {"已知任务": (0.92, 100), "OOD 物体": (0.61, 60),
"长程(>10步)": (0.38, 40), "新环境": (0.29, 30)}
avg = sum(r * c for r, c in raw.values()) / sum(c for _, c in raw.values())
print("加权平均成功率:", round(avg, 3)) # ≈ 0.635
for k, (r, c) in raw.items():
print(f"{k}: {r:.0%} (n={c})")
# 预期输出:加权平均成功率: 0.635;但长程仅 38%、新环境仅 29%。
# 结论:一个 0.635 的「平均分」掩盖了产品化真正的门槛(长程 + 新环境)。
4.2 泛化维度:新物体 / 新指令 / 新环境
评判一个具身系统的真实水平,最有用的是沿三个泛化维度分别测,而不是混在一起报一个数。
| 维度 | 含义 | 测试方式 | 难度 |
|---|---|---|---|
| 新物体 | 从未见过的物体形状 / 材质 / 颜色 | 换物体重测同一指令 | 中(ViT 表征已部分覆盖) |
| 新指令 | 用没见过的自然语言表述同一任务 | 改写 / 同义指令重测 | 低—中(语言泛化已被大模型解决) |
| 新环境 | 新背景、新光照、新布局 | 换场景重测 | 高(视觉分布偏移大) |
| 新任务组合 | 已知原子技能的新组合 | 组合泛化测试 | 高(考验是否真涌现) |
| 长程任务 | 多步骤序列(>10 步) | 多步任务成功率 | 最高(误差累积 + 记忆) |
python# 泛化维度的「掉点幅度」经验值:用于快速估算不同场景的风险
dims = {"新指令": 0.05, "新物体": 0.15, "新环境": 0.35,
"新任务组合": 0.40, "长程(>10步)": 0.55}
base = 0.92
for k, drop in dims.items():
print(f"{k}: 预计成功率 {base * (1 - drop):.2f}(掉 {drop:.0%})")
# 预期输出:新指令 0.87;新物体 0.78;新环境 0.60;新任务组合 0.55;长程 0.41。
# 结论:语言泛化几乎免费(大模型红利),环境与长程才是硬骨头。
4.3 2026 真实水平与瓶颈
把 hype 去掉,2026 年具身智能的真实水位大致如下。这是帮助你在面试和选型时不被 demo 误导的基准线。
| 能力 | 2026 现状 | 主要瓶颈 |
|---|---|---|
| 短程抓取 / 放置 | 已可落地(工业分拣、质检) | 长程、灵巧仍难 |
| 跨本体泛化 | 预训练 + 低样本适配可行(50–100 条) | 数据规模仍远小于 CV/NLP |
| 灵巧操作 | 起步(叠衣、插拔、用工具) | 高自由度、缺触觉反馈 |
| 长程任务 | demo 级,产品级极少 | 误差累积、缺乏持久记忆 |
| 人机协作安全 | 规则 + 慢系统兜底 | 快系统安全验证难 |
| 数据采集 | 遥操作 + 视频学习 + 世界模型合成 | 真实长尾数据极贵 |
python# 具身场景可行性打分(把四问框架变成可量化评分)
def score(structured, fail_cost, data_ok, gen_ok):
# 每项 0–1,越高越有利;失败代价越高越不利
return 0.30 * structured + 0.20 * (1 - fail_cost) + 0.25 * data_ok + 0.25 * gen_ok
scenarios = {
"工业分拣": (0.9, 0.2, 0.8, 0.7),
"仓库拣选": (0.7, 0.3, 0.7, 0.6),
"家庭家务": (0.2, 0.6, 0.3, 0.15),
}
for k, v in scenarios.items():
print(k, round(score(*v), 2))
# 预期输出:工业分拣 0.80;仓库拣选 0.65;家庭家务 0.29
# 结论:越结构化、失败代价越低、数据越可得 -> 分数越高,越该现在做。
4.4 什么情况下值得投入 / 什么情况理解原理即可
本阶段标记为「可跳过」不是随便写的。下面是明确的判断标准,帮你在时间有限时做取舍。
| 你的情况 | 建议 | 原因 |
|---|---|---|
| 目标是进入机器人 / 自动驾驶方向 | 值得深入:能训 VLA、会仿真、懂数据管线 | 这是该方向的硬通货,缺口大 |
| 做通用 AI 应用 / Agent / RAG | 理解原理即可,知道何时调用世界模型 | 你的战场是软件系统,不是物理本体 |
| 个人 / 小团队、无硬件 | 跑通开源、读论文、做仿真实验,不必自训大模型 | 自训机器人基础模型成本千万级 |
| 做技术选型 / 投资 / 产品决策 | 重点掌握判断标准与真实边界 | 避免被 demo 与融资叙事误导 |
| 偏后端系统背景 | 从仿真 + 数据管线 + 闭环工程切入 | 比从模型算法切入更容易形成差异化 |
python# 「自训机器人基础模型」的成本量级:解释为什么个人不该自训
gpu_hours = 500_000 # 具备竞争力所需的 GPU 小时(量级估计)
usd_per_gpu_hour = 2.0 # 云上 A100/H100 级租用价
print("训练算力成本(美元):", int(gpu_hours * usd_per_gpu_hour)) # 1000000
# 预期输出:1000000(约 100 万美元,仅算力)。
# 再加数据采集(真实示范 5–20 美元/条)、标注与人力,总投入通常在千万美元级。
# 结论:个人 / 小团队跑通开源 + 仿真实验即可,自训基础模型不现实。
4.5 入门路径(想动手的话)
python# 入门路径的最小验证骨架:先跑通「观测 -> 动作 -> 成功判定」闭环
def episode(env, policy, max_steps=200):
obs, done, steps = env.reset(), False, 0
while not done and steps < max_steps:
action = policy(obs) # 先用随机策略或开源 VLA
obs, reward, done, info = env.step(action)
steps += 1
return info.get("success", False), steps
# 先跑 100 个 episode 统计成功率基线,再逐步替换策略:
# 随机策略成功率 < 5%;换成 OpenVLA 零样本可到 20%–60%(视任务与本体)。
# 然后加入失败检测与重试 —— 这一步才是真实系统与 demo 的最大差距。
| 能力维度 | 代表基准 | 测什么 | 看指标 |
|---|---|---|---|
| 通用操作 | LIBERO | 多任务语言条件操作 | 平均成功率 |
| 长程组合 | RoboSuite / CALVIN | 连续子任务与状态依赖 | 完成链长 / 平均完成步数 |
| 泛化鲁棒 | LIBERO-Plus / 域随机化 | 新物体、新位置、新光照 | 相对基线的掉点幅度 |
| 本体迁移 | 跨机器人基准 | 换本体后的适配成本 | 微调所需示范数据量 |
| 仿真拟真 | Isaac Sim / MuJoCo | 物理与渲染逼真度 | sim2real gap |
python# 评测统计:成功率要带置信区间,别拿 10 个 episode 下结论
import math
def wilson(k, n, z=1.96): # 二项比例的 Wilson 区间
if n == 0: return (0.0, 0.0)
p = k / n
d = 1 + z*z/n
c = (p + z*z/(2*n)) / d
h = z * math.sqrt(p*(1-p)/n + z*z/(4*n*n)) / d
return (max(0, c-h), min(1, c+h))
for n in (10, 200):
lo, hi = wilson(int(0.6*n), n) # 观测成功率均为 0.6
print(n, round(lo, 2), round(hi, 2))
# 10 个 episode:约 0.31-0.83,区间宽到无法判断策略好坏;
# 200 个:约 0.53-0.67,才勉强可用于对比两个策略的优劣。
# 结论:具身评测样本量不足时,任何「成功率提升」都可能是噪声。
4.6 动手练习与自测
- 用 4.1 的代码把「长程任务」样本权重从 40 提到 200,重算加权平均成功率,观察均值如何被拉低。
- 用 4.2 的掉点经验值,估算「新环境下连续做 10 步」的联合成功率(提示:掉点叠加)。
- 为什么一个「换个说法就能做」的 demo 不足以说明系统可落地?
- 用四问框架给「餐厅后厨洗碗机器人」打分,并说明哪一问最致命。
- 什么情况下你应该深入世界模型 / VLA,什么情况下理解原理即可?各给一个理由。
- 个人开发者做具身,为什么建议从「仿真 + 数据管线 + 闭环工程」切入?
| 题号 | 考点 | 关键判据 / 参考答案 |
|---|---|---|
| 1 | 指标构成 | 长程权重上升后加权均值向 0.38 靠拢,暴露长程短板;说明单一均值会掩盖关键维度 |
| 2 | 泛化叠加 | 新环境 0.65 × 长程 0.45 ≈ 0.29 量级,联合成功率远低于任一单项 |
| 3 | 泛化排序 | 语言泛化已接近免费,真正门槛是新环境与长程;demo 常在「新指令」维度好看 |
| 4 | 四问打分 | 结构化中、失败代价中、数据稀缺、泛化要求高 -> 总分偏低,泛化与数据最致命 |
| 5 | 投入判断 | 机器人/自动驾驶方向深入;通用应用理解原理、会用即可 |
| 6 | 差异化 | 具身门槛高但供给少;后端系统背景从仿真/数据/闭环切入比从模型算法切入更易形成优势 |
项目里程碑
把 Hamauls Orion 的决策能力放到一个有状态的环境里:接一个仿真环境(如网格导航 / 简单机器人抓取模拟),实现感知 → 规划 → 执行 → 反思的闭环,观察世界模型误差如何随时间累积。
本阶段产出(直接进入项目仓库)hamauls_orion/embodied/env.py:仿真环境适配层(观测、动作空间、奖励、回合管理)hamauls_orion/embodied/planner.py:基于模型预测的规划器(receding horizon)+ 失效重规划docs/exp/world-model-drift.md:预测误差随步数增长曲线,以及缓解方案对比- 可选:VLA 风格「观测 → 动作」端到端小模型,与显式规划器做对比
阶段练习项目
- 产出五维度对比表,每一维度都落在「预测空间」「可交互性」「训练数据」「可控性」「最适用」五列,且每格用一句话说清
- 结合 1.4 指标,为三条路线各给出 ≥2 个量化评测维度(一致性 / 跳变率 / 可控性 / Physics-IQ),并给出各自最适合的应用
- 写出「同视界帧预测 vs 潜空间推理」的输出量级差(示例
4096×H vs 512×H,约 8 倍)并据此说明选型
- 把对比表填满五个维度,不得有空缺格;每条路线给出代表工作(Genie 3 / Dreamer V3 / JEPA·I-JEPA)
- 用 1.4 的四类指标(一致性 / 可控性 / 物理合理性 / 长程漂移)给每条路线打可复现的分
- 给出「该走哪条路线跑自己仿真环境」的结论,并说明选择依据(闭环规划选潜空间 / 可交互演示选帧预测)
- 补一段「视频生成 ≠ 世界模型」的判断句,给出动作条件化的判据
route_report.md:五维度对比表 + 量化指标打分 + 选型结论- 一张选型决策流程图(按任务类型路由到路线)
不做真实训练 / 评测代码,只做文献精读 + 指标口径说明;不测万级分辨率。
- 画出「视觉骨干 → LLM 主干 → 动作头」三段式结构图,标注每段的数据流(
OBS+text → emb → tokens → action) - 在同一简单控制任务上,三种动作头都跑通并量化对比:平滑度(轨迹抖动 / 加速度跳变)、多模态表达、同一 max 步数的长程成功率
- 给出动作表示选型结论(低维离散 / 高维多模态 flow matching,或粗离散 + 细连续),并有数据支撑
- 读 π0 / π0.5 / OpenVLA 原文,画出结构图并标注 action chunk 步数(8–50 步)与是否冻结主干
- 三种动作头共用相同感知 / 决策主干,保证唯一变量是动作头,做消融
- 长程成功率沿用 Wilson 置信区间汇报,统计 ≥20 次并拆失败模式
- 给出「7–20 维关节、多模态」场景为何选 flow matching 的量化依据(平滑度 / 成功率对比)
arch_diagram.md:三段式结构图 + 三种动作头对比表action_head_*.py:三种动作头的可运行实现与评估脚本- 一份消融报告(平滑度 / 多模态 / 长程成功率,含置信区间)
不训完整 VLA,只做动作头对比与结构梳理;不做真机部署。
- 在选定仿真器上跑通「观测 → 策略 → 执行 → 成功判定 → 失败重试」闭环,抓取成功率稳定 ≥80% 才停
- 加域随机化前后各测一次成功率,量化 sim2real 迁移的丢失比例(示例报告「仿真 90% → 随机化后 X%」)
- 实测采样吞吐(每秒步数)并记录该仿真器能否支撑 RL 训练规模
- 选 MuJoCo 或 Isaac Sim / Lab 之一,实现标准
reset / step / done / reward环境接口 - 设「成功判定 + 失败重试」逻辑:抓取失败自动检测并重试,而非静默停住
- 按 3.3 开域随机化(摩擦力 / 质量 / 视觉),扫描 2–3 档强度画「强度-成功率」曲线找甜点区
- 记录失败模式分布(抓偏 / 滑落 / 未达目标),可定位瓶颈环节
sim_grasp.py:可运行的抓取闭环 + 域随机化开关 + 评估脚本sim2real_report.md:成功率曲线、甜点区、迁移丢失比例与失败模式分布
不做真机迁移部署;不训大规模 RL 策略,闭环以规则 / 简单策略为主。
- 用开源 VLA(如 OpenVLA 7B)在 ≥20 条自采指令上完成零样本测试,得到带 Wilson 置信区间的成功率
- 把失败样本归到四类(感知 / 规划 / 动作精度 / 抓取)并算每类占比,能定位最薄弱维度
- 给出「是否值得继续微调」的结论,判断依据来自失败模式而非只看成功率
- 自采 20 条覆盖不同场景 / 指令的实现指令,记录文本 + 观测,保证可复现
- 用 Wilson 置信区间汇报成功率(小样本下不要裸报点估计)
- 逐条失败样本标注到四类之一,输出失败模式分布表
- 结合 4.2 泛化维度(新指令 / 新环境 / 长程)说明该模型卡在哪一维
zero_shot_eval.py:评测脚本 + 结果 CSV(含置信区间)failure_report.md:失败模式分布 + 泛化瓶颈定位 + 是否微调的结论
不训练 / 微调任何模型;不覆盖大规模语料,只评 20 条自采指令。
- 在仿真 env 跑通「感知 → 规划 → 执行 → 反馈重试」闭环,长程任务成功率相对单步策略有可量化的提升(示例报告「base X% → agent Y%」)
- 接入世界模型 / 语义预判作为安全否决,高风险动作被事前拦截的比例 ≥90% 且不拖累正常成功率
- 加域随机化后量化 sim2real 迁移率,并写明 sim2real 差距分析与失败恢复逻辑
- 搭建仿真 env(
OBS / action / reward / done / reset),含可配域随机化 - 用
receding-horizon planner+ 世界模型误差观测,误差异常时触发失败重规划(落 1.1–1.2 结论) - 失败分类与恢复:可重试(3–5 次退避)/ 不可重试标记,杜绝静默停摆
- 分层测成功率(新指令 / 新环境 / 长程),定位最弱泛化维度
- 新增「世界模型否决高风险动作」前后做消融,验证安全层不误伤正常任务
agent_env.py:仿真 env + receding-horizon planner + 安全否决层M12_report.md:分维成功率、sim2real 迁移率、否决消融、失败恢复逻辑
不要求真机迁移部署;世界模型用简化动力学假设,不训完整 VLA / 世界模型本体。
- 用四问框架(结构化程度 / 失败代价 / 数据可得性 / 泛化要求)给所选场景逐项打分并给出总分结论(做 / 等 / 换)
- 定位该场景处于短程 / 灵巧 / 长程哪一档,并给出对应行业成功率水平的对标(结合 4.3 现状)
- 给出可落地模块清单 + 需人工介入环节 + 时间表 + 风险表,能支撑决策
- 四问每项打 1–5 分并列明评分依据,不写空泛理由
- 明确标注哪些模块当前可落地(如短程分拣)、哪些仍不稳(如长程 / 高自由度)
- 给出数据可得性判断(能否拿到真实部署数据 / 仿真占比)与失败代价(是否需人工监督 + 安全层)
- 输出时间表(周 / 里程碑)与风险清单(每项带缓解措施)
feasibility_report.md:四问打分表 + 档位对标 + 可落地 / 需人工清单- 一份简明结论(做 / 等 / 换)与理由
不实施 / 不仿真验证;只做可行性评估与决策支撑,不写技术实现细节。
常见误区
- 把视频生成等同于世界模型,忽略「动作条件化」与「可干预」才是分界线。
- 以为有了世界模型就能规划,忽视研究发现——Agent 常常不会正确使用模拟能力。
- 低估数据成本,以为可以像文本一样从互联网抓取机器人数据(真实示范约 5–20 美元 / 条)。
- 忽略动作频率约束:模型推理延迟高于控制周期,闭环必然失稳。
- 在仿真里刷到很高分数就以为可落地,忽略 sim-to-real 差距(视觉 / 动力学 / 传感噪声)。
- 设计高自由度人形机器人的通用任务,却不评估失败代价与安全约束。
- 混淆三种用途(预测 / 规划 / 仿真),用不可控的生成模型当规划器。
- 只看平均成功率,不拆 OOD 泛化与长程任务完成率,被 demo 误导。
- 只关注模型,忽略工程侧的状态管理、失败检测与重试——这是 demo 与产品的真正差距。
面试高频问题速答
世界模型和视频生成模型有什么区别?
判据是「可干预性」:视频生成只根据文本或图像条件生成画面,你只能看;世界模型接受动作作为条件,能预测执行该动作后的下一个状态,因此可用于规划与安全校验。技术上的关键差异是动作条件化与闭环使用。2026 年的趋势是两者在顶部开始模糊(视频模型开始具备物理理解),但「能否被动作驱动」仍是分界线。三者用途也不同:预测(想象)、规划(rollout 选动作)、仿真(造数据)。
VLA 为什么用端到端而不是模块化流水线?
模块化方案中感知、规划、控制各自独立开发,每个模块的误差会逐级累积,且模块间接口是人工设计的,泛化受限于设计者预设的情形。端到端把整个闭环一起学习,泛化能力从架构中涌现——模型见过足够多的组合后无需为每种情形单独编程,语言领域验证过的缩放律开始在物理世界起作用。代价是需要更多数据与算力,且动作头要独立训练。
离散动作 token 和连续 flow matching 动作头怎么选?
看动作空间的维度与多模态程度。低维、可离散化的动作(如离散导航)用 token 最方便,能直接复用 LLM 自回归;但量化会引入误差、codebook 易崩塌。高维、连续、多模态的灵巧操作(7–20 维关节、同一观测多种合理动作)必须用连续头,flow matching / 扩散能建模多模态连续分布、动作更平滑,代价是多步采样导致推理更慢。工程上常混合:粗动作离散、细动作连续。
为什么 VLA 落地必须考虑动作频率?
因为推理延迟必须低于控制周期,否则系统失稳。一个控制周期 10ms 的机械臂,根本不能等一个 80ms 的模型 forward。标准解法是双系统:慢而聪明的大模型(1–5 Hz)做规划,快而精准的轻量策略(50–200+ Hz)做高频控制与平衡。这决定了 VLA 通常不能独立做闭环,必须外挂高频策略或换更小更快的模型。
sim2real 差距来自哪里,怎么缓解?
四类来源:① 视觉(纹理 / 光照 / 相机);② 动力学(质量 / 摩擦 / 阻尼不准);③ 传感噪声(真实更大);④ 延迟与丢帧。缓解以域随机化为主——在仿真里随机化这些参数,让策略学到鲁棒特征;再配合仿真域自适应、真实数据回灌校准、系统辨识。关键是随机化范围要覆盖真实分布但不过宽,否则任务不可解。
怎么判断一个具身项目现在该不该做?
用四问框架:任务结构化程度(越高越好)、失败代价(高则必须有人工监督与安全层)、数据可得性(能否拿到真实部署数据)、泛化要求(固定工位 vs 开放环境差异巨大)。四项都友好就可以做(如工业分拣、质检);有一项很差就应该等或换场景。不要被通用人形机器人的演示视频误导——演示与稳定生产的距离通常很大。
什么情况下值得投入世界模型与 VLA,什么情况理解原理即可?
明确分界:目标是进入机器人 / 自动驾驶方向 → 值得深入(能训 VLA、会仿真、懂数据管线,这是该方向硬通货);做通用 AI 应用 / Agent / RAG → 理解原理即可,知道何时调用世界模型、能评估供应商方案就够了。个人无硬件则跑通开源与仿真实验即可,不必自训基础模型(成本千万级)。