01|机器人任务的基本对象
本文解决一个最基础、也最容易混淆的问题:机器人模型在每个时刻到底拿到什么信息、预测什么信息、这些信息如何跨时间连成一个任务?
学完本文后,你应当能够读懂 π0/π0.5 论文中
observation、state、action chunk、trajectory、episode、policy的含义,并能把它们映射到一个真实的机器人执行循环。
1. 先建立一条主线:机器人在一个循环里“看、想、动、再看”
把机器人想成一个一直运行的闭环系统,而不是一个“输入指令、一次性输出完整答案”的程序。
当用户说“把红色杯子放进水槽”时,机器人不能直接把这句话变成一个抽象的“完成”信号。它必须重复完成下面的过程:
任务指令
↓
获得当前观测(相机、传感器、机器人本体状态)
↓
根据当前观测判断“现在处于什么阶段、下一步该做什么”
↓
输出一小段低层控制动作
↓
机器人执行,环境随之改变
↓
再次获得新的观测,并修正下一步动作
我们用离散时间步 (t=0,1,2,\ldots) 表示这个循环中的每一轮。第 (t) 步结束后,环境和机器人会从当前状态演化到下一状态:
其中:
- (x_t):完整的真实世界状态;
- (a_t):机器人在时刻 (t) 执行的动作;
- (f):真实物理世界和控制器共同构成的状态转移过程;
- (\varepsilon_t):未建模因素,例如摩擦变化、相机噪声、执行误差、物体滑动或人的干预。
这里的 (x_t) 是一个理论上的完整状态。它可能包含杯子的精确三维姿态、桌面摩擦系数、物体是否接触、柜门阻尼、机器人全部关节和电机状态等。真实系统无法把这些信息完整交给模型,因此机器人只能根据可见、可测的部分信息做决定。
这就得到控制问题的核心形式:
其中:
- (o_t) 是机器人实际获得的观测;
- (g) 是传感器把真实世界映射为观测的过程;
- (\eta_t) 是图像噪声、遮挡、延迟等感知误差;
- (\ell) 是整项任务的语言指令,例如“把红色杯子放进水槽”;
- (\pi_\theta) 是参数为 (\theta) 的策略模型。
这一主线最重要的结论是:模型永远不是直接看到真实世界 (x_t),而是在不完整的观测 (o_t) 下,结合任务指令 (\ell),输出短期动作并不断根据新观测修正。
1.1 统一符号、数字和张量表示
后续文章统一使用下面的符号。表格用于快速查阅“这个符号指什么”;正式数学定义统一放在表格之后,以块级公式呈现。
| 符号 | 名称 | 代码中常见 shape | 含义 |
|---|---|---|---|
| (t) | 时间步 | 单个整数 | 当前控制循环的编号 |
| (x_t) | 完整世界状态 | 通常不可直接获得 | 理论上完整、但通常不可直接获取的系统状态 |
| (o_t) | 观测 | 一个字典或多模态结构 | 当前时刻实际送入策略的输入信息 |
| (q_t) | 本体感觉状态 | ([B,d_q]) | 机器人自身可测状态,例如关节、夹爪、底座等 |
| (I_t^{(i)}) | 第 (i) 路图像 | ([B,C,H,W]) | 第 (i) 个相机在时刻 (t) 的图像 |
| (\ell) | 高层任务指令 | ([B,L]) | 贯穿整个任务的自然语言目标 |
| (\hat{\ell}_t) | 高层语义子任务 | ([B,M]) | 机器人当前阶段要完成的局部语义目标 |
| (a_t) | 单步动作 | ([B,d_a]) | 当前时刻发给底层控制器的控制向量 |
| (a_{t:t+H-1}) | 动作块 | ([B,H,d_a]) | 从 (t) 开始、长度为 (H) 的连续动作序列 |
| (\tau) | 轨迹 | 长度为 (T) 的记录 | 一次任务过程中所有时刻的记录 |
| (e) | 回合 | 一个 episode 文件/对象 | 一次完整任务及其结果、元数据 |
| (\pi_\theta) | 策略 | 模型 forward | 根据输入生成子任务或动作的模型 |
形式化定义
其中 (B) 是 batch size,(C) 是图像通道数,(L)、(M) 是任务指令和子任务的 token 长度,(H) 是动作块长度,(d_q)、(d_a) 分别是状态、动作向量维度。
例如,若一个机器人单步动作包含 18 个数,则 (d_a=18);若模型一次预测未来 20 步动作,则动作块 shape 为 ([B,20,18])。这些数不是通用常量,必须由具体硬件、控制模式和数据格式决定。
2. 六个核心概念
2.1 Observation:观测 (o_t)
观测是策略在当前时刻真正看得到、拿得到的信息。 它回答的问题是:“机器人现在凭什么做决定?”
一个常见的多模态观测可写为:
其中 (I_t^{(i)}) 是第 (i) 个相机在时刻 (t) 的图像,(n) 是相机数量,(q_t) 是机器人本体感觉状态。方括号表示将不同信息组织为同一份模型输入,不意味着图像与状态必须直接在数值维度上拼接。
观测还可能包含深度图、力/力矩传感器、历史动作、语言上下文或目标检测结果。关键不在于字段越多越好,而在于每一项是否能在部署时稳定获得,并且是否与训练时的定义一致。
观测与完整状态的区别
杯子背面是否已经被抓牢属于真实世界状态的一部分,但单目相机未必能可靠观察到;桌面的摩擦系数会影响动作结果,却通常不会作为一个数字输入模型。因此,机器人控制本质上是在部分可观测环境中的决策问题。
在 π0.5 中如何对应
π0.5 论文将观测写作 (o_t),明确由一个或多个相机图像与机器人本体感觉状态 (q_t) 组成。π0.5 论文,第 III、IV 节
在论文使用的移动操作平台上:
- 高层子任务推理使用四个相机视角:前方、后方和两个腕部相机;
- 低层动作推理使用前方相机和两个腕部相机;
- 这说明“观测”不是固定不变的单一张量,模型不同阶段可以使用不同的观测子集。
掌握目标:看到 observation、images、camera_views、proprio、state 等字段时,能够判断它们是否属于 (o_t),以及训练和推理时是否一致。
2.2 State:完整状态 (x_t) 与本体感觉状态 (q_t)
“state”在机器人论文中有两种常见含义,必须主动区分。
含义一:完整世界状态 (x_t)
完整状态 (x_t) 指系统真实的全部情况,包括机器人、物体、环境及其相互关系:
它可能包含机器人关节位置、物体姿态、柜门开合、接触关系、摩擦和遮挡等。这是理论建模中的完整 state,但真实机器人通常无法完整观测。
含义二:机器人本体感觉状态 (q_t)
实际 VLA 代码里名为 state 的字段,常常更接近 (q_t):机器人自身传感器能够直接读到的数值向量。
它可能包括关节角度/速度、夹爪开合、末端位姿、底座线速度和角速度、升降机构位置。因此最稳妥的阅读习惯是:先问代码里的 state 是完整环境状态,还是机器人本体感觉向量。 在真实机器人 VLA 中,后者更常见。
在 π0.5 中如何对应
π0.5 将 (q_t) 称为机器人配置(robot configuration)。论文中的移动平台有双臂、平行夹爪、全向移动底座和升降机构;对应状态/动作空间为 18 或 19 维,差异来自两个平台升降机构自由度不同。
论文还说明:预训练阶段会将连续本体状态离散化为 token 输入模型。这是一个实现选择,不应误读为“状态本来就是文本”;它的原始形式仍然是连续数值向量。
掌握目标:能写出 state 向量每一维的物理含义、单位、范围和时间戳,而不是只知道它的 shape。
2.3 Action:单步动作 (a_t)
动作是当前时刻交给控制器执行的低层控制量,不是“抓杯子”这样的高层任务描述。
一个动作向量可以写成:
动作的具体语义由控制模式决定。常见形式包括:
-
关节空间动作
-
末端执行器动作
-
移动操作动作
前两类动作的区别会在下一篇展开:前者直接控制关节,后者控制末端位置与姿态,仍需底层系统将目标转换为关节命令。
在 π0.5 中如何对应
π0.5 的最终低层输出是连续动作块。论文中的控制系统以 50 Hz 向双臂、夹爪、升降机构和移动底座发送目标;底层用简单 PD 控制器跟踪这些目标。论文强调,操作与导航控制来自端到端学习策略输出,而不是在策略外另加轨迹规划或碰撞检测。
训练数据的动作格式也值得注意:
- 论文同时处理关节目标与末端执行器目标;
- 每个数据集按各动作维度的 1% 与 99% 分位数,将动作归一化到 ([-1,1]);
- 为容纳不同机器人,动作向量固定为最大动作空间维度;维度较少的机器人用零填充。
这三点共同说明:动作向量里的数字没有脱离数据集和控制模式的通用含义。 读代码时必须先找到 control mode、归一化统计量与每一维动作定义,才能解释模型输出。
2.4 Trajectory:轨迹 (\tau)
轨迹是一个任务在时间维度上的完整记录:
若还要保留任务、完整状态和高层子任务,可写为:
真实机器人数据中,(x_t) 往往未知或不保存,因此更常见的是:
若图像来自 (t)、状态来自 (t-2)、动作标签却属于 (t+1),模型不会学到正确控制关系。图像、状态与动作的时间对齐是数据质量最重要的检查项之一。
在 π0.5 中如何对应
π0.5 混合移动机器人、固定机器人、跨 embodiment 动作数据、子任务标注、语言监督和网页视觉语言数据。对其中的机器人轨迹而言,核心仍然是“在当前观测与任务条件下,预测后续动作或子任务”。
长任务还可以看成多个阶段轨迹的连接:
例如“清理厨房”可以由“拿起盘子”“放入水槽”“拿起杯子”“放入水槽”等 (K) 个子任务构成。
2.5 Episode:回合 (e)
Episode 是“这一次任务实验”的完整容器。它不仅包含轨迹,也包含任务结果和元数据:
其中 id 是回合编号,(y) 是成功、失败、超时或人工中止等结果,(\mathcal{m}) 是机器人型号、相机配置、控制频率、场景和采集方式等元数据。
Trajectory 强调“随时间变化的记录”;episode 强调“这条记录属于哪一次完整尝试,以及它最后发生了什么”。简单任务中一个 episode 通常对应一条 trajectory;但 episode 也可能包含重置、人工接管、多个子任务或多段有效轨迹。
在 π0.5 中如何对应
π0.5 后训练阶段会过滤动作数据,重点使用成功且低于固定长度阈值的 episode 来专注移动操作任务。这说明 episode 的成功标签和长度不是无关紧要的附加信息;它们会直接影响哪些数据进入训练集。
2.6 Policy:策略 (\pi_\theta)
策略是从当前条件到动作分布的映射。对于只执行短动作的平坦策略,可以写作:
这表示给定当前观测 (o_t) 和总任务指令 (\ell),预测未来 (H) 步动作。
但 π0.5 使用一个分层推理过程:先预测当前应该完成的高层语义子任务,再依据子任务预测低层连续动作。
(\pi_\theta^{\mathrm{high}}) 根据当前场景和总任务生成文本形式的子任务,例如“拿起盘子”;(\pi_\theta^{\mathrm{low}}) 再根据当前场景和这个子任务生成细粒度动作块。两部分由同一个 π0.5 模型体系表示,而不是“一个外部 LLM 规划器 + 一个完全独立的传统控制器”。
在 π0.5 中如何对应
| 本文对象 | π0.5 论文中的具体形式 | 作用 |
|---|---|---|
| (o_t) | 多相机图像 (I_t^{(1:n)}) + 本体状态 (q_t) | 告诉模型场景里有什么、机器人自身在哪里 |
| (\ell) | 高层任务提示,如“清理厨房” | 给出跨阶段的最终目标 |
| (\hat{\ell}_t) | 文本子任务,如“拿起盘子” | 将长任务压缩为当前可执行阶段 |
| (a_{t:t+H-1}) | 连续动作块 | 控制双臂、夹爪、底座和升降机构 |
| (\pi_\theta^{\mathrm{high}}) | 文本 token 的自回归预测 | 利用语义、网页数据和语言监督选择当前子任务 |
| (\pi_\theta^{\mathrm{low}}) | action expert 的 Flow Matching 推理 | 将子任务转换为高频、连续的低层动作 |
更细一点看,π0.5 的两阶段训练对应两类策略能力:
- 预训练阶段:将多种数据源统一成多模态序列任务,学习文本、物体位置和离散动作 token 的预测,获得视觉、语言、语义与跨机器人知识。
- 后训练阶段:专门面向移动操作,加入 action expert,用 Flow Matching 生成连续动作块,同时保留文本预测能力。论文在推理时先生成高层子任务文本,再以该文本为条件进行 10 步 Flow Matching 去噪,得到低层连续动作。
论文还说明,高层推理以比低层动作推理更低的频率运行:语义阶段不必每个控制周期都改变,而动作块需要高频更新以应对物理世界细节。
因此,π0.5 不只是:
图像 + 指令 → 一个动作向量
而更接近:
总任务指令 + 当前观测
↓
高层策略:当前的语义子任务
↓
低层策略:未来一段连续动作
↓
底层 PD 控制器跟踪动作目标
↓
新观测进入下一轮闭环
3. 把六个概念放进同一个“红色杯子”示例
任务指令为:
在某个时刻 (t):
- 完整状态 (x_t):杯子在桌面上、水槽在右侧、夹爪张开、机器人关节处于某种姿态;其中一部分细节不可直接获得。
- 观测 (o_t):相机画面显示红色杯子和水槽,本体状态 (q_t) 显示手臂位置与夹爪张开程度。
- 高层子任务 (\hat{\ell}_t):模型可能先预测“拿起红色杯子”。
- 动作块 (a_{t:t+H-1}):模型输出一段“接近杯子、调整姿态、闭合夹爪”的连续控制目标。
- 轨迹 (\tau):从找到杯子、抓取、移动到水槽、放下杯子的全时序记录。
- episode (e):这一整次尝试,包括任务指令、场景、轨迹、是否成功放入水槽、是否中途超时或人工接管。
如果机器人在抓取时杯子被碰歪,新一帧观测会改变;此时它不应机械执行旧动作块,而应重新推理。这正是观测、策略、动作、轨迹和闭环之间的关系。
4. 常见误区
- 把 (o_t) 当成 (x_t):观测只是机器人获得的部分信息,不是完整世界状态。
- 把
state一律理解为完整环境状态:真实机器人代码中的state往往只是本体感觉向量 (q_t)。 - 把 (a_t) 当成自然语言任务:动作是控制器可执行的低层数字,不是“抓杯子”的文字描述。
- 认为策略只输出一个动作:现代机器人策略常输出 action chunk (a_{t:t+H-1}),并在闭环中滚动执行。
- 认为 trajectory 与 episode 完全相同:trajectory 是时间序列;episode 还包含任务边界、结果和采集元数据。
5. 学习验收
- 为什么要同时使用 (x_t)、(o_t) 和 (q_t) 三个符号?
- 若
images的 shape 为 ([B,n,C,H,W]),state的 shape 为 ([B,d_q]),它们分别对应哪个数学对象? - 若
actions的 shape 为 ([B,H,d_a]),(B)、(H)、(d_a) 分别表示什么? - 为什么图像、状态和动作必须进行时间对齐?
- π0.5 的 (\hat{\ell}t) 与 (a{t:t+H-1}) 各自解决什么问题?
- π0.5 为什么先预测子任务、再预测低层动作,而不是直接从总任务指令输出所有控制量?
6. 下一步
下一篇建议阅读 02:机器人动作与动作空间。重点是把抽象的 (a_t\in\mathbb{R}^{d_a}) 进一步拆开:每一维动作是什么、关节空间与末端执行器空间有什么区别、不同机器人怎样对齐动作表示。
参考资料
- π0.5 论文(arXiv)
- π0 论文:用于理解 action expert 与 Flow Matching 的基础设计。