里程碑
数据集AMASS
物理感知
实时
输入模态proprioception

PHC:让物理机器人「摔了能自己爬起来」的永动机器人控制器

Zhengyi Luo, Jinkun Cao, Alexander Winkler, Kris Kitani, Weipeng Xu(CMU + Meta Reality Labs Research)。ICCV 2023。 项目页 · 开源 · physics-based controlmotion imitation 线索 T02

🧠 一句话心智模型:以前的物理仿真小人一摔倒就重置(teleport 回参考姿势)——视频驱动时这就崩了,因为「参考姿势」本身就很烂。PHC 给小人装了一个「爬起来再走回去」的反射:摔了不慌,自然起身、走回参考轨迹、继续模仿。一个策略吃下 整个 AMASS 数据集(上万段动作),无需任何「上帝之手」外力。

🎯 为什么重要:物理仿真的「现实gap」卡在「摔倒怎么办」

把视频里估计的人体姿势送进物理仿真器驱动小人,是做实时虚拟形象(avatar)的标准管线。但这里有个致命问题:

核心矛盾:视频估计的姿势充满噪声(深度模糊、遮挡、滑动)。物理小人一旦严格追随这种姿势,很快就会失去平衡摔倒。而一旦摔倒,传统方法只能「teleport 重置」回参考姿势——但参考姿势本身就来自噪声视频,于是小人反复「摔→重置到烂姿势→再摔」,avatar 抽搐到没法看

之前的两条出路都不太行:

方案做法问题
Residual Force Control (RFC) UHC在小人根部加一个「上帝之力」托住它小人会飞、漂浮,物理真实感被破坏("hand of God")
Fail-safe Reset Egopose快摔倒时 teleport 回 kinematic 姿势瞬移感强,仍然依赖不可靠的参考姿势
额外 Recovery Policy ASE摔倒时切到另一个「起身」策略(能自然起身,已解决早期 recovery policy [7] 的高频抖动)起身后不知道怎么回到参考动作,无法接回 imitate

PHC 的目标:一个单一策略,既会模仿、又会自然起身并走回参考轨迹,全程无外力、无重置——所以叫「Perpetual(永续)」。

💡 核心思想:PMCP——分阶段加容量,不掉旧技能

要做出「永动机器人」控制器,瓶颈不是网络大小,而是灾难性遗忘:学了新动作(比如 fail-state recovery),旧的模仿能力就退化了。PHC 的核心方法是 Progressive Multiplicative Control Policy (PMCP)

Primitive P(1) 学全量数据 Q̂ 收敛后冻结 找难点 Primitive P(2) 只学 P(1) 学不会的 横向连接 再挖更难的 Primitive P(3)...P(K) 越来越难 Composer C 加权融合 Primitive P(F): Fail-state Recovery 爬起来 → 走回参考轨迹 → 恢复模仿 π(a|s) = (1/C(s)) · ∏ P⁽ⁱ⁾(a⁽ⁱ⁾|s)^Cⁱ⁽ˢ⁾ —— 乘性组合
图 1:PMCP 的渐进式训练。先学简单的,找出学不会的「难题」交给新 primitive,老 primitive 冻结不忘记;最后再加一个「爬起来」的 primitive。

这套思路脱胎于 Progressive Neural Networks (PNN),但有个关键改造:PNN 原本要人工指定「用哪个子网络」,这里因为动作之间高度相关(走和跑共享大量东西),改成 Composer 自动学一个加权,把各 primitive 的输出做乘性融合。于是既能复用旧技能、又能特化新难题。

🛠️ 工程上怎么落地:四个让小人「站得稳」的设计

