BeyondMimic 论文解析

BeyondMimic 论文解析整理

文档说明

本文档基于论文 BeyondMimic: From Motion Tracking to Versatile Humanoid Control via Guided Diffusion 与官方开源仓库 HybridRobotics/whole_body_tracking 整理而成,目标是把 BeyondMimic 的核心思想、方法流程、技术细节、创新点,以及它如何解决运动模仿跟踪的泛化问题,系统地讲清楚。

阅读时需要先明确一点:

  • 论文提出的是一个 两阶段框架
  • 官方仓库 whole_body_tracking 目前主要公开的是 第一阶段:motion tracking training
  • 论文中的 第二阶段(guided diffusion) 在该仓库中并未完整公开实现。

因此,本文的讲解采用以下原则:

  1. 用论文把 完整 BeyondMimic 解释清楚;
  2. 用官方代码去对应验证 第一阶段到底如何落地实现
  3. 对第二阶段,重点解释其方法逻辑、训练与推理机制,以及它和第一阶段之间的真实连接方式。

一、BeyondMimic 要解决的核心问题

BeyondMimic 同时试图解决 humanoid whole-body control 里两个长期存在的难题。

1. 如何把人类动作高质量地迁移到机器人上

传统人形机器人模仿控制存在几个典型问题:

  • 每个动作往往都要单独调 reward、单独调超参数;
  • 动作越动态,越容易训练不稳或真机失败;
  • sim-to-real 往往依赖大量 domain randomization、复杂正则项和繁重的工程调参;
  • 即便能 mimic,动作也不一定自然,容易出现僵硬、冲击大、过度保守等问题。

BeyondMimic 认为,问题的关键不在于继续堆更多 reward engineering,而在于:

  • 把 tracking 目标定义对;
  • 把 actuator/armature/delay 这些底层系统实现对;
  • 用一套统一、简单、物理一致的 formulation 去训练。

它希望做到的是:

不为每个动作重做一套方法,而是用同一套 motion-tracking recipe,稳定学出大量高质量、可真机部署的人类风格动作。

2. 如何从"会模仿"走向"会做新任务"

即使 motion tracking 做得很好,它本质上仍然只是:

给你一段 reference motion,我负责把它复现出来。

但真实部署时,机器人需要面对的是很多 训练中没见过的新任务,例如:

  • 只给一个速度命令,让它走或跑;
  • 给一个 waypoint,让它到达目标点;
  • 前面有障碍物,让它自己绕开;
  • 给几个未来关键帧,让它自动补出连续动作。

如果这些任务都还需要重新训练一个新策略,那么系统并没有真正泛化。

BeyondMimic 的第二部分,正是为了解决这个问题:

先把大量高质量技能学出来,再用 diffusion model 在测试时在线组合这些技能,去适配新的任务目标。


二、整体框架总览:BeyondMimic 是一个两阶段系统

BeyondMimic 的总体结构可以概括为:

阶段一:Scalable Human Motion Tracking via RL

目标是从大量人类动作中,学出一批高质量的 motion-tracking policies。

这里的关键词不是"一个策略学所有动作",而是:

  • 每个 motion 可以训练自己的 tracking policy;
  • 但所有 motion 共用一套 MDP 设计、同一套 reward 形式、同一组 PPO 超参数
  • 因而可以把它当成一个 one-recipe-fits-all 的训练配方。

阶段二:Versatile Humanoid Control via Guided Diffusion

目标是把第一阶段得到的大量 tracking skills,进一步整合成一个统一的生成式控制模型。

它不是再做一个普通的 imitation policy,而是:

  • 先把第一阶段 tracking actor 的行为蒸馏到一个 VAE latent space
  • 再训练一个 state-latent diffusion model
  • 测试时通过 classifier guidance / test-time optimization,把这个扩散模型朝新任务目标在线引导;
  • 从而在 不重新训练 的情况下,完成摇杆遥操、路点导航、避障、关键帧补全等任务。

所以,BeyondMimic 不是"一个 RL 策略直接万能",而是:

第一阶段负责学技能,第二阶段负责任务泛化。


三、第一阶段详解:Scalable Human Motion Tracking via RL

这一阶段是官方仓库 HybridRobotics/whole_body_tracking 主要覆盖的内容。


3.1 数据准备:先把人类动作变成机器人 reference motion

第一阶段并不是直接拿原始 mocap 数据训练。

论文假设输入已经是 retarget 到机器人本体上的参考动作,每一帧包含:

  • 根部位置与姿态;
  • 关节角;
  • 根部线速度与角速度;
  • 关节速度。

在此基础上,通过前向运动学进一步计算出:

  • 机器人各 body link 的位姿;
  • 各 body link 的线速度、角速度等信息。

官方仓库中的预处理流程与这一点严格对应。其 README 明确写到:

  • 输入应为 retargeted motion
  • 使用 csv_to_npz.py 将 retarget 结果转换为训练使用的数据;
  • 在转换过程中通过 forward kinematics 补出 body pose / body velocity / body acceleration
  • 然后上传到 WandB registry,训练时按 motion name 自动拉取。

这说明 BeyondMimic 的 motion tracking 不是"跟踪原始人类骨架",而是:

先把人类动作转成机器人自己身体上的参考轨迹,再让 RL 去跟踪这套机器人 reference。

这一点很关键,因为只有这样,tracking 目标才与机器人本体动力学、关节定义、形态约束一致。


3.2 它的"scalable"到底是什么意思

论文中"scalable learning from human motions"这个说法,容易被误解成"一个策略同时学会所有动作"。

实际上,这里的含义是:

  • 不是一个 tracker 同时跟踪所有 motion;
  • 而是 每个 motion 独立训练一个 tracker
  • 但所有 motion 都用同一套训练 recipe。

所谓 scalable,真正强调的是:

  1. 新增动作不需要重新设计 reward;
  2. 不需要 motion-specific tuning;
  3. 同一组超参数可以扩展到大量动作。

这也是官方仓库 README 明确强调的目标:

你应该可以在 LAFAN1 里训练任意一个 sim-to-real-ready 的 motion,而不需要调整参数。

因此,第一阶段的核心贡献不是"单策略万能",而是:

把 humanoid motion tracking 从"按动作做工程"变成"按统一配方批量生产 skill tracker"。


3.3 运动跟踪目标:anchor-centered relative tracking

这是 BeyondMimic 第一阶段最重要的设计之一。

