Scan Context回环检测解读和使用

48 篇文章 51 订阅

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,如上图所示,从方位角上看点云被划分成 N s N_s Ns 个扇面(Sector),从半径反向看,点云被划分成 N r N_r Nr个环(Rings),每个扇面和环相交的部分为一个 bin。每个扇面和环的宽度(分辨率)可以从点云的最大检测距离和扇面/环数量计算得到。

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

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

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

1.2 N r N_r Nr(Rings)的快速搜索算法


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

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

ψ ( r i ) = ∣ ∣ r i ∣ ∣ 0 N s \psi(r_i) = \frac{||r_i||_0}{N_s} ψ(ri)=Ns∣∣ri0


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

1.3 Scan Context 的相似性比较


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

d ( I q , I c ) = 1 N s ∑ j = 1 N s ( 1 − c j q c j c ∣ ∣ c j q ∣ ∣ ∣ ∣ c j c ∣ ∣ ) 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)=Ns1j=1Ns(1∣∣cjq∣∣∣∣cjc∣∣cjqcjc)

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

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

  • 8
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 28
    评论
### 回答1: 这个错误提示意味着无法扫描默认的文档上下文。这通常发生在文档生成工具(如Sphinx)中,因为它无法找到文档的相关上下文信息。 要解决这个问题,你可以尝试以下几个步骤: 1. 确认文档是否存在并且位于正确的位置。 2. 确认文档格式是否正确。例如,在Sphinx中,文档应该使用reStructuredText格式。 3. 确认文档是否已经正确配置,包括正确设置文档上下文信息。 4. 尝试重新生成文档并检查错误是否已经解决。 5. 如果以上步骤都失败了,你可以考虑搜索相关的错误解决方案或者向相应的文档工具社区或论坛提问寻求帮助。 希望这些步骤能帮助你解决这个问题! ### 回答2: 这个错误信息说明出现了扫描文档上下文默认值的错误。在机器学习和自然语言处理中,文档扫描是非常常见的操作,它可以帮助我们了解文档中的关键词、语义和主题等信息。然而,当出现“unable to scan documentation context default”的错误信息时,可能会导致我们无法完成扫描。 这个错误信息通常与文档扫描代码中的某些问题有关,可能是在代码中指定了无效的文档上下文参数或没有正确安装依赖包等。为了解决这个问题,以下是一些可能的解决办法: 1. 检查参数是否正确:检查文档扫描代码中指定的文档上下文参数是否正确,如确保指定了正确的文件路径、文档编码、语言等,如果有任何问题,请进行更正。 2. 安装必要的依赖包:确保所需的文档扫描库已经正确地安装在你的系统中,如nltk、pandas等。如果尚未安装,请使用pip等工具安装它们。 3. 确认是否有足够的资源:确保你的计算机具有足够的内存和计算资源来完成文档扫描任务,尤其是对于大规模的文本数据集。如果你的计算机资源较少,可以尝试使用分布式计算方法来处理任务。 4. 检查运行日志:如有任何问题,请检查代码运行日志以了解更多信息,通常代码中会提供一些错误提示和排错信息。 总之,无法扫描文档上下文默认值这个错误信息可能与文档扫描代码的某些问题有关,如果你按照上述解决方案进行了尝试,但仍然无法解决这个问题,请参考代码文档和在线资源,或与相关的开发人员进行联系以获得更多的帮助。 ### 回答3: “Unable to scan documentation context default”是指在使用某些程序时,出现无法扫描默认文档上下文的错误提示。通常情况下,这可能是因为程序无法找到或访问相应的文档或文档路径遭到损坏或更改所导致的。 在解决这个问题时,首先需要确认程序是否已正确安装并已启动。如果程序已安装但无法正常启动,则需要检查是否存在已知的故障或其他问题。可以在程序官网或相关社区社区寻找其他用户的帮助或建议。如果这些方法无法解决问题,则需要检查程序的配置文件,以确定文档路径是否正确。 此外,也可以尝试重新安装程序或更新程序到最新版本,以确保不会发生版本不兼容或其他问题。如果一切正常并且程序仍无法扫描文档,则可以考虑使用其他工具来替代。例如,在文档处理方面,可以尝试使用Microsoft Office或Google Docs等替代工具,而在代码编辑方面,可以尝试使用Visual Studio Code或Atom等其他软件。 总之,“Unable to scan documentation context default”问题可能由多种原因引起,但可以通过检查程序是否正确安装、配置和更新版本来解决。同样,也建议在使用其他工具时保持灵活,以确保能够在遇到问题时快速切换到替代工具。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敢敢のwings

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值