Figure 1. 激光雷达沿着方位角(浅蓝)与放射方向(黄)的Bin分割 [1]
Figure 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 algorithm3
算法流程
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 =
• Sector弧度 =
• 文章中: Nr=20, Ns=60

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

就是指the set of points belonging to the bin where the ith ring and jth sector overlapped。• z(⋅)是指
中一个pointP的Z坐标。• 直接使用最大z坐标值 z(p),作为这个bin的value。(5) Scan Context Matrix
A scan context I is finally represented as a Nr × Ns matrix as:

3.2 Similarity Score的计算
假设我们得到了一对Scan Context的矩阵,我们要计算他们俩(
)之间的相似度,文章中采用了columnwise (按列) 的距离计算。
:Query Point Cloud (简言之,我们当前用来query的点云)
:Candidate Point Cloud (咱们的“数据库”中储存的用来匹配的candidate点云)
:Column j of Query Point Cloud (列向量)
:Column j of Candidate Point Cloud (列向量)

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

。我们使用公式(7)进行最佳shift的选择,找到最好的 n∗后,用公式(6)进行distance计算。

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



(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的地方:

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


如果加入ScanContext进行全局重定位,效果如下图:
4.3Future Works在文章最后,作者提到可以使用更好的bin encoding function (eg., a bin’s segmantic information)来提升性能,目前咱们只是用了一个很简单的max Z(p)来找Z轴高度上的最高点。对于有梦想的读者,也期待你的贡献!
审核编辑 :李倩
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
算法
+关注
关注
23文章
4800浏览量
98500 -
SLAM
+关注
关注
24文章
459浏览量
33412
原文标题:ScanContext 论文详解 - 用途:Lidar SLAM 回环检测、空间描述符
文章出处:【微信号:3D视觉工坊,微信公众号:3D视觉工坊】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
ElfBoard嵌入式教育科普|Linux系统I/O接口:Open函数详解
1.函数概述open()是Linux/Unix内核提供的底层系统调用,核心功能是打开或创建文件。成功调用后,内核会返回一个整型的文件描述符作为该文件的句柄,后续的所有读写操作都基于此描述符进行。调用
飞凌嵌入式ElfBoard-文件I/O的深入学习之I/O多路复用
被整体复制于用户态和内核的地址空间之间时,不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大)。I/O多路复用存在一个非常明显的特征:外部阻塞式,内部监视多路I/O。1.4.2.1
发表于 12-05 11:18
飞凌嵌入式ElfBoard-文件I/O的了解探究之复制文件描述符
open返回得到的文件描述符fd可以进行复制,复制成功之后可以得到一个新的文件 描述符,使用新的文件描述符和旧的文件描述符都可以对文件进行IO操作,复制得到的文件
发表于 11-26 15:36
飞凌嵌入式ElfBoard-文件I/O的了解探究之文件描述符和FILE指针转换
在同一个文件上执行I/O操作时,系统I/O与标准I/O可以混合使用,借助于库函数 fdopen、fileno可以将文件描述符和FILE指针对象之间进行转换。1.3.3.1 fileno用于将传入
发表于 11-20 09:24
stm32103VB tinyusb 使用异常,无法识别:设备描述符请求失败怎么解决?
从调试信息上看,有获取设备描述符的指令执行
USBD Setup Received 80 06 00 01 00 00 40 00
Get Descriptor Device
Queue EP
发表于 10-14 08:00
STM32F7使用USB获取设备描述符失败怎么解决?
(设备描述符请求失败)”:
配置界面:
用的是2019.12.17克隆下来的RTT源码。程序能正常执行,LED在闪,就是USB无法识别
如果主函数中执行了“MX_USB_OTG_FS_PCD_Init()”函数的话,插USB就没反应了,大神们教下这个USB该怎么移植?
发表于 09-29 06:40
STM32H7 ETH rx描述符不可用是怎么回事?
加入文件系统(挂载在qspi+w25q)后以太网上机会有一段时间ping异常后续正常,去掉这个文件系统以太网就上电正常了
手册上说eth的dma是独立的,但是看dma寄存器得知rx描述符无效,期间尝试关闭cache,情况是不变的
下图是正常的dma数据
大佬若有空,麻烦指点一下。
发表于 09-11 07:59
如何确定 M483 HSUSB 描述符?
我们使用M843SIDAE对于USB 2.0设备,时钟和寄存器等的初始化是正确的,但是在与主机通信时,发生了错误:
“ USB 1-6:设备描述符读取/64,错误 -71
USB 1-6:设备
发表于 08-28 06:46
STM32H747的USB无法连接到电脑,电脑提示“未知USB设备,(设备描述符请求失败)”,怎么解决?
USB部分电路抄的 arduino GIGA RI WiFi。通过BOOT0拉高强制进入DFU 和 正常上电链接都不行,电脑显示一致。“未知USB设备,(设备描述符请求失败)”通过SWD 烧录程序
发表于 07-11 08:24
STM32G0b1 USB device cdc显示设备描述符请求失败的原因?怎么解决?
程序里已经包含了USBD_Start(),如果USB外设自带DP上拉、阻抗匹配的功能理论上应该是可以被VCP识别到的(驱动也装了),但实际上显示设备描述符请求失败。
然后我怀疑是DP1.5K上拉电阻要
发表于 07-10 06:16
ART-PI H750-USB-MSC设备描述符异常的原因?怎么解决?
-验证
2.CubeMX配置
2.1 时钟配置
2.2 USB配置
2.3 中间件配置
2.4 堆栈配置
3.逻辑分析仪观察
3.1 主机发送请求设备描述符的SETUP事务阶段
发表于 06-19 06:52
通过 FX3 以 5200*3900 分辨率、15fps 的速度从我的 fpga 传输视频数据流,但无法设置最小/最大比特率描述符值,怎么解决?
我正试图通过 FX3 以 5200*3900 分辨率、15fps 的速度从我的 fpga 传输视频数据流,但无法设置最小/最大比特率描述符值,因为描述符大小只有 32 位。
描述符的预期值应该是
发表于 05-23 06:35
将CY7C68013A连接到基板管理控制器 (BMC),读取设备描述符时发生FX2超时错误怎么解决?
: 使用 ehci-platform 的新高速 USB 设备编号 4
[391.934969] usb 1-1:设备描述符读取/8,错误-110
[397.134834] usb 1-1:设备描述符读取
发表于 05-14 07:36
ScanContext论文详解:Lidar SLAM 回环检测、空间描述符
评论