⏱ ~44 min

概念辨析 · Action 的各种表示

同样是「机器人动作」,不同方法用完全不同的表示。这直接影响模型架构、表达能力、推理速度。这条辨析贯穿 T05(IL)、T06(VLA)、T07(teleop)。

Action 表示谱系 7 种对比卡片图:torque / PD target / joint angle / discrete token / diffusion chunk / flow / latent 七列,每列含形式 + 优缺点 + 代表方法(MuJoCo·legged_gym·RT-1·DP·π0·CALM)+ 适用场景,底部为选择决策树(连续精细→torque/PD · 大规模训练→token/diffusion · 技能库→latent)

本页内容

基础解释

一句话直觉

机器人"怎么出招"的几种约定格式。直接用力、给目标角度、或一句话指令都行。相当于乐谱可以用简谱或五线谱。

是什么·为什么

"动作"看起来只有一个意思,其实有七种主流写法。写法不同,模型架构、表达能力、推理速度都跟着变。选错写法,模型再强也学不好。

为什么重要:机器人控制的输出就是动作。动作怎么表示,决定了策略网络最后一层长什么样、能表达多复杂的动作、跑多快。

核心一句话:动作表示是策略和机器人之间的"接口协议"。协议错了,两边再聪明也对接不上。

七种主流接口的通俗版(从底层到高层):

最底层是直接出力——每个关节给多大力矩。表达力最强,但极难学,真机电机容易过载。

第二层是给目标角度——告诉低层控制器"我想转到这",它来追。简单稳定,是当前腿足运动的事实标准。

第三层是给末端轨迹——只关心手抓移到哪,不关关节怎么动。语义清晰,跨本体友好,是机械臂操作的主流。

第四层是出离散指令——把连续动作切成 256 个桶当词汇表。能直接复用大语言模型,但损失精度,做不了精细操作。

第五层是生成式连续动作——用扩散或流匹配输出连续动作块。表达力最强,π0 证明这是灵巧操作的关键。

第六层是动作块——一次预测未来几十步。顺带缓解"走偏雪崩",现代方法几乎都标配。

第七层是隐式指令——高层只给一个低维向量,低层解码成具体动作。分层架构的标准接口。

一句话类比:动作表示之于机器人,像指挥棒之于乐队。有的直接指挥每个乐手,有的只给情感方向。抽象越高越省力,也越不精确。

为什么 action 表示是根本问题

机器人控制策略的输出 = 动作。但「动作」可以是:

  • 关节力矩(torque)
  • 关节目标角度(PD target)
  • 末端速度(end-effector velocity)
  • 一串离散 token
  • 未来 N 步的轨迹(chunk)
  • latent code(给低层 policy)

不同表示对应不同方法、不同频率、不同表达能力。选错表示,模型再强也学不好。

表示谱系(从底层到高层)

1. Torque(力矩)—— 最底层

形式:每个关节直接输出力矩 τ ∈ ℝⁿ。

谁用:早期 model-free RL([OpenAI 2018, arxiv:1808.00177] 灵巧手 in-hand manipulation,Shadow Hand 走 tendon 力矩;[Heess 2017, arxiv:1707.02286] Emergence of Locomotion 待核:站内 papers.jsonl 未收录)、传统控制(computed torque、LQR)。⚠️ 常被误归到此类的 DeepMimic / ANYmal 实际不是直出 torque——DeepMimic 的 policy 输出 target pose 由仿真器内 PD 转矩,ANYmal 系列(Hwangbo 2019 / Lee 2020 / Lee 2022)RL 输出的是关节位置目标,见下一节。

优点:表达力最强,能做任何动作。

缺点:极难学(高维、稀疏);需要精细的动力学模型;真机电机容易过载。

2. PD Target(目标角度)—— 主流

形式:输出关节目标角度 $q_{\text{des}}$(以及可选 $\dot{q}_{\text{des}}$),底层 PD 控制器追:

$$\tau = K_p \odot (q_{\text{des}} - q) + K_d \odot (\dot{q}_{\text{des}} - \dot{q}) + \tau_{\text{ff}}$$

其中 $K_p, K_d \in \mathbb{R}^n$ 是对角刚度/阻尼矩阵($\odot$ 为按位乘,工程上常写为标量广播),$q, \dot{q}$ 是关节编码器/IMU 反馈的实际角度和速度,$\tau_{\text{ff}}$ 是可选的 feed-forward 力矩(重力补偿 / Coriolis 补偿 / 期望轨迹的逆动力学)。IsaacLab 的 JointPDController 显式实现这条公式(OperationalSpaceController 是它在笛卡尔空间的对应物);legged_gym 默认 action 就是关节位置目标,由仿真器内置 PD 解出转矩。

增益的物理意义:闭环单关节方程 $\ddot{q} = \omega_n^2(q_{\text{des}}-q) + 2\zeta\omega_n(\dot{q}_{\text{des}}-\dot{q})$,其中 $\omega_n = \sqrt{K_p/I}$($I$ 关节惯量),$\zeta = K_d/(2\sqrt{K_p I})$。工程上把 $\zeta$ 设到 1(临界阻尼)防过冲。Unitree H1/G1 实际参数:$K_p \in [20, 120]$ N·m/rad、$K_d \in [0.5, 5]$ N·m·s/rad,膝盖等大惯量关节用更大增益。

谁用:绝大多数现代 locomotion(DeepMimic、legged_gym、ANYmal-C、Walk-These-Ways、HOVER)、人形 teleop 后端(HumanPlus、OmniH2O、HOMIE 的 WBC 端)。

优点:比 torque 易学;PD 控制器处理高频抖动(100–1000 Hz);安全(不会瞬间大力矩)。

缺点:PD 增益 $K_p/K_d$ 要调;高频动力学(如撞击、接触建立瞬间)跟不上——因为 PD 是非接触模型,撞击瞬间会被打飞(这也是为啥 RL locomotion 要配 contact-aware reward)。

这是当前 locomotion/WBC 的事实标准

3. End-effector / 末端 —— 操作任务

形式:输出末端执行器的位置/速度/姿态,IK(逆运动学)反解到关节。

谁用:RT-1/RT-2(手臂分量 7 维:Δx/Δy/Δz/Δroll/Δpitch/Δyaw/gripper)、大部分 manipulation VLA。

优点:低维(7-10 维 vs 关节几十维);语义清晰(「往左移」);跨本体(不同机械臂末端都可用)。

缺点:IK 有时无解(奇异点);不直接控制全身。

这是 VLA 做操作的主流表示

4. Discrete Token —— VLA 的动作 token 化

形式:把连续动作 $a \in \mathbb{R}^n$ 离散成 bins,每维用 $B$ 个桶(RT-1/RT-2/OpenVLA 用 $B=256$)。设第 $i$ 维的物理范围 $[a_i^{\min}, a_i^{\max}]$,则 bin 化:

$$\text{bin}_i(a_i) = \text{round}\!\left(\frac{a_i - a_i^{\min}}{a_i^{\max} - a_i^{\min}} \cdot (B-1)\right) \in \{0, 1, \dots, B-1\}$$

反 token 化(执行):

$$\hat{a}_i = \frac{\text{bin}_i}{B-1} \cdot (a_i^{\max} - a_i^{\min}) + a_i^{\min}$$

RT-1 vs RT-2 的动作维度差异(详见 P-RT2-2023.md 与 T06):RT-1 [arxiv:2212.06817] 动作 11 维 = 7 维手臂 + 3 维底盘 + 1 维终止位;RT-2 [arxiv:2307.15818] 缩到 8 维 = 1 维 terminate + 3 维 Δpos + 3 维 Δrot + 1 维 gripper(即 6-DoF EE + gripper + terminate),其中 7 个连续维度各 256 bin。OpenVLA 沿用 256 bin 离散化。