传统全局跟踪的根本问题

如果让机器人严格跟踪 reference 的 全局位置和姿态,会遇到一个严重问题:

  • 训练时有扰动;
  • 真实世界状态估计有误差;
  • 仿真和真机存在轻微动力学偏差;
  • 一旦机器人偏离了 reference 的绝对世界坐标,就会不断积累误差。

结果通常是:

  • 动作被 reference 强行"拽回去";
  • 恢复行为不自然;
  • 动态动作很容易崩溃。

BeyondMimic 的解决办法

论文没有要求所有 body 都跟踪 reference 的全局姿态,而是引入了一个 anchor body(通常是 torso/root)。

其基本策略是:

  • anchor 自己 仍然跟踪 reference 的全局目标;
  • 其他 body 则不直接跟踪 reference 的全局位姿;
  • 而是根据当前机器人 anchor 的姿态,把 reference motion 重新"挂"到当前机器人身体上。

更具体地说:

  1. 位置上:
    • x、y 平移对齐到当前机器人 anchor;
    • z 高度仍使用 reference 的 anchor 高度;
  2. 朝向上:
    • 只对齐 yaw;
    • 不强行对齐 roll/pitch;
  3. 其他 body 的目标位姿,保持与 anchor 的相对结构关系。

论文 supplementary 对这个 anchor transform 给出了明确数学形式,本质上就是:

保留动作风格和身体相对结构,放宽全局漂移。

这一设计解决了什么

它解决的是一个非常核心的矛盾:

  • 如果完全跟全局,系统不够鲁棒;
  • 如果完全忽略全局,动作又会失去整体风格与时序感。

BeyondMimic 的 anchor-centered relative tracking 相当于说:

机器人应该像 reference 那样动,但不要求它在世界坐标系里一毫米不差地站在参考轨迹上。

于是:

  • 受扰动后可以恢复;
  • 允许 benign drift;
  • 动作风格仍然保持;
  • 更适合 sim-to-real。

在官方代码中,这一思想直接体现在 commands.py 中对 anchor-centered command 的构造:

  • 使用当前机器人 anchor 的位置作为 xy 平移基准;
  • z 仍保留 reference anchor 的高度;
  • 只取 yaw 对齐;
  • 再把其他 body 的 reference 位置/姿态转换成新的 relative target。

因此,这不是论文里的抽象想法,而是第一阶段代码实现中的核心逻辑。


3.4 奖励函数:极简但物理一致

BeyondMimic 在奖励设计上的思路非常鲜明:

不靠大量 ad-hoc reward 去"修"动作,

而是只保留最必要的 tracking 项和少量 physics consistency 正则项。

这和许多 humanoid imitation / locomotion 工作非常不同。

3.4.1 Task reward:统一的 task-space tracking

对目标 body 集合 B t a r g e t B_{target} Btarget,论文分别定义了四种 tracking error:

  1. body position error
  2. body orientation error
  3. body linear velocity error
  4. body angular velocity error

对每一种误差,先对所有目标 body 取平均均方误差,再通过一个 Gaussian-shaped exponential 映射为 reward:

r ( e ˉ s , σ s ) = exp ⁡ ( − e ˉ s / σ s 2 ) r(\bar e_s, \sigma_s) = \exp(-\bar e_s / \sigma_s^2) r(eˉs,σs)=exp(−eˉs/σs2)

然后把四项相加得到总 tracking reward:

r t a s k = ∑ s ∈ { p , R , v , ω } r ( e ˉ s , σ s ) r_{task} = \sum_{s \in \{p, R, v, \omega\}} r(\bar e_s, \sigma_s) rtask=s∈{p,R,v,ω}∑r(eˉs,σs)

supplementary 中给出了统一的 tolerance scale:

  • 位置: σ p = 0.3 \sigma_p = 0.3 σp=0.3
  • 朝向: σ R = 0.4 \sigma_R = 0.4 σR=0.4
  • 线速度: σ v = 1.0 \sigma_v = 1.0 σv=1.0
  • 角速度: σ ω = 3.14 \sigma_\omega = 3.14 σω=3.14

这种写法的好处是:

  • 各 tracking 项都被压到类似范围;
  • 不容易出现某一项数值过大主导训练;
  • reward 连续光滑,适合 RL 优化。

3.4.2 Optional anchor global terms

论文还允许对 anchor body 增加全局 position / orientation tracking 项,用于约束整体运动结构。

但重点仍然不是让全身 rigidly 跟全局,而是:

  • anchor 提供最小必要的全局信息;
  • 其余 body 主要仍通过 relative target 保持风格。

3.4.3 只有三个 regularization

BeyondMimic 的一个重要方法论变化是:

大量 reward engineering 不是必须的。

他们只保留三个轻量正则项:

  1. joint limit penalty

    • 防止关节越过软限位;
    • 主要面向硬件安全。
  2. action smoothness penalty

    • 惩罚连续动作变化过大;
    • 抑制高频 jitter。
  3. self-contact penalty

    • 惩罚不希望出现的自碰撞;
    • 提高物理一致性。

总 reward 写成:

r = r t a s k − λ l r l i m i t − λ s r s m o o t h − λ c r c o n t a c t r = r_{task} - \lambda_l r_{limit} - \lambda_s r_{smooth} - \lambda_c r_{contact} r=rtask−λlrlimit−λsrsmooth−λcrcontact

其中各项权重在 supplementary 中给得很明确:

  • λ l = 10.0 \lambda_l = 10.0 λl=10.0
  • λ s = 0.1 \lambda_s = 0.1 λs=0.1
  • λ c = 0.1 \lambda_c = 0.1 λc=0.1

3.4.4 为什么这是创新点

BeyondMimic 奖励设计的创新不在于公式多复杂,而在于它说明了:

如果系统建模做对了,motion tracking 不需要靠海量特例化 reward 去拼凑。

也就是说,BeyondMimic 把"动作自然不自然"的决定因素,从 reward hack,转移到了:

  • tracking 目标定义;
  • 低层 actuation 设计;
  • 物理参数建模;
  • 部署延迟控制;
  • 适量而精准的 domain randomization。

这正是它和许多 heavily engineered imitation pipeline 的本质区别。

在官方代码中,这些 reward 项在 tracking_env_cfg.pyrewards.py 中都有明确对应实现。


3.5 观测设计:最小必要信息 + 非对称 actor-critic

