cartographer 论文

欢迎访问我的博客首页


4. 局部二维 SLAM


  二维 SLAM 的局部算法和全局算法是分开的,但它们都优化雷达观测点的位姿 ξ = ( ξ x , ξ y , ξ θ ) \xi = (\xi_x, \xi_y, \xi_\theta) ξ=(ξx,ξy,ξθ)。如果传感器位于背包这种不稳定的平台上,我们会使用惯导估计重力方向,再把水平安置的雷达的扫描结果投影到二维世界。

  在局部算法中,每一段连续的扫描结果都与世界的一小块匹配。这样的小块称为子地图,匹配的方法是使用非线性优化算法使扫描结果与子地图对齐。该过程称为扫描匹配。扫描匹配会随着时间积累误差,全局算法就是用于去除积累误差的。

4.1 扫描


  子地图的构造过程是,不断进行扫描与子地图的坐标帧对齐。扫描帧包含二维空间中的 K K K 个二维点 H = { h k } , k = 1 , . . . , K H = \{h_k\}, k=1,...,K H={hk},k=1,...,K,它在子地图中的位姿称为 T ξ T_\xi Tξ,该位姿是把扫描帧中的点变换到子地图帧的刚体变换,定义如下

T ξ = ( c o s ξ θ − s i n ξ θ s i n ξ θ c o s ξ θ ) p + ( ξ x ξ y ) . T_\xi = \begin{pmatrix} cos\xi_\theta & -sin\xi_\theta \\ sin\xi_\theta & cos\xi_\theta \end{pmatrix} p + \begin{pmatrix} \xi_x \\ \xi_y \end{pmatrix}. Tξ=(cosξθsinξθsinξθcosξθ)p+(ξxξy).

其中,第一个大括号表示旋转矩阵 R ξ R_\xi Rξ,第二个大括号表示平移向量 t ξ t_\xi tξ

4.2 子地图


  子地图由雷达连续采集的若干扫描帧构建而成,以概率栅格 M M M 的形式存在。概率栅格 M M M 是从分辨率为 r r r 的栅格点到一个值的映射,即 M : r Z × r Z → [ p m i n , p m a x ] M: r \mathbb Z \times r \mathbb Z \rightarrow [p_{min}, p_{max}] M:rZ×rZ[pmin,pmax]。该值代表栅格点有障碍物的概率。栅格点的像素值包含所有离该栅格点最近的雷达点。
在这里插入图片描述

图 4.1 分辨率为 r 的栅格地图

  把一个扫描帧插入概率栅格前,需要计算出哪些栅格点属于 hits 集,哪些栅格点属于 misses 集:与扫描线终点重合的栅格点属于 hits 集,被扫描线穿过但又不与扫描线终点重合的栅格点属于 misses 集。hits 集中的每个栅格点都有一个概率值 p h i t p_{hit} phit,misses 集中的每个栅格点都有一个概率值 p m i s s p_{miss} pmiss
在这里插入图片描述

图 4.2 一个扫描帧及其对应的 hits(有叉号的阴影格子) 和 misses(无叉号的阴影格子)

  如果一个栅格像素点再次(不是第一次)被观测到,使用下面的公式如下更新它的概率值 p h i t p_{hit} phit p m i s s p_{miss} pmiss

o d d s ( p ) = p 1 − p {\rm odds}(p) = \frac{p}{1-p} odds(p)=1pp

这是一个单调递增函数,即,观测到的次数越多,它是 hit 点或 miss 点的可能就越大。

o d d s ( p ) = p 1 − p , M n e w ( x ) = c l a m p ( o d d s − 1 ( o d d s ( M o l d ( x ) ) ⋅ o d d s ( p h i t ) ) ) . \begin{aligned} {\rm odds}(p) &= \frac{p}{1-p}, \\ M_{\rm new}(x) &= {\rm clamp}( {\rm odds^{-1}} ( {\rm odds}(M_{\rm old}(x)) \cdot {\rm odds}(p_{hit}) ) ). \end{aligned} odds(p)Mnew(x)=1pp,=clamp(odds1(odds(Mold(x))odds(phit))).

   o d d s odds odds 是概率 p p p 到几率(又称比值、比数)的映射。 M M M 是像素值 x x x 到概率 p p p 的映射。像素值是 1 到 32767 的整数,是用整数代替小数概率,便于计算。

