鲁棒位姿图优化

标准的位姿图优化有一个危险的特性:它信任每一条边。里程计边通常是可靠的,但回环边来自场景识别,而场景识别有时会出错——感知混淆(两条看起来一模一样的走廊)会产生错误的回环。将一条错误的回环边输入最小二乘,优化器会欣然把你的地图折叠到自身上,因为二次代价函数会让一个坏的约束主导一切。鲁棒位姿图优化就是让后端在存在离群约束的情况下依然存活的一系列技术。

路线图中提到的三种经典方法:

这些思想与更广泛的鲁棒估计工具箱相连:M估计核函数(Huber、Cauchy)对中等程度的离群点降权,而渐进非凸化(Graduated Non-Convexity, GNC)可以在不需要初始化的情况下求解强非凸的鲁棒代价函数。在实践中,系统会分层设防:前端的几何验证、PCM式的一致性检查,以及优化器中的鲁棒核函数或DCS作为最后一道防线。

M估计量的视角

所有这些软方法本质上都是同一种操作的变体:用一个鲁棒核函数 ρ\rho 替代二次代价,

min{Ti}(i,j)ρ(eijΣij1),\min_{\{T_i\}} \sum_{(i,j)} \rho\left(\|\mathbf{e}_{ij}\|_{\Sigma_{ij}^{-1}}\right),

选择这个核函数,使得代价的影响函数(其导数)在残差较大时停止增长——或者反而收缩。在二次函数下,一条残差为 10σ10\sigma 的边所施加的拉力是 1σ1\sigma 边的100倍;在Huber核下它的拉力只是线性增长;在Cauchy或Geman-McClure核下,其拉力会随残差增大而减弱。在实现层面,这就变成了迭代重加权最小二乘:每次高斯-牛顿迭代都会用一个由当前残差计算出的权重 w(e)w(\|\mathbf{e}\|) 乘以每条边的信息矩阵——这恰恰就是DCS用一个特定的闭式权重所做的事,也是可切换约束用显式开关变量所实现的效果。其中的权衡是:重新下降型核函数(Cauchy及更强的核函数)可以彻底拒绝严重的离群点,但它们会使代价函数变为非凸,因此不良的初始化可能会把好的边也”锁在门外”——这正是GNC所要解决的问题,它从一个凸的替代函数开始,逐步锐化。

前端一侧的一个补充性的检查是卡方门限检验:在一条边被接受之前,检验其残差在当前估计下是否统计上合理,即 eTΣ1e<χd,0.952\mathbf{e}^T \Sigma^{-1} \mathbf{e} < \chi^2_{d,\,0.95}(对于 SE(3)SE(3) 边为6个自由度)。门限检验能以低成本捕捉明显的离群点,但它信任当前的估计——在严重漂移的情况下,一个正确的回环也可能看起来不合理,而这恰恰是PCM的成对一致性逻辑能更好处理的情形。

常见陷阱

对SLAM的意义

一次错误的回环就可能毁掉一张耗费一小时才建成的地图,因此在已部署的系统中,后端的鲁棒性绝非可选项。这一主题也是通往多机器人SLAM的入口,在多机器人SLAM中,机器人必须决定是否信任其他机器人产生的约束——这正是PCM所针对的场景。

动手实践

相关条目