cartographer三部曲(二):Efficient Sparse Pose Adjustment for 2D Mapping

12 篇文章 3 订阅
4 篇文章 6 订阅

前言:前端多技巧,后端多理论是slam的一个特性。因此要理解本论文需要一定的理论基础。即需要对加权LM算法十分熟悉,对矩阵求导、SO(3)上的导数、稀疏线性方程组求解等理论非常熟悉,还有slam问题中图结构的构造。

总体评价:创新点不大,将视觉中的BA问题直接类比到了激光中,使用了一些工程技巧提高了算法性能。

主要工作:采用和视觉BA问题类似的方法构建图结构进行优化,利用矩阵的稀疏结构对算法进行加速。

优势:

  • 考虑约束中的协方差信息使结构更加精确
  • SPA对于初始值不敏感,只有非常小的概率陷入局部最优
  • 收敛非常快,仅仅需要几次迭代即可
  • 不像EKF或者UKF将非线性问题转换成线性问题求解,SPA是完全非线性的估计

算法实现

文中采用著名的L-M算法作为框架,利用了矩阵的稀疏性进行加速求解,称为SPA。

误差公式

优化变量:一系列的全局位姿 c i = [ t 1 , θ i ] = [ x i , y i , θ i ] c_i=[t_1,\theta_i]=[x_i,y_i,\theta_i] ci=[t1,θi]=[xi,yi,θi]

约束:约束是一个节点 c j c_j cj到另外一个参考节点 c i c_i ci的观测量,及相对变换关系 z ‾ i j \overline{z}_{ij} zij和协方差矩阵 Σ i j \Sigma_{ij} Σij

误差计算

假设 c i c_i ci c j c_j cj两节点间有一个约束 z ‾ i j \overline{z}_{ij} zij,由于 z ‾ i j \overline{z}_{ij} zij代表在i坐标系下j节点的测量位置,需要计算出图中节点 c j c_j cj c i c_i ci系下的位置
h ( c i , c j ) ≡ { R i ⊤ ( t j − t i ) θ 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(tjti)θjθi
两者相减便是误差
e i j ≡ z ‾ i j − h ( c i , c j ) e_{ij} \equiv \overline{z}_{ij}-h(c_i,c_j) eijzijh(ci,cj)
最终得到最小二乘误差为
E ( c , p ) = ∑ i j e i j T Σ i j − 1 e i j = ∑ i j e i j ⊤ Λ i j e i j 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)=ijeijTΣij1eij=ijeijΛijeij

线性系统

采用LM算法求解该非线性最小二乘问题需要在迭代过程中不断求解如下线性方程
( H + λ diag ⁡ H ) Δ 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

∂ e i j ∂ t i ≡ [ − R i ⊤ 00 ] ∂ e i j ∂ θ i ≡ [ − ∂ R i ⊤ / ∂ θ i ( t j − t i ) − 1 ] ∂ e i j ∂ t j ≡ [ R i ⊤ 00 ] ∂ e i j ∂ θ 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} tieij[Ri00]θieij[Ri/θi(tjti)1]tjeij[Ri00]θjeij[001]
将其组合起来为
J i j = [ ⋯ ∂ e i j ∂ c i ⋯ ∂ e i j ∂ c i ⋯ ] \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=[cieijcieij]
J = ∑ i j J i j \mathbf{J} = \sum_{ij}\mathbf{J}_{ij} J=ijJij

稀疏性

由于在优化过程中可能有几千个节点同时被优化,这就导致LM算法在求解过程中对超大矩阵 ( H + λ diag ⁡ H ) (\mathbf{H}+\lambda \operatorname{diag} \mathbf{H}) (H+λdiagH)求逆时需要花费大量的时间,好在由于SLAM问题构成的图具有稀疏性,通常可以将算法复杂度从 O ( n 3 ) O(n^3) O(n3)降低到 O ( n ) O(n) O(n)

压缩储存列

采用CSS 格式保存稀疏矩阵使得矩阵占用内存大大减少,其中CSS格式就是只保存非零项以及非零项的位置。

可持续的LM系统

大概简述了一下LM算法的流程

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要从入门到精通cartographer,首先需要理解其原理和工作流程。Cartographer是一个用于SLAM(Simultaneous Localization and Mapping,同时定位与地图构建)的开源库,能够将传感器数据转化为精确的地图。 入门阶段,需要了解SLAM的基本概念和原理。SLAM是指在未知环境中,通过感知传感器数据来同时估计机器人的运动轨迹和环境的地图。掌握SLAM的核心原理,包括前端、后端、回环检测等模块的作用和相互关系,能够帮助我们理解Cartographer的工作方式。 接下来,在学习Cartographer源码的过程中,需要逐行详解其实现细节。首先,可以通过阅读Cartographer的文档和官方教程来了解其整体结构和基本用法。然后,需要仔细研究Cartographer的核心算法和数据结构,包括激光雷达数据的处理、位姿变换的估计、地图的构建与更新等。可以针对每个模块和函数进行调试和分析,逐行深入源码。 在深入源码的过程中,可以利用调试工具、打印输出等方法来观察程序的执行过程和数据变化。同时,可以结合论文和研究成果来深入理解算法和数据处理的原理。通过对每个细节进行分析和思考,能够更好地理解Cartographer的实现机制和运行逻辑。 在精通Cartographer之前,还需要多进行实践和调试。可以尝试使用不同的传感器数据和场景来测试Cartographer的性能和鲁棒性。通过实际应用中遇到的问题和挑战,能够进一步加深对Cartographer的理解和掌握。 总之,要从入门到精通Cartographer,需要系统学习SLAM的原理和基本概念,并逐行深入研究Cartographer的源码和实现细节。通过理论学习和实践应用相结合,能够全面掌握Cartographer的工作原理和使用方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值