BeyondMimic 的 policy observation 非常克制,没有刻意加入很长的历史堆叠,也没有加入太多训练时专用的特权信息。

论文中的 actor 输入可以概括为:

  • 参考动作的 phase / progress cue;
  • anchor pose error;
  • IMU twist;
  • 当前 joint positions(相对默认位);
  • 当前 joint velocities;
  • 上一步动作。

3.5.1 为什么要有 phase / reference cue

phase 的作用不是让策略死记 reference 的关节角,而是让策略知道当前应处于 reference motion 的哪个阶段。

也就是说,它提供的是:

  • 动作节奏;
  • 任务进度;
  • 行为上下文。

3.5.2 为什么要有 anchor error

由于 reference motion 本身是定义在全局坐标下的,如果没有最小的全局 cue,策略难以稳定恢复整体平衡和漂移。

anchor pose error 提供了这个最低限度的"全局校正信号",同时又不会像全局 rigid tracking 那样过强约束全身。

3.5.3 为什么要有 IMU twist 与上一步动作

论文特别强调:

  • IMU twist 有助于 push recovery、步态时序和动态稳定;
  • last action 与当前 joint state 的组合,可以间接反映当前正在实现的 torque/contact 状态;
  • 配合 action smoothness penalty,可以有效抑制抖动。

3.5.4 为什么不用长 history

论文的 ablation 发现,在他们这个"极简 randomization + 高质量系统实现"的 setup 下,加入较长历史反而会伤害 sim-to-real 表现。

一个合理解释是:

  • 历史越长,策略越容易记住仿真中特有的时序相关性;
  • 真实部署时,这些时序模式与仿真略有偏差,就会导致更大的 distribution shift。

这也是 BeyondMimic 非常鲜明的一个观点:

不是观测越多越好,而是只给部署时真正稳健、真正必要的信息。

3.5.5 非对称 actor-critic

BeyondMimic 采用了 asymmetric actor-critic:

  • actor:只看部署时可获得的观测;
  • critic:额外接收 per-body relative poses 等 privileged information,用来更稳定地估计 value。

这样做的好处是:

  • 训练效率更高;
  • 部署时 actor 不依赖训练阶段"作弊信息";
  • 更符合真实机器人上的信息结构。

官方代码中,PrivilegedCfg 明确体现了这一设计:critic 额外接收更多 body-level 状态信息。


3.6 动作设计:不是直接 torque,也不是硬位置轨迹,而是低阻抗 PD 的 setpoint

这是 BeyondMimic 第一阶段非常重要但常被忽视的一点。

3.6.1 为什么不用直接 torque policy

直接输出关节扭矩在高自由度 humanoid 上往往更难训练、更敏感,也更依赖非常精细的动力学建模。

3.6.2 为什么也不采用"高刚度位置伺服回放"

很多 imitation / motion replay 方法实际效果接近:

  • 策略给出一串关节目标;
  • 低层高刚度 PD 牢牢跟踪;
  • 最终更像"运动学回放"。

这样做虽然在仿真里容易显得稳定,但会带来几个问题:

  • 太硬,缺乏自然动态;
  • 碰撞时不够顺从;
  • 放大传感噪声;
  • 不利于冲击吸收和真机安全;
  • 很容易失去 human-like compliance。

3.6.3 BeyondMimic 的动作定义

论文把动作定义为 归一化 joint position setpoint

θ s p = θ 0 + α ⊙ a \theta_{sp} = \theta_0 + \alpha \odot a θsp=θ0+α⊙a

其中:

  • a a a 是策略输出;
  • θ 0 \theta_0 θ0 是默认关节位;
  • α \alpha α 是 per-joint action scale。

这些 setpoint 最终送给底层 position PD actuator,用来产生扭矩。

但作者特别强调:

这些 setpoint 不是严格意义上的位置参考轨迹,

而是一个中间变量,用来塑造实际的关节扭矩输出。

3.6.4 关键不是"PD",而是"合理、低阻抗、物理一致的 PD"

BeyondMimic 没有使用特别高的关节刚度,而是根据 reflected inertia / armature 去设定 moderate gains。

supplementary 中给出了一套启发式规则:

  • 刚度 (k_p) 由关节 armature 与自然频率确定;
  • 阻尼 (k_d) 由阻尼比和自然频率确定;
  • 选取较低自然频率(如 10 Hz)和偏大的阻尼比,以获得较顺从、较稳定的响应。

这样做的结果是:

  • 保留更多自然动力学;
  • 不会把系统变成死硬的 kinematic playback;
  • 动作更自然,冲击更柔和;
  • 同时 last action + current state 也更能反映当前真实接触状态。

3.6.5 为什么这和自然性直接相关

很多人把动作自然性简单理解为"reference 够像"。

BeyondMimic 的观点更深入:

动作自然性不仅取决于高层轨迹像不像,还取决于低层 actuation 有没有保留正确的动力学响应。

这就是它相比许多高刚度 imitation controller 更自然的重要原因。


3.7 Sim-to-real 的关键:armature、delay 与系统实现

BeyondMimic 在第一阶段最值得重视的一点,是它把 sim-to-real 问题看得非常"工程真实"。

论文明确指出,成功 transfer 的关键不只是 randomization,更是:

  • 使用厂家给定的正确物理参数;
  • 正确建模 armature(反射惯量);
  • 尽量降低部署延迟;
  • 让整条部署链条实时而一致。

3.7.1 Armature 不是数值技巧,而是真实物理量

supplementary 专门用较长篇幅解释了 armature:

  • 齿轮减速电机的转子惯量,通过 gear ratio 反射到关节侧;
  • 这个反射惯量常常是 distal joint 的主导惯量来源;
  • 如果把 armature 设错,改变的不是"数值稳定性",而是机器人真实感知到的动力学。

论文 ablation 也表明:

  • 忽略 armature 会显著恶化 tracking;
  • 特别在高动态动作中,会出现 overswinging、自碰撞等问题。

3.7.2 Delay 很小也会毁掉 tracking

论文还专门做了延迟注入实验,发现:

  • 2ms 就会显著增加速度误差;
  • 5ms、10ms 会明显增加失败率。

这说明对于动态 whole-body motion,低延迟不是锦上添花,而是必要条件。

3.7.3 官方代码中的体现

