前言
Scan-context是基于结构信息的全局定位方法,它不依赖于直方图全集描述子或机器学习方法,直接记录点云的3D结构信息。此外,本文还提出了计算两个Scan-context相似得分的方法以及回环检测的两步搜索方法,使得回环检测不依赖于位置。
SLAM中位置识别为回环检测提供候选帧。
视觉位置识别容易受到光线变化的影响。激光位置识别存在两大难题,当同一位置下不同航向角的描述子要求旋转不变性,另外,描述子必须处理点云中的噪声。直方图可以解决这两个问题,但是直方图只提供了场景中的随机索引,难以直接表达场景详细的结构信息,导致直方图对相同场景有时难以识别。
scan-context是一种基于户外场景识别的3D点云描述子,它将3D的点云信息转换为2D矩阵,它存在以下优点,高效的编码函数,点云结构信息的保留,两步匹配算法。
位置识别方法可根据使用的传感器,分为激光位置识别和视觉位置识别,视觉位置识别存在光照影响的问题,激光位置识别更加健壮。
激光位置识别可以分为本地描述子和全局描述子,本地描述子有PFH、SHOT、shape-context、spin-image,它们首先找到点云中的关键点,将其周围的点放大对应的bin中,并进行编码。本地描述子原本是为3D模型设计的,对点云的稠密性要求较高,然而激光雷达产生的点云,其稠密性随着距离的增加而减小,并且非结构化物体(例如树木)上的点云法线噪声较大,由于本地描述子需要使用点云的法线信息,所以本地描述子不适用于室外的位置识别。
全局描述子不包含关键点检测步骤,其直接描述点云的结构信息。scan-context将3D点云从点云中心开始根据等步长的航向角和半径距离分割为不同的扇形栅格,每个栅格的值是其中所有点的最大高度值,对于没有点的栅格,它的值为零。
scan-context对点云位置的要求很高,当位置差别较小的时候,两个scan-context的相似程度可能很低,因此同时考虑周围一定数量的点云进行编码。
SC得分
对于两帧SC,需要计算两帧的得分描述相似程度。一列一列的比较SC,公式如下
通过计算两个SC相同序号的列向量之间的点乘与各自膜的乘积,得到相似得分,如果两个列向量完全相同,最后的结果为1,而对应的得分为零,完成所有列的计算并求和之后,最终为两SC的得分,因此得分越低,相似程度越高。列比较对于动态物体的计算效率较高。
SC描述子列向量均值会受到旋转的影响,也就是说,当两SC描述子位于同一位置但是不同的航向角时,两帧SC描述子会存在列方向存在一定的偏移量,之间通过列计算方法两SC描述子无法匹配。因此在进行匹配前,需要计算两SC描述子的偏移量,对其中一个SC描述子进行对应的偏移,保证两SC位于同一航向角后,在进行匹配。首先计算两SC矩阵中每个列向量的均值,将二维矩阵转换为一维向量,然后遍历每一个可能的偏移量,对一维向量偏移之后计算两一维向量的差值,最终选择所有偏移量中差值最小的偏移量,对相应的SC描述子进行偏移再在添加它左右附近的偏移量(一维向量可能损失精度),作为最终偏移后的SC描述子,并且计算的偏移量还可以作为之后ICP匹配的初值。
两步搜索算法
保存所有关键帧的SC描述子,为了找到当前关键帧的回环候选帧,需要在当前所有关键帧SC描述子中找到与当前关键帧SC描述子最相似的,由于直接计算SC描述子的相似得分时间复杂度较高,为了降低计算复杂度,需要采取特殊方法,将搜索问题分为两步,首先通过SC描述子行向量均值进行搜索,然后在其中比较与当前SC描述子的相似得分,最终根据最相似的SC描述子找到对应的回环帧。
使用行向量均值,将二维矩阵转换为一维向,由于行向量均值不会受到旋转的影响,两SC矩阵的行向量均值的差值越小,说明它们的匹配程度越高,因此可以使用不同SC矩阵的行向量均值进行粗匹配。对于每个关键帧SC描述子计算它的行向量均值,并保存至KD树中,根据行向量均值的差值,在KD树中找到与当前SC描述子最相似的几个SC描述子作为候选帧,然后对每一个候选帧进行偏移量计后,与当前关键帧SC描述子进行匹配,最终根据相似程度最高的SC描述子找到对应的回环帧。