第 15 课 · sim2real 与域随机化:为什么仿真会骗你
这一课解决什么问题:仿真里走得好好的鸭子,装到真机上为什么摔?这一课讲清仿真和现实的差距清单、域随机化的原理、扰动测试怎么做,以及 expD"指标漂亮但步态没成"的教训。
1. 仿真和现实之间隔着一张清单
物理引擎是对现实的简化。对照训练参数指南,Microduck 这只鸭子的差距至少有五项,每项在配置里都有对应数字:
| 差距 | 仿真里的近似 |
|---|---|
| 摩擦 | BAM 摩擦随机 0.9~1.1 倍 |
| 延迟 | 命令延迟 3~6 仿真步 |
| 传感器噪声 | 关节速度 ±0.25 rad/s、躯干角速度 ±0.03 等 |
| 机械间隙 | 官方另有 backlash(间隙)模型变体 |
| 执行器动力学 | 用 BAM 内置 XL330 参数族模拟,kp_fw=200 |
每一项单看都小,叠在一只 737 g、靠 15 个舵机维持平衡的鸭子上,足以让仿真最优解在真机上一败涂地。这就是 sim2real gap(仿真到现实的鸿沟)。
所以呢?仿真不是现实的替身,只是现实的排练场——排练时就得按正式演出的苛刻程度来。
2. 域随机化:故意把仿真做"糙"
域随机化(domain randomization,DR)的思路反直觉:训练时故意随机扰动这些参数,让同一条策略见过千万个"略不相同的世界",到真机上那个世界只是其中之一。像在有风的天气练投篮,比赛时反而觉得球场很安静。
指南 6.7 节记录了当前配置:躯干质心 ±3 mm(课程逐步扩到 ±15 mm)、头部组件 ±3 mm、质量+惯量 0.95~1.05 倍、每 3~6 秒来一次 ±0.3 m/s 的速度冲击、IMU 安装误差随机轴最大 6°、编码器偏置 ±0.015 rad;而 kP/kD 随机虽留了范围但当前是关的。
原则是指南原话:DR 要覆盖实测误差,不是想象中的最坏情况。范围开得过大,策略为了"所有虚构机器人都不倒",会学成紧张、保守、难以行走的折中动作。
3. 扰动测试怎么做的
开了 DR,怎么验证它真有用?构建日志 2026-09-06 的 exp001b:用 rl-series/scripts/eval_imu_robustness.py 给 IMU 观测加不同角度的扰动,扫全角度区间,比较 A(IMU 随机化 ON)和 B(OFF)的 reward 衰减。结果:A 最大衰减 -4.6% vs B 的 -6.0%,10° 起 A 反超——方向对,但 1–2% 的差异在单种子噪声内,诚实结论是"不可测",工具留好了,长训练 checkpoint 出来即复测。
所以呢?鲁棒性不看你训得多好,看你被打时掉多少;验证脚本固化成工具,以后每个 checkpoint 都能免费复测。
4. 指标会骗人:expD 的教训
实验总表里 expD-m4-512 这行(2026-09-07,512 环境,自 expC/2198 迭代续训)写着:ep_len 315 → 744,站稳了,但步态没成——air_time_mean 卡在 0.04 s,策略找到了"shuffle(蹭着小碎步挪)"这个局部最优:站着不摔,episode 就长,指标就好看,可它始终没学会真正迈步。
无独有偶,exp001 里"世界更乖"的 B 组 reward 领先,鲁棒性却存疑(第 14 课)。两条记录指向构建日志同一句原话:统计指标会骗人,画面本身才是事实——那条日志连"帧亮度均值 58/255 以为黑屏,看关键帧才发现是黑天空"的乌龙都记着。
所以呢?每次下结论前,回放亲眼看一遍;reward 和 ep_len 是体检表,不是诊断书。
5. 为什么换舵机必须重训
构建日志 2026-09-07:本项目用飞特 HL-1910-C001 替代官方 XL330(15 只 ¥1500,省约 ¥1100),代价之一写得很清楚——官方 9 个 ONNX 作废,必须重训。原因就是上表最后一行:执行器动力学(扭矩、响应、摩擦特性)变了,旧策略面对的是一个没见过的新身体;完整重训流程见 microduck-replica/docs/换舵机重训全流程.md。
动手练习(15 分钟)
为你将来的真机鸭子写一份"现实差距清单":从上表五项里挑出你认为最狠的三项,各写一句"我打算在仿真里怎么扰动它"。
自查清单
- [ ] 我能列出仿真与现实差距的至少四项
- [ ] 我能用自己的话解释域随机化为什么有效、范围为什么不能无限大
- [ ] 我能复述 expD"站稳但没学会走"是怎么被发现的
- [ ] 我能解释换舵机后为什么官方 ONNX 全部作废
下一课预告
DR 是"练抗打",课程学习是"练升级"。第 16 课讲从走到跑的三阶段方法论,以及 expE 此刻正在进行的真实操作:把奖励门槛从 0.125 降到 0.04,让鸭子先"看得见"步态奖励。
延伸资源
microduck-replica/docs/训练参数调整与新动作开发指南.md第 6.7–6.8 节(随机化与噪声延迟全表)microduck-replica/docs/换舵机重训全流程.md(换执行器后的完整重训链路)microduck-replica/构建日志.md2026-09-06 exp001b 条目与 2026-09-07 换舵机条目- 理论补充:Hugging Face 深度强化学习课