robots/actuator.py 中,BeyondMimic 的官方代码实现了带 delay buffer 的 actuator:

  • position / velocity / effort command 都可以加入 delay;
  • 每个环境 reset 时都可以重新采样 delay;
  • actuator 会取延迟后的命令再交给底层 PD。

这说明论文里关于 delay 的讨论,不只是论文分析,而是直接反映在实现上的真实设计。

3.7.4 方法论意义

很多工作倾向于用更多 domain randomization 去"掩盖"系统实现上的 mismatch。

BeyondMimic 的方法论很明确:

与其把 delay、actuator mismatch、armature error 全交给 RL 去适应,

不如先把能确定的系统误差尽量消除。

这一点是它能以更少 heuristics 达成更稳定 sim-to-real 的根本原因之一。


3.8 Domain randomization:少而准,而不是越多越好

论文明确提出一个与主流经验略有不同的观点:

过重的 domain randomization 会伤害动作质量与训练效率。

BeyondMimic 只随机化那些:

  • 在现实中确实存在不确定性;
  • 且跨 motion 都合理的物理因素。

3.8.1 它随机化了哪些量

主要包括:

  1. 地面接触参数

    • 静摩擦系数
    • 动摩擦系数
    • restitution
  2. 默认关节位置偏移

    • 用来模拟标定偏差
  3. torso center of mass 偏移

    • 用来模拟模型误差
  4. 周期性 root velocity perturbation

    • 用于提升抗扰性

3.8.2 为什么这种 minimal randomization 更好

如果随机化太多:

  • 策略会学得更保守;
  • 高动态动作质量会下降;
  • 训练更难收敛;
  • 更容易牺牲风格和自然性。

BeyondMimic 的思路是:

先把 deterministic 部分建模对,再只随机那些真正无法精确确定的参数。

这样可以在不破坏动作质量的情况下,提高真实世界鲁棒性。

3.8.3 官方代码对应

tracking_env_cfg.py 的事件设置中,可以看到与论文一致的 randomization 项:

  • material / friction 随机化;
  • joint default pos 随机化;
  • torso COM 随机化;
  • push velocity 扰动。

因此,这部分同样是论文---代码高度一致的设计。


3.9 Adaptive sampling:解决长序列训练难点

BeyondMimic 面对的一个现实问题是:

  • reference motion 可能长达几分钟;
  • 其中不同片段难度很不均匀;
  • 如果每次 reset 都均匀采样,训练会大量浪费在简单段上。

3.9.1 直觉

复杂动作常常是"局部特别难",例如:

  • 起跳瞬间;
  • 翻腾中落地;
  • cartwheel 的某一个过手点;
  • 从地上起身的关键重心切换。

如果这些段学不会,整个 motion 就始终失败。

3.9.2 BeyondMimic 的做法

论文把一段 motion 按时间切成多个 1-second bin,并维护每个 bin 的 failure rate:

  • 若某个 bin 失败更多,就提高它被采样为 reset 起点的概率;
  • 使用 EMA 平滑 failure rate;
  • 再通过一个向前看的卷积核,把失败责任部分分配给其前几段;
  • 当难段学会后,采样分布会逐渐回归均匀。

3.9.3 它解决了什么

这个机制解决的是:

RL 在长时序 tracking 中,训练预算无法自动聚焦关键难段的问题。

它并不改变最终 policy 的表达能力上限,但显著改变:

  • 收敛速度;
  • 难段成功率;
  • 长动作训练的稳定性。

论文 ablation 也清楚表明:

  • 没有 adaptive sampling 时,某些动作在 30k iteration 后依然过不了关键段;
  • 有 adaptive sampling 后,难段被快速攻克。

3.9.4 官方代码对应

commands.py 里,官方实现了完整的 adaptive sampling 流程:

  • 统计 failure count;
  • 做 EMA 更新;
  • 加 uniform floor;
  • 做非因果卷积平滑;
  • 再用 multinomial 采样难段。

这说明 adaptive sampling 是第一阶段真正重要的工程组件,不是论文里的"可有可无的小技巧"。


3.10 第一阶段训练本质:标准 PPO + 系统级设计优化

BeyondMimic 的第一阶段训练算法本身并不神秘。

从论文与官方代码来看:

  • 使用 MLP actor-critic;
  • 采用 PPO 训练;
  • policy 控制频率 50Hz;
  • 大规模并行环境;
  • 训练时长可到 30k iterations。

换句话说,它不是靠一个特别新奇的 RL 算法取胜。

真正决定效果的,是前面这些"系统级但又高度统一"的设计:

  • anchor-centered target;
  • 极简 reward;
  • 合理 observation;
  • moderate impedance;
  • 正确 armature;
  • delay-aware deployment;
  • minimal but effective randomization;
  • adaptive sampling。

因此可以说:

BeyondMimic 第一阶段的创新,不在 PPO 本身,而在于把 motion tracking 的整个系统配方做正确、做统一。


四、第一阶段的核心价值总结

到这里,可以把第一阶段的本质概括为一句话:

BeyondMimic 第一阶段不是发明了新的 tracking 算法,而是把 humanoid motion tracking 这件事从"每个动作单独手工调"提升成了"统一、可扩展、可真机迁移的训练配方"。

它的几个关键设计分别对应解决了不同问题:

  • anchor-centered target:解决全局刚性跟踪不鲁棒的问题;
  • 极简 reward:避免 motion-specific reward engineering;
  • 低阻抗 PD setpoint:保留自然动力学,避免僵硬 replay;
  • 正确 armature / delay 建模:显著改善 sim-to-real;
  • 适量 randomization:在鲁棒性与动作质量之间取得平衡;
  • adaptive sampling:让长动作、难动作也能有效收敛。

这批 tracker,正是第二阶段 diffusion 的技能来源。


五、第二阶段详解:Versatile Humanoid Control via Guided Diffusion

这是 BeyondMimic 真正"beyond mimic"的部分,也是论文最核心的第二个贡献。

但需要再次强调:

  • 论文完整提出了这一部分;
  • 你给出的官方仓库 whole_body_tracking 并未完整公开这一阶段的训练和部署代码;
  • 该仓库 README 也明确写明它主要覆盖 motion tracking training。

因此,这一部分的解释主要依据论文本身。


5.1 为什么不能只靠第一阶段 tracker

第一阶段的 tracker 很强,但它的本质仍然是:

给我完整 reference motion,我负责把它跟出来。

这有两个天然限制:

  1. 如果测试任务不是现成的完整轨迹,就没法直接用;
  2. 即使外面再套一个 planner,通常也会出现 planner-controller mismatch。