第一个公式实现在文件 cartographer/mapping/probability_values.h 的函数 Odds。第二个公式的实现在文件 cartographer/mapping/probability_values.cc 的函数 ComputeLookupTableToApplyOdds 和 ComputeLookupTableToApplyCorrespondenceCostOdds。

5. 回环闭合


  每个扫描只与包含最近几个扫描的子地图匹配,所以上面的 realtime CSM 匹配算法会积累误差。cartographer 使用稀疏位姿调整算法(Sparse Pose Adjustmen) 优化所有扫描和子地图的位姿。当一个扫描被插入子地图时,它的相对位姿会被保存以用于回环闭合。此外,如果一个子地图不再改变,它和与它匹配的扫描都会被用于回环闭合。运行与后台的扫描匹配算法一旦发现一个满足条件的匹配,对应的相对位姿就会被添加到优化问题中。

5.1 优化问题


  回环闭合和扫描匹配一样是个非线性优化问题,每隔几秒,就会使用 Ceres 求解

arg ⁡ min ⁡ Ξ m , Ξ s 1 2 ∑ i j ρ ( E 2 ( ξ i m , ξ j s ; ∑ i j , ξ i j ) ) (SPA) \arg \mathop {\min} \limits_{\Xi^m, \Xi^s} \frac{1}{2} \sum_{ij} \rho (E^2 (\xi_i^m, \xi_j^s; \sum_{ij}, \xi_{ij}) ) \tag{SPA} argΞm,Ξsmin21ijρ(E2(ξim,ξjs;ij,ξij))(SPA)

   Ξ m = { ξ i m } , i = 1 , . . . , m \Xi^m = \{\xi_i^m\}, i=1,...,m Ξm={ξim},i=1,...,m m m m 个子地图在世界坐标系中的位姿, Ξ s = { ξ j s } , j = 1 , . . . , s \Xi^s = \{\xi_j^s\}, j=1,...,s Ξs={ξjs},j=1,...,s s s s 个扫描在世界坐标系中的位姿,这些位姿是需要被优化的对象。

  每个扫描 j j j 都有一个与之匹配的子地图 i i i,优化过程中会使用它们的相对位姿 ξ i j \xi_{ij} ξij。公式中的 ∑ i j \sum_{ij} ij 是一个协方差矩阵,可以按参考文献 15 计算,或按照公式 (CS) 计算Ceres 的协方差估计特征。

   ρ \rho ρ 是损失函数,可以使用 Huber 函数,用于降低外点的影响。残差 E E E 的计算公式如下:

E 2 ( ξ i m , ξ j s ; ∑ i j , ξ i j ) = e ( ξ i m , ξ j s ; ξ i j ) T ∑ i j − 1 e ( ξ i m , ξ j s ; ξ i j ) e ( ξ i m , ξ j s ; ξ i j ) = ξ i j − ( R ξ i m − 1 ( t ξ i m − t ξ j s ) ξ i ; θ m − ξ j ; θ s ) \begin{aligned} E^2(\xi_i^m, \xi_j^s; \sum_{ij}, \xi_{ij}) &= e(\xi_i^m, \xi_j^s; \xi_{ij})^T \sum_{ij}{}^{-1} e(\xi_i^m, \xi_j^s; \xi_{ij}) \\ e(\xi_i^m, \xi_j^s; \xi_{ij}) &= \xi_{ij} - \begin{pmatrix} R_{\xi_i^m}^{-1}(t_{\xi_i^m} - t_{\xi_j^s}) \\ \xi_{i;\theta}^m - \xi_{j;\theta}^s \end{pmatrix} \end{aligned} E2(ξim,ξjs;ij,ξij)e(ξim,ξjs;ξij)=e(ξim,ξjs;ξij)Tij1e(ξim,ξjs;ξij)=ξij(Rξim1(tξimtξjs)ξi;θmξj;θs)

5.2 搜索空间


  前端实时 CSN 算法和后端快速 CSM 算法,通过扰动旋转和扰动平移产生候选空间。

  对每个搜索空间打分非常耗时,因此只有前端实时 CSM 算法会遍历所有搜索空间。后端回环检测的快速 CSM 算法需要与所有子地图匹配,因此使用分支定界算法实现更高效的匹配。

