最近在做人形机器人 locomotion 相关的工作,有一些想法想整理出来。不是综述,只是从工程角度的一些感受。

姿态数据与动力学动作之间的鸿沟

训练人形机器人与训练机械臂或大语言模型,有一个根本性的不同:数据采集拿到的是姿态,而机器人执行的是动作。

以 Unitree G1 为例,它有 29 个自由度(加上头部俯仰和左右旋转则是 31 个)。通过动作捕捉或视频姿态估计拿到的数据,本质上是这 29 个电机各自的转角序列——每个时间步告诉每个关节应该转到什么角度,这就是姿态数据。

问题在于,这些姿态数据大多无法直接在仿真器中回放。原因很简单:动作捕捉或视频估计存在误差,采集到的序列不一定在物理上可行。把它直接喂给仿真中的 G1,机器人大概率会立刻摔倒。

所以问题变成了:符合动力学约束的动作数据,怎么拿到?

这个问题困扰了具身智能行业相当长的时间。波士顿动力早期用的是模型预测控制(MPC),再往前则是零力矩点(ZMP)理论——通过解析地面上重力与惯性力的平衡点来规划稳定运动。这些方法有效,但需要大量人工建模,且难以泛化到复杂地形。

目前主流的解法是强化学习:用一个小 MLP,把姿态数据作为参考喂进去,让模型自己学着输出符合动力学的动作。模型一开始完全不知道怎么输出合理的动作,只能在仿真中不断试错,由仿真器实时反馈当前动作是否稳定、是否跌倒、与参考姿态的模仿误差有多大。

让机器人不跌倒,不简单

这样的动作好学吗?与过去的经典方法相比,强化学习的思路已经相当实用,某种程度上正是这条路线直接引发了人形机器人产品的集中爆发。但如果深入训练过程本身,问题并不轻松。

强化学习的策略网络输出一个均值,同时在训练中学习一个方差,两者共同决定最终动作的采样分布。这意味着每个自由度在训练初期都在做随机探索。在 29 维自由组合的动作空间里,仿真器中符合动力学的可行区域极其狭窄——实际上是在一个组合爆炸的搜索空间里,寻找一条必须从头到尾保持稳定的细线。只要中途某一步失去平衡,机器人就会摔倒,整条路径作废。

这是人形机器人与轮式底盘、机械臂,乃至大模型最本质的区别:可行解空间的稀疏程度。纯靠自由探索理论上能收敛,实际上效率低到不可用。姿态参考数据的作用,正是把这条细线的大致走向告诉模型,把探索的起点从随机噪声提升到"大概像这样走"。

端到端在人形上暂时不太 work

端到端在机器学习社区是被极力推崇的范式——理论上信息瓶颈最小,没有解耦带来的信息损耗。但在人形 locomotion 上,大多数论文仍然选择解耦网络,这不是研究者不喜欢端到端,而是现阶段确实很难 work。

原因还是回到动力学动作空间太窄这件事。双足行走时,摆动腿的冲击会直接传递给躯干和上肢,端到端训练一个同时处理行走与上肢任务的大策略,往往会在学习新动作时回退已经练好的行走能力。动力学约束过于苛刻,网络在广域学习时很容易把稳定行走这条细线"踩丢"。

解耦的逻辑则刚好相反:先把行走策略训练稳定,再在上层叠加其他任务策略,两者之间设计好接口。信息有损耗,但每个子模块的学习目标更清晰,动力学约束更容易被满足。

稠密输入与稀疏输入:sim2real 的隐患

最后一点是输入选择对 sim2real gap 的影响。目前 locomotion 策略直接端到端处理 RGBD 数据的还不多,原因在于视觉输入在仿真和真实环境之间的差异非常大——光照、纹理、深度噪声,这些在仿真里很难精确复现,直接引入会带来巨大的 sim2real gap。

解耦网络在这里还有一个额外的好处:人类作为人形动力学的"工程教练",可以人为设计稀疏的输入特征——接触力、关节速度、倾角等——相当于提前过滤掉了大部分环境噪声,让模型学到的策略在真实部署时更鲁棒。

这是一种以人类先验换泛化能力的取舍,短期内有效,但也意味着这条路的天花板取决于我们对人形动力学理解的深度。