Sim2Real 闭环迭代

本章目标:掌握真机测试流程、抖动/漂移/摔倒的诊断方法,并实现"仿真训练 → 真机测试 → 采集数据 → 修正模型 → 重训"的闭环迭代。这是 Sim2Real 的终极工程能力。

15.1 真机测试分级

阶段任务判定标准
1站立稳定站住 30s,无持续漂移
2下蹲/复位动作在限位内,无卡死
3原地转向绕垂直轴转动,不倾倒
4平地行走直线前进,不抖动
5摔倒自恢复跌倒后能自行站起

15.2 真机抖动、漂移、摔倒诊断

现象A:持续抖动

排查顺序:

  1. BAM 参数:带宽/齿隙不准 → 回第 10 章重标定;
  2. 动作平滑:奖励函数缺平滑惩罚 → 重训;
  3. 控制环超时:推理太慢,控制周期不稳(见第 14 章)。

现象B:姿态漂移(慢慢歪)

排查顺序:

  1. IMU 零偏:未六面校准 → 回第 8 章;
  2. IMU 安装倾角:未补偿 → 固件加补偿;
  3. 重心偏移:装配不对称 → 回第 5 章称重。

现象C:经常摔倒

排查顺序:

  1. 观测/动作缩放:维度或缩放错位 → check_obs_act_space.py;
  2. MJCF 惯性错误:重心不对 → 回第 4 章;
  3. 整机质量与仿真差异:填充率不同 → 域随机化覆盖或重标定。

15.3 真机数据采集(闭环关键)

在真机上记录 IMU、关节角度、策略输出、时间戳,保存到 data/real_robot_logs/:

t,imu_qw,imu_qx,imu_qy,imu_qz,q0,...,q13,a0,...,a13

这些数据是系统辨识与参数修正的依据,也是书稿附录实验数据的来源。

15.4 反向系统辨识(高级闭环)

用真机激励数据反向辨识整机惯性,修正 CAD 导出模型的偏差:

  1. 给机器人施加激励(小幅摆动、阶跃);
  2. 记录 IMU + 关节响应;
  3. 用最小二乘反向拟合真实质量/重心/惯量;
  4. 把辨识结果回写到 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 从"会走"变成"会各种走"。