STD三角描述符回环检测


摘要

原文:原文
代码:代码

摘要——在这项工作中,我们提出了一种新颖的全局描述符,称为稳定三角形描述符(STD),用于三维地点识别。对于一个三角形,其形状由边长或夹角唯一确定。此外,三角形的形状对刚性变换完全不变。基于这一特性,我们首先设计了一种算法,从三维点云中高效提取局部关键点,并将这些关键点编码为三角形描述符。然后,通过匹配点云之间描述符的边长(以及其他一些信息)来实现地点识别。通过描述符匹配对获得的点对应关系可以进一步用于几何验证,从而大大提高地点识别的准确性。在我们的实验中,我们将所提出的系统与其他先进系统(即M2DP、ScanContext)在公共数据集(即KITTI、NCLT和Complex-Urban)以及我们自收集的数据集(使用非重复扫描的固态激光雷达)上进行了广泛比较。所有定量结果表明,STD在适应性方面更强,并且在精度上有显著提升。

一、介绍

位置识别是指检测两个传感器测量值(例如,相机图像,激光雷达点云)是否在同一场景中收集的问题。它是各种机器人应用中的基本问题,如在同时定位与地图构建(SLAM)中的环路检测[1-3],全局重定位在先前地图中[4,5],以及多机器人系统中的地图合并[6]。由于相机的广泛使用,许多基于视觉的SLAM系统[7-11]已被提出。然而,这些环路检测方法难以处理由照明、外观或视点变化引起的强烈变化。另一方面,光检测与测距传感器(LiDAR)对照明和外观变化不敏感,因为它可以直接获得环境的结构信息。低成本和高性能激光雷达的出现进一步增加了激光雷达在机器人学中的使用[12-15]。
一般来说,一个高效的基于激光雷达的位置识别解决方案应该满足以下要求。首先,该解决方案需要实现旋转和平移不变性,无论视点如何变化。其次,解决方案最好提供相对姿态。良好的初始姿态估计可以使得后续的配准算法更快、更准确地收敛。第三,该方法应该对不同的激光雷达点云密度和环境具有鲁棒性,因为激光雷达点云的稀疏性随距离、场景和激光雷达类型而变化。为了达到上述性能,本文开发了一种新的描述符,称为稳定三角形描述符(STD),它通过一个三角形对场景中的任意三个关键点进行编码。与其他描述符中使用的多边形相比,三角形更稳定,因为给定边长(或内角)时,三角形的形状是唯一定义的。与关键点周围的局部描述符相比,三角形的形状完全是旋转和平移不变的。为了提取三角形描述符的关键点,我们执行点云投影到平面上,提取边界上的关键点,然后将这些关键点形成三角形。匹配是基于三角形的相似性进行的。图1显示了一个典型的使用STD的位置识别案例,成功地识别了在同一地点以相反视角收集的两个点云。具体来说,我们的贡献如下:

  • 我们提出了一种新的描述符,称为稳定三角形描述符(STD),它通过一个三角形对场景中的任意三个关键点进行编码。与其他描述符中使用的多边形相比,三角形更稳定,因为给定边长(或内角)时,三角形的形状是唯一定义的。与关键点周围的局部描述符相比,三角形的形状完全是旋转和平移不变的。为了提取三角形描述符的关键点,我们在平面上执行点云投影,并在边界上提取关键点,然后将关键点形成三角形。匹配是基于三角形的相似性进行的。图1显示了一个典型的使用STD的位置识别案例,成功地识别了在同一地点以相反视角收集的两个点云。具体来说,我们的贡献包括:
  • 提出了一种新的描述符,稳定三角形描述符(STD),它通过一个三角形对场景中的任意三个关键点进行编码。该描述符完全不变旋转和平移,同时保持高度的可区分性。
  • 提出了一种基于关键帧的快速关键点提取方法。为了表示场景的结构信息,我们在平面边界上投影点云并提取关键点,这些关键点将与相邻的关键点形成三角形描述符。
    我们评估了我们的算法在多种类型的场景(城市、室内和非结构化环境)和不同的激光雷达数据(传统的旋转激光雷达和固态激光雷达)下的性能。充分的实验结果验证了我们方法的有效性。

在这里插入图片描述