量化误差:在每维区间均匀时最大误差 $\le \frac{a_i^{\max}-a_i^{\min}}{2(B-1)}$。以 RT-2 的 EE 平移分量为例,若范围 $\pm 0.1$ m、$B=256$,量化误差约 $\frac{0.2}{2 \times 255} \approx 0.4$ mm——精度尚可。但对灵巧手 16-DoF、范围 $\pm 1$ rad,量化误差约 $4$ mrad,对精细捏取太粗糙,是 RT-2/OpenVLA 在灵巧任务上吃力的根因之一。

谁用:RT-1、RT-2、OpenVLA(离散 action token)。

优点:能直接用 LLM 的 token 预测头(vocab 加 256×n 个 action token);复用 LLM 训练方法(next-token prediction + cross-entropy)。

缺点表达力受限——离散化损失精度,多模态 action 分布被强压成 argmax;推理慢(每步要 softmax over 256×n vocab,再 autoregressive 出 n 个 token)。

5. Continuous / Flow / Diffusion —— π0 式

形式:action expert 用 flow matching 生成连续动作 chunk。

谁用:π0、π0.5、RDT-1B、CogACT。

优点表达力强——能做多模态精细动作(叠衣服);连续不丢精度。

缺点:训练复杂(flow matching / diffusion);推理要采样。

π0 证明这是 VLA 做灵巧操作的关键

6. Action Chunk —— 序列预测

形式:不是预测单步 action,而是预测未来 $N$ 步(一段 trajectory)$a_{t:t+N} = (a_t, a_{t+1}, \dots, a_{t+N-1})$。

谁用Diffusion Policy($T_p=16$,执行 horizon $T_a=8$)、ACT($N=100$)、π0($H=50$)、RDT-1B($N=64$)、GR00T N1($H=16$)。

协变量偏移(covariate shift)的数学BC 训练时见到的状态分布 $p_{\text{train}}(s)$ 与部署时 $p_{\text{test}}(s)$ 不一致,因为策略误差会导致轨迹漂移。单步 BC 的误差随步数指数累积

$$\Pr(\|s_t - s_t^{\text{expert}}\| > \epsilon) \le 1 - (1-p_{\text{err}})^t \xrightarrow{t\to\infty} 1$$

其中 $p_{\text{err}}$ 是单步 action 误差概率。Action chunking 把开环执行 $N$ 步内的累积误差压成一段「相对一致的轨迹」——预测 $a_{t:t+N}$ 时模型已经考虑了 chunk 内的状态转移,等价于把策略误差从「每步独立」变成「chunk 内相关」。形式上 chunking 引入了时序平滑先验,执行时用 temporal ensembling(如 ACT 对 chunk 内多预测求加权平均)进一步降方差:

$$a_t^{\text{exec}} = \sum_{k=0}^{N-1} w_k \, \hat{a}_t^{(t-k)}, \quad \sum_k w_k = 1, \; w_k \propto \exp(-\lambda k)$$

这里 $\hat{a}_t^{(t-k)}$ 是在 $t-k$ 时刻预测的第 $k$ 步(即对当前时刻 $t$ 的不同预测)。指数衰减权重给最近预测更大权重,平滑掉单步抖动。

优点顺带缓解协变量偏移(预测得多 → 偏离少,误差不再每步独立累积);执行更平滑;推理效率高(一次 forward 出多步,对低频 VLA 尤其关键)。

缺点:长程任务单 chunk 不够(需分层或 receding horizon);开环执行可能过时(环境变化时整个 chunk 失效)。

这几乎是所有现代 IL/VLA 的标配

7. Latent Action —— 分层接口

形式:高层输出 latent code $z \in \mathbb{R}^d$(或离散 token 序列),低层 policy 把 $z$ 解码成具体动作 $\pi_{\text{low}}(a \mid s, z)$。

