0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ScanContext论文详解:Lidar SLAM 回环检测、空间描述符

3D视觉工坊 来源:3D视觉工坊 2023-01-31 17:12 次阅读

863123d8-9932-11ed-bfe3-dac502259ad0.pngFigure 1. 激光雷达沿着方位角(浅蓝)与放射方向(黄)的Bin分割 [1]863dcfde-9932-11ed-bfe3-dac502259ad0.pngFigure 2. Scan Context示意图 [1]

1

浅读文章Scan Context,从英文字面理解就是“扫描 上下文”。类比于我们阅读的时候,需要理解上下文,才能明白其意,LidarSLAM在进行回环检测的时候,也需要将“上下文” (之前的数据)进行比较,方才知道我们是不是又走到了之前的同一个地方(回环)。Scan Context这篇文章由韩国KAIST大学的Giseop Kim和Ayoung Kim所写,它的主要特点是提出了Scan Context这个非直方图的全局描述符,来帮助我们对“上下文”(当前/之前的数据)进行更快速、有效地搜索。典型的应用就是在LiDAR SLAM中进行回环检测和Place Recognition。

2

提出的方法•The representation that preserves absolute location information of a point cloud in each bin (如图2所示)•Efficient bin encoding function• Two-step search algorithm

3

算法流程

3.1 Scan Context的创建

(1) 与Shape Context的渊源

Scan Context这个算法其实一开始是由Shape Context [2] 所启发的,而Shape Context是把点云的 local Keypoint 附近的点云形状 encode 进一个图像中。Scan Context的不同在于,它不仅仅是count the number of points,而是采用了maximum height of pointsin each bin(简单来说,就是取每一个bin中的所有point的z轴最高点的value作为这个bin的value)。

(2) 为什么选择Maximum height?

a. The reason for using the height is to efficiently summarize the vertical shape of surrounding structures.b. In addition, the maximum height says which part of the surrounding structures is visible from the sensor.c. This egocentric visibility has been a well-known concept in the urban design literature for analyzing an identity of a place

(3) Partition a 3D scan

首先,对每一次Scan进行分割:• Nr: number of rings (黄色圈圈)• Ns: number of sectors (浅蓝色/绿色?的格子)• Lmax: 雷达每一个射线的最远距离• Radial Gap between rings =8655767a-9932-11ed-bfe3-dac502259ad0.png• Sector弧度 =8674e62c-9932-11ed-bfe3-dac502259ad0.png• 文章中: Nr=20, Ns=60

863123d8-9932-11ed-bfe3-dac502259ad0.png

(4) 给每个Bin进行赋值:Bin Encoding

86b9691e-9932-11ed-bfe3-dac502259ad0.png

公式解读:86cbdef0-9932-11ed-bfe3-dac502259ad0.png就是指the set of points belonging to the bin where the ith ring and jth sector overlapped。• z(⋅)是指86ddc110-9932-11ed-bfe3-dac502259ad0.png中一个pointP的Z坐标。• 直接使用最大z坐标值 z(p),作为这个bin的value。

(5) Scan Context Matrix

A scan context I is finally represented as a Nr × Ns matrix as:

86ec87b8-9932-11ed-bfe3-dac502259ad0.png

3.2 Similarity Score的计算

假设我们得到了一对Scan Context的矩阵,我们要计算他们俩(86ffe4b6-9932-11ed-bfe3-dac502259ad0.png)之间的相似度,文章中采用了columnwise (按列) 的距离计算。8713bf90-9932-11ed-bfe3-dac502259ad0.png:Query Point Cloud (简言之,我们当前用来query的点云)87293fa0-9932-11ed-bfe3-dac502259ad0.png:Candidate Point Cloud (咱们的“数据库”中储存的用来匹配的candidate点云) 8738c902-9932-11ed-bfe3-dac502259ad0.png:Column j of Query Point Cloud (列向量)874d1ee8-9932-11ed-bfe3-dac502259ad0.png:Column j of Candidate Point Cloud (列向量)

87560576-9932-11ed-bfe3-dac502259ad0.png

小红薯:且慢,大师兄!小红薯:古希腊哲学家赫拉克利特说,“人不能两次踏进同一条河流”。小红薯:这样来比较两个点云,而没考虑每次不可能在exactly同一个位置和角度观察,是不是too young, too simple了呢!

大师兄:恩,这是个好问题。假设咱们回到同一个地方,那有可能是沿着相反的方向回来的,那咱们的Viewpoint就发生了变化,这个Scan Context矩阵就会发生偏移!这样就会导致Column顺序发生变化。大师兄:所幸的是,只要location是在同一个地方,不管你的方向朝着哪里,至少row order不会发生太大变化。咱们只需要关心column shift这个问题。在文章中,上面大师兄和小红薯对话中的问题,如下图所示:

8767ab3c-9932-11ed-bfe3-dac502259ad0.png

