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) 在该仓库中并未完整公开实现。
因此,本文的讲解采用以下原则:
- 用论文把 完整 BeyondMimic 解释清楚;
- 用官方代码去对应验证 第一阶段到底如何落地实现;
- 对第二阶段,重点解释其方法逻辑、训练与推理机制,以及它和第一阶段之间的真实连接方式。
一、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,真正强调的是:
- 新增动作不需要重新设计 reward;
- 不需要 motion-specific tuning;
- 同一组超参数可以扩展到大量动作。
这也是官方仓库 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 重新"挂"到当前机器人身体上。
更具体地说:
- 位置上:
- x、y 平移对齐到当前机器人 anchor;
- z 高度仍使用 reference 的 anchor 高度;
- 朝向上:
- 只对齐 yaw;
- 不强行对齐 roll/pitch;
- 其他 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:
- body position error
- body orientation error
- body linear velocity error
- 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 不是必须的。
他们只保留三个轻量正则项:
-
joint limit penalty
- 防止关节越过软限位;
- 主要面向硬件安全。
-
action smoothness penalty
- 惩罚连续动作变化过大;
- 抑制高频 jitter。
-
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.py 与 rewards.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 它随机化了哪些量
主要包括:
-
地面接触参数
- 静摩擦系数
- 动摩擦系数
- restitution
-
默认关节位置偏移
- 用来模拟标定偏差
-
torso center of mass 偏移
- 用来模拟模型误差
-
周期性 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,我负责把它跟出来。
这有两个天然限制:
- 如果测试任务不是现成的完整轨迹,就没法直接用;
- 即使外面再套一个 planner,通常也会出现 planner-controller mismatch。
例如:
- 用户只给一个 joystick 速度命令;
- 环境里多了障碍;
- 你只给几个未来关键帧;
- 需要在 walking、running、cartwheel 间自由切换。
这些任务都很难直接写成一条固定的 reference trajectory。
BeyondMimic 的想法是:
不再把"任务"提前编码成一条完整 reference,
而是学一个能够生成未来行为分布的模型,
然后在测试时根据任务目标对这个分布做在线引导。
这就是 guided diffusion 的动机。
5.2 第二阶段不是直接训练 diffusion 输出动作,而是先做 VAE 蒸馏
这一点非常关键,也是很多读者最容易误解的地方。
BeyondMimic 第二阶段并不是:
- 直接拿第一阶段 reference motion 做 diffusion;
- 也不是直接在原始动作空间里做 diffusion。
它的做法是:
- 先把第一阶段的 motion-tracking actor 当作 teacher;
- 训练一个条件 VAE 去模仿这些 teacher 的动作生成行为;
- 再在这个 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 数据集,而是:
- 用 VAE policy 在仿真中 rollout;
- 在 action 上加入 OU noise(Ornstein-Uhlenbeck noise);
- 记录 rollout 过程中产生的状态轨迹;
- 同时把动作编码回 latent;
- 形成 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 动作空间。
随后,测试时的动作生成流程是:
- diffusion 从噪声开始,逐步去噪;
- 得到一条未来短时域的 状态---latent 轨迹;
- 用 guidance 让这条轨迹满足当前任务 cost;
- 去噪结束后,取 当前时刻 denoised latent (z_t);
- 用 VAE decoder ,结合 最新 proprioception,把 (z_t) 解码成当前动作;
- 当前动作直接送到底层阻抗控制器执行。
也就是说:
测试时真正输出动作的是 VAE decoder,不是第一阶段的 actor。
第一阶段 actor 已经在训练阶段被"蒸馏"掉了。
5.9.3 为什么这样设计更合理
因为如果继续保留第一阶段 actor 在测试期在线出动作,会有两个问题:
- 第一阶段 actor 只擅长"跟 reference";
- 它并不能天然理解 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 上做在线适配。
5.10.2 Waypoint navigation
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 在线优化未来轨迹,从而在不重新训练的前提下完成摇杆控制、路点导航、避障、关键帧补全等新任务。
从研究思路上看,它的真正贡献并不只是"扩散模型也能控人形",而是更系统的一点:
- 把模仿控制从 per-motion engineering 变成统一配方;
- 把 sim-to-real 的关键从 heuristics 转向系统级物理一致性;
- 把任务泛化从训练时枚举,转向测试时在线 guidance。
因此,BeyondMimic 解决的不是单纯"动作跟得更像"这个局部问题,而是更进一步地回答了:
如何从一组人类动作中,学到既自然又可组合的 humanoid motor prior,
并在测试时把这些技能灵活地拿来解决新任务。
这正是它"Beyond Mimic"的含义所在。
参考说明
本文整理内容主要基于以下两类来源:
- BeyondMimic 论文正文与 supplementary;
- HybridRobotics 官方开源仓库
whole_body_tracking的 README 与第一阶段 motion tracking 相关实现代码。