例如:

  • 用户只给一个 joystick 速度命令;
  • 环境里多了障碍;
  • 你只给几个未来关键帧;
  • 需要在 walking、running、cartwheel 间自由切换。

这些任务都很难直接写成一条固定的 reference trajectory。

BeyondMimic 的想法是:

不再把"任务"提前编码成一条完整 reference,

而是学一个能够生成未来行为分布的模型,

然后在测试时根据任务目标对这个分布做在线引导。

这就是 guided diffusion 的动机。


5.2 第二阶段不是直接训练 diffusion 输出动作,而是先做 VAE 蒸馏

这一点非常关键,也是很多读者最容易误解的地方。

BeyondMimic 第二阶段并不是:

  • 直接拿第一阶段 reference motion 做 diffusion;
  • 也不是直接在原始动作空间里做 diffusion。

它的做法是:

  1. 先把第一阶段的 motion-tracking actor 当作 teacher;
  2. 训练一个条件 VAE 去模仿这些 teacher 的动作生成行为;
  3. 再在这个 VAE 的 latent space 上做 diffusion。

5.2.1 为什么要先做 VAE

论文给出两个核心原因。

原因一:原始 action space 不够平滑

第一阶段动作本质上是 impedance controller 的 setpoint。由于接触切换、动态跃迁、高维关节耦合等因素,这个动作空间分布非常不规则,常带尖峰,不适合直接做 diffusion。

原因二:扩散模型推理有延迟

如果 diffusion 直接输出动作,那么它输出的动作会基于稍早的状态,容易产生"动作滞后"。

相比之下,更好的方式是:

  • diffusion 只生成 latent intention;
  • 一个轻量 decoder 在最后时刻结合"最新的 proprioception"把 latent 解码成动作。

这样既保留 diffusion 的全局规划能力,又兼顾实时控制所需的 state freshness。


5.3 VAE 是怎样连接第一阶段和第二阶段的

这一部分正是你前面特别追问的"第二部分如何作用于第一部分 actor"的关键。

5.3.1 真实关系不是"diffusion 指导第一阶段 actor"

很多人会误以为第二阶段是:

  • diffusion 生成一个中间参考;
  • 再把这个参考喂给第一阶段 actor;
  • actor 再输出动作。

但论文中的真实机制不是这样。

5.3.2 正确的数据流

第一阶段 actor 只在 离线训练期 充当 expert teacher。

然后训练一个条件 VAE:

  • encoder :接收 reference motion 相关信息,例如 ψ \psi ψ、 e a n c h o r e_{anchor} eanchor,输出 latent z z z;
  • decoder :接收 latent z z z 和当前本体感觉输入,例如 projected gravity、IMU、关节状态、last action,输出动作 a ^ \hat a a^。

论文中写为:

a ^ = D ( z , [ g , V i m u , θ , θ ˙ , a l a s t ] ) \hat a = D\bigl(z, [g, V_{imu}, \theta, \dot\theta, a_{last}]\bigr) a^=D(z,[g,Vimu,θ,θ˙,alast])

VAE 通过 DAgger 蒸馏来学习:

  • teacher 是第一阶段 motion-tracking policy;
  • student 是这个 encoder-decoder 结构。

于是:

第一阶段 actor 的"动作能力"并不是在测试时继续被调用,
而是被压缩进了 VAE decoder。

这意味着:

  • 第一阶段 actor 是老师;
  • 第二阶段真正在线出动作的是 decoder,而不是原 actor。

这点一定要分清。


5.4 用 VAE rollout 收集 diffusion 数据

VAE 训练好之后,作者并不是直接拿 clean expert 轨迹做 diffusion 数据集,而是:

  1. 用 VAE policy 在仿真中 rollout;
  2. 在 action 上加入 OU noise(Ornstein-Uhlenbeck noise);
  3. 记录 rollout 过程中产生的状态轨迹;
  4. 同时把动作编码回 latent;
  5. 形成 state-latent trajectory 样本。

5.4.1 为什么要加 OU noise

如果数据集只包含"干净且准确"的理想 rollout,那么 diffusion 在测试时遇到现实偏差、观测噪声、短暂失稳时,容易进入 OOD 区域。

论文借鉴了 prior work 的思路,但指出:

  • i.i.d. Gaussian noise 在 overdamped PD 系统里容易被快速滤掉;
  • 不能形成足够真实的状态偏差带;
  • OU noise 具有时间相关性,更能形成持续偏差。

因此,他们采用 OU noise,让策略在 rollout 中经历一条带误差的恢复带(error band),从而让后续 diffusion 学到:

不只是会生成理想技能轨迹,

还会从技能附近的扰动状态回到技能流形。

这对于测试期鲁棒性非常重要。


5.5 Diffusion 学的是什么:state-latent trajectory,而不是单步动作

这一步是 BeyondMimic 第二阶段最关键的建模创新之一。

他们构造的训练样本不是:

  • 当前状态到下一步动作;
  • 或单纯的 action sequence;

而是一条完整的短时域联合轨迹:

τ = [ s t − N , z t − N , ... , s t , z t , ... , s t + H , z t + H ] \tau = [s_{t-N}, z_{t-N}, \dots, s_t, z_t, \dots, s_{t+H}, z_{t+H}] τ=[st−N,zt−N,...,st,zt,...,st+H,zt+H]

其中包含:

  • 若干步历史 state + latent;
  • 当前 state + latent;
  • 若干步未来 state + latent。

5.5.1 为什么一定要包含 state

因为真实任务目标通常定义在 状态空间 上,而不是动作空间。

例如:

  • "往前走 1m/s" 是状态目标;
  • "到达 waypoint" 是状态目标;
  • "不要撞障碍物" 是状态目标;
  • "未来几个关键帧要满足某姿态" 仍然是状态目标。

如果 diffusion 只建模动作,你很难直接对这些未来目标做 guidance。

而通过 jointly modeling state + latent,模型隐式学会了:

latent 动作如何推动未来状态演化。

这样 guidance 才真正能利用"未来结果"反向塑形当前控制。

5.5.2 为什么不用 learned forward dynamics 单独桥接

理论上也可以:

  • diffusion 只输出 action;
  • 再用 learned dynamics model 去预测未来 state;
  • 最后在 state 上算 cost。

