0. 简介

相比于传统的回环检测方法,SC给激光回环带来了更多的可能性,这里我们将会对SC进行解析,也顺便为之前的两篇文章填坑了。LEGO-LOAM改进思路以及代码, SC-LEGO-LOAM 扩展以及深度解析。Scan Context 就包括空间描述子的定义方法和与之对应的匹配算法。并提供了高效的 bin 编码函数,同时这种编码对点云的密度和法向的变化不敏感。另外SC还保存点云的内部结构,并使用一种有效的两阶段匹配算法,相比于其他空间描述子而言性能更好。

1. Scan Context 论文相关​


基于 Scan Context 的位置识别方案整体流程如下图所示:


大概流程为:

  • 对一帧点云先进行 SC(Scan Context)的计算
  • 从该帧点云的 SC 中提取出一个 N 维的向量(和环数一致)用于在 KD 树中搜索相近的关键帧
  • 将搜索得到的参考帧的 SC 和待匹配的当前帧进行比较,如果比较得分高于一定阈值则认为找到回环

1.1 Scan Context 计算


计算 SC 的主要过程为:

  1. 点云划分

    将一帧 3D 点云按照传感器坐标系中的方位角和半径均匀划分不同的 bin,如上图所示,从方位角上看点云被划分成 NsN_sNs​ 个扇面(Sector),从半径反向看,点云被划分成 NrN_rNr​个环(Rings),每个扇面和环相交的部分为一个 bin。每个扇面和环的宽度(分辨率)可以从点云的最大检测距离和扇面/环数量计算得到。

    从这种划分方式不难发现,距离较远的 Bin 相比于距离较近的 Bin 会稍微宽一点。这样划分的好处是可以自动对不同距离的点云密度进行动态调节。对于距离较近的地方通常点云密度会高一点,因此我们的 Bin 取窄一点,而相反,对于较远的地方,点云会比较稀疏。因此 Bin 取宽一点可以容纳更多点。

    将每个环展开可以得到一个 Nr×NsN_r\times N_sNr​×Ns​ 的二维图像,每个像素点 PijP_{ij}Pij​ 是第 iii 个环第 jjj 个扇面对应的 Bin,如上图 b 中所示。这就是 SC 的表现形式,因此下一步要做的就是每个 Bin 分配一个值 ϕ(Pij)\phi(P_{ij})ϕ(Pij​)。
  2. 给每个 Bin 分配一个数作为标识,SC 中用每个 Bin 的点中最大的高度作为该 Bin 的标识,对于没有任何点的 Bin 则用 0 作为标识。即:ϕ(Pij)=max⁡p∈Pijz(p)\phi(P_{ij}) = \max_{\boldsymbol{p}\in P_{ij}}z(\boldsymbol{p})ϕ(Pij​)=maxp∈Pij​​z(p)

    从上图中不难看到,虽然 SC 在空间上来看是一个圆,应该有旋转不变性。但我们按照 0−2π0 - 2\pi0−2π 展开成 2D 图像后,SC 对 Lidar 的朝向就变得敏感了。朝向稍微偏几度可能整体图像就有比较大的平移从而不相似了,为了解决这个问题,作者对图像进行 Ntrans=8N_{trans} = 8Ntrans​=8 次平移,通过这种方法来包含 Lidar 在不同朝向下的 SC。

1.2 NrN_rNr​(Rings)的快速搜索算法


目前主流方法中,在搜索相似帧中主要有三个主要流程:计算相似性、最近邻搜索、稀疏性优化。SC 方案中将计算相似得分和最近邻搜索结合成一步,有效降低了搜索时间。

由于,SC 中的距离计算相较于其他全局描述子较重,因此作者通过引入 Ring Key 提供了一个两阶段的层次搜索算法。Ring Key 是从 SC 中提取出来的一个旋转不变性的描述子。对 SC 中的每一行rrr 使用一个环编码函数 (Ring encoding function) ψ\psiψ 来分配一个值作为标识。然后每个环的值组合成一个 NrN_rNr​维的向量作为 Ring Key。ψ\psiψ 为:

ψ(ri)=∣∣ri∣∣0Ns\psi(r_i) = \frac{||r_i||_0}{N_s} ψ(ri​)=Ns​∣∣ri​∣∣0​​


简单来说,Ring Key 的计算方式,计算每个环(行)的密度(有值的像素除以总像素数),然后把不同环的密度组合在一起。显然这种方式提供了旋转不变性。因为无论 Lidar 怎么转只会造成图像平移,对每一行的密度不会有影响。

1.3 Scan Context 的相似性比较


给定两个 SC,需要有一个方式来判断这两个地方的相似性。设 Iq,IcI^q, I^cIq,Ic为待比较的两帧点云的 SC。论文中用的方法主要是按列进行比较,对两个 SC 中的每一对对应的列向量(Column Vector)计算出一个距离,对一个列的距离方式维计算两个列向量之间的 cos 距离,整个 SC 的距离用各列的距离之和来表示。具体计算如下所示:

d(Iq,Ic)=1Ns∑j=1Ns(1−cjqcjc∣∣cjq∣∣∣∣cjc∣∣)d(I^q, I^c) = \frac{1}{N_s}\sum_{j = 1}^{N_s}\left(1 - \frac{c^q_jc^c_j}{||c^q_j||||c^c_j||}\right) d(Iq,Ic)=Ns​1​j=1∑Ns​​(1−∣∣cjq​∣∣∣∣cjc​∣∣cjq​cjc​​)

