《视觉SLAM14讲》学习小结——供小白快速入门ch10

后端2

一、滑动窗口优化的概念和方法

上一节谈到SLAM系统为了提高精度,会对前端里程计送过来的数据进行BA优化以提高辨识精度。随着系统的运行,后端收到的位姿和路标数量会越来越多,BA优化所需要的时间也会越来越长。为了保证系统的正常运行,就需要对BA的规模进行控制。其中一种有效的办法是滑动窗口法,其主要思想是仅保留离当前时刻最近的N帧进行BA优化。这N帧称为关键帧,其选择方法可以作一些改进。例如它们不仅要时间上比较新,空间上又有一定的间距以免BA结构缩成一团。再如,关键帧的选取应当使得它们与当前帧有较多的共视路标以在BA优化中充分利用路标信息。

为了实现上述功能,需要明确数据进入和退出滑窗的算法。上一节的分析表明,BA优化的关键是充分利用雅可比矩阵的稀疏性和\mathbf{H}矩阵的结构特性。这种结构特性是根据相机位姿-路标观测示意图,即ch9中的图1建立的。为了方便阅读,这里把图拷贝如下

图1:相机位姿与路标的观测关系图

这种示意图明确了相机位姿与路标之间的观测关系,在滑窗过程中应当得到保持。当从滑窗中删除一帧相机位时,其单独观测到的路标也应当被删除以减小滑窗中的路标数量。例如ch9图1中删除相机位\mathbf{C}_1时也要删除\mathbf{P}_1,\mathbf{P}_2。当往滑窗中添加一帧数据时,需要建立新增路标与原相机位的共视关系。仍如ch9图1所示,假设原来滑窗中只有\mathbf{C}_1以及其所观测到的路标\mathbf{P}_1,\mathbf{P}_2,\mathbf{P}_3,\mathbf{P}_4。现在里程计新送过来相机位姿信息\mathbf{C}_2和路标信息\mathbf{P}'_3,\mathbf{P}'_4,\mathbf{P}_5,\mathbf{P}_6,我们需要明确\mathbf{P}_3,\mathbf{P}_4\mathbf{P}'_3,\mathbf{P}'_4是对应点以建立正确的观测关系。这种对应关系的建立对BA优化结果有重要的影响,因原著中未涉及这里略去。其中一种比较简单的处理方法是对比新路标与滑窗中原路标的位置和特征关系,以此判断它们是否属于同一点。如果是的话保留滑窗中旧路标即\mathbf{P}_3,\mathbf{P}_4,删除新路标\mathbf{P}'_3,\mathbf{P}'_4并连接\mathbf{C}_2\mathbf{P}_3,\mathbf{P}_4的观测关系。有了这种观测关系,就可以在利用\mathbf{H}矩阵结构特性的基础上进行BA优化。

二、位姿图优化

位姿图优化的思想是仅对位姿进行优化,这种优化并不涉及它与路标的观测关系。位姿图中的点表征相机位姿,以\mathbf{T}_1,\mathbf{T}_2,\cdots,\mathbf{T}_n来表示,边则是表示两个位姿节点之间的相对运动,用\mathbf{T}_{ij}表示从\mathbf{T}_i\mathbf{T}_j的运动。\mathbf{T}_{ij}可根据两帧图像中特征点的匹配关系来建立,也可以根据传感器(如IMU惯导器件积分)测量得到。位姿图优化的目的就是为了有效融合这些量测结果以获得最佳的相机位估计\mathbf{T}_1,\mathbf{T}_2,\cdots,\mathbf{T}_n。为了实现这个目标,我们首先需要建立优化模型。

根据前面章节的介绍,优化是将计算值与测量值的差作为目标函数,通过调整优化参数使得目标函数取得极小值的过程。这里的优化参数就是相机的位姿\mathbf{T}_i\mathbf{T}_j等,测量值就是传感器的观测结果\mathbf{T}_{ij},而相机位\mathbf{T}_i\mathbf{T}_j差异的计算值为\mathbf{T}^{-1}_i\mathbf{T}_j。这样观测模型为\mathbf{T}_{ij}=\mathbf{T}^{-1}_i\mathbf{T}_j。注意到位姿群\mathbf{T}不满足加法运算,因此引入李代数可得误差函数为