图1 (a) 显示了从查询点云中提取的稳定三角形描述符(STD)。(b) 显示了从历史点云中提取的STD。在 © 中,展示了这两帧点云之间的STD匹配示例。正确匹配的STD描述符用白色框表示,点云通过STD提供的姿态进行了配准。这两帧点云是由一个小视场(FOV)激光雷达(Livox Avia)以相反方向移动收集的,导致点云重叠较低且视点发生剧烈变化。

二、相关工作

三维数据中的地点识别是机器人定位的关键问题,已经采用不同的方法进行研究。根据方法的原理,我们将现有的工作分为以下三类:(i)基于点特征的局部描述符;(ii)基于外观的全局描述符;(iii)基于学习的方法。受机器人视觉中地点识别解决方案的启发,Bastian[16]将给定的三维扫描数据转换为深度图,然后从深度图中提取点特征,并基于点特征对三维扫描数据进行评分匹配。Bosse和Zlot [17]直接在三维数据上提取关键点,然后使用编码每个关键点邻域的格式塔描述符,并计算用于地点识别的投票矩阵。除了格式塔描述符,其他一些描述符,如PFH [18]、SURF [19]或SHOT [20],也在类似的框架中使用。然而,这些局部描述符对激光雷达点云的密度和噪声敏感,并且对视点的旋转或平移不具有不变性。全局描述符更倾向于使用点云的外观信息。Magnusson等[21]首先将点云划分为重叠的网格,然后通过法线分布变换计算每个单元的形状特性,最后将其组合成一个表面形状直方图矩阵。He等人提出的M2DP [22]通过将三维点云投影到多个二维平面上生成,并生成高维紧凑的全局表示。Giseop Kim和Ayoung Kim [23]提出了基于周围结构高度的二维描述符扫描上下文。V. Nardari等[24]提出了一种多边形描述符,以实现森林环境中的地点识别。Jiang等[25]提出了一种基于三角形特征的描述符,用于二维SLAM。总之,这些全局描述符利用了场景的外观信息(表面平坦度和方向、高度等。与局部描述符相比,全局描述符对噪声和分辨率变化更具鲁棒性,但仍然在视点变化时面临挑战。因此,一些其他研究尝试使用深度学习来解决三维地点识别任务。SegMap [26]通过匹配语义特征实现地点识别。OverlapNet [27]提出了一种深度神经网络,以实现三维扫描对之间的重叠计算和相对偏航角估计。这些基于学习的方法都需要一个训练步骤,并使用GPU加速。
我们提出的描述符——稳定三角形描述符,是一个由三个关键点组成的全局描述符。三角形描述符是在关键帧内提取的,描述了帧内关键点的相对分布。与其他全局描述符 [21-23] 相比,我们的描述符具有更强的旋转和平移不变性。与多边形描述符 [24,25] 相比,我们的描述符直接在三维空间中提取,并使用了多边形中最具可识别性和不变性的三角形,而 [24,25] 则是在二维空间中提取多边形描述符。此外,我们的描述符可以提供具有完全自由度的姿态估计,这可以在确保配准精度的同时大大减少配准时间。

三、方法

在本节中,我们描述了如何从点云中提取稳定三角形描述符。接下来,我们介绍了如何构建描述符字典以及如何选择循环候选。最后,提出了基于RANSAC的循环检测和几何验证,以实现完整的循环检测流程。我们方法的整体流程如图2所示。
在这里插入图片描述
图 2. 我们算法的工作流程。我们的方法从关键帧计算三角形描述符。然后,使用哈希表作为描述符的数据库,以实现快速存储和匹配。具有前 10 个描述符匹配分数的帧将被选为候选帧。一旦通过几何验证,循环候选帧将被视为有效循环。循环触发时,循环帧和候选帧之间的相对变换也将被获得。
在这里插入图片描述

A. 稳定三角形描述符

受到[26]的启发,为了提高分割的稳定性,我们在关键帧上执行循环检测,这些关键帧累积了来自连续几次扫描的点,因此无论具体的激光雷达扫描模式如何,都增加了点云密度。具体来说,我们使用激光雷达里程计[28]将每个新进入的点云注册到当前的关键帧中。当子帧数量累积到一定数量时,将创建一个新的关键帧。给定一个关键帧的点云,我们首先通过区域生长执行平面检测。具体来说,我们将整个点云划分为给定大小(例如,1m)的体素。每个体素包含一组点   p i ( i = 1 , … , N ) \ p_{i}(i=1,\ldots, N)  pi(i=1,,N);然后我们计算点协方差矩阵 Σ \Sigma Σ
p ‾ = 1 N ∑ i = 1 N p i ; Σ = 1 N ∑ i = 1 N ( p i − p ‾ ) ( p i − p ‾ ) T ; ( 1 ) \overline{p}=\frac{1}{N}\sum_{i=1}^{N} p_i;\quad\Sigma=\frac{1}{N}\sum_{i=1}^{N}\left(p_i-\overline{p}\right)\left(p_i-\overline{p}\right)^T;\quad(1) p=N1i=1Npi;Σ=N1i=1N(pip)(pip)T;(1)
λ k \lambda_{k} λk 表示矩阵 Σ \Sigma Σ 的第k个最大特征值。平面准则原则是:
λ 3 < σ 1  和 λ 2 > σ 2 ( 2 ) \lambda_3<\sigma_1\text{ 和}\lambda_2>\sigma_2\qquad(2) λ3<σ1 λ2>σ2(2)

其中 σ 1 \sigma_{1} σ1 σ 2 \sigma_{2} σ2 是预设的超参数。通过这个标准,我们可以检查体素内的点是否形成一个平面,如果是的话,该体素被称为平面体素。然后,我们用任意一个平面体素初始化一个平面,并通过搜索其邻近体素来扩展这个平面。对于其邻近体素,如果邻近体素是同一平面(具有相同的平面法线方向,并且距离在阈值以下),它们将被添加到正在扩展的平面中。否则,如果邻近体素不在同一个平面上,它将被添加到正在扩展的平面的边界体素列表中。上述扩展过程会重复进行,直到所有添加的邻近体素都被扩展,或者到达边界体素(见图4)。有了边界体素,我们将其中包含的点投影到相应的平面上(见图5(a)和图5(b))。对于每个平面,我们创建一个图像,其中图像平面与平面重合,每个像素代表平面边界体素中包含的点的最大距离。然后,我们选择一个在其5x5邻域中具有最大像素值的点作为关键点(见图5©)。每个提取的关键点对应于输入点云中的一个3D点,并且可以附加上它提取自的平面的法线。
在这里插入图片描述

图 5. (a) 边界体素中的点用黄色表示。 (b) 这些点投影到相邻平面上(蓝色点)。 © 平面图像,其中每个像素表示边界体素中点到平面的最大距离(以厘米为单位)。如果一个点在其 5×5 邻域内具有最大像素值,它将被视为关键点(红色点)。

在关键帧中提取关键点后,我们构建了一个k-D树,并为每个点搜索20个邻近点来形成三角形描述符。具有相同边长的冗余描述符将被消除。每个三角形描述符包含三个顶点 p 1 , p 2 p_{1}, p_{2} p1,p2 p 3 p_{3} p3,以及投影法线向量 n 1 , n 2 n_{1}, n_{2} n1,n2 n 3 n_{3} n3。此外,三角形的顶点按照边长升序排列(见图3)。我们总结三角形描述符 Δ \Delta Δ 包含以下内容:

  • p 1 , p 2 , p 3 p1, p2, p3 p1,p2,p3:三个顶点,
  • n 1 , n 2 , n 3 n1, n2, n3 n1,n2,n3:三个投影法线向量,
  • l 12 , l 23 , l 13 l_{12}, l_{23}, l_{13} l12,l23,l13:三条边,且 l 12 ≤ l 23 ≤ l 13 l_{12}\leq l_{23}\leq l_{13} l12l23l13
  • q q q:三角形的质心,
  • k k k:与描述符对应的帧编号。
    除了描述符,我们还将保存从这个关键帧中提取的所有 n n n 个平面 Π = ( π 1 , π 2 , … , π n ) \Pi=\left(\pi_{1},\pi_{2},\ldots,\pi_{n}\right) Π=(π1,π2,,πn),以备后续的几何验证步骤使用。

B. 循环候选的搜索

由于可以从关键帧中提取数百个描述符,为了快速查询和匹配描述符,我们使用哈希表来存储所有描述符。我们使用描述符中六个旋转和平移不变的属性来计算哈希键,分别是边长 l 12 , l 23 , l 13 l_{12}, l_{23}, l_{13} l12,l23,l13,以及法线投影向量的点积 n 1 ⋅ n 2 , n 2 ⋅ n 3 , n 1 ⋅ n 3 n1 \cdot n2, n_{2} \cdot n_{3}, n_{1} \cdot n_{3} n1n2,n2n3,n1n3。具有所有六个相似属性的描述符将具有相同的哈希键,因此被存储在同一个容器中。对于查询关键帧,我们如Sec. III-A中详细描述的那样提取其所有描述符。对于每个描述符 Δ i \Delta_{i} Δi,我们计算其哈希键,将其定位到哈希表中相应的容器,并为该容器中具有描述符的关键帧投一票。当查询关键帧中的所有描述符 Δ i \Delta_{i} Δi 都处理完毕后,匹配过程结束。得票数最多的前10个关键帧将被选为带有匹配描述符的候选帧,以备循环检测步骤使用。
备注 1:由于边界点是投影到从3D点云中提取的平面上,而不是从范围图像中提取的,如[16]中所述,提取的关键点对视点角度变化是不变的。此外,六个描述符属性也对任何刚性变换都是不变的。因此,整体方法是旋转和平移不变的。
备注 2:由于三角形边长的排序和三角形的稳定性,如果两个三角形的有序边长相等,则它们被保证是相同的,而无需列举边的对应关系。

C. 循环检测

当给定一个循环候选关键帧时,我们执行几何验证以消除由于不正确的描述符匹配对引起的误检测。由于一旦确定了边长,三角形的形状就被唯一确定,一旦 Δ a \Delta_{a} Δa Δ b \Delta_{b} Δb 匹配,它们的顶点 ( p a 1 , p a 2 , p a 3 ) \left(p_{a_{1}}, p_{a_{2}}, p_{a_{3}}\right) (pa1,pa2,pa3) ( p b 1 , p b 2 , p b 3 ) \left(p_{b_{1}}, p_{b_{2}}, p_{b_{3}}\right) (pb1,pb2,pb3) 自然匹配。然后,有了这些点对应关系,我们可以通过奇异值分解(SVD)轻松计算这两个关键帧之间的相对变换 T = ( R , t ) T=(R, t) T=(R,t)

H = ∑ i = 1 3 ( p a i − q a ) ( p b i − q b ) [ U , S , V ] = SVD ⁡ ( H ) R = V U T , t = − R ⋅ q a + q b . \begin{align*} & H=\sum_{i=1}^3\left(p_{a_i}-q_a\right)\left(p_{b_i}-q_b\right) \\ & {[U, S, V]=\operatorname{SVD}(H)} \\ & R=V U^T, t=-R \cdot q_a+q_b. \end{align*} H=i=13(paiqa)(pbiqb)[U,S,V]=SVD(H)R=VUT,t=Rqa+qb.

为了增加鲁棒性,我们使用 RANSAC[29] 来找到最大化正确匹配描述符数量的变换。
基于这个变换,我们计算当前帧和候选帧之间的平面重叠以进行几何验证。设中心点 g g g 和法线向量 u u u 表示体素中的一个平面 π \pi π。记当前帧的平面组为 B Π = [ ( B g 1 , B u 1 ) , … ( B g n , B u n ) ] {}^{B}\Pi=\left[\left({}^{B} g_{1},{}^{B} u_{1}\right),\ldots\left({}^{B} g_{n},{}^{B} u_{n}\right)\right] BΠ=[(Bg1,Bu1),(Bgn,Bun)],候选帧的平面组为 C Π = [ ( C g 1 , C u 1 ) , … ( C g m , C u m ) ] {}^C \Pi=\left[\left({}^C g_1,{}^C u_1\right),\ldots\left({}^C g_m,{}^C u_m\right)\right] CΠ=[(Cg1,Cu1),(Cgm,Cum)],刚体变换为 B C T = ( B C R , B C t ) ∈ S E ( 3 ) {}_B^C T=\left({}_B^C R,{}_B^C t\right)\in SE(3) BCT=(BCR,BCt)SE(3),其中 n n n 是当前帧中的平面数量, m m m 是候选帧中的平面数量。我们使用中心点 ( C g 1 , C g 2 , … , C g m ) \left({}^{C} g_{1},{}^{C} g_{2},\ldots,{}^{C} g_{m}\right) (Cg1,Cg2,,Cgm) C Π {}^{C}\Pi CΠ 构建一个 k-D 树( k = 3 k=3 k=3)。然后对于每个平面中心点 B g i ( i = 1 , 2 , … , n ) ∈ B Π {}^{B} g_{i}(i=1,2,\ldots, n)\in{}^{B}\Pi Bgi(i=1,2,,n)BΠ,我们首先通过变换 B C T {}_{B}^{C} T BCT 变换 B g i {}^{B} g_{i} Bgi,然后在 k-D 树中搜索最近的点 C g j {}^{C} g_{j} Cgj,并根据法线向量的差异和点到平面的距离判断两个平面是否重合:

∥ B C R B u i − C u j ∥ 2 < σ n C u j T ( B C T B g i − C g j ) < σ d , \begin{align*} &\|_{B}^{C} R {}^{B} u_{i}-{}^{C} u_{j}\|_{2}<\sigma_{n} \\ & {}^{C} u_{j}^{T}\left({}_{B}^{C} T^{B} g_{i}-{}^{C} g_{j}\right)<\sigma_{d}, \end{align*} BCRBuiCuj2<σnCujT(BCTBgiCgj)<σd,

其中 σ n \sigma_{n} σn σ d \sigma_{d} σd 是预设的超参数,用于确定平面是否重叠。如果一对平面满足方程(4)中的法线向量和点到距离约束,则这对平面是重合的。检查完当前帧的所有平面后,我们计算平面重合的百分比 ( N c ) \left(N_{c}\right) (Nc)

N c = N coincide N sum × 100 % , ( 5 ) N_c=\frac{N_{\text{coincide}}}{N_{\text{sum}}}\times 100\%,\qquad(5) Nc=NsumNcoincide×100%,(5)

其中 N coincide N_{\text{coincide}} Ncoincide 是重合平面的数量, N sum N_{\text{sum}} Nsum 是当前帧的所有平面数量。如果当前帧和候选帧的 N c N_{c} Nc 超过某个阈值 σ p c \sigma_{pc} σpc,我们最终认为它是有效的循环检测。值得注意的是,基于平面的几何验证比基于 ICP 的方法更有效,因为平面的数量远少于点云的数量。此外,我们可以进一步优化方程④中的法线向量差异和点到平面距离,以获得更准确的变换用于循环校正,这可以使用 Ceres-Solver[30] 轻松实现。
我们将这个优化过程定义为 STD-ICP,STD-ICP 的性能将在实验中得到验证。

四、实验

在本节中,为了验证我们方法的有效性、鲁棒性和适应性,我们在不同场景(城市、室内和非结构化环境)中使用不同类型的激光雷达(机械旋转激光雷达和固态激光雷达)评估我们的算法。在每个实验中,我们将我们的方法与最先进的对比方法进行比较。所有实验都在配备有 Intel i7-11700k@ 3.6 GHz 和 16   G B 16~GB 16 GB 内存的相同系统上进行。

A. 基准评估

在这个实验中,我们在开放的城市数据集上评估我们的方法,包括 KITTI 里程计数据集[31]、NCLT 数据集[32]和 Complex Urban 数据集[33]。所有数据都是使用不同扫描线的机械旋转激光雷达在城市环境中收集的。我们将我们的方法与另外两个全局描述符:Scan Context[23] 和 M2DP[22] 进行比较。对于这些数据集,我们将每10帧累积成一个关键帧。如果查询关键帧和匹配关键帧之间的真实姿态距离小于 20   m 20~m 20 m,则检测被认为是真正的正例。
对于实现,我们在所有数据集上使用相同的参数运行我们的算法,其中体素大小为 1   m 1~m 1 m,平面判断阈值 σ 1 \sigma_{1} σ1 σ 2 \sigma_{2} σ2 分别为 0.01 和 0.05,法线差异阈值 σ n \sigma_{n} σn 为 0.2,点到平面距离阈值 σ d \sigma_{d} σd 0.3   m 0.3~m 0.3 m。对于 Scan Context[23] 和 M2DP[22],我们直接使用原始论文[23]中呈现的结果。

1) 精确度-召回率评估:

