PAPER DEEP DIVE
AnyBody:从任意关键点引导的自由形式全身人形控制
AnyBody 提出统一的全身人形控制器,可由任意子集的身体关键点驱动,实现自由形式的全身运动控制。无需完整运动捕捉数据,仅用部分关键点即可引导人形机器人完成多样化全身运动。
1. 论文概览:从任意关键点引导的自由形式全身人形控制
AnyBody 提出统一的全身人形控制器,可由任意子集的身体关键点驱动,实现自由形式的全身运动控制。核心动机是:现有基于物理的运动跟踪方法依赖昂贵的动捕系统,而分层控制框架将上下身分离,限制了协调的全身行为。AnyBody 学习一个共享的球面潜在运动表征,将多种部分身体条件统一到单一控制框架中。操作者可根据任务和部署场景使用不同关键点配置——从稀疏上肢跟踪到全身控制甚至单末端执行器引导。在 Unitree G1 上验证,支持零样本真机部署、未见人体运动泛化、以及下游 RL 微调(避障、写字、容器放置等)。
2. 核心问题:灵活的人形遥操作与全身协调
人形机器人控制的核心挑战在于高自由度和维持稳定全身协调的困难。现有范式是物理运动跟踪——策略先在仿真中模仿人体运动,再用动捕系统采集的密集运动参考控制。但动捕系统昂贵且不便,限制了可扩展的人形遥操作和大规模全身控制数据采集。分层框架(上肢操作+下肢行走分离)虽允许仅遥操作上半身,但固定控制接口且显式分离上下身,限制协调的全身行为。AnyBody 的核心洞见是:学习一个共享的球面潜在运动表征,将多样的部分身体条件统一到一个全身控制框架——不同关键点子集通过 Transformer 编码器映射到同一潜在空间,再由冻结的动力学感知解码器产生协调的全身运动。
3. 方法:三阶段训练流程
3.1 阶段一:潜在空间与动力学感知解码器
首先将特权教师 $\pi^T$(用 RL 训练跟踪大规模运动数据集)在线蒸馏为确定性编码器-解码器。编码器输出经 L2 归一化投影到单位超球面:
$$z = \widehat{E}_\theta(s^g, s^p) \in \mathbb{S}^{d_z-1}, \quad a = D_\phi(z, s^p) \tag{1}$$蒸馏损失为行为克隆项加余弦平滑正则:
$$\mathcal{L}_1 = \|D_\phi(z, s^p) - \pi^T(s)\|_2^2 + \lambda_{\text{sm}}(1 - \cos(z_t, z_{t-1})) \tag{2}$$球面投影约束所有潜在在单位超球面上,消除无约束 BC 的范数漂移失败模式。$\lambda_{\text{sm}}=0.1$。教师 PPO 使用 $r = \sum_i w_i r_i$,其中 $r_i = \exp(-e_i^2/\sigma_i^2)$ 用于跟踪项。解码器 $D$ 冻结后作为下游阶段的不动运动先验。
3.2 阶段二:部分关键点编码器在线蒸馏
将关节命令编码器替换为关键点编码器 $E_\psi^{kp}$,消费掩码关键点和本体感受,输出同一空间的潜在。$E_\psi^{kp}$ 是基于自注意力的 Transformer,每个关键点一个 token;缺失关键点通过注意力掩码 $m$ 丢弃,任意子集在测试时均可接受。潜在蒸馏对齐关键点潜在与特权潜在:
$$\mathcal{L}_2 = (1 - \cos(\hat{z}^{kp}, \hat{z})) + \lambda_a \|D(\hat{z}^{kp}, s^p) - a_{\text{JC}}\|_2^2 \tag{3}$$训练遵循三阶段掩码课程:全关键点可见 → 逐关键点伯努利掩码(保留概率 1.0→0.4)→ 语义部署模式采样(躯干/腕/踝-only 等)。5 个关键点(KP5):躯干、左右腕、左右踝,每个 token 为 $T \times 3 = 45$ 维(15 个对数间隔时间偏移跨 0.5s 窗口)。
3.3 阶段三:任务特定 RL 微调
在潜在空间用 PPO 微调,RL 动作为潜在 $z$,环境应用 $a = D(z, s^p)$ 且 $D$ 冻结为运动先验。不微调 $E_\psi^{kp}$ 或插入 LoRA 适配器,而是学习小型残差校正器 $g_\xi$:
$$z = \widehat{\mu + \alpha \Delta z}, \quad \Delta z = g_\xi(o, \mu), \quad \mu = E_\psi^{kp}(k \odot m, s^p) \tag{4}$$小增益初始化($\Delta z \approx 0$)使策略在初始化时复现蒸馏跟踪器——安全起点避免随机潜在探索在预训练解码器上的奖励崩溃。$g_\xi$ 是浅层 per-body-token Transformer,输出投影 Xavier 初始化增益 0.01。RL 奖励为:
$$r_t = \sum_k w_k r_t^{(k)}, \quad r_i = \exp(-e_i^2 / \sigma_i^2) \tag{5}$$
4. 实验
4.1 定量跟踪分析
在不同关键点命令模式下评估跟踪精度。全身(5点)成功率 97.6%,上肢(3点)94.8%,腕(2点)91.2%,单腕 88.4%。POI 位置误差 8.68-10.90cm,速度误差 0.284-0.301m/s。
| 命令模式 | 关键点数 | 成功率(%) | 位置误差(cm) | 速度误差 |
|---|---|---|---|---|
| 全身 | 5 | 97.6 | 10.90 | 0.301 |
| 上肢(腕+躯干) | 3 | 94.8 | 9.48 | 0.284 |
| 双腕 | 2 | 91.2 | 9.12 | 0.295 |
| 单腕 | 1 | 88.4 | 8.68 | 0.290 |
4.2 下游 RL 微调
五个任务家族验证下游 RL 微调。无微调时多数任务成功率低或为零,微调后大幅提升。避障从 54.68% 升至 97.09%,低净空从 44.36% 升至 99.47%,容器放置从 0% 升至 95.56%,腕写字从 0% 升至 97.87%。
| 任务 | 无 RL 微调 | 有 RL 微调 |
|---|---|---|
| 避障 | 54.68% | 97.09% |
| 屏障 | 10.49% | 96.04% |
| 低净空 | 44.36% | 99.47% |
| 容器放置 | 0% | 95.56% |
| 腕写字 | 0% | 97.87% |
4.3 真机实验
AnyBody 零样本部署到物理 Unitree G1 上。VR 遥操作通过交互式 UI 驱动,操作者用不同关键点配置控制机器人。三个任务家族的真机快照展示:全向行走(躯干关键点)、空中写字(右腕关键点)、避障(右腕+障碍 OBB)。
4.4 开放式生成分析与失败模式
除定量指标外,论文还通过手动指定稀疏关键点轨迹来测试开放式可控性。用户可通过轻量级轨迹创建界面设计关键点路径并导出为可跟踪运动文件。实验发现,策略能从单关键点命令合成方向性行走、手臂摆动、弯腰、下蹲等多种全身行为,表明少量任务相关关键点轨迹即可诱导丰富的全身运动。但也观察到若干失败模式:当命令轨迹对应训练语料中罕见姿态(如极低位置伸手)或严重超出分布的目标轨迹(如大尺度空中书写)时,策略表现明显退化。论文指出这些失败案例可通过下游潜在空间 RL 微调显著改善。
下游 RL 的结果也值得深入解读:容器避障任务在无微调时成功率为0%,微调后达到95.56%;空中写字任务同样从0%跃升至97.87%。这表明潜在空间已捕获了协调全身运动的丰富流形分布,RL 主要是在组合和调整已有运动模式而非从头学习全身行为。微调过程快速且稳定地收敛,进一步验证了冻结解码器作为运动先验的有效性。
5. 局限性
- 关键点数量下限:虽支持任意子集,但单关键点模式成功率(88.4%)和精度低于全身模式(97.6%),极稀疏条件下全身协调性下降。
- 真机感知差距:真机部署为零样本 VR 遥操作,未展示自主感知驱动的全身控制;sim-to-real 的感知层面(视觉、触觉)未涉及。
- 下游任务范围:五个 RL 微调任务虽多样但均在仿真中训练,更复杂的真实世界操作任务(如多物体重排、工具使用)未验证。
6. 总结
AnyBody 提出统一的全身人形控制器,由任意身体关键点子集驱动。核心设计是三阶段流程:阶段一将特权教师蒸馏为球面潜在空间的编码器-解码器;阶段二冻结解码器,训练 Transformer 关键点编码器通过在线潜在蒸馏支持任意子集;阶段三用残差潜在 RL 微调特定任务。球面投影消除潜在范数漂移,小增益初始化确保 RL 安全起点。实验证明从 1 到 5 个关键点均可维持协调全身运动(成功率 88-98%),下游 RL 微调将零基线任务提升至 95-99%,且零样本部署真机。核心洞见是:全身控制不需要完整的运动捕捉——一个共享的球面潜在运动流形可以统一从单点到全身的所有条件形式,关键是让解码器学会"如何从任意局部线索重建协调的全身运动"。
flowchart TD
A["大规模人体运动数据集"] --> B["阶段1: 特权教师 PPO 训练"]
B --> C["在线蒸馏 → 编码器 E + 解码器 D"]
C --> D["球面潜在空间 S^(dz-1)"]
D --> E["冻结 D 作为运动先验"]
F["关键点(任意子集)"] --> G["阶段2: Transformer 编码器 E_kp"]
G --> H["掩码课程: 全可见→伯努利→语义模式"]
H --> I["潜在蒸馏: 对齐 E_kp 输出到 E 输出"]
E --> J["阶段3: 残差 RL 微调"]
I --> J
J --> K["校正器 g_ξ → Δz (小增益初始化)"]
K --> L["z = μ + αΔz → 冻结 D → 全身运动"]
L --> M{"部署模式"}
M -->|5点全身| N["成功率 97.6%"]
M -->|3点上肢| O["成功率 94.8%"]
M -->|1点单腕| P["成功率 88.4%"]
L --> Q["真机 G1 零样本部署"]
L --> R["下游 RL: 避障/写字/容器 95-99%"]



