仿真里 98% 满时限,一上台击球就摔:类人机器人对打训练的假收敛与动力学断层

在双足人形机器人(以 A3 Ultra 为例)的全闭环乒乓球强化学习训练中,常出现这种令人费解的现象:

TensorBoard 上的 <code>Episode_Termination/time_out</code> 稳定在 0.98 以上,<code>base_tilted</code> 跌倒率不到 2%,甚至 <code>return_success</code> 标称达 90% 左右。然而把模型丢进真实 MuJoCo 对打闭环,发球机一送球,机器人刚准备扭腰挥拍迎击,整机下肢瞬间失稳倾覆,当场倒地。

指标看着一片大好,实机或物理验证却完全不可用。这不是调参玄学,而是典型的动力学失配、MDP 奖励投机(Reward Cheating)与课程漏洞交织导致的假收敛。


一、 现场定位:虚假繁荣的数据从何而来?

训练日志里 <code>time_out ≈ 1</code> 的字面含义是:几乎每个环境都能跑满 30 秒(1500 物理步)的单回合上限,并未触发倾覆(<code>base_tilted</code>)或塌陷(<code>base_too_low</code>)早停。

但这并不意味着策略学会了高强度的稳定击球:

  1. 课程进度贴地(Curriculum Gating):
    训练早期的来球横向速度和发球落点被限制在机器人正前方中心极窄的区间($y \in [-0.15, 0.15]\,\text{m}$)。此时机器人不需要横向移动,也几乎不需要躯干大幅扭转,仅凭手臂微调就能碰到球。
  2. 静态存活时间稀释了动态风险:
    单回合 30 秒内,机器人大部分时间处于等待发球、球在空中飞行或击球后的静止站立状态(<code>in_hold</code> 占比很高)。只要立正站好,双足零力矩点(ZMP)安稳落在支撑多边形内,便能安全混满 30 秒,赚取大量“存活奖励”。
  3. 退化成“投机性轻触”:
    大幅扭腰会导致重心失控跌倒,而跌倒会直接砍断后续 20 多秒的存活收益。策略在 PPO 价值迭代中迅速学到了“最优偷懒解”:极力压抑下肢与腰部动作换取存活分;即便迎击,也只在最后关头做小幅度抽动,尝试蹭到球。这就形成了“高成功率、低课程进度、低动作幅度”的过拟合三角。

二、 动力学死穴:腰部与下肢的刚度配置倒挂

一旦脱离温室,面对角度稍大、落点偏离中轴的来球,策略必须调动腰部偏航轴(<code>waist_yaw_joint</code>)发力带动球拍迎击。此时底层的物理断层立即爆发。

1. 执行器 PD 参数倒挂与反作用力矩冲击

查阅实际执行器配置:

关节组 关键关节 刚度 $K_p$ 阻尼 $K_d$ 峰值扭矩 $\tau_{\max}$
腰部 (<code>waist</code>) <code>waist_yaw_joint</code> 200.0 7.0 220.0 N·m
下肢髋部 (<code>legs</code>) <code>hip_yaw / roll / pitch</code> 200.0 7.0 220.0 N·m
踝关节 (<code>feet</code>) <code>ankle_pitch / roll</code> 80.0 3.0 118.0 / 55.0 N·m

从质点系动力学来看,腰部以上(躯干、双臂、配重、球拍)拥有巨大的转动惯量 $I_{\text{upper}}$。根据角动量守恒,腰部电机在驱动上半身角加速时,会对骨盆产生大小相等、方向相反的反作用力矩:

$$\tau_{\text{react}} = - I_{\text{upper}} \dot{\omega}_{\text{yaw}}$$

腰部 Yaw 轴被赋予了高达 $200.0$ 的刚度和 $220.0\,\text{N}\cdot\text{m}$ 的输出上限,而真正支撑机器人站立、负责提供地面反作用力矩的脚踝关节,刚度只有 $80.0$,横滚扭矩上限仅有 $55.0\,\text{N}\cdot\text{m}$。

当腰部爆发出上百 $\text{N}\cdot\text{m}$ 的扭转冲击时,下肢双足根本无法在地面维持静摩擦力平衡。地面支撑力合力点(ZMP)瞬间飞出足底支撑多边形(Support Polygon),骨盆横向扭摆失衡,双足滑移,整机倾覆。

2. 理想物理仿真的“零延迟”致盲

早期模型训练中采用无延迟的理想隐式致动器(<code>ImplicitActuator</code>)。在没有任何传输延迟的仿真里,策略习惯了毫秒级的理想 PD 反馈:它误以为自己只要给一个指令,下肢电机下一时刻就能跟上并强行自稳。

但在实际物理规律或带延迟的部署环境中,控制时延导致反向补偿力矩严重滞后,上半身注入系统的角动量脉冲无法被下肢及时耗散,瞬态直接失稳。


