先说结论:如果你想让人形机器人学会一个新技能,最关键的工程判断不是“先上什么大模型”,而是先决定这个技能能不能被拆成可采集、可回放、可验证、可降级的训练闭环。真正能落地的技能学习,不是一次训练跑出漂亮视频,而是机器人在换了物体、视角、地面摩擦、执行器温度和电池状态之后,成功率还能维持在你能接受的范围内。
很多人一提到“机器人学习”,第一反应是强化学习、模仿学习、世界模型或者端到端策略网络。但如果你真的在做 humanoid 项目,更现实的问题通常是:这个技能值不值得学、训练数据从哪里来、仿真和实机怎么闭环、失败后怎么定位问题、什么时候必须回退到更简单的控制流程。
这篇适合谁
- 正在做人形机器人技能原型,希望把“能演示一次”变成“能重复执行”的团队。
- 准备从示教、遥操作或脚本控制,逐步过渡到数据驱动技能学习的开发者。
- 已经有机械臂、双臂平台或简化 humanoid 上半身,想先把抓取、放置、插接、开关门、整理物品等任务做稳定的人。
- 在纠结该先做模仿学习、强化学习,还是先补数据链路、回放系统和测试基准的人。
先纠正几个很常见的误区
- 误区 1:先把模型做大,技能自然会出来。
很多技能失败,根本不是模型容量不够,而是训练目标太含糊、观测缺关键状态、动作空间定义太激进,或者数据里没有覆盖真实失败情况。 - 误区 2:仿真里学会了,实机只差一点点调参。
对 humanoid 来说,接触、线束拖拽、关节回差、足底打滑、相机延迟、电池掉压,都会把“只差一点点”放大成整套策略失效。 - 误区 3:技能学习一定比传统状态机更高级。
如果任务边界很清楚、容错要求很高,先用状态机、轨迹模板和视觉伺服把流程跑通,往往比一开始端到端学习更快、更安全。 - 误区 4:只要成功率在实验台上过半,就值得上线继续练。
没有按物体类别、光照、姿态、速度、温升和人工干预做分桶统计的成功率,参考价值很低。
关键实现判断:先决定你是在学“动作”,还是在学“闭环能力”
我更建议把 humanoid 技能学习分成三层来想:
- 任务层:这件事什么时候开始、什么时候结束、失败怎么判定,比如“拿起杯子放到托盘里”。
- 技能层:真正需要学习的局部能力,比如抓取对位、接触后微调、受扰动后的恢复。
- 安全与回退层:一旦视觉丢失、力异常、关节过流或人进入危险区,系统如何立即降级、暂停或交还人工接管。
很多项目失败,就是把整个任务一次性端到端学习,结果数据极难采、失败代价高、问题也难定位。对第一版系统来说,更合理的路线通常是:让任务流程保持可解释,把最难手工写规则的局部环节交给学习。
分步实践指南
第 1 步,先选一个“值得学”的技能
优先选同时满足下面几个条件的任务:
- 重复频率高,人工脚本很脆弱。
- 成功和失败容易定义,不靠主观感觉判断。
- 单次失败不会直接摔机或损坏昂贵部件。
- 可以在台架、上半身平台或固定底座模式先做,不必一上来就叠加双足行走。
很适合第一阶段学习的例子包括:桌面抓取放置、双手递交、抽屉开合、按钮/开关操作、插头对位、工具抓持后姿态调整。先把上半身技能做稳,再决定是否耦合行走和全身协调。
第 2 步,把观测、动作和成功标准先定清楚
在开始采数据前,至少把下面三件事写成明确表:
- 观测:相机画面、关节角、关节速度、电流、力矩估计、末端位姿、触觉/接触信号、任务阶段标签。
- 动作:是输出末端位姿增量、关节目标、抓手开合量,还是输出高层技能参数。
- 成功标准:比如 10 秒内抓起目标并稳定放到指定区域,期间不掉落、不碰倒邻近物体、不触发限流。
如果这三项定义不清,后面不管是模仿学习还是强化学习,都会陷入“训得出来,但不知道为什么有效,也不知道为什么失效”的状态。
第 3 步,先搭数据采集链路,再谈训练框架
对 humanoid 技能学习来说,数据链路常常比模型结构更先决定上限。你至少需要:
- 统一时间戳,保证视频、关节状态、控制命令和事件日志可对齐。
- 能记录示教成功样本,也能记录中断、碰撞、错抓、重试这些失败样本。
- 能把一次任务切成阶段,比如接近、对位、接触、闭合、抬起、放置。
- 能快速回放到具体帧,看到当时机器人“看到了什么、做了什么、为什么被判失败”。
如果你还没有这套链路,我会建议先停下“卷模型”,把日志、回放和标注接口搭出来。因为没有回放,你几乎没法高效调技能学习系统。
第 4 步,按任务特点选学习路线
模仿学习适合起步快、可以稳定做示教的任务,尤其是抓取、放置、双手整理这类有明显人类先验的动作。它的优点是样本效率高、行为更容易贴近想要的风格;缺点是容易继承示教偏差,对超出示教分布的情况很脆。
强化学习更适合需要长期回报、接触丰富、恢复动作重要的任务,比如行走中的平衡调整、受扰动恢复、连续操作中的姿态优化。它的难点是奖励设计、训练稳定性和 sim-to-real。
混合路线通常更实用:先用示教把策略拉进可行区域,再用强化学习或在线微调补鲁棒性;或者让学习模块只负责局部对位,外层流程继续用传统控制和安全状态机托底。
第 5 步,用仿真不是为了省事,而是为了系统化打击脆弱性
仿真最有价值的用法,不是做一个“非常像真的宣传视频”,而是做系统化扰动注入:
- 随机化物体位置、质量、摩擦系数、照明和背景干扰。
- 随机化相机外参误差、控制延迟、关节死区、执行器噪声。
- 随机化接触参数和动作起点,让策略别只记住单一路径。
- 保留一批不参与训练的固定验证场景,避免你只是在追仿真训练集成绩。
如果你的策略在仿真里只能在“理想无扰动”条件下工作,那它不是准备上实机了,它只是准备做 demo 了。
第 6 步,把实机验证做成阶梯,不要直接全开权限
建议按下面顺序上实机:
- 离线回放,确认观测和动作维度没错。
- 只开影子模式,策略输出记录下来,但不真正驱动机器人。
- 低速、低力、软物体、受限工作空间测试。
- 加入自动急停、限位、力阈值和人工接管按钮。
- 逐步扩大物体种类、起始姿态和环境变化范围。
对双足 humanoid 尤其如此。只要技能学习还会影响重心和接触条件,就最好先在固定支撑、吊架保护或上半身平台上验证,再进入完整全身任务。
第 7 步,用“失败桶”而不是单一成功率驱动迭代
我很不建议只盯着一个总成功率数字。更实用的做法是建立失败分类:
- 没看见目标,属于感知问题。
- 看见了但抓偏,属于视觉到动作映射问题。
- 抓住了但抬起掉落,属于手部设计、抓取力控制或触觉问题。
- 动作本身对,但速度太快导致碰撞,属于安全限幅和轨迹整形问题。
- 前几次能做,温升后开始失败,属于硬件一致性和热衰减问题。
只有把失败拆桶,你才能判断下一轮该补数据、改奖励、改末端执行器,还是先修日志和标定。
最容易翻车的地方
- 训练数据只有“标准成功样本”。机器人会学会一条很窄的成功路径,却不会处理偏差和恢复。
- 把视觉延迟当成小问题。对抓取、插接、动态平衡任务,几十毫秒都可能改变接触结果。
- 实机动作空间给得太自由。策略一旦输出未受约束的高频动作,最先受伤的往往不是指标,而是硬件。
- 忽略执行器温升和电池状态。上午训得好的策略,下午可能因为输出能力变化而全面失效。
- 没有人工接管与回退逻辑。学习系统出问题是常态,不是例外。没有接管链路,就谈不上安全迭代。
一个够务实的第一版落地方案
如果你资源有限,我会建议这样起步:
- 先选一个桌面操作任务,不叠加行走。
- 用遥操作或 kinesthetic teaching 采一批高质量示教。
- 保留任务状态机和安全限幅,只让学习模块负责最后几厘米对位与抓取时机。
- 用仿真做扰动随机化,用实机做小批量高质量验证。
- 每轮只改一个主变量,比如相机位置、动作表示、奖励项或抓手接触逻辑。
这条路线不炫,但很适合把“研究味很重的话题”真正变成能迭代的工程系统。
下一步怎么做
- 先选一个 2 到 3 周内能完成数据闭环的小技能,不要一开始就做“通用家庭操作”。
- 把数据记录、回放、失败分类面板补齐,再进入下一轮训练。
- 如果你已经有上半身平台,优先做抓取、放置、按钮、旋钮等可重复任务。
- 如果你准备做双足上的技能学习,先把状态估计、保护机制和人工接管做牢,再谈策略复杂度。
延伸阅读方向
- 模仿学习与 behavior cloning 在机器人操作中的数据需求和偏差问题。
- 强化学习在 locomotion、平衡恢复和接触丰富任务中的奖励设计。
- domain randomization、system identification 与 sim-to-real 验证流程。
- 遥操作采集、失败回放和数据集版本管理在机器人迭代中的作用。