前言:前端多技巧,后端多理论是slam的一个特性。因此要理解本论文需要一定的理论基础。即需要对加权LM算法十分熟悉,对矩阵求导、SO(3)上的导数、稀疏线性方程组求解等理论非常熟悉,还有slam问题中图结构的构造。
总体评价:创新点不大,将视觉中的BA问题直接类比到了激光中,使用了一些工程技巧提高了算法性能。
主要工作:采用和视觉BA问题类似的方法构建图结构进行优化,利用矩阵的稀疏结构对算法进行加速。
优势:
- 考虑约束中的协方差信息使结构更加精确
- SPA对于初始值不敏感,只有非常小的概率陷入局部最优
- 收敛非常快,仅仅需要几次迭代即可
- 不像EKF或者UKF将非线性问题转换成线性问题求解,SPA是完全非线性的估计
算法实现
文中采用著名的L-M算法作为框架,利用了矩阵的稀疏性进行加速求解,称为SPA。
误差公式
优化变量:一系列的全局位姿ci=[t1,θi]=[xi,yi,θi]c_i=[t_1,\theta_i]=[x_i,y_i,\theta_i]ci=[t1,θi]=[xi,yi,θi]
约束:约束是一个节点cjc_jcj到另外一个参考节点cic_ici的观测量,及相对变换关系z‾ij\overline{z}_{ij}zij和协方差矩阵Σij\Sigma_{ij}Σij。
误差计算
假设cic_ici和cjc_jcj两节点间有一个约束z‾ij\overline{z}_{ij}zij,由于z‾ij\overline{z}_{ij}zij代表在i坐标系下j节点的测量位置,需要计算出图中节点cjc_jcj在cic_ici系下的位置
h(ci,cj)≡{Ri⊤(tj−ti)θj−θi
h(c_i,c_j) \equiv \left\{\begin{array}{l}
R_{i}^{\top}\left(t_{j}-t_{i}\right) \\
\theta_{j}-\theta_{i}
\end{array}\right.
h(ci,cj)≡{Ri⊤(tj−ti)θj−θi
两者相减便是误差
eij≡z‾ij−h(ci,cj)
e_{ij} \equiv \overline{z}_{ij}-h(c_i,c_j)
eij≡zij−h(ci,cj)
最终得到最小二乘误差为
E(c,p)=∑ijeijTΣij−1eij=∑ijeij⊤Λijeij
E(c,p)=\sum_{ij}e_{ij}^T\Sigma_{ij}^{-1}e_{ij} = \sum_{i j} e_{i j}^{\top} \Lambda_{i j} e_{i j}
E(c,p)=ij∑eijTΣij−1eij=ij∑eij⊤Λijeij
线性系统
采用LM算法求解该非线性最小二乘问题需要在迭代过程中不断求解如下线性方程
(H+λdiagH)Δx=J⊤Λe(\mathbf{H}+\lambda \operatorname{diag} \mathbf{H}) \Delta \mathbf{x}=\mathbf{J}^{\top} \mathbf{\Lambda} \mathbf{e}(H+λdiagH)Δx=J⊤Λe
其中H=J⊤ΛJ\mathbf{H}=\mathbf{J}^{\top}\mathbf{\Lambda}\mathbf{J}H=J⊤ΛJ,因此只需要求解误差的雅可比即J\mathbf{J}J即可构建方程并求解。
误差Jacobians
∂eij∂ti≡[−Ri⊤00]∂eij∂θi≡[−∂Ri⊤/∂θi(tj−ti)−1]∂eij∂tj≡[Ri⊤00]∂eij∂θj≡[001]⊤\begin{array}{l}
\frac{\partial e_{i j}}{\partial t_{i}} \equiv\left[\begin{array}{c}
-R_{i}^{\top} \\
00
\end{array}\right] \quad \frac{\partial e_{i j}}{\partial \theta_{i}} \equiv\left[\begin{array}{c}
-\partial R_{i}^{\top} / \partial \theta_{i}\left(t_{j}-t_{i}\right) \\
-1
\end{array}\right] \\
\frac{\partial e_{i j}}{\partial t_{j}} \equiv\left[\begin{array}{c}
R_{i}^{\top} \\
00
\end{array}\right] \quad \frac{\partial e_{i j}}{\partial \theta_{j}} \equiv[001]^{\top}
\end{array}∂ti∂eij≡[−Ri⊤00]∂θi∂eij≡[−∂Ri⊤/∂θi(tj−ti)−1]∂tj∂eij≡[Ri⊤00]∂θj∂eij≡[001]⊤
将其组合起来为
Jij=[⋯∂eij∂ci⋯∂eij∂ci⋯]
\mathbf{J}_{ij} = \left[\begin{array}{c}
\cdots & \frac{\partial e_{ij}}{\partial c_i }\cdots \frac{\partial e_{ij}}{\partial c_i }\cdots
\end{array}\right]
Jij=[⋯∂ci∂eij⋯∂ci∂eij⋯]
J=∑ijJij
\mathbf{J} = \sum_{ij}\mathbf{J}_{ij}
J=ij∑Jij
稀疏性
由于在优化过程中可能有几千个节点同时被优化,这就导致LM算法在求解过程中对超大矩阵(H+λdiagH)(\mathbf{H}+\lambda \operatorname{diag} \mathbf{H})(H+λdiagH)求逆时需要花费大量的时间,好在由于SLAM问题构成的图具有稀疏性,通常可以将算法复杂度从O(n3)O(n^3)O(n3)降低到O(n)O(n)O(n)。
压缩储存列
采用CSS 格式保存稀疏矩阵使得矩阵占用内存大大减少,其中CSS格式就是只保存非零项以及非零项的位置。
可持续的LM系统
大概简述了一下LM算法的流程