但论文认为这种方式:

  • 对高维 whole-body humanoid 太重;
  • dynamics model 精度和实时性都难保证;
  • 工程实现复杂。

所以 BeyondMimic 选择直接学习 state-latent joint distribution,把"动作影响未来状态"的因果关系吸收到生成模型内部。


5.6 Diffusion 里的状态表示:hybrid character--yaw-centric representation

为了让轨迹分布更好学,论文没有直接使用原始全局世界坐标,而是设计了一个比较精细的状态表示。

5.6.1 root 特征

root pose 与 twist 在 当前时刻的 character-yaw frame 下表示。

这样可以去掉:

  • 全局平移的不必要自由度;
  • 全局 yaw 的无关变化;

只保留与当前控制真正相关的 root motion 结构。

5.6.2 body 特征

对每个未来时刻 (t+n),body positions 和 velocities 则在各自时刻的 local root frame 下表示。

也就是说:

  • root 的时间演化统一参考当前 character frame;
  • body 的局部结构仍保留在各自时刻的身体坐标系中。

5.6.3 这一设计的作用

如果全部使用全局坐标:

  • 分布会很散;
  • 模型难以学到与任务无关的平移/朝向不变性。

如果全部使用纯局部坐标:

  • 虽然局部结构好学,但全局运动意图又被削弱。

因此,BeyondMimic 的 hybrid parameterization 本质上是在做一个平衡:

去掉无关的全局自由度,保留与控制和规划有关的局部结构与时序信息。

这和第一阶段的 anchor-centered 设计,思想是一致的:

  • 都在剥离掉那些会妨碍泛化的全局冗余;
  • 都在强调保留动作本质结构。

5.7 Diffusion 模型本体:latent diffusion + transformer denoiser

在模型形式上,BeyondMimic 使用的是 latent diffusion。

5.7.1 为什么是 latent diffusion

扩散不直接在高维原始 trajectory 空间做,而是在 VAE 压缩后的 latent / projected state 空间做。

优点包括:

  • 分布更平滑、更适合 diffusion;
  • 维度更低;
  • 推理更快;
  • 容易与轻量 decoder 配合,实现在线控制。

5.7.2 训练过程

给定一条 clean trajectory (\tau),先在 forward diffusion 过程中逐步加噪;

然后训练 denoiser 预测去噪后的 clean trajectory。

骨干网络是 Transformer Encoder,负责建模:

  • 历史---当前---未来之间的时序依赖;
  • state 与 latent 之间的耦合关系;
  • 多模态技能之间的转换结构。

supplementary 给出了关键设置:

  • horizon = 16
  • history = 4
  • embedding dim = 512
  • attention heads = 8
  • transformer layers = 6
  • denoising steps = 20

这些设置使它可以在较短 horizon 上做 receding-horizon control。


5.8 测试时的核心:classifier guidance / online optimization

这是 BeyondMimic 真正实现"unseen task 泛化"的核心机制。

5.8.1 基本思想

扩散模型学到的是数据分布的 score,也就是:

∇ τ log ⁡ p ( τ ) \nabla_\tau \log p(\tau) ∇τlogp(τ)

如果我们想让它满足某个任务目标 (\tau^*),可以用 Bayes 公式把无条件分布改写成条件分布:

∇ τ log ⁡ p ( τ ∣ τ ∗ ) = ∇ τ log ⁡ p ( τ ) + ∇ τ log ⁡ p ( τ ∗ ∣ τ ) \nabla_\tau \log p(\tau | \tau^*) = \nabla_\tau \log p(\tau) + \nabla_\tau \log p(\tau^* | \tau) ∇τlogp(τ∣τ∗)=∇τlogp(τ)+∇τlogp(τ∗∣τ)

其中,第二项代表"当前采样轨迹有多符合任务目标"。

5.8.2 用可微 cost 近似条件项

BeyondMimic 并不显式训练一个 classifier,而是直接用任务 cost (G(\tau)) 近似:

p ( τ ∗ ∣ τ ) ∝ exp ⁡ ( − G ( τ ) ) p(\tau^* | \tau) \propto \exp(-G(\tau)) p(τ∗∣τ)∝exp(−G(τ))

于是有:

∇ τ log ⁡ p ( τ ∗ ∣ τ ) = − ∇ τ G ( τ ) \nabla_\tau \log p(\tau^* | \tau) = - \nabla_\tau G(\tau) ∇τlogp(τ∗∣τ)=−∇τG(τ)

这意味着:

只要任务目标能写成一个可微 cost,

它就可以在 denoising 的每一步里,用梯度把轨迹往目标方向推。

5.8.3 这和传统 MPC 有什么不同

表面上看,这很像预测控制:

  • 看未来 horizon;
  • 根据 cost 优化未来轨迹;
  • 再执行当前时刻动作。

但它和传统 MPC 的根本区别在于:

  • 传统 MPC 从物理模型出发,直接优化轨迹;
  • BeyondMimic 则是在 learned human-like motion prior 上做引导。

也就是说,它不是从零优化一个未来,而是在"人类风格技能分布"里找一个最符合任务目标的轨迹。

因此,任务 cost 可以很简单,但生成的结果仍然自然、动态可行。


5.9 第二部分到底如何作用于动作生成

这是一个特别值得单独澄清的问题。

5.9.1 常见误解

很多人会以为:

  • diffusion 先生成中间参考状态和动作隐向量;
  • 然后第一阶段 actor 再根据这些中间参考输出实际动作。

但这不是论文里的真实机制。

5.9.2 正确机制

第二阶段并不是"辅助第一阶段 actor",而是在测试时 基本取代了第一阶段 actor

第一阶段 actor 的作用是:

  • 在离线训练时充当 teacher;
  • 提供 expert action;
  • 让 VAE 学出一个可解码、平滑、统一的 latent 动作空间。

随后,测试时的动作生成流程是:

  1. diffusion 从噪声开始,逐步去噪;
  2. 得到一条未来短时域的 状态---latent 轨迹
  3. 用 guidance 让这条轨迹满足当前任务 cost;
  4. 去噪结束后,取 当前时刻 denoised latent (z_t)
  5. VAE decoder ,结合 最新 proprioception,把 (z_t) 解码成当前动作;
  6. 当前动作直接送到底层阻抗控制器执行。

也就是说:

测试时真正输出动作的是 VAE decoder,不是第一阶段的 actor。

第一阶段 actor 已经在训练阶段被"蒸馏"掉了。