\mathbf{e}_{ij}\doteq \Delta\boldsymbol{\xi}=\ln{(\mathbf{T}_{ij}^{-1}\mathbf{T}^{-1}_i\mathbf{T}_j)}^\vee                                              (1)

上式的含义是,将误差\mathbf{e}_{ij}定义为\mathbf{T}_{ij}李代数的观测值和计算值之差\Delta\boldsymbol{\xi},它可根据相机位\mathbf{T}_i\mathbf{T}_j的值以及相机位变化量\mathbf{T}_{ij}的观测值计算得到。优化的目的就是通过调整\mathbf{T}_i\mathbf{T}_j的值使得\mathbf{e}_{ij}取最小值。我们已经知道进行这种优化的重点是计算误差函数相对优化变量的雅可比矩阵,即\partial\mathbf{e}_{ij}/\partial\mathbf{T}_i,~\partial\mathbf{e}_{ij}/\partial\mathbf{T}_j。认真学过ch4的读者应该会马上指出李群\mathbf{T}不满足加法运算,不能直接写\partial\mathbf{T}。我们在此强调它只是一个形式符号,目的是为了方便读者理解,在实际应用中只能对李导数\boldsymbol{\xi}求导。为了区分是直接求李导数还是扰动模型,还引入变量\delta\boldsymbol{\xi}。这样雅可比矩阵应改写为\partial\mathbf{e}_{ij}/\partial\delta\boldsymbol{\xi}_i,~\partial\mathbf{e}_{ij}/\partial\delta\boldsymbol{\xi}_j。下面重点讨论如何计算这两个矩阵。

当相机位即优化变量\mathbf{T}_i\mathbf{T}_j分别产生一个微小变化时,相当于对其分别左乘一个矩阵\Delta\mathbf{T}_i\Delta\mathbf{T}_j。这对应着它们的李导数\boldsymbol{\xi}_i\boldsymbol{\xi}_j分别产生一个变化\delta\boldsymbol{\xi}_i\delta\boldsymbol{\xi}_j,这时误差\mathbf{e}_{ij}变成了\mathbf{\hat{e}}_{ij}

\mathbf{\hat{e}}_{ij}=\ln{(\mathbf{T}_{ij}^{-1}[\exp(\delta\boldsymbol{\xi}_i^\wedge)\mathbf{T}_i]^{-1}\exp(\delta\boldsymbol{\xi}_j^\wedge)\mathbf{T}_j)}^\vee \\~~~~=\ln{(\mathbf{T}_{ij}^{-1}\mathbf{T}_i^{-1}\exp[(-\delta\boldsymbol{\xi}_i)^\wedge]\exp(\delta\boldsymbol{\xi}_j^\wedge)\mathbf{T}_j)}^\vee                                      (2)

这个式子的特点是三个\mathbf{T}不在一起,中间有李代数隔离。我们希望三个\mathbf{T}能写在一起。利用原著中的公式(4.55)并稍加处理可得

\exp(\delta\boldsymbol{\xi}^\wedge)\mathbf{T}=\mathbf{T}\exp\{[\mathrm{Ad}(\mathbf{T}^{-1})]^\wedge\}                                            (3)

其中\mathrm{Ad}作用在矩阵上表示求伴随阵。根据这个式子,式(2)中的\mathbf{\hat{e}}_{ij}可改写为

\mathbf{\hat{e}}_{ij}=\ln\{\mathbf{T}_{ij}^{-1}\mathbf{T}_i^{-1}\mathbf{T}_j\exp[(-\mathrm{Ad}(\mathbf{T}_j^{-1})\delta\boldsymbol{\xi}_i)^\wedge]\exp[(\mathrm{Ad}(\mathbf{T}_j^{-1})\delta\boldsymbol{\xi}_j)^\wedge]\}^\vee                 (4)

\mathbf{T}_{ij}^{-1}\mathbf{T}_i^{-1}\mathbf{T}_j\exp[(-\mathrm{Ad}(\mathbf{T}_j^{-1})\delta\boldsymbol{\xi}_i)^\wedge]=\exp{(\phi^\wedge)}                              (5)