三、 解决方案:从动力学、MDP 到课程学习的系统重构

要彻底解决该过拟合,必须同时从物理可达性、收益机制、状态初始化和控制延迟四方面同步动手。

1. 动力学重构:削弱腰部特权,引入运动平滑

  • 腰部刚度与峰值扭矩削峰:
    将 <code>waist_yaw_joint</code> 的 $K_p$ 从 200.0 降至 $80.0 \sim 100.0$,加大阻尼比($K_d \in [8, 12]$),并将输出力矩上限 $\tau_{\max}$ 限制在 $80.0\,\text{N}\cdot\text{m}$ 以内。
    物理上剥夺腰部电机单方面掀翻下肢的能力,逼迫策略依靠下肢、髋部与肩臂的全局协同来完成击球动量传递。
  • 动作二阶平滑惩罚(Action Jerk & Joint Acc):
    在奖励函数中强化动作变化率惩罚(<code>MARKDOWN_HASH70f96be0e6fe3c09934ba65791f7c630MARKDOWNHASH</code>),并对腰部及髋部施加角加速度惩罚 $\mathcal{R}_{\text{acc}} = - w_{\text{acc}} |\ddot{q}|^2$,抑制策略输出高频方波突变指令。

2. 奖励与终止判定:粉碎“苟延残喘混时长”

  • 引入击球窗口门禁超时(Windowed Failure Termination):
    废除无条件的 30 秒倒计时。一旦来球越过击球平面且未能产生有效拍球接触,判定为击球失误,立刻强制结算并终止当前 Episode。彻底消除“漏了球但只要站着就能赚满时长”的投机空间。
  • 质心角动量率(CoM Angular Momentum Rate)约束:
    在击球相位加入质心角动量变化率惩罚:
    $$\mathcal{R}_{\text{AM}} = - w_{\text{AM}} |\dot{H}_{\text{CoM}}|^2$$
    当上半身猛烈甩拍时,若下肢没有提前通过降低重心(屈膝沉髋)或调整双足开合构型来抵消角动量,策略将承受严重的持续失分。

3. 课程学习与状态初始化:剥夺温室环境

  • 门禁推进与动态回退(Curriculum Backtracking):
    课程推进不能只看全局步数,必须与真实工况绑定:只有在当前难度下 <code>base_tilted < 0.05</code> 且 <code>contact_rate > 0.85</code> 时,才允许向外扩展来球横向速度与站位坐标($y$ 轴扩散)。一旦高难度下倾覆率激增,课程自动退回上一级,避免策略发生权重崩塌。
  • 参考状态初始化(RSI, Reference State Initialization):
    不要每一次 reset 都从立正站姿开始。以 50% 概率将机器人直接重置在“击球准备期(Pre-strike)”甚至“大角度挥拍瞬间”的身体动态中。
    强制价值网络(Critic)直接在极限扭转状态下求解稳定策略,迫使策略直面下肢回正与动态支撑的难题。

4. 强制常驻通信延迟与接触随机化

  • 全程开启执行器延迟随机化:
    全面接入 <code>DelayedImplicitActuatorCfg</code>,为电机引入 0–150 ms 的步数随机延迟及一阶响应滞后。策略只有在训练中体会过“指令发下去后下肢无法瞬间刹车”的后果,才会主动留出稳定控制余量(Control Margin)。
  • 足底接触与地面摩擦扰动:
    将地面摩擦系数在 $[0.4, 1.0]$ 间大幅扰动,并在击球瞬时向骨盆施加横向脉冲外力($20 \sim 50\,\text{N}$),迫使机器人主动演化出宽站姿(Wide Stance)与反向阻尼协调机制。

四、 总结

维度 现象与病因 解决杠杆
动力学层 腰部 Yaw 轴强刚度、高扭矩,瞬间反扭矩远超踝关节承受极限 削减腰部刚度与峰值力矩($K_p \le 100, \tau_{\max} \le 80$),加加速度平滑
MDP 机制 30 秒长回合让机器人靠静止站立刷满 <code>time_out</code>,稀释了摔倒惩罚 击球失败立即早停,引入质心角动量率 $\dot{H}_{\text{CoM}}$ 惩罚
课程与初始态 课程贴地导致策略过拟合中路球,重置只练立正姿态 硬性门禁推进与回退,配合 RSI 直接把初始状态打进击球动态
仿真保真度 理想隐式致动器无延迟,放任策略依赖瞬时反馈 强制 0–150 ms 延迟随机化与足底摩擦扰动

在类人机器人的高动态全身控制任务中,高存活率指标最容易掩盖深层动力学缺陷。先在物理上限制执行器“掀翻自己”的特权,再在 MDP 规则中斩断“站立苟活”的后路,强化学习才能真正学出协同发力、扎实支撑的双足步态。