我们通过改变平面重合阈值 σ p c \sigma_{pc} σpc 来评估 STD 的性能,精确度-召回率曲线如图 6 所示。由于 Scan Context-50 在大多数场景中的表现优于 Scan Context-10,我们只显示 Scan Context-50 的结果。从结果中可以看出,STD 在几乎所有数据集中都优于 Scan Context 和 M2DP。如[23]中所述,他们的方法在垂直高度变化不太显著的狭窄场景中表现不佳。然而,我们的方法不局限于场景的高度,并且在这样的场景中成功进行循环检测的示例如图 7(a)所示。我们的方法只在场景的结构或平面特别稀疏时表现不佳,因为在这样场景中提取的关键点将很少。一个典型的失败示例如图 7(b)所示。这两种情况都来自 NCLT 数据集。

2) 运行时间评估:

我们记录了 KITTI00 上所有方法的计算时间,如图 8 所示。对于 M2DP[22],我们使用他们的开源 MATLAB 代码,并使用默认参数进行测试。对于 Scan Context[23],我们修改了他们的 MATLAB 代码(添加了 8 个 Scan Context 增强)以获得 Sec. IV-A.1 中的结果。所有方法都使用 0.5 m^3 体素网格对点云进行下采样。如图 8 所示,Scan Context 和 M2DP 的每帧时间消耗随着库中帧数的增加而线性增加,
在这里插入图片描述