ξ ⋆ = arg ⁡ min ⁡ ξ ∈ W ∑ k = 1 K M n e a r e s t ( T ξ h k ) (BBS) \xi^\star = \arg \mathop {\min} \limits_{\xi \in \mathcal W} \sum_{k=1}^{K} M_{\rm nearest} (T_\xi h_k) \tag{BBS} ξ=argξWmink=1KMnearest(Tξhk)(BBS)

   W \mathcal W W 是搜索窗口, M n e a r e s t M_{\rm nearest} Mnearest M M M 经过四舍五入得到的网格点。

  旋转步长 δ θ \delta_\theta δθ 是每次旋转的角度,确定旋转步长的原则是:以激光发射点为中心旋转一个步长时,最远的那个扫描点刚好旋转一个分辨率 r r r

d m a x = max ⁡ k = 1 , . . . , K ∣ ∣ h k ∣ ∣ , δ θ = a r c c o s ( 1 − r 2 2 d m a x 2 ) . \begin{aligned} d_{max} &= \max\limits_{k=1,...,K}||h_k||, \\ \delta_\theta &= \rm{arccos}(1 - \frac{r^2}{2d_{max}^2}). \end{aligned} dmaxδθ=k=1,...,Kmax∣∣hk∣∣,=arccos(12dmax2r2).

公式的实现在文件 correlative_scan_matcher_2d.cc 中的函数 SearchParameters::SearchParameters。

  假设水平搜索范围、竖直搜索范围和旋转范围分别是 W x W_x Wx, W y W_y Wy, θ \theta θ,则搜索空间的数量等于下面三者的乘积。

w x = ⌈ W x r ⌉ , w y = ⌈ W y r ⌉ , w θ = ⌈ W θ δ θ ⌉ . w_x = \lceil \frac{W_x}{r} \rceil, w_y = \lceil \frac{W_y}{r} \rceil, w_\theta = \lceil \frac{W_\theta}{\delta_\theta} \rceil. wx=rWx,wy=rWy,wθ=δθWθ.

对应的算法如算法 1,这是一个三重循环。

在这里插入图片描述

前端实时 CSM 算法划分搜索空间的函数是 RealTimeCorrelativeScanMatcher2D::GenerateExhaustiveSearchCandidates,配置平移搜索范围和旋转搜索范围的参数在文件 cartographer/configuration_files/trajectory_builder_2d.lua。后端快速 CSM 算法划分搜索空间的函数是 FastCorrelativeScanMatcher2D::GenerateLowestResolutionCandidates,配置平移搜索范围和旋转搜索范围的参数在文件cartographer/configuration_files/pose_graph.lua。

5.3 分支定界扫描匹配


  对于大搜索窗口,我们使用算法 2 更高效地求解 ξ ⋆ \xi^\star ξ,该算法最初用于混合整数线性规划。算法主要思想是把所有可能组织成一棵树,根结点代表所有可能的解。在 Cartographer 中,所有的可能解是 W \mathcal W W。子结点是对其父结点的划分。每个叶结点代表一个可行解。

在这里插入图片描述

6. 参考


  1. cartographer 论文,sci-hub,2016。
  2. cartographer 论文翻译,知乎专栏,2021。
Cartographer主要理论是通过闭环检测来消除构图过程中产生的累积误差[1]。用于闭环检测的基本单元是submap。一个submap是由一定数量的laser scan构成。将一个laser scan插入其对应的submap时,会基于submap已有的laser scan及其它传感器数据估计其在该submap中的最佳位置。submap的创建在短时间内的误差累积被认为是足够小的。然而随着时间推移,越来越多的submap被创建后,submap间的误差累积则会越来越大。因此需要通过闭环检测适当的优化这些submap的位姿进而消除这些累积误差,这就将问题转化成一个位姿优化问题。当一个submap的构建完成时,也就是不会再有新的laser scan插入到该submap时,该submap就会加入到闭环检测中。闭环检测会考虑所有的已完成创建的submap。当一个新的laser scan加入到地图中时,如果该laser scan的估计位姿与地图中某个submap的某个laser scan的位姿比较接近的话,那么通过某种 scan match策略就会找到该闭环。Cartographer中的scan match策略通过在新加入地图的laser scan的估计位姿附近取一个窗口,进而在该窗口内寻找该laser scan的一个可能的匹配,如果找到了一个足够好的匹配,则会将该匹配的闭环约束加入到位姿优化问题中。Cartographer的重点内容就是融合多传感器数据的局部submap创建以及用于闭环检测的scan match策略的实现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值