Figure 3. Column Shift示意图 [1]咱们可以看到在column方向发生了水平位移,但是竖着的row方向没有变化。为了解决这个问题,文中采用了一个“地球人都能想到的方法”,那就是不断尝试各种角度的column shift。注意的是,旋转candidate point cloud有个resolution,那就是之前提到的878615a4-9932-11ed-bfe3-dac502259ad0.png我们使用公式(7)进行最佳shift的选择,找到最好的 n∗后,用公式(6)进行distance计算。

8795938a-9932-11ed-bfe3-dac502259ad0.png

注意:这里咱们通过找最好的 n∗,还有一个意想不到的好处,那就是可以给ICP提供一个Good initial rotation value! (就是ICP代码中的predicted pose)

3.3 Two-phase Search Algorithm

文中提到,有三种主流的Place Recognition的Search Algorithm:• Pairwise Similarity Scoring• Nearest Neighbor Search搜索• Sparse Optimization本文中采用了pairwise scoring和nearest search来实现有效的Hierarchical Search。

(1) Ring Key

在3.2节中我们提到的公式(6)进行最短距离计算时,要先找到最佳旋转n∗ ,计算量很大,所以在本文中提出了一种"Two-phase Search",并提出了Ring key这个Descriptor(描述子)来进行匹配搜索:Ring key is a rotation-invariant descriptor, which is extracted from a scan context. Each row of a scan context, r, is encoded into a single real value via ring encoding function . The first element of the vector k is from the nearest circle from a sensor, and following elements are from the next rings in order as illustrated in Fig. 4

87a47e0e-9932-11ed-bfe3-dac502259ad0.png

Figure 4. Ring key示意图 [1]由内而外,一圈一圈的ring key通过对Scan Context Matrix的每一行row r 进行ψ ( ⋅ )的encoding就变成了一个N r 维度的Vector k:

87c6c6ee-9932-11ed-bfe3-dac502259ad0.png

The ring encoding functionψ psiψis a occupancy ratio usingL0 norm:

87d97eec-9932-11ed-bfe3-dac502259ad0.png

小红薯:大师兄,这里的r0是什么意思呢?大师兄:这是L0 norm(范数)的意思,其实L0 norm并不是一个真正的norm,它就是the total number of non-zero elements in a vector 。比如,(2,0,1,0,9)这个vector的 L0 norm就是3,因为有3个非零数。大师兄:这样一来,咱们统计每一圈的row中有多少个非零数值,那这就和rotation没啥关系啦(也就是原文中所说的rotation invariance)!这样就能够达到快速的search。

(2) KD-Tree

• 在得到ring key向量 k 之后,文章用了 k 构建KD Tree。

• 用ring key of the query到这个KD Tree中搜索K个最相似的scan indexex(K是个heuristic number)

• 得到最相似的K个scan后,用上文中公式(6)进行Similarity Score计算.

• 满足条件的最近的candidatec∗这个位置被选为revisited place,也就是loop的地方:

87e8ecc4-9932-11ed-bfe3-dac502259ad0.png

4

Scan Context算法延伸

4.1 ICP Initial Value中的应用

由上文3.2节的公式(7)需要找到一个n ∗ 旋转,使得两个点云之间的距离最小。这里其实也可以作为ICP的一个初始值,即predicted pose,来加快converge的过程。文章的Experiment部分对此进行了试验,发现用Scan Context进行ICP初始化效果确实更好:

87f6a51c-9932-11ed-bfe3-dac502259ad0.png881c929a-9932-11ed-bfe3-dac502259ad0.png

Figure 5. SC在ICP初始化中的应用 [1]4.2 ScanContext在全局重定位中的应用在深蓝学院第四章作业中,我们应用了ScanContext在全局重定位中的效果。如果初始化不在原点,且没有全局重定位,效果如下:883b4636-9932-11ed-bfe3-dac502259ad0.jpg如果加入ScanContext进行全局重定位,效果如下图:88575448-9932-11ed-bfe3-dac502259ad0.jpg4.3Future Works在文章最后,作者提到可以使用更好的bin encoding function (eg., a bin’s segmantic information)来提升性能,目前咱们只是用了一个很简单的max Z(p)来找Z轴高度上的最高点。对于有梦想的读者,也期待你的贡献! 审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4458

    浏览量

    90764
  • SLAM
    +关注

    关注

    22

    文章

    390

    浏览量

    31592

原文标题:ScanContext 论文详解 - 用途:Lidar SLAM 回环检测、空间描述符

