Sim2Real 闭环迭代
本章目标:掌握真机测试流程、抖动/漂移/摔倒的诊断方法,并实现"仿真训练 → 真机测试 → 采集数据 → 修正模型 → 重训"的闭环迭代。这是 Sim2Real 的终极工程能力。
15.1 真机测试分级
| 阶段 | 任务 | 判定标准 |
|---|---|---|
| 1 | 站立 | 稳定站住 30s,无持续漂移 |
| 2 | 下蹲/复位 | 动作在限位内,无卡死 |
| 3 | 原地转向 | 绕垂直轴转动,不倾倒 |
| 4 | 平地行走 | 直线前进,不抖动 |
| 5 | 摔倒自恢复 | 跌倒后能自行站起 |
15.2 真机抖动、漂移、摔倒诊断
现象A:持续抖动
排查顺序:
- BAM 参数:带宽/齿隙不准 → 回第 10 章重标定;
- 动作平滑:奖励函数缺平滑惩罚 → 重训;
- 控制环超时:推理太慢,控制周期不稳(见第 14 章)。
现象B:姿态漂移(慢慢歪)
排查顺序:
- IMU 零偏:未六面校准 → 回第 8 章;
- IMU 安装倾角:未补偿 → 固件加补偿;
- 重心偏移:装配不对称 → 回第 5 章称重。
现象C:经常摔倒
排查顺序:
- 观测/动作缩放:维度或缩放错位 →
check_obs_act_space.py; - MJCF 惯性错误:重心不对 → 回第 4 章;
- 整机质量与仿真差异:填充率不同 → 域随机化覆盖或重标定。
15.3 真机数据采集(闭环关键)
在真机上记录 IMU、关节角度、策略输出、时间戳,保存到 data/real_robot_logs/:
t,imu_qw,imu_qx,imu_qy,imu_qz,q0,...,q13,a0,...,a13
这些数据是系统辨识与参数修正的依据,也是书稿附录实验数据的来源。
15.4 反向系统辨识(高级闭环)
用真机激励数据反向辨识整机惯性,修正 CAD 导出模型的偏差:
- 给机器人施加激励(小幅摆动、阶跃);
- 记录 IMU + 关节响应;
- 用最小二乘反向拟合真实质量/重心/惯量;
- 把辨识结果回写到 MJCF,重新训练。
# 脚本:scripts/calibration/system_id_fit.py
# 输入:真机激励CSV + 当前MJCF
# 输出:修正后的惯性参数建议
这是学术界 Sim2Real 的进阶手段,能修正 Onshape 几何计算的残余误差(打印、装配误差)。
15.5 闭环迭代流程
仿真训练 → ONNX导出 → 真机测试
↓(采集数据)
诊断问题 → 修正 BAM/MJCF/域随机
↓
重新训练 → 再测(迭代)
每个迭代周期记录到 experiments/,形成可复现的迭代历史。
15.6 步态性能评估指标
为量化进步,定义指标:
- 行走速度(m/s);
- 站立稳定时长;
- 抗扰动能力(推一下能否恢复);
- 摔倒恢复成功率;
- 转弯角度精度。
这些指标与原版 Pollen MicroDuck 对比,形成本书的性能评估章节(第 16 章延伸)。
15.7 工程踩坑实录
- 一次迭代全改:同时改了 BAM、MJCF、奖励,问题仍无法定位。一次只改一个变量,记录每次结果。
- 真机数据未打时间戳:无法对齐 IMU 与关节时序。采集前先统一时钟。
15.8 本章小结
你已掌握真机步态诊断与闭环迭代,能把仿真模型不断逼近真机。
下一章任务拓展,把 MicroDuck 从"会走"变成"会各种走"。