(a) 狭窄情况 (b) 失败情况

图7. 狭窄场景中的挑战案例和STD的失败案例。

而我们的方法没有这样的线性增长趋势。这主要是因为我们使用哈希表作为数据库来存储描述符,避免了像M2DP和Scan Context那样为历史描述符构建k-D树。总的来说,STD的计算时间与M2DP相似,同时处理的点数是M2DP的10倍。Scan Context使用增强描述符,这增加了在描述符构建和搜索循环时的时间消耗。

3) 平面重合阈值选择:

从图6可以看出,STD的精确度-召回率曲线总是从精确度等于1开始下降,这主要是由于平面重合阈值 σ p c \sigma_{pc} σpc 的选择。当给定一个相对较大的 σ p c \sigma_{pc} σpc 时,只有具有大点云重叠的循环会被选中,这在我们使用的城市数据集中是100%准确的。当阈值降低时,会选中更多具有较小重叠的循环,引入可能的假阳性。我们在Kitti08上记录了与不同 σ p c \sigma_{pc} σpc 对应的STD的真实和假阳性率如图9所示。从图中可以看出,0.5到0.6是一个不错的选择。

4) 定位评估:

一些其他描述符[23,27]可以在执行循环检测时估计循环帧和候选帧之间的偏航角。我们提出的描述符进一步改进了这一功能,因为我们可以在不需要额外计算的情况下提供循环帧和候选帧之间所有六个自由度的相对变换。为了验证这一点,我们在KITTI00的循环节点上进行了实验。对于每个循环节点,我们将相对于匹配帧的变换设置为从真实值的邻域(每个旋转轴±5°和每个平移轴±5m)中均匀抽取的随机初始值。图10显示了GICP、STD和STD-ICP的误差和计算时间。STD-ICP可以实现与GICP相似的精度,在旋转和平移的方差都较小。这是因为STD为STD-ICP提供了一个好的初始值,而GICP可能在重叠较少的循环节点中遇到局部最优。此外,STD和STD-ICP所需的时间远少于GICP,只有GICP的不到1%。这是因为平面的数量(几百个)与点云的大小(超过100K)相比非常小。

B. 对其他类型激光雷达的适用性

在这个实验中,为了评估STD在不同环境和使用不同激光雷达时的适应性和适用性,我们使用Livox系列固态激光雷达在城市、非结构化和室内环境中进行实验。对于城市环境,我们选择了由Livox Horizon激光雷达收集并开源在LiLi-OM[34]中的KA_Urban_East数据集。对于非结构化环境实验,我们在充满树木的公园内收集了两组循环数据。对于室内环境,我们在多层建筑中收集了循环数据。这两个数据集是由Livox Avia激光雷达收集的。由于Scan Context[23]与Livox固态激光雷达不兼容,因此我们只比较STD与M2DP[22]。

猜你喜欢

转载自blog.csdn.net/weixin_41331879/article/details/143246126