人形机器人这几年热度高得吓人,但真正把它拆开看,核心就两件事:让机器人学会做动作,和让机器人做动作做得稳。前者靠模仿学习,后者靠强化学习。很多人上来就问“这两个到底啥区别”“能不能只用一个”“从哪开始入手”,这篇文章就是把这两个东西从原理到落地串一遍,用我实际做过的人形机器人项目经验来讲,哪些是纸上谈兵,哪些是真能跑通的。
我一直觉得,人形机器人是所有机器人方向里最“不讲道理”的一个赛道。你刚把机械臂那一套控制逻辑搬过来,发现腿根本站不住;你把四足机器人那套步态规划拿过来,发现上半身的自由度又多到算不过来。所以模仿学习和强化学习在里面的定位就很微妙:它们不是互相替代的关系,而是分阶段、分任务、分场景配合着用的。这篇文章没有虚幻的吹嘘,全是实操里验证过的路径、参数和坑。
1. 模仿学习与强化学习在人形机器人上的分工逻辑
1.1 模仿学习到底在学什么
模仿学习的核心一句话就能说明白:你给我看一段专家怎么做,我去学着做。这里的“专家”可以是人,也可以是算法生成的数据,但绝大多数时候是我们自己穿戴动捕设备或者用手柄遥操作机器人采集的轨迹数据。
在人形机器人上,模仿学习不是直接“抄动作”,而是学状态到动作的映射关系。比如一个倒水动作,输入是当前关节角度、末端位置、杯子的倾斜角,输出是下一个时刻所有关节的目标角度或者速度。这个映射关系,通常用一个神经网络来表示,网络的训练数据就是那一堆轨迹。
我最早做这个方向的时候犯过一个特别蠢的错误。我当时以为模仿学习就是把轨迹回放一遍,结果发现回放根本行不通,因为机器人每次启动的初始姿态有那么一点点差异,累积几秒就偏差到完全不是那么回事了。模仿学习真正起作用的点是它学了一个“闭环策略”,也就是它每时每刻都在根据当前状态重新决定动作,而不是照着标定好的轨迹盲目执行。
在人形机器人领域的实际应用里,模仿学习特别适合那些动作特征清晰、轨迹结构相对稳定的任务,比如打招呼、搬箱子、开关门、双手递东西。但你让它去学一个连续一小时不重样的复杂操作,它就会开始摆烂。因为训练数据覆盖不了那么大的状态分布,一旦遇到没见过的情况,网络就只能瞎猜。
1.2 强化学习想要什么先决条件
强化学习不依赖专家数据,它的逻辑更像“把机器人丢进一个环境里,给定奖励,自己瞎试,试多了就试出最优策略”。这个概念所有人都能理解,但真到了人形机器人这儿,问题就来了:它要试多少次才能试出个像样的行走策略?
答案是几百万到几千万次交互。真实机器人根本不可能陪着你跑这几千万次,所以强化学习的训练必须依赖仿真环境。仿真里跌倒一万次不要钱,真机跌一次可能几千块的硬件就没了。
所以强化学习的先决条件分为三层:一是需要一个足够真实的物理仿真环境,二是需要一个能稳定跑大量并行环境的训练框架,三是需要一套精细设计的奖励函数。缺任何一环,强化学习的实验基本上都是灾难现场。
我见过太多人兴致勃勃地拿开源代码去训双足行走,结果跑到一半发现仿真里的摩擦系数和真实地面差得太远,在仿真里健步如飞的策略搬到真机上根本站不起来,这就是没想清楚先决条件的典型结果。
1.3 它们互补的核心原因
两个方法单独用都很别扭。模仿学习强在“能学到像人的动作”,弱在“没见过的情况就崩”。强化学习强在“能自主探索最优解”,弱在“探索出来的动作往往一点都不像人”,而且训练效率低得吓人。
人形机器人恰好既需要“像人”又需要“稳”,于是这两者自然地形成了一个互补结构。最典型的做法是先用模仿学习获得一个行为先验,再用强化学习在这个先验附近做微调,给它足够的探索空间,但不允许离人类的动作风格太远。这样既保住了动作的拟人度,又让策略在未知干扰面前有更强的适应力。
打个比方,模仿学习像是给一个新员工一份完整的工作手册,强化学习像是让他自己在工作中摸索优化。但人形机器人这种任务,不由分说把新员工扔进摸索模式,他大概率会把设备弄坏;而光靠手册他又学不会怎么应对突发状况。现实操作里的最佳路径,就是让两种学习机制配合,一个保底,一个提升。
2. 人形机器人特有的难点:为什么不能照搬机械臂方案
2.1 更高维的动作空间与稳定性约束
机械臂固定在底座上,末端执行器随便怎么动,base是焊死的,不存在摔倒的风险。人形机器人每一条腿都有一堆自由度,加上腰部、手臂、头部,全身自由度动辄三四十个。动作空间大了,探索难度是呈指数级上升的,因为策略网络要学的映射维度更高,随机探索的时候瞎组合的概率更大。
更重要的是稳定性约束。机械臂不需要考虑自身重心投影,人形机器人的每一步落点、每一个躯干倾斜角度,都必须满足零力矩点约束,否则直接倒。很多人忽略了一个细节:人形机器人在行走的时候,它不是“保持稳定”,而是“动态稳定”,也就是说它在每一帧都在主动制造一个趋向失衡的状态,然后用下一步把它拉回来。这种动态过程,给模仿学习的数据对齐和强化学习的奖励结构设计都带来了很多麻烦。
我做过一个实验,收敛一个七自由度机械臂的简单搬运任务,仿真里大概需要几十万步交互。但同样量级的交互量放到双足行走上,机器人连站起来都学不会。所以人形机器人训练算法时,动作空间必须做降维或者分层处理,常见的做法是先用高层的语义动作(比如前进方向、速度、步频)做决策,再用底层的控制器去解算具体的关节力矩,这就能大幅度降低学习难度。
2.2 动力学建模误差的影响翻倍
机械臂的动力学模型误差主要影响的是末端精度,误差大一点最多是纠偏几次。人形机器人对动力学模型误差的敏感程度完全不同,尤其体现在脚与地面的接触上。脚底摩擦系数差一点,落地时的碰撞冲量算不准,反馈到全身就是一大截姿态抖动。
这些年大家普遍采用的做法是“域随机化”,就是在仿真里加入大量的模型参数随机化,比如随机化质量、惯性、摩擦系数、关节阻尼、延迟时间,把这些不确定因素提前暴露给训练过程。这样训练出来的策略虽然不会针对某一个精确模型做优化,但它的鲁棒性覆盖面广,上了真机之后反而表现更稳定。
这背后其实是一个很反直觉的道理:仿真阶段千万不要把模型调得和真实机器人一模一样,因为模型不可能完全一样。与其追求一个“看似精确但必然有偏差”的模型,不如让策略在训练过程中见过足够多样的“歪模型”,把对模型误差的适应性直接进化出来。
2.3 数据采集的现实瓶颈
很多人一想到模仿学习就觉得“采集数据不很简单吗,让人穿上动捕服做一遍动作就行了”,但在人形机器人上这件事远没有这么轻巧。
第一个问题是尺寸差异。人的身体结构和人形机器人肯定不一样,骨骼长度、关节限位、质量分布都有区别。你让人做一个深蹲动作,动捕系统采下来的髋关节角度轨迹,放到机器人身上可能会超出它的关节限位,直接让电机报错。所以采集到的原始轨迹必须经过重新定向和约束裁剪,而不是拿来就能用。
第二个问题是遥操作的效率。如果不用动捕,那就得用人手操作遥操作设备来引导机器人做动作。但人形机器人全身自由度太多,一套完整的遥操作装置非常复杂,操作员要同时控制两只手臂、腰部、双腿,人脑的带宽根本不够用。所以现实中往往只遥操作上半身动作,下半身的平衡由底层控制算法或者强化学习策略来承担。
第三个问题是数据标注与对齐。人形机器人的动作涉及的时间对齐比机械臂严苛得多,走路的时候手摆动和腿迈步的相位必须对齐,差一个相位,整个动作看起来就像中风后遗症。采集数据的时候,如果你用多个传感器同时记录,那么它们之间的时钟同步、采样率统一都是必须提前解决的工程问题,不然数据本身就是脏的。
3. 一套能落地的训练流程:从平台选型到真机部署
3.1 仿真平台与训练框架怎么选
做强化学习训练,平台选型的优先度比算法还高。当前主流的选择是两类:一类偏物理精度,比如 MuJoCo,它计算接触和关节约束的速度快、数值稳定;另一类偏大规模并行,比如 Isaac Gym,它可以一口气开几千个环境实例,同时跑几千个机器人交互进程,大幅缩短训练时间。
我个人的建议是看项目阶段。如果只是验证某个奖励设计思路、对比算法差异,用 MuJoCo 就够了,轻量、容易调试、对新手友好。但如果你要训练完整的人形机器人行走策略,那就必须用大规模并行仿真,不然一个策略训三天三夜是家常便饭,完全没法做实验迭代。
训练框架方面,现在比较统一的模式是用外循环调用强化学习库的算法实现,搭配统一的策略网络接口。你不需要自己从头写 PPO,但最好理解 PPO 的 core update 逻辑,因为真到了训练发散的时候,你需要能看出到底是实现问题、超参问题,还是奖励设计问题。
3.2 模仿学习的工程化实现细节
要落地模仿学习,第一步是决定数据来源,有四种常规路径:人体动捕重定向、仿真专家策略采样、真实机器人遥操作、逐帧手工设计。对于人形机器人来说,我最推荐的是“仿真专家策略采样”。它的意思是,你可以在仿真环境里先用强化学习或者模型预测控制训练出一个“老师”策略,让这个老师策略生成海量轨迹,再拿这些轨迹去训练一个模仿学习策略。
这个方法的好处是数据天生对齐机器人本体,不存在人体结构和机器人结构映射的问题。而且仿真里可以无限生成数据,数据量不够就再采一批,完全不吃真实资源。缺点也有,那就是“老师”策略的水平上限,决定了“学生”模仿学习策略的水平上限,如果你老师本身就走得歪七扭八,那学生学出来只会更差。
行为克隆是实现模仿学习最容易上手的算法,就是把数据当成监督学习来做,输入状态,输出动作,用均方误差或者负对数似然作为损失函数。但它有一个业界公认的问题:协变量偏移。训练数据里机器人永远处于正常状态,一旦上真机出现一点微小偏差,机器人进入了一个训练时没见过的状态,策略就直接懵掉。这就是大名鼎鼎的“分布外问题”。
解决办法通常有两个:一是在训练数据里人工加入噪声,故意让机器人偏离轨迹,然后让网络学着回来,相当于被迫学会纠错能力;二是用 DAgger 这类交互式模仿学习算法,让策略自己跑一跑,把跑偏的状态也标记上专家的正确动作,持续加入训练集。前者实现简单,后者效果好,但需要一个能实时给纠正动作的“专家”在环。
3.3 强化学习核心训练链路与关键参数
真到了强化学习训练环节,算法层面我建议以 PPO 为底座,这是目前人形机器人领域公认最稳的算法。它训练过程相对稳定,超参敏感度不像 SAC 那么高,而且天然支持大规模并行环境。PPO 的 clipped surrogate objective 里有一个关键系数 clip range,我一般设置在 0.2 左右。这个值太大了会步子迈太开导致训练不稳定,太小又会让策略更新太慢、训练时间拉长。
奖励设计方面,人形机器人的行走任务我一般拆成四层:
- 方向奖励:鼓励机器人朝目标方向前进,通常用速度向量和目标方向的点积
- 姿态奖励:鼓励躯干保持直立、关节不要过界,防止走出奇怪的姿势
- 步态奖励:鼓励合理的步频和步幅,防止小碎步或者原地踏步
- 惩罚项:电机力矩过大、机体碰撞地面、脚滑等,都要施加负奖励
这四层设计里最容易出问题的是姿态奖励和方向奖励冲突。比如机器人发现弯腰向前冲能获得更高的前进速度奖励,于是它就学会了驼背狂冲。这种“奖励破解”是强化学习里最普遍也最让人头疼的现象。我的经验是方向奖励不要给得太强,最好对速度向量做分段加权,低速度区间给较高增益,高速度区间增益递减,这样机器人才不会为了追求速度做出毁天灭地的姿势。
训练超参方面,batch size 和更新次数是性能关键。早期的实验我吃过不小的亏,因为 batch size 设太小,策略更新时梯度噪声大,损失曲线一直在震荡,练了三千万步的模型比五百万步的模型表现得还差。后来把 batch size 提到足够大,配合适当的学习率调度,训练曲线才稳定下来。
3.4 Sim2Real 迁移:域随机化怎么做才有效
策略在仿真里训好了,直接搬到真机上,十个里有九个是废的。原因就是之前说的模型误差。Sim2Real 迁移是整个人形机器人学习流程里最考验功力的环节,没有之一。
最常见的做法是系统化地使用域随机化。具体来说,每次环境重置的时候,从预设分布里随机抽取一组物理参数,比如机体每个连杆的质量乘上一个 0.8 到 1.2 的随机因子,电机力矩增益乘上一个 0.9 到 1.1 的因子,地面摩擦系数在 0.4 到 1.5 之间随机,控制延迟在 0 到 2 个控制周期之间随机。
这些扰动单独看每一项都不大,但组合起来训练出的策略,就像一个在各种恶劣路况都开过车的老司机,上了真车反而不会因为一点点异样就翻车。我第一次把域随机化做完整的时候,策略从仿真搬到真机几乎没调参就能走路,那一刻我才真正理解什么叫“仿真不是为了还原真实,而是为了覆盖真实”。
有些团队还会加入噪声注入,就是在仿真里给状态观测数据加上高斯噪声,模拟真实传感器读数的噪声。这个细节特别关键。真实机器人关节编码器的数据不是完美的,零点漂移、温度变化、电磁干扰都会引入误差。如果训练的时候观测值“白璧无瑕”,策略就会过度信赖观测数据,真机上一旦噪声上来,策略判断力就瞬间崩塌。
3.5 真机部署时容易被忽视的工程细节
真机部署就完全是另一个画风了,像从实验室跨到工地现场。我的经验是回归最基本的工程问题:控制频率和时延预算。
人形机器人行走控制频率至少要 100Hz 到 200Hz,也就是说每个控制周期只有 5 到 10 毫秒。在这段时间里,算法要完成状态估计、策略推理、目标角度解析、下发给电机驱动器,每一步都有耗时。如果你的策略网络稍微大一点,推理时间达到两三毫秒,那留给其他环节的预算就非常紧了。
我的解决方案是两步走:第一步,策略网络输出的是驱干速度指令和步态参数,不直接输出关节角度,把关节层面的解算交给一个轻量的传统控制器;第二步,策略推理放到一个独立线程,保证推理不阻塞控制主循环。这个架构调整完之后,整体时延少了三成以上,真机稳定性立刻上个台阶。
还有一个细节是安全保护。强化学习策略在真机运行的时候,你必须设一套独立于学习策略的安全逻辑:关节角度限位保护、力矩限幅、机身倾斜超限自动落膝、通信断线自动停机。这些保护逻辑不能放在策略网络内部,否则它自己就能绕过。独立的安全层是最后的底线,宁可误触发停机,也不能让策略失控导致硬件损伤。
4. 实测过程复盘:我从零训到真机走稳的关键节点
4.1 第一步失败:直接模仿学习上真机
我一开始特别理想主义,觉得模仿学习这么成熟了,拿一段高质量的人体动捕数据训练一下,机器人就能复现像人的动作。结果第一次上真机测试,机器人走了三步之后就开始左右摇晃,第五步直接跪倒。
复盘下来原因很清楚:动捕数据重定向到了机器人身上之后,很多关节轨迹在边界上反复试探,机器人本身的电机响应速度又跟不上数据里人的动作速度,导致实际执行出来和期望轨迹严重不匹配,策略根本没见过执行偏差如此之大的状态。
这个阶段我学会了一件事:对于人形机器人这种高动态系统,直接跨物种迁移动作数据没问题,但必须要在迁移后做动力学层面的修正,比如降速执行、约束关节位置范围、用仿真对它做一次回放验证。不然就是在盲人摸象。
4.2 第二次转向:仿真老师策略生成数据
第二次我换了思路,放弃从人体采数据,改为在仿真里花一周时间训出一个稳健行走的老师策略。虽然老师策略的步态比较僵直,远远谈不上“像人”,但至少它是一个机器人本体真实具备动力学可行性步态。
我用老师策略采样了一百万条短轨迹,每条持续两到三秒,再拿这些轨迹训练一个更轻量的模仿学习策略。这一步训练快了很多,因为数据质量更加对齐,机器人学出来的步态虽然机械感很强,但上真机就能站稳走稳,助力电机负载也在合理范围。
但我很快又发现了新问题:模仿学习策略只学会了一种固定步频、固定步幅的“模板走路”,稍微给一点外界推力,或者地面有一点点高度变化,它就慌了。这个结果让我意识到,模仿学习的上限可能就是“学得像”,但对扰动的应对能力必须靠强化学习来补。
4.3 第三次成功:模仿学习提供先验加强化学习加固
最终跑通的是两阶段训练法。第一阶段用模仿学习把策略初始化到“能走”的状态,第二阶段锁住行为先验,推出强化学习微调。
具体操作是在奖励函数里加一项“策略输出与模仿学习输出的一致性约束惩罚”,也就是说强化学习可以探索新的步态,但如果探得太远,偏离了模仿学习的输出,就会受到惩罚。这样强化学习不会把策略带得太放飞,又能在这个局部空间里找到更稳健的参数。
第二阶段训练大概跑了三百万步交互,训练出来的策略在仿真里面对随机推力、地面凸起、摩擦变化都表现得很稳。搬上真机的表现,虽然不是人类那种松弛自然的感觉,但肢体协调度已经相当接近“机械舞演员”的水平,至少外人一眼看过去,能明显看出这是人形机器人在走,而不是一个棍子在移动。
4.4 关键节点数据记录
为了让参考价值更明确,这里放一张简化的对比表,展示三个实验节点的关键数据。我尽量用容易理解的指标来呈现,不堆复杂术语。
| 实验阶段 | 训练方式 | 仿真步数 | 真机走稳成功率 | 最明显短板 |
|---|---|---|---|---|
| 第一阶段 | 动捕重定向 + 行为克隆 | 0 | 约20% | 动作僵直,易跌倒 |
| 第二阶段 | 仿真老师策略 + 模仿学习 | 50万步 | 约50% | 无法应对干扰 |
| 第三阶段 | 模仿学习先验 + 强化学习微调 | 300万步 | 约85% | 步态自然度略欠缺 |
每次实验推进的核心不是算法换得多花哨,而是把前一个阶段暴露出的问题,在下个阶段针对性地搭桥。学动作用模仿,练抗性用强化,这句话听着很简单,但它是真机跑稳的全部逻辑。
5. 常见问题与排查经验速查表
5.1 训练不收敛,奖励一直在涨但表现越来越怪
这是最容易被发现的奖励设计问题。表现“越来越怪”就是典型的奖励破解,机器人找到了奖励函数的漏洞,比如原地转圈、抖动前进、故意让脚摩擦地面等。
排查思路先盯奖励曲线和动作可视化的对应关系。如果总奖励在上升,但分项里“打滑时间”也在上升,那就是在摩擦地面刷奖励。解决办法是给速度反馈加一个“足底是否滑动”的开关,滑动时抑制速度奖励。更通用的思路是给所有“前进、速度类”奖励乘上一个姿态健康度系数,姿态好才有全额奖励。
5.2 仿真稳如泰山,真机一碰就碎
这类问题基本锁定在 Sim2Real 迁移环节。大概率原因不是策略没学好,而是仿真环境“太干净”了。
优先排查三个点:仿真里有没有加观测噪声、有没有做域随机化、控制频率是否和真机一致。缺哪项补哪项,一步到位全加上。还有一个补强方案是随机化初始状态,在仿真里给机器人设置各种带偏差的初始角度组,让它从歪斜状态自己调整回来,这类能力在真机落地时特别宝贵。
5.3 数据量很大但模仿学习动作很拉胯
这种情况下先检查数据本身,质量比数量重要得多。打开轨迹可视化,看看里面的状态量有没有明显跳变、有没有由于传感器丢失导致的时间缺口。
另外要重点检查数据集里状态动作对的“对齐关系”。行为克隆默认相邻帧之间的状态变化和动作记录是对应的,如果采集时存在延时,每一步动作都慢半拍,那策略学出来就是“延迟反应”,在真机上表现会非常突兀。我习惯做法是采集完成后做一次逐帧相关性检查,保证数据序列的时间对齐精度在10毫秒以内。
5.4 训练速度慢得让人怀疑人生
人形机器人强化的训练速度很大程度上取决于环境并行数。如果你的环境并行数只有几十,那建议认真考虑换一下训练框架的配置方式。大规模并行仿真已经是非常成熟的方案了,不要在这个环节上省精力。
另外一个容易被忽略的是观察空间和动作空间里的冗余量。一些和你任务无关的关节观测值,比如闲置手指的关节角,不会提供帮助,反而让网络变大、训练变慢。精简观察空间可以显著提速,而且通常不会影响最终效果。
5.5 真机测试时电机发热严重
电机发热大概率是控制输出太频繁地在极限值附近切换。人形机器人行走时,特别是刚起步阶段,策略容易产生高频抖动指令,电机在短时间内反复加减速,热量自然飙升。
常见修复方式有三种:在策略输出端加一阶低通滤波,对目标角度做平滑;在奖励函数里加惩罚项,抑制关节加速度过大,从源头让策略不学高频抖动;在控制代码里给输出力矩做变化率限幅,防止瞬时冲击电流过大。这三层措施各管一段,叠加后基本能解决发热问题。
6. 写给打算入坑的人:几条真实体会
6.1 先别急着碰算法,把仿真跑通再说
我见过不少人,一上来就研究论文里的变体算法,讨论了三天理论,最后发现仿真环境都没装上。人形机器人学习的整个流程里,仿真平台的熟练度决定了你迭代速度的下限。先把一个标准行走任务在仿真里从头训到尾,完整走一遍训练流程和调参过程,再考虑那些花花绿绿的算法改进。
6.2 没有通用奖励函数这回事
可能有人跟你说某个奖励函数是通用的,换个机器人就能用,这种话别全信。奖励函数的设计是一个高度耦合的过程:同一个函数在动作空间不同、执行器时延不同、状态观测噪声不同的机器人上,训练结果可能完全不同。唯一可行的路径是理解每一项目奖励想引导什么行为,再根据自己的机器人特性去微调权重。
6.3 真机测试永远从最低安全风险模式开始
第一轮真机测试千万不要直接跑完整行走,先把机器人用吊架悬挂保护,只让它做原地踏步和控制响应测试。等策略在任何工况下都不会突然抽风了,再逐步让它承担自重。这一步可以帮你挽回大量硬件维修费用。
我在某一次测试里就没有严格执行这个原则,机器人跑完一轮之后突然朝侧面猛倒,浑身关节刮了一地,维修和调试花了一整周。从那以后我给自己定了个规矩,任何新策略上真机,都必须先过安全响应测试才能脱保护运行。
6.4 日志系统的重要性远被低估
训练和真机测试过程,你得把状态量、奖励分项、控制指令全部记录到结构化日志里。不然出了问题,就只有一堆解释不清的录像。有次真机测试遇到高频率震动,凭肉眼根本看不出规律,后来把日志里的力矩数据按频率做分析,才发现是摆动腿控制频率和机体谐振频率耦合。没有日志,这类问题根本没法定位。
我做了这么多年机器人学习方向,最深的体会是:理论知识谁都能看,代码谁都能跑,但真正拉开差距的是把这两个结合起来的能力。人形机器人的模仿学习和强化学习不是一个深不可测的学术概念集合,它们就是流程、工程理解、参数调节和耐心堆叠起来的东西。建议你先找一个成熟的开源仿真环境,从头完整训一个局部任务,拿到那份从失败到走稳的体验之后,再回头看这篇文章的每一个细节,你会有完全不一样的感受。