5.9.3 为什么这样设计更合理

因为如果继续保留第一阶段 actor 在测试期在线出动作,会有两个问题:

  1. 第一阶段 actor 只擅长"跟 reference";
  2. 它并不能天然理解 joystick、waypoint、避障这类新任务目标。

而 diffusion + decoder 的组合则实现了:

  • diffusion:负责根据未来任务代价构造"当前应该做什么"的 latent intent;
  • decoder:负责把 latent intent 结合最新本体状态,转换成精确且动态一致的动作。

这正是 BeyondMimic 能从 motion tracking 走向 versatile control 的关键。


5.10 三类典型任务:它是如何泛化的

BeyondMimic 论文展示了几类很典型的 unseen task。

5.10.1 Joystick teleoperation / velocity control

在这个任务中,目标很简单:

  • 希望未来 horizon 内 root 的平面速度尽量接近用户给定的速度命令。

于是可以定义 cost:

G j s ( τ ^ t ) = 1 2 ∑ i = 0 H ∥ V x y , i ( τ ^ t ) − g v ∥ 2 G_{js}(\hat\tau_t) = \frac{1}{2} \sum_{i=0}^{H} \|V_{xy,i}(\hat\tau_t) - g_v\|^2 Gjs(τ^t)=21i=0∑H∥Vxy,i(τ^t)−gv∥2

其中 g v g_v gv 是期望速度。

这个 cost 非常简单,但因为 diffusion prior 已经学到了 walking、jogging、running 等自然运动分布,所以 guidance 一施加,模型会自动在已学技能中选择最合适的 gait。

论文还强调:

  • walk-to-run transition 在原始数据中并非大量显式标注;
  • 但在 velocity guidance 下,模型依然能自然地把 walking 过渡成 running。

这说明它不是在"记忆标签",而是在 learned motion manifold 上做在线适配。

waypoint 任务的目标是到达平面目标点 (g_p)。

cost 写成:

  • 离目标较远时,主要惩罚位置误差;
  • 离目标较近时,逐步转而惩罚速度,鼓励停稳。

这种设计避免了:

  • 一味冲刺导致过冲;
  • 到目标附近振荡。

由于 diffusion 是在 human-like trajectory prior 上做 guidance,因此产生的路径仍具有自然步态风格,而不是纯几何意义上的轨迹最优。

5.10.3 Obstacle avoidance

对于避障,论文使用 signed distance field (SDF) 定义 barrier cost:

  • 对未来每一个 horizon step;
  • 对机器人每个 relevant body;
  • 计算 body 到障碍物的 signed distance;
  • 若过近,则 barrier function 产生很大的梯度,把轨迹往外推。

这样,机器人就能在不重新训练的前提下,结合 waypoint 或 joystick cost 完成:

  • 去目标点同时避障;
  • 人类给速度命令时自动避障。

这就是论文强调的 task composition

不需要在训练中枚举"所有任务组合",

只需要在测试时把多个可微 cost 相加即可。

5.10.4 Motion inpainting / keyframe completion

BeyondMimic 还可以接受若干未来关键帧,要求生成中间连续轨迹。

例如:

  • 当前正在 walking;
  • 突然给未来若干个 cartwheel 的关键帧;
  • 模型会在线补出从 walking 到 cartwheel 的平滑过渡;
  • cartwheel 完成后又能自然回到 walking 或 running。

这说明它不是简单插值,也不是把几个 clip 硬拼接,而是在 learned skill prior 上做 dynamically feasible inpainting


六、BeyondMimic 的创新点总结

结合论文与代码,可以把它的创新点归纳为以下几个层次。

创新点 1:把 motion tracking 做成统一可扩展配方

BeyondMimic 的第一阶段真正创新在于:

  • 不再为每个动作单独设计一套训练体系;
  • 而是用统一 MDP、统一 reward、统一超参数,扩展到大量动作。

这是从 motion-specific engineering 向 scalable recipe 的转变。

创新点 2:anchor-centered relative tracking

它既不 rigidly 跟全局,也不完全忽略全局,而是:

  • anchor 提供最小必要的全局约束;
  • 其余 body 跟踪 relative style。

这使它在扰动和 sim-to-real 下都更稳。

创新点 3:把 sim-to-real 的重点放在真实系统建模上

相比大量依赖 heuristics 和 heavy domain randomization 的方法,BeyondMimic 更强调:

  • 正确 armature;
  • 正确 delay handling;
  • 低延迟实时实现;
  • 合理低阻抗 PD。

这是一种更加"系统工程导向"的 sim-to-real 方法论。

创新点 4:极简 reward + 适量 randomization

它证明了:

  • 动作质量不必靠复杂 reward 堆出来;
  • 过多 randomization 反而可能伤害动作自然性;
  • 只保留最关键的 tracking 和 physics consistency 项即可。

创新点 5:adaptive sampling 让长动作和难动作可训练

这让几分钟的 long-horizon reference motion 也具备了良好收敛性,是其可扩展性的重要工程支撑。

创新点 6:state-latent diffusion,而不是 action-only generative control

它联合建模未来 state 和 latent,直接把"未来任务目标"引入 denoising 过程,避免了额外显式 dynamics model 的高代价。

创新点 7:测试时任务泛化,而不是训练时穷举任务

这是论文真正"beyond mimic"的地方:

  • 训练时只学 task-agnostic motion prior;
  • 测试时把任务写成 cost;
  • guidance 在线适配新任务。

这和传统 goal-conditioned policy 或 task-specific retraining 有本质区别。


七、BeyondMimic 是如何解决"运动模仿跟踪的泛化问题"的

这个问题最好分四个层次来看。

7.1 对"动作种类"的泛化

第一阶段并不是用一个 tracker 直接泛化到所有 motion,而是通过统一训练 recipe 实现:

  • 新动作无需重新设计 reward;
  • 新动作无需重新调一套超参数;
  • 长动作和高动态动作都能在同一体系下训练。

因此它解决的是:

motion tracking recipe 对动作种类的泛化。

7.2 对"真实物理差异"的泛化

通过:

  • 正确 actuation / armature 建模;
  • delay-aware implementation;
  • 适量 domain randomization;
  • 低特权、简洁观测;

BeyondMimic 提高了策略对真实世界动力学偏差、接触变化和标定误差的泛化能力。

这是:

sim-to-real 泛化。

7.3 对"新任务目标"的泛化

