仿真调试与诊断
本章目标:学会用 TensorBoard 观察训练,掌握训练失败(不收敛、抖动、动作发散)的定位方法,并判断问题是出在奖励函数、动力学还是观测空间。
13.1 用 TensorBoard 观察训练
训练过程记录奖励曲线、损失、动作分布、观测统计:
tensorboard --logdir experiments/exp02_walk_flat/tensorboard
关键指标:
- reward:是否整体上升、有无平台期;
- action std:动作是否收敛(不发散);
- value loss / policy loss:是否震荡。
13.2 常见训练失败定位
现象1:训练不收敛 / 奖励平台期
排查顺序:
- 奖励函数:奖励是否过于稀疏?是否信号太小?
- 观测:关键状态(高度、速度)是否进入观测?
- 学习率:是否过大导致震荡,过小导致太慢?
现象2:动作抖动 / 发散
排查顺序:
- 动作惩罚缺失:加
action_penalty与smooth_penalty(见 12.3); - 奖励函数有高频波动:抑制剧烈动作;
- 执行器带宽过低:仿真舵机跟不上(见第 10 章)。
现象3:总是摔倒
排查顺序:
- 动力学错误:MJCF 重心/惯性参数错误(回第 4 章复核);
- 域随机化过强:训练太困难,降低强度或配合课程学习;
- 奖励不鼓励站立:增加站立奖励、高度奖励。
13.3 仿真与真机差异定位框架
当"仿真完美、真机乱走",按优先级排查:
| 优先级 | 检查项 | 工具/章节 |
|---|---|---|
| 1 | 观测空间一致性 | check_obs_act_space.py(RK3566 镜像与固件) |
| 2 | 关节限位对齐 | MJCF limits vs 硬件(HD1910 CAD 模型解析 / 舵机与 IMU 标定) |
| 3 | IMU 零偏/安装 | 六面校准(舵机与 IMU 标定) |
| 4 | BAM 参数精度 | 台架拟合(BAM 执行器建模与辨识) |
| 5 | 整机质量/重心 | 称重对比 CAD(3D 打印、装配与公差) |
这个框架是本书反复强调的核心:Sim2Real gap 不是单一原因,而是从观测、动力学、执行器到传感器的一整条链路,必须逐层排查。
13.4 仿真自检脚本
每次修改代码,先跑环境自检,把错误挡在训练前:
python scripts/validation/test_env.py
python scripts/validation/validate_mjcf.py --mjcf software/training/assets/robots/microduck_feetech.xml
13.5 工程踩坑实录
- MJCF 单位错误:Onshape 用毫米导出未转米,模型放大 1000 倍,仿真崩溃(见第 4 章)。
- 奖励被噪声淹没:奖励信号幅度远小于 action_penalty,策略"摆烂"只输出极小动作。调整奖励权重。
13.6 本章小结
你已掌握训练失败的定位框架,以及"仿真好、真机差"的逐层排查方法。
下一章进入部署:把 ONNX 策略送到 RK3566 板端,跑通真机控制环。