文章出处:【微信号:3D视觉工坊,微信公众号:3D视觉工坊】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32F103在官方USB的MSC程序基础上修改为CDC+MSC的组合设备,出现设备描述符请求失败的原因?

    STM32F103在官方USB的MSC程序基础上修改为CDC+MSC的组合设备,出现设备描述符请求失败问题;抓包发现PC主机配置描述符数据和设置的数据不一致
    发表于 04-07 06:34

    CDC+MSC设备连接不了PC,显示设备描述符请求失败的原因?

    USB组合设备:CDC+MSC,设备连接不了PC,显示设备描述符请求失败;用网上其它成功的例程测试,不是该情况就是只能使用U盘无法用虚拟串口,请问这是什么问题呢
    发表于 04-03 06:44

    USB OTG发送设备描述符失败是什么原因呢?

    能收到SETUP包,并解析数据跑到发送设备描述符,给FIFO写数据也正确,但波形上就发了一个数据出去,这会是什么原因呢?
    发表于 03-11 06:29

    为FX3应用程序实现可变USB配置描述符,开始编译程序时报错怎么解决?

    我正在尝试为我的 FX3 应用程序实现可变 USB 配置描述符,以允许在不同条件下包含不同的功能。 为此,我创建了一个 uint8_t 指针并使用 malloc 分配正确的内存量,然后
    发表于 02-26 06:58

    Traveo II上的P-DMA描述符总线错误是为什么?

    DMA,我就会收到\"描述符总线错误\"中断,由 CH_STATUS 寄存器识别,但我不确定为什么。 如果出现这个错误,也许你可以给我更多关于背景的信息? 我正在按照应用手册中的说明
    发表于 01-31 07:03

    USB字符串描述符里面的序列号字符串到底是什么东西?

    在设备描述符里面,有一个表示序列号字符串描述符的编号,请问这个序列号字符串的描述符是什么东西呢? 厂商字符串和设备字符串都能理解,而且在电脑的“设备与打印机”里面都找到了。但请问这个序列号字符串有什么用呢?在哪里能看到呢?
    发表于 01-24 08:06

    在Win下,如何获取对应插入的USB设备描述符呢?

    各位大佬,请问在Win下,如何获取对应插入的USB设备描述符呢?
    发表于 01-24 07:33

    请问SPI DMA描述符列表如何单次触发?

    要求如下: 定义两个个描述符类型的数组,如 SpiTxDesptr[3]= {{ SpiTxDesptr[1], X, X,X,X},{ SpiTxDesptr[2], X, X,X,X
    发表于 01-12 08:07

    Python的优雅之处:Descriptor(描述符

    学习 Python 这么久了,说起 Python 的优雅之处,能让我脱口而出的, Descriptor(描述符)特性可以排得上号。 描述符 是Python 语言独有的特性,它不仅在应用层使用,在语言
    的头像 发表于 11-02 10:52 682次阅读
    Python的优雅之处:Descriptor(<b class='flag-5'>描述符</b>)

    USB OTG发送设备描述符失败是什么原因?

    能收到SETUP包,并解析数据跑到发送设备描述符,给FIFO写数据也正确,但波形上就发了一个数据出去,这会是什么原因呢?
    发表于 08-09 07:26

    USB OTG发送设备描述符只能发送一个数据是什么原因?

    能收到SETUP包,并解析数据跑到发送设备描述符,给FIFO写数据也正确,但波形上就发了一个数据出去,这会是什么原因呢?
    发表于 08-04 11:15

    从获取描述符的角度理解Gadget框架

    安装好 gadget 驱动程序后(比如 modprobe g_zero), 它只是构造好了各类描述符。在设备的枚举过程会读取描述符。 使用 OTG 线连接电脑和开发板时,电脑软件会执行如下
    的头像 发表于 07-13 11:38 541次阅读
    从获取<b class='flag-5'>描述符</b>的角度理解Gadget框架

    Gadget框架构造描述符

    假设你要【模拟】一个 USB 设备: 这个 USB 设备含有厂家信息:它记录在设备描述符里,所以设备描述符应该由你提供 这个芯片可能有多种配置,这也是由你决定,所以配置描述符应该由你提供 某个配置
    的头像 发表于 07-13 11:34 345次阅读
    Gadget框架构造<b class='flag-5'>描述符</b>

    如何学习MR-SLAM的紧凑描述符的问题

    作者:K.Fire | 来源:3D视觉工坊 在公众号 「3D视觉工坊」 后台,回复「 原论 文 」即可获取论文pdf。 添加微信:cv3d007,备注:SLAM,拉你入群。文末附行业细分群。 本文
    的头像 发表于 07-07 10:54 346次阅读
    如何学习MR-<b class='flag-5'>SLAM</b>的紧凑<b class='flag-5'>描述符</b>的问题

    基于DWC2的USB驱动开发-IAD描述符详解

    本文转自公众号,欢迎关注 基于DWC2的USB驱动开发-IAD描述符详解 (qq.com) 一.  前言 IAD描述符用于一个设备功能关联多个接口,可以用于实现组合设备。 二.参考文档
    的头像 发表于 06-27 08:45 1.2w次阅读
    基于DWC2的USB驱动开发-IAD<b class='flag-5'>描述符</b><b class='flag-5'>详解</b>