信息瓶颈视角:好的 latent action 应该压缩掉状态相关的冗余、保留任务相关的动作信息。形式上求最小充分统计量:

$$z^* = \arg\min_z \; I(z; s) - \beta \, I(z; a)$$

其中 $I(\cdot;\cdot)$ 是互信息,$\beta > 0$ 平衡压缩率与重构能力。直觉:$I(z;s)$ 要小($z$ 不该编码 $s$ 本身能算出的信息,否则低层 policy 直接看 $s$ 就行);$I(z;a)$ 要大($z$ 必须足够重建 expert 动作)。当 $\beta=1$ 时退化为变分信息瓶颈(VIB),实践中常用 KL 项近似 $I(z;s)$:VAE-style 的 latent action model(如 LAPA [Ye 2024, arxiv:2410.11758])最小化 $\|a - \hat{a}(s,z)\|^2 + \lambda \, D_{\mathrm{KL}}(q(z|s,a) \| p(z))$。

信息容量的实际数字:高层每 $T$ 步出一次 $z$(如 $T=10$,10 Hz 高层 × 100 Hz 低层),$z$ 维度典型 $d=8\sim 32$,则高层→低层「带宽」约 $d \cdot \text{fps}/T = 32 \times 10 = 320$ dim/秒(若按每维 ~1 bit 的保守估计 → ~320 bit/秒)。对比语言子指令(一句话 ~5 token,1-2 Hz 决策,每 token ~10 bit)≈ 50-100 bit/秒——latent 实际带宽更高且更密集。

谁用:ASE/CALM(latent skill,离散 $z$)、shared autonomy latent actions [arxiv:2005.03210]、LAPA / π0.5(latent action pretraining)、VLA+WBC 分层(实验性)。

优点分层——高层只关心「做什么」,低层关心「怎么做」;低层可跨任务复用;$z$ 维度低,高层推理成本低。

缺点:latent 的语义不明确(不可解释);训练两套网络且要联合优化;$z$ 的容量上限限制了高层能表达的复杂度(见 T10)。

三组关键对比

对比 1 · Discrete token(RT-2)vs Continuous flow(π0)

维度Discrete tokenContinuous flow
表达力弱(离散化)强(连续多模态)
精细操作好(π0 叠衣服)
推理慢(token by token)中(采样 N 步)
复用 LLM✅ 直接❌ 要 action expert

趋势:VLA 从 discrete token(RT-2/OpenVLA)转向 continuous flow(π0/GR00T N1)。

对比 2 · 单步 vs Action chunk

维度单步Action chunk
协变量偏移严重缓解
执行平滑平滑
长程任务一步步来单 chunk 不够

趋势:现代方法都用 chunk。

对比 3 · VLA + WBC 分层的接口(T10 开放问题)

人形控制栈里,VLA(高层)输出什么给 WBC(低层)?三种方案:

方案VLA 输出信息带宽优劣
语言子指令"把杯子往左移"(~5 token, 1-2 Hz)50-100 bit/s语义清晰但粗糙,WBC 要自己理解
关节期望$q_{\text{des}}$ 序列($n=20\sim40$ DoF, 10-50 Hz)2k-20k bit/s精确但 VLA 难学高维(学不动 40 DoF 期望角序列)
Latent$z \in \mathbb{R}^d$($d=8\sim32$, 10 Hz)300-1000 bit/s紧凑但语义不明

带宽匹配分析:低层 WBC 通常 100-1000 Hz 内部循环,但它真正需要的「外部意图」带宽远低于此(人形平衡/locomotion 的意图变化 ~1-5 Hz 足够)。关键约束是高层决策频率 × 输出维度 = 高层带宽 ≥ 任务意图带宽

  • 语言子指令:意图带宽充裕(一句话够管好几秒),但语义粗糙——「往左」没说多少、多快,WBC 要补大量细节。
  • 关节期望:带宽过剩但高维难学(VLA 在 7B 参数下学 20+ DoF 期望角分布会过拟合)。
  • Latent:带宽与「意图带宽」匹配最好,但 $z$ 不可解释、且需要额外训练低层 decoder policy。

