ReActor:在物理引擎里「重写」人类动作给机器人
🎯 为什么重要:重定向的「脏数据」是模仿学习的隐形杀手
人形机器人学动作的标配流程是:人类动捕数据 → 重定向到机器人 → RL 跟踪。第二步看起来是预处理,但其实是性能瓶颈点。Araujo et al. 2025 已经指出:重定向产物的 kinematic 质量直接决定下游 RL 训练能否成功。
- 脚滑(foot sliding):脚贴地却滑行——机器人按这个学,落地就摔。
- 自穿模(self-penetration):参考动作里手穿过身体——目标机器人 DoF 不够,强行跟踪会震荡。
- 动力学不可行(dynamically infeasible):参考要求浮空一秒——物理上做不到,policy 学出来全靠辅助力硬撑。
更糟的是,优化型方法(GMR、OmniRetarget)在关节极限附近会陷进局部极小:手臂在奇异构型附近转一下、撞上关节限位,整个动作就「卡住」,输出变成不可用的废料。ReActor 把整个流程拉进物理仿真,这些问题被「物理一致性」一刀切掉。
💡 核心思想:双层优化 = 让「参考动作」和「跟踪策略」互相打磨
形式上是一个标准双层优化(bilevel optimization):
$$\min_{p \in P}\; L(p,\phi^*(p))\quad \text{s.t.}\quad \phi^*(p)=\arg\max_\phi R(p,\phi)$$
翻译成人话:外层调重定向参数 $p$(每个对应刚体对的位置偏移、朝向偏移、垂直微调),内层是 RL 训练跟踪策略 $\pi_\phi$。两边交替更新——参考动作越来越适配机器人,策略越跟越稳,互相收敛。
🛠️ 三个让双层优化真跑得起来的关键设计
| 设计 | 心智 | 为什么必要 |
|---|---|---|
| ① 简化的上层次梯度(不用逆 Hessian) | 标准 TTSA 要用隐函数定理算 $\nabla_p L$,涉及下层次最优策略对 $p$ 的灵敏度——RL 里几乎算不出。ReActor 假设 $\partial s_t^*/\partial g_t = \alpha I$(α∈[0,1],最优轨迹只「部分」跟随参考变化),梯度简化为 $\widetilde{\nabla}_p \ell = (1-\alpha)\,\partial_{g_t}\ell \cdot \nabla_p g_t$。 | 把「双层 RL」从理论上美好、实践上跑不动 → 变成「单循环交替更新」,能在 20k PPO 迭代里同时收敛两层。 |
| ② 极简参数化 + 凸约束 | 每个语义刚体对只有 3 个待优化量:位置偏移 $p_b^\text{pos}$、朝向偏移 $p_b^\text{ori}$、每段动作的垂直微调 $p_z$。约束在球内:$\|p_b^\text{pos}\|_2\le 0.5$ 等。 | 参数空间小 + 凸 → 上层不会乱漂;只需用户提供稀疏的刚体语义对应(甚至「头↔左手」这种错配都能稳定运行)。 |
| ③ Residual Force + 相位变量 ψ | 策略除 PD setpoints 外可对 root 施加辅助 wrench(RFC);用 ψ_t∈[0,1] 的「重定向准备阶段」替代 DeepMimic 的 Reference State Initialization。 | 跨形态时无法直接从参考取初始关节角,必须让策略自己「走过去」;辅助力让单一策略能覆盖整个 AMASS(包括倒立等极端动作),后期 reward 惩罚把它压回 0。 |
因为参考动作 $g_t$ 不是直接给到 RL 当目标——它是被仿真出来的状态 $s_t^*$ 拿来跟 $g_t$ 比。任何脚滑、穿模、悬浮,都意味着 $s_t^*$ 无法贴合 $g_t$,loss 直接上涨;上层自然把 $p$ 往「物理上能做到」的方向调。换言之,物理引擎就是天然的可行性过滤器。
📊 关键结果:四类伪影全部归零,下游 RL 成功率 +2~17%
对比对象:GMR(Araujo 2025)与 OmniRetarget(Yang 2025a)——均为 SOTA kinematic 重定向。目标机器人:Unitree G1(1.27 m / 35 kg / 29 DoF)和 Disney 自研小型人形 Lima(0.84 m / 16.2 kg / 20 DoF)。数据集:PHC-filtered AMASS。
| 指标(G1) | GMR | OmniRetarget | ReActor |
|---|---|---|---|
| 地面穿透时间占比 ↓ | 0.53 | 0.00 | 0.00 |
| 自穿模时间占比 ↓ | 0.07 | 0.12 | 0.00 |
| 脚滑速度 [cm/s] ↓ | 1.25 | 2.00 | 0.17 |
| 脚悬浮高度 [cm] ↓ | 0.34 | 0.49 | 0.12 |
| 下游 RL 成功率 [%] ↑ | 89.93 | 95.51 | 97.45 |
| 下游关节跟踪误差 [deg] ↓ | 9.79 | 6.62 | 4.22 |
| 指标(Lima,尺度差异更大) | GMR | OmniRetarget | ReActor |
|---|---|---|---|
| 下游 RL 成功率 [%] ↑ | 91.23 | 79.85(陷局部极小) | 95.07 |
| 下游位置误差 [cm] ↓ | 3.53 | 5.86 | 1.46 |
| 下游关节误差 [deg] ↓ | 10.45 | 14.10 | 4.38 |
| 其他维度 | 数字(来自原文) |
|---|---|
| 训练成本 | 20k PPO 迭代,~6.5 h / 单 GPU(4096 并行环境,Isaac Sim,RTX 5090)。与 OmniRetarget ~7h / GMR ~5h(CPU)相当。 |
| 实时部署 | 交互式动画场景下推理 88.3 Hz,超过实时需求;艺术家可在线编辑动作。 |
| 跨形态 | 同一框架 retarget 到四足 ANYmal D(50 kg, 12 DoF),动作视觉外观保留。 |
| 真机 | Lima 机器人 sim-to-real 部署成功(DeepMimic-style 跟踪 policy + ReActor 参考数据)。 |
| 泛化 | 在 AMASS 上训的 policy 迁移到 100STYLE 测试集,跟踪误差仅比专门训练的 pseudo-GT 多 ~0.07 cm / ~0.6-1.1°(Tab.5)。 |
🌐 在领域中的位置
位置上,ReActor 处在「motion retargeting」与「physics-based motion tracking」两条线的并轨点:上游接 DeepMimic / PHC / ProtoMotions 这类跟踪框架,下游服务人形与四足的 sim-to-real。和 BeyondMimic、DeepMimic 形成「参考数据生成 → 跟踪策略」的耦合链条。
❓ 常见误区
ReActor 是 motion tracking / imitation learning 吗?
不是。论文明确区分:retargeting ≠ imitation。DeepMimic 这类工作 RL 跟踪的是「给定」参考;ReActor 解决的是更前面一步——怎么造一个「适合机器人跟踪」的参考。它当然也训 RL,但那个 RL 是重定向流程的一部分,最终产物是参考数据(+ 一个可复用的重定向 policy)。
为什么需要 bilevel?直接把 p 当作可学习参数丢进 RL 不行?
可以,但发散。p 影响每条轨迹的每一帧目标,把它和策略一起用 PPO 单层更新,上层梯度方向会被 RL 的随机性淹没。Two-Timescale(TTSA)的精髓是两个学习率:上层慢、下层快,让策略「近似收敛」后再可信地评估 $L(p)$。ReActor 的 $(1-\alpha)$ 估计就是为了避免算逆 Hessian。
辅助 wrench(RFC)不是作弊吗?机器人又不能飞。
论文承认这是 sensitive hyperparameter:惩罚太轻 → policy 全靠 wrench 硬撑(不物理);太重 → 极端动作(倒立)直接失败。Fig.8 给了 pareto 曲线。在下游 tracking 阶段,wrench 会被移除(Tab.4 的下游 RL 是「without residual forces」),所以最终部署的机器人不依赖外挂力。
它和 BeyondMimic、CALM、PHC 的关系?
它们是下游消费者。BeyondMimic 用 diffusion 做多样化控制器,PHC 用大规模 RL 跟踪 AMASS——但它们都假设已有 retargeted reference。ReActor 给它们喂更干净的参考数据。文中也讨论:把 ReActor 当作 generative motion model 的训练数据生产器,是未来方向。