则根据原著中的BCH近似公式(4.30)可将式(4)改写为

\mathbf{\hat{e}}_{ij}=\mathbf{J}^{-1}_r(\phi)[\mathrm{Ad}(\mathbf{T}_j^{-1})\delta\boldsymbol{\xi}_j]+\phi                                      (6)

根据式(1),式(5)可改写成

\phi=\ln\{\exp{(\mathbf{e}_{ij}^\wedge)}\exp[(-\mathrm{Ad}(\mathbf{T}_j^{-1})\delta\boldsymbol{\xi}_i)^\wedge]\}^\vee                                  (7)

再次利用原著中的BCH近似公式(4.30)可将上式改写为

\phi=\mathbf{J}^{-1}_r(\mathbf{e}_{ij})[-\mathrm{Ad}(\mathbf{T}_j^{-1})\delta\boldsymbol{\xi}_i]+\mathbf{e}_{ij}                                         (8)

合并式(6)和(8),同时注意到\delta\boldsymbol{\xi}_i为小量\phi\approx \mathbf{e}_{ij}可得

\mathbf{\hat{e}}_{ij}=\mathbf{e}_{ij}+\mathbf{J}^{-1}_r(\mathbf{e}_{ij})[\mathrm{Ad}(\mathbf{T}_j^{-1})\delta\boldsymbol{\xi}_j]-\mathbf{J}^{-1}_r(\mathbf{e}_{ij})[\mathrm{Ad}(\mathbf{T}_j^{-1})\delta\boldsymbol{\xi}_i]                   (9)

这样对比\mathbf{\hat{e}}_{ij}\approx \mathbf{e}_{ij}+\frac{\partial\mathbf{e}_{ij}}{\partial\delta\boldsymbol{\xi}_i}\delta\boldsymbol{\xi}_i +\frac{\partial\mathbf{e}_{ij}}{\partial\delta\boldsymbol{\xi}_j}\delta\boldsymbol{\xi}_j可知

\frac{\partial\mathbf{e}_{ij}}{\partial\delta\boldsymbol{\xi}_i}=-\mathbf{J}^{-1}_r(\mathbf{e}_{ij})[\mathrm{Ad}(\mathbf{T}_j^{-1})],~ \frac{\partial\mathbf{e}_{ij}}{\partial\delta\boldsymbol{\xi}_j}=\mathbf{J}^{-1}_r(\mathbf{e}_{ij})[\mathrm{Ad}(\mathbf{T}_j^{-1})]                       (10)

上式表明\frac{\partial\mathbf{e}_{ij}}{\partial\delta\boldsymbol{\xi}_i}=-\frac{\partial\mathbf{e}_{ij}}{\partial\delta\boldsymbol{\xi}_j},这个结论无疑是正确的,也验证了式(10)的正确性。

上面只是计算了\mathbf{e}_{ij}所对应的雅可比矩阵。整个雅可比矩阵需要针对所有的i,j开展并组合成大矩阵。有了这些矩阵,就可以采用现成的软件如g2o对位姿进行优化,具体细节将在程序分析系列讨论。

三、总结

至此我们已经全部完成了后端的内容讲解。回顾前面的内容可以发现SLAM系统包括传感器信息读取(对应ch5),前端视觉里程计(对应ch7,ch8),后端非线性优化(对应ch6,ch9,ch10)。接下来两章我们将讨论回环检测和建图。这些内容构成了SLAM的总体框架。本篇讨论了如下两个内容

(1)滑动窗口优化的概念,其作用是为了限制后端BA优化的规模。然而笔者无法理解原著中的图10-2和相关内容,因此只是根据自己的理解写了一些简要的内容。有懂行的读者请不吝指教。

(2)对于位姿图优化章节,原著存在一些笔误,内容阐述的比较紧凑,初学者特别是不熟悉李导数的读者理解起来比较费力。笔者在此对各个符号给出了更清晰的定义,同时更详细地展示了推导过程,希望有助于读者理解。

  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值