数学上的最优接口(开放问题):是否存在一个映射 $\phi: \text{语言/视觉意图} \to z$,使得 $z$ 既是 VLA 易学的低维量,又能被 WBC 通过 $\psi: z \to \tau$ 解出所需力矩?形式上等价于找一个充分且最小的 bottleneck

$$\exists \, z: \; \underbrace{I(z; \text{任务意图})}_{\text{信息充分}} \ge H(\text{意图}) - \epsilon, \quad \underbrace{\dim(z)}_{\text{维度最小}} \le d^*$$

GR00T N1 / π0.5 / SONIC universal token 走 latent action 路线(GR00T N1 内部还嵌套了 LAPA latent action 预训练作跨本体统一),正是这个方向上的探索。HumanPlus / HOMIE / OmniH2O 则用「全身目标姿态」作为接口(关节期望的特化)。

这是 2025-2026 最重要的开放问题之一(见 T10)。

复盘:误区、检查点与 FAQ

常见误用

  • ❌ 「VLA 输出 torque」——VLA 频率太低(Hz 级),控制不了 torque(需要 100Hz+)
  • ❌ 「discrete token 做灵巧操作」——离散化精度不够,π0 才证明 flow 必要
  • ❌ 「action chunk 解决了协变量偏移」——只是缓解,不是解决

常见误区

"视觉-语言-动作模型直接输出力矩就行" —— 不行。这类模型频率只有几赫兹,控制不了力矩(要 100 Hz 以上)。

低频高层策略出目标角度或动作块,低层 PD 控制器处理高频。

"离散 token 万能,灵巧操作也能做" —— 精度不够。256 个桶在 ±1 弧度范围量化误差约 4 毫弧度,对精细捏取太粗糙。π0 才证明流匹配式连续动作是灵巧操作的关键。

"动作块解决了协变量偏移" —— 只是缓解。一次预测 N 步把有效视野缩短 N 倍,但 chunk 滚动累积的误差仍能把策略推到训练分布外

动作块是廉价缓解,不是根治。

检查点

Q1

动作表示在机器人学习里扮演什么角色?

💡 显示参考答案
  • 入门层「是什么·为什么」段直接说明。
Q2

七种主流接口里,哪一种是当前腿足运动的事实标准?

💡 显示参考答案
  • 相应段落 + 直觉层 类比共同支撑。
Q3

为什么离散 token 在灵巧操作上吃力?

💡 显示参考答案
  • 常见误区或 入门层 关键句直接说明。
Q4

用"指挥棒"类比解释:抽象层次越高,为什么越省力也越不精确?

💡 显示参考答案
  • 入门层 关键句或常见误区直接说明。
Q5

假设你要做高层 VLA + 低层 PD 的分层架构,高层用什么动作表示比较合理?为什么?

💡 显示参考答案
  • 入门层 应用提示。

FAQ

Q1:π0 为什么从离散 token 转向连续流匹配?

离散化损失精度,多模态动作被压成 argmax。π0 用流匹配生成连续动作块,精度保留、多模态自然支持。这是它能在叠衣服这种灵巧任务上突破的关键。

Q2:动作块到底有多大?

Diffusion Policy 用 16 步,ACT 用 100 步,π0 / RDT-1B 用 50 步。块越大越能缓解协变量偏移,但执行时环境变化会让整个块失效,要靠滚动重预测(receding horizon)。

Q3:分层架构里高层给低层"隐式指令"是什么?

高层输出一个低维向量(8-32 维),低层策略把它解码成具体动作。高层只管"做什么",低层管"怎么做"。优点是低层可跨任务复用、高层推理便宜;缺点是隐向量语义不明、不可解释。


深度辨析 → site/concepts/C-action-representations.html

相关