设计心智为什么必要
① AMP 风格奖励除了「贴近参考姿势」还给一个「看起来像人」的对抗奖励尤其在 fail-state 起身时根本没有参考姿势可追,必须有先验保证动作自然不抽搐
② Relaxed Early Termination (RET)判定「摔倒」时忽略脚踝和脚趾的偏离仿真小人的脚是单段刚性,真人脚是多段的;逼着脚踝严格贴合 MoCap 反而会让小人失衡
③ Energy Penalty奖励里加一项 $-0.0005\sum_j|\mu_j\omega_j|$(力矩×角速度)没有「上帝之力」托底后,策略容易学出高频抖动脚来维持平衡;能量惩罚直接掐掉这个 trick
④ Keypoint 输入版(Ours-kp)不输入关节旋转,只输入 3D 关键点关键点比旋转角更容易从图像估计(且更稳),让 PHC 能直接接视频姿态器
🔮 关键设计:Fail-state 的「目标折叠」
摔倒时,参考姿势已经没意义了(你不能让一个趴在地上的人去模仿站立的 MoCap)。PHC 的处理非常优雅:把参考姿势的非根关节直接替换为仿真当前的值,于是「模仿任务」瞬间退化成「走到根目标位置」的 point-goal 任务——小人只要爬起来、走到参考根位置附近(<0.5m),就能无缝切回完整模仿。这一招让 recovery 自然衔接回 imitate。

📊 结果:98.9% AMASS 覆盖,90% 视频噪声成功率

维度数字(论文 Table 1/2/4)
AMASS 训练集模仿成功率98.9%(UHC+RFC: 97%,UHC 无外力: 84.5%)
AMASS 测试集(未见动作)96.4%(UHC+RFC: 96.4%,但 UHC 无外力只剩 62.6%)
H36M-Motion(跨数据集)92.9%(UHC 无外力只有 23.6%)
视频噪声姿势成功率(H36M-Video)88.7% ~ 91.9%(UHC 无外力只有 18.1%)
Fail-state 恢复(10秒内)倒地+远离场景:98.8%;纯倒地:98.8%;纯远离:99.5%
训练规模4 个 primitives(含 recovery),单卡 A100 训练≈一周
运行速度策略 30Hz、仿真 60Hz,>30 FPS 实时
动作空间SMPL 24 刚体、23 个驱动关节、$a_t\in\mathbb{R}^{23\times 3}$
关键洞察:去掉「上帝之手」(RFC) 后,UHC 的成功率从 97% 掉到 84.5%——但 PHC 在同样无外力下反而把成功率顶到 98.9%。这说明「外力兜底」并非必需,关键是把容量分配对地方 + 把「摔了怎么办」当成一个一等问题来解

🌐 在领域中的位置

DeepMimic(单段动作 RL) ASE / AMP(用对抗先验扩到大动作集) UHC(用外力吃下 AMASS 97%) PHC(无外力、能自己爬起来、98.9%)⭐ PhysDiff / 之后的 physics-based avatar

PHC 是physics-based motion imitation「告别外力」的分水岭。它把「video-to-physics」这条管线第一次推到了「可实时、可容错、可量产」的产品级,是后续 Meta 全身 codec、quest-sim 类工作的底座。关联线索:T08 人形动作谱系

❓ 常见误区

PHC 是生成式模型吗?

不是。它是一个基于 RL(PPO)的目标条件控制策略。生成性体现在 AMP 对抗先验上,但主体策略是确定性的回归(高斯)。生成「新动作」是下游 motion generator(如 MDM)的事,PHC 是跟踪器

四个 primitive 不会让推理很慢吗?

不会。Composer 是一个轻量 MLP,输出各 primitive 的组合权重;primitive 本身也只是两层 MLP([1024, 512])。整条 forward 仍在 30FPS 以上,瓶颈在仿真而非策略。

「Perpetual」是不是永远不摔?

不是。「Perpetual」指的是不依赖 reset——摔了能自己爬起来继续。论文坦白:高度动态的动作(高跳、后空翻)仍然学不好,因为单帧目标 $q̂_{t+1}$ 无法表达「助跑起跳」这种需要规划/intent 的动作。

和 ASE 的起身策略有啥本质区别?

ASE 只解「从地上站起来」这一个动作;PHC 把「起身 + 走回参考轨迹 + 恢复模仿」作为一个连续任务端到端解掉了——通过目标折叠把 imitate 退化成 point-goal,让衔接无缝。