这种距离计算方式对动态物体比较有效,因为考虑整个 Sector,而不是集中在单个 Bin 的影响。但同样的,这种距离方式对雷达的视角一致要求很高,哪怕在同一个位置雷达视角有一点点不同,可能计算出来的距离都会差别很大。为了解决这个问题,论文中使用的方式进行暴力匹配各个列组合的可能性(对其中一帧进行 2πNs\frac{2\pi}{N_s}Ns​2π​ 次小旋转进行匹配),找出距离最小的组合。

2. 基于SC的回环检测

回环检测的大致流程是对每一个关键帧,在检测器中加入所需的信息,然后进行一次检测,获得当前关键帧对应的历史关键帧索引。对于激光建图来说,所需的信息无外乎是当前帧的点云以及对应的位姿估计。

…详情请参照古月居

}
``

3 参考链接

https://zhuanlan.zhihu.com/p/393353116

https://blog.csdn.net/wyang9x/article/details/117446642

https://www.cnblogs.com/chenlinchong/p/13154874.html

https://xiaotaoguo.com/p/lidar_loop_closure/

SC-LeGO-LOAM

SC-LIO-SAM

FAST_LIO_SLAM

Scan Context回环检测解读和使用相关推荐

  1. Scan context: 3D点云的场景识别/回环检测

    作者丨铜离子c@知乎 来源丨https://zhuanlan.zhihu.com/p/214309563 编辑丨3D视觉工坊 回环检测,或者说场景识别问题,关键在于如何构建每个场景(图片/点云)的&q ...

  2. (回环检测)Scan Context++: Structural Place Recognition Robust to Rotation and Lateral Variations in Urba

    论文创新基本和之前一致,只是比之前表达更加规范化,此外添加了很多有趣实验验证,没有余力可以不看这篇论文,之前那篇看完就够了 摘要 位置识别是机器人导航中的一个关键模块.现有的研究路线主要集中在视觉位置 ...

  3. 经典激光slam配准及回环检测框架:ScanContext

    论文名称: Scan context: Egocentric spatial descriptor for place recognition within 3d point cloud map 论文 ...

  4. segMatch:基于3D点云分割的回环检测

    该论文的地址是:https://arxiv.org/pdf/1609.07720.pdf segmatch是一个提供车辆的回环检测的技术,使用提取和匹配分割的三维激光点云技术.分割的例子可以在下面的图 ...

  5. BLAM源码解析(五)—— 回环检测

    上一节介绍了BLAM的帧间匹配和帧图匹配,代码简洁明了. 本节介绍BLAM的回环检测模块.具体代码块如下: // Check for new loop closures.bool new_keyfra ...

  6. Karto的后端优化与回环检测功能对比测试与分析

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 上篇文章讲解了Karto的前端是如何工作的. 这篇文章将slam_karto中的后端优化部分的代码添加 ...

  7. 开源!用于3D激光雷达SLAM回环检测的实时词袋模型BoW3D

    点击进入->3D视觉工坊学习交流群 0. 笔者个人体会 回环检测对于SLAM系统的全局一致性有着至关重要的影响.现有的视觉SLAM回环检测大多是基于词袋模型,也就是2012年推出的BoW2库和2 ...

  8. 一文详解回环检测与重定位

    标题:VINS-Mono代码解读-回环检测与重定位 pose graph loop closing 作者:Manii 来源:https://blog.csdn.net/qq_41839222/cate ...

  9. ORB_SLAM2回环检测

    词典是特征点的描述子的集合,属于同一类特征的特征点的描述子组成单词. 在局部建图线程中,处理完一个关键帧后,会将其放入回环检测线程     在使用关键帧数据库搜索候选关键帧组(DetectLoopCa ...

  10. SC-A-LOAM:在A-LOAM中加入回环检测

    Thanks to LOAM, A-LOAM, and LIO-SAM code authors. The major codes in this repository are borrowed fr ...

最新文章

  1. Access 报表打印之分组页码实现(轉)
  2. Linux运维:快速清空文本内容
  3. 多数据源:spring boot+mybatisplus配置
  4. 物流管理论文实现:基于遗传算法的带时间窗和载重约束的车辆路径优化
  5. Java从零开始(二) Tomacat
  6. “睡服”面试官系列第二十篇之generator函数的异步应用(建议收藏学习)
  7. libreoj #103. 子串查找
  8. Trace-导出已有的服务器端跟踪
  9. 【论文写作】如何写出一篇好的学术论文?
  10. 袋鼠云数据中台专栏(五):数栈,企业级一站式数据中台PaaS
  11. 金业能源科技的汽车消耗能源解决对策
  12. 普通用户申请微软的OneDrive免费网盘,容量5T、5T、5T,重要事情说三遍!!!!!
  13. linux runtime pm机制的深入理解
  14. 2006年教育部对社会主义倒奶和资本主义倒奶的的标准回答
  15. Enable Geolocation in a WebView (Android)
  16. 计算机电缆yjv,zr电缆(yjv电缆与zryjv电缆区别)
  17. matplotlib 基础_子图创建
  18. 艾美捷ProSci 激活素RIB / ACVR1B重组蛋白方案
  19. OpenCV 4.2.0 + opencv_contrib安装 (ubuntu16.04)
  20. idea运行web项目

热门文章

  1. Java 使用POI 给Word添加水印
  2. html5图片格式有什么,jpeg是什么?
  3. 别人总结归纳很全的三方库
  4. 大数据技术架构_独家解读!阿里首次披露自研飞天大数据平台技术架构
  5. 蓝桥杯2021年第十二届省赛-双向排序
  6. html5 css3时间特效,炫酷纯CSS3响应式垂直时间轴特效
  7. sealos2.0使用教程,最简单kubernetesHA方案
  8. 计算机主机可以有几个硬盘,一台电脑可以安装盘几个硬盘?
  9. Adaptive Object Detection Using Adjacency and Zoom Prediction
  10. 【图深度学习】简单图的定义以及各类衍生图