退化几何:走廊、隧道与视觉/激光 SLAM 的可观性崩溃
分析特征共线、点云退化与 Hessian 奇异方向,给出退化检测方法和轮速/IMU 先验融合的工程应对策略。

走廊里激光里程计沿隧道方向漂、白墙前视觉前端乱飘——算法还在跑、RViz 里轨迹还在更新,但某些自由度已经不可观了。退化不是「精度差」,是信息矩阵在某些方向上接近奇异,优化器却在这些方向上给出看似 confident 的更新。我在长直隧道里见过 LIO 把 Z 轴漂移 2m 而系统毫无 warning。
退化长什么样
视觉 SLAM:
- 特征共面(大平面白墙)→ 法向深度不可观
- 特征共线(长廊)→ 沿走廊方向平移弱可观
- 纯旋转或小视差 → 平移不可观
- 对极几何退化 → E/H 模型切换失败
激光 SLAM:
- 长直隧道 → 沿隧道方向平移 + 绕隧道轴旋转耦合
- 大平面(单面墙)→ 法向平移不可观
- 开阔地 → 几何约束稀疏
共同本质:Hessian H 或信息矩阵 Ω 的最小特征值 λ_min → 0,对应方向的状态更新无约束。
检测方法
特征值分解:
H = V Λ Vᵀλ_min / λ_max = 条件数。条件数 > 10³ 或 λ_min < threshold → 标记退化。
退化方向 v_min(最小特征值对应特征向量)告诉你哪个自由度不可观——不是笼统说「退化了」,而是「沿 X 平移不可观」。
其他检测:
- 匹配残差对扰动的敏感度:沿某方向微扰位姿,残差几乎不变
- 点云协方差(LOAM 系):特征值比
- 视觉:有效特征的空间分布 entropy(全在一面墙上 → 危险)
应对策略
1. 退化方向降权/冻结
Δξ = V Λ⁺ Vᵀ · g (伪逆,小特征值方向不更新)或在不可观方向不加新约束,只传播协方差增大。
2. 融合其他传感器
- IMU 短时约束旋转和部分平移
- 轮速约束非完整约束(平面运动)
- GPS / UWB(若有)
不可观方向上加视觉/LiDAR 权重 = 更自信地错。正确做法是让 IMU/轮速提供先验。
3. 主动激励
原地旋转增加视差(视觉);之字形走(激光)——但这是行为层面,不能依赖。
4. 回环/重定位门槛提高
退化时几何验证更严,防止错误约束锁死。
视觉 vs 激光退化的差异
| 视觉 | 激光 | |
|---|---|---|
| 触发 | 弱纹理/共面 | 几何稀疏 |
| 检测 | 特征分布/Hessian | 点云特征值 |
| 缓解 | IMU/旋转激励 | IMU/多线束/回环 |
| 表现 | 跟踪 LOST | 静默漂移 |
评测提醒
退化场景报 ATE 时要说明:在不可观方向上精度无意义。更好的指标是在退化段内的 RPE + 是否检测到退化 + 恢复时间。
该量什么
- Hessian 特征值谱(时间序列)
- 条件数 vs 场景类型
- 退化标志触发频率 / 持续时间
- 退化段 RPE vs 非退化段 RPE
- 融合 IMU/轮速前后退化段精度变化
LOAM 系的做法
LOAM 在特征值比低于阈值时标记退化,并在优化中去掉对应方向的分量。若你用的是 LO/LIO 开源栈,先确认 degeneracy 模块没被人为关掉——为了「跑通 demo」关 degeneracy 是长期漂移的常见原因。
隧道场景的实测
120m 直线隧道里,我们的 16 线激光 LO 沿前进方向 RPE 到 3%——不是匹配失败,是 forward direction 在 Hessian 里特征值接近 0。接上轮速后 RPE 降到 0.8%,但 yaw 仍靠 IMU。没有 ground truth 时,我会画「沿轨迹切向 vs 法向」的误差分解,比单一 ATE 更能说明退化。
视觉退化的快速自检
每帧算特征点的 2D 凸包面积 / 图像面积。比值 < 0.3 且点几乎共线 → 高概率退化。比算完整 Hessian 便宜,适合前端 WARN。
规划层配合
Nav2 收到 SLAM degeneracy WARN 时,应限速或禁止进入已知退化区(隧道入口)。感知和规划共享同一份 degeneracy 标志,比事后看 ATE 更有用。
小结
退化不是偶发 edge case——长廊、隧道、大平面是工业现场默认几何。检测 + 降权 + 异源传感器,三件套缺一则长期必漂。把 degeneracy flag 接入 health monitor,比事后看 ATE 更早救场。退化段日志应单独导出,便于和地图几何对照复盘。这条我写在值班 runbook 里。
参考
- Zhang & Singh, LOAM (point cloud degeneracy)
- Tardós et al., Dealing with Perceptual Aliasing in SLAM
- Observability analysis in VIO (Li & Mourikis)
相关
也可以看看
johan's blog