返回专辑
·Johan·4 分钟阅读

上真机前的 SLAM 系统清单:从包络线到失败安全

给出可执行的真机部署检查清单:感知包络、标定版本化、诊断日志、退化检测与 Nav2 接口契约,避免算法在数据集上过关但现场崩溃。

上真机前的 SLAM 系统清单:从包络线到失败安全

1. 数据集过关 ≠ 能部署

EuRoC 上 ATE 0.04 m,现场丢跟踪,导航还在发目标速度,撞墙——我经历过完整链路。SLAM 上真机前的检查不是 paperwork,是把已知会杀系统的因素逐一排除。清单拆成硬件(同步/标定)、算法(跟踪/回环/退化)、集成(TF/Nav2/日志)三栏,每项有 owner 和 pass 签字;否则现场永远是「算法说硬件没标好、硬件说算法参数不对」。

2. 感知包络:设计范围写清楚

先回答:系统在什么条件下工作?

维度要问的问题
速度最大线/角速度?超过后曝光/去畸变/IMU 是否仍有效
光照暗光/逆光/频闪 LED?自动曝光是否开启
结构长廊/大平面/弱纹理占比?退化检测是否启用
动态人/车/门占比?地图更新策略
振动载荷/地面不平?IMU 饱和阈值

超出包络不是「精度差一点」——是直接 LOST。文档写清楚,现场就不会被问「为什么仓库不行」。

3. 标定与同步:版本化存储

每次上机检查:相机内参/畸变重投影 RMSE < 0.5 px;双目/RGB-D 外参与 factory 值偏差记录;cam-IMU 外参 + 时间偏移 三次独立标定一致性;轮径/轴距直线 10 m 误差 < 2%;LiDAR-IMU / LiDAR-cam 外参(若多传感器);所有 yaml 绑定传感器 SN、结构件版本、标定日期。换镜头、撞过、重新拆装 → 强制重标,不要「应该差不多」。

时间同步:header.stamp 是 capture time 还是 arrival time?stamp_diff = cam - imu 直方图峰值 < 2 ms(VIO);LiDAR 点级时间戳可用(LIO 去畸变)。stamp 语义错,VIO 初始化「偶尔成功」——那是运气,不是系统。

4. 诊断日志:没有日志就没有复盘

最低限度记录(@ 关键帧频率或 1 Hz):

text
timestamp, track_status, n_features, n_inliers,
reproj_error_median, imu_bg, imu_ba,
degeneracy_flag, processing_latency_ms

回环事件单独记录:候选 ID、匹配 score、RANSAC 内点数、估计 、Chi2、是否接纳。录 rosbag 时包含原始传感器 + TF + 诊断 topic——出问题时离线复现,而不是靠记忆猜。

5. 退化检测与失败安全

走廊/隧道/白墙 → 信息矩阵奇异。检查:Hessian 最小特征值 / 条件数监控;退化方向上的更新被冻结或增大协方差;退化时触发 WARN,不 silently 输出垃圾 pose。

LOST 不等于继续导航

text
if track_status == LOST:
    停止发送导航目标 / 触发急停
    尝试 relocalization(有次数上限)
    通知上层调度系统

绝对不要:跟踪丢了但 odom 还在用 IMU 裸积分「假装正常」——Nav2 会以为定位 OK。TF 契约:odom → base_link 平滑高频允许漂移;map → odom 是 SLAM 修正,回环后可跳变。Nav2 用 map 帧规划,控制器用 odom 帧——理解这个分工。

6. 与 Nav2 的接口

map 分辨率与 inflation 匹配 footprint;AMCL 粒子收敛时间 < 任务允许等待;回环后 map→odom 跳变 Nav2 是否重规划(预期行为);速度指令上限与 SLAM 跟踪能力匹配。维护 5–10 条 anonymized 现场 bag(短、中、长、退化、动态),算法/参数变更后跑同一套 metrics——比「又在 MH_01 上刷 0.01 m」更能预测现场会不会挂。

7. 验收测试(最小集)

  1. 静止 5 min:pose 不漂、bias 稳定
  2. 慢速 8 字 5 min:无 LOST、特征数稳定
  3. 设计最大速度 10 min:同上
  4. 人工绑架:搬走到 5 m 外,重定位成功
  5. 光照变化:开关灯/开门,跟踪恢复
  6. 已知路径闭环:起终点误差记录

全部通过再交导航团队。一项 FAIL 就回到对应模块(标定/同步/参数/算法)。

8. 参数与配置版本

SLAM 节点参数(特征数、回环阈值、IMU 噪声)应与标定 yaml 同版本打包。只回滚代码不回滚 yaml,会出现「已回滚却依旧 LOST」的幻觉。启动摘要打印关键有效值:特征上限、回环 score 阈值、是否启用退化检测——现场调参有据可查。

9. 与录包复盘

事故 bag 若没有诊断 topic 与参数快照,只能猜当时跟踪状态。状态层录包应包含原始传感器 + TF + 诊断 + 关键 param dump。证据链完整,才分得清是算法责任还是配置责任。

SLAM 上真机的验收不是 ATE 表格,是在包络内稳定输出可信 pose,并在 LOST 时主动停机

← 全部文章

johan's blog