这是第二阶段的核心。

利用 guided diffusion:

  • 训练时不需要给任务标签;
  • 测试时通过可微 cost 在线指定任务;
  • 模型在 learned human-like skill prior 上做适配。

因此它解决的是:

从 motion imitation 向 unseen downstream task 的泛化。

7.4 对"任务组合"的泛化

传统方法很难提前枚举:

  • velocity tracking + obstacle avoidance
  • waypoint navigation + stop
  • walking + cartwheel + running
  • joystick + inpainting + recovery

而 BeyondMimic 由于 guidance 是基于 cost 的,因此:

  • 不同目标函数可以直接组合;
  • 不需要在训练阶段显式枚举所有组合任务。

这实现的是:

compositional generalization。


八、论文与官方开源代码的对应关系

理解 BeyondMimic 时,需要明确论文和代码的边界。

8.1 官方 whole_body_tracking 仓库明确覆盖的内容

官方仓库 README 明确写到:

  • 这是 BeyondMimic Motion Tracking Code
  • 仓库 covers the motion tracking training
  • 真机与仿真部署可参考另一个 motion_tracking_controller 仓库。

这意味着:

  • 第一阶段 motion tracking 在该仓库中是核心内容;
  • 第二阶段 guided diffusion 并没有在该仓库中完整公开实现。

8.2 在代码中可以直接对应到论文第一阶段的模块

whole_body_tracking 中,可以比较清晰地对照到论文第一阶段的关键设计:

  • commands.py

    • 负责根据 reference motion 和当前机器人状态,构造 anchor-centered target;
    • 同时实现 adaptive sampling 等逻辑。
  • rewards.py

    • 实现 tracking reward 与 regularization。
  • events.py

    • 实现 domain randomization。
  • observations.py

    • 实现 motion tracking 使用的观测项。
  • terminations.py

    • 实现 early termination 条件。
  • tracking_env_cfg.py

    • 定义 environment 与 MDP 超参数配置。
  • robots/actuator.py

    • 实现与机器人相关的 actuator 设置,包括 delay handling。

8.3 第二阶段为什么在该仓库中看不到

因为该仓库的职责本来就不是复现整篇论文所有内容,而是主要提供:

BeyondMimic 第一阶段的官方 motion tracking training 实现。

因此,在这个 repo 里,你不会找到一条完整的:

  • VAE distillation
  • latent diffusion training
  • classifier guidance inference
  • waypoint / joystick / obstacle / inpainting online control

的训练/部署代码链路。

这不是因为你漏看了,而是仓库公开范围本身就是如此。


九、最容易误解的几个问题

9.1 BeyondMimic 是不是"一个策略完成任意动作和任意任务"?

不是。

更准确地说:

  • 第一阶段:为大量动作训练一批高质量 tracker;
  • 第二阶段:把这些 skill 蒸馏进统一 latent diffusion prior;
  • 测试时:用 guidance 适配新任务。

因此它不是一个简单的单 actor policy,而是一个两阶段的统一框架。

9.2 第二阶段是不是把中间参考重新喂给第一阶段 actor?

不是。

第一阶段 actor 只在训练期作为 teacher。

测试时真正起作用的是:

  • diffusion 生成 state-latent trajectory;
  • guidance 对 trajectory 做在线优化;
  • decoder 利用当前 denoised latent 和最新 proprioception 输出动作。

9.3 第一阶段是不是"多技能单策略 tracking 所有动作"?

严格来说不是论文的重点。

它强调的是:

  • 一个统一 recipe 可以训练很多 motion-specific tracker;
  • 而不是一个 tracker 同时承担所有 motion。

9.4 它的泛化主要来自哪里?

不是来自"训练更多任务标签",而是来自:

  • 第一阶段学到丰富且高质量的 human-like skills;
  • 第二阶段学到这些技能的联合分布;
  • 测试时通过 guidance 对新任务做在线适配。

十、全文总结

如果要用一句话总结 BeyondMimic,可以写成:

BeyondMimic 先用一个极简但物理一致的 RL motion-tracking recipe,批量学出高质量、可真机部署的人形技能;再把这些技能蒸馏到一个 latent state-action diffusion prior 中,并在测试时通过 guidance 在线优化未来轨迹,从而在不重新训练的前提下完成摇杆控制、路点导航、避障、关键帧补全等新任务。

从研究思路上看,它的真正贡献并不只是"扩散模型也能控人形",而是更系统的一点:

  1. 把模仿控制从 per-motion engineering 变成统一配方;
  2. 把 sim-to-real 的关键从 heuristics 转向系统级物理一致性;
  3. 把任务泛化从训练时枚举,转向测试时在线 guidance。

因此,BeyondMimic 解决的不是单纯"动作跟得更像"这个局部问题,而是更进一步地回答了:

如何从一组人类动作中,学到既自然又可组合的 humanoid motor prior,

并在测试时把这些技能灵活地拿来解决新任务。

这正是它"Beyond Mimic"的含义所在。


参考说明

本文整理内容主要基于以下两类来源:

  1. BeyondMimic 论文正文与 supplementary;
  2. HybridRobotics 官方开源仓库 whole_body_tracking 的 README 与第一阶段 motion tracking 相关实现代码。
相关推荐
Lee川2 小时前
🛠️ LangChain Tools 实战指南:让 AI 拥有“动手能力”
人工智能
WolfGang0073212 小时前
代码随想录算法训练营 Day20 | 回溯算法 part02
算法
gorgeous(๑>؂<๑)2 小时前
【CVPR26-索尼】EW-DETR:通过增量低秩检测Transformer实现动态世界目标检测
人工智能·深度学习·目标检测·计算机视觉·transformer
YXXY3132 小时前
前缀和算法
算法
客卿1232 小时前
滑动窗口--模板
java·算法
xianluohuanxiang2 小时前
新能源功率预测的“生死局”:从“能报曲线”到“能做收益”,中间差的不是一点算法
人工智能
_日拱一卒2 小时前
LeetCode:滑动窗口的最大值
数据结构·算法·leetcode
码农垦荒笔记2 小时前
Claude Code 2026 年 3 月全面进化:Auto 模式、Computer Use 与云端持续执行重塑 AI 编程工作流
人工智能·ai 编程·claude code·agentic coding·computer use
threerocks2 小时前
【Claude Code 系列课程】01 | Claude Code 架构全览
人工智能·ai编程·claude