AirSLAM论文翻译

AirSLAM:An Efficient and Illumination-Robust Point-Line Visual SLAM System

code:https://github.com/sair-lab/AirSLAM

摘要-在本文中,我们提出了一个高效的视觉SLAM系统,旨在解决短期和长期照明挑战。我们的系统采用了一种混合方法,将深度学习技术用于特征检测和匹配,并与传统的后端优化方法相结合。具体来说,我们提出了一种同时提取关键点和结构线特征的统一卷积神经网络(CNN)。然后以耦合的方式将这些特征关联、匹配、三角化和优化。此外,我们还引入了一个轻量级的重定位管道,该管道重用已构建的地图,其中关键点、线和结构图用于将查询帧与地图匹配。为了增强所提出的系统对现实世界机器人的适用性,我们使用C++和NVIDIA TensorRT部署并加速了特征检测和匹配网络。在各种数据集上进行的大量实验表明,我们的系统在光照困难的环境中优于其他最先进的视觉SLAM系统。效率评估表明,我们的系统可以在PC上以73Hz的速率运行,在嵌入式平台上以40Hz的速率运行。

关键词 - 视觉SLAM,建图,重定位

1.引言

视觉SLAM对机器人导航至关重要,因为它能在成本和精度之间取得良好的平衡[1]。与LiDAR SLAM相比,vSLAM利用更具成本效益和更紧凑的传感器来实现精确定位,从而扩大了其潜在的应用范围。此外,相机可以捕获更丰富、更详细的信息,这增强了它们提供强大定位的潜力。

尽管最近取得了进展,但目前的vSLAM系统仍在与恶劣的光照条件作斗争[2][5],这可以归纳为两类。首先,特征检测和跟踪往往会因剧烈变化或光线不足而失败,严重影响估计轨迹的质量[6],[7]。其次,当视觉地图被重复用于重新定位时,光照变化会显著降低成功率[8],[9]。在本文中,我们将第一个问题称为短期光照挑战,它会影响两个时间相邻帧之间的姿态估计;第二个问题称为长期光照挑战,它会影响查询帧与现有地图之间的匹配。目前的方法通常只关注上述挑战中的一个。例如,各种图像增强[10][12]和图像归一化算法[13],[14]已经被开发出来,以确保鲁棒跟踪。

这些方法主要侧重于保持全局或局部亮度一致性,但它们往往无法处理所有类型的具有挑战性的照明条件[15]。一些系统通过在包含不同光照条件的大型数据集上训练VO或SLAM网络来解决这个问题[16][18]。然而,他们很难制作出适合长期定位的地图。有些方法可以提供光照鲁棒性的重新定位,但它们通常需要在良好的光照条件下构建地图[19],[20]。在现实世界的机器人应用中,这两个挑战经常同时出现,需要一个能够解决这两个问题的统一系统。

此外,许多上述系统包含复杂的神经网络,依靠强大的GPU实时运行。它们缺乏在资源受限的平台(如仓库机器人)上部署所需的效率。这些限制阻碍了vSLAM从实验室研究到工业应用的过渡。

针对这些不足,本文介绍了AirSLAM。观察到线特征可以提高vSLAM系统的准确性和鲁棒性[4],[21],[22],我们将点和线特征结合起来进行跟踪、建图、优化和重新定位。为了实现效率和性能之间的平衡,我们将系统设计为混合系统,采用基于学习的方法进行特征检测和匹配,采用传统的几何方法进行姿态和地图优化。此外,为了提高特征检测的效率,我们开发了一个能够同时检测点和线特征的统一模型。我们还提出了一个多阶段的重新定位策略来解决长期的定位挑战,该策略有效地重用了我们的点线地图。总之,我们的贡献包括

  • 我们提出了一种新的基于点线的vSLAM系统,它结合了传统优化技术的效率和基于学习方法的鲁棒性。我们的系统既能适应短期和长期照明挑战,又能在嵌入式平台上保持足够的效率
  • 我们开发了一个用于关键点和直线检测的统一模型,我们称之为PLNet。据我们所知,PLNet是第一个能够同时检测点和线特征的模型。此外,我们将这两种类型的特征关联起来,并共同利用它们进行跟踪、建图和重新定位任务
  • 我们提出了基于点线特征的多阶段重定位方法,利用外观和几何信息。该方法可以在现有的视觉地图中使用单张图像进行快速且光照鲁棒的定位
  • 我们进行了大量的实验来证明所提出方法的效率和有效性。结果表明,该系统在各种光照条件下都能实现精确、鲁棒的建图和定位性能。此外,系统也非常高效。在PC上以73Hz的速率运行,在嵌入式平台上以40Hz的速率运行

此外,工程贡献包括使用C ++和Nvidia Tensorrt部署和加速特征检测以及匹配网络,从而促进了在真实机器人上的部署。在github上发布所有C++源代码使社区受益。

本文扩展了我们的会议论文AirVO[21]。AirVO使用SuperPoint[23]和LSD[24]进行特征检测,使用SuperGlue[25]进行特征匹配。它在光照变化的环境中取得了卓越的性能。然而,作为一种纯视觉的里程计,它主要解决了短期照明挑战,并且不能重复使用地图进行无漂移的重新定位。此外,尽管经过精心设计的后处理操作,改良后的LSD仍然不够稳定,无法长期定位。它依赖于图像梯度信息而不是环境结构信息,使其容易受到不同光照条件的影响。在这个版本中,我们引入了大量改进,包括

  • 我们设计了一个统一的CNN来检测点和线特征,增强了特征检测在光照困难环境下的稳定性。此外,还使用了更高效的LightGlue[26]进行特征匹配
  • 我们扩展了系统,以支持双目数据和双目惯性数据,当惯性测量单元(IMU)可用时,增加系统的可靠性
  • 我们结合了闭环检测和地图优化,形成了一个完整的vSLAM系统
  • 我们设计了一个基于点和线特征的多阶段重新定位模块,使我们的系统能够有效地处理长期照明挑战

本文的其余部分组织如下。在第二节中,我们讨论了相关文献。在第三节中,我们给出了完整系统管道的概述。第四节介绍了提出的PLNet。在第五节中,我们介绍了基于PLNet的视觉惯性里程计。在第六节中,我们介绍了如何离线优化地图并在线重用。详细的实验结果在第七节中给出,以验证AirSLAM的效率、准确性和鲁棒性。本文结束时,第八节有一些不足。

2.相关工作

A.用于vSALM的关键点和线检测

1).关键点检测

各种手工制作的关键点特征,如ORB[27]、FAST[28]和BRISK[29],已经被提出并应用于VO和vSLAM系统。它们通常是高效的,但在具有挑战性的环境中不够健壮[8],[25]。随着深度学习的发展,越来越多的基于学习的特征被提出并用于取代vSLAM系统中的手工特征。Rong等人[30]引入TFeat网络[31]来提取FAST焦点的描述符,并将其应用于传统的vSLAM管道。Tang等人[32]使用神经网络提取与ORB形状相同的鲁棒关键点和二值特征描述符。Han等[33]将SuperPoint[23]特征提取器与传统后端相结合。Bruno等人提出LIFT- slam[34],使用LIFT[35]提取特征。Li等[36]在ORB- slam2中使用SuperPoint代替ORB特征,并使用Intel OpenVINO工具包优化特征提取。其他一些基于学习的特征,如R2D2[37]和DISK[38],以及D2Net[39],也正在尝试应用于vSLAM系统,尽管它们还不够高效[40],[41]。

2)线检测

目前,大多数基于点线的vSLAM系统都使用LSD[24]或EDLines[42]来检测线特征,因为它们的效率很高[4],[43][46]。尽管已经提出了许多基于学习的线检测方法,如LCNN[47]、SOLD2[48]和HAWP[49],并在具有挑战性的环境中表现出更好的鲁棒性,但由于缺乏效率,它们难以应用于实时vSLAM系统。例如,Kannapiran等人提出了StereoVO[22],他们分别选择SuperPoint[23]和SOLD2[48]来检测关键点和线段。尽管在动态光照条件下获得了良好的性能,但在一个好的GPU上,StereoVO只能以大约7Hz的速率运行。

B.短期照明挑战

现有工作已经提出多种手工制作的方法来提高VO和vSLAM对挑战性照明的鲁棒性。DSO[50]模拟亮度变化,共同优化相机姿态和光度参数。DRMS[10]和AFE-ORB-SLAM[11]利用各种图像增强。一些系统尝试了不同的方法,如ZNCC、局部缩放的平方差和(LSSD)和密集描述符计算,以实现鲁棒跟踪[13]、[14]、[51]。这些方法主要关注各种图像的全局或局部光照变化,但不同区域的光照条件对场景的影响往往不同[15]。其他相关的方法包括Huang和Liu[52],他们提出了一种多特征提取算法,在单特征算法无法提取足够的特征点时提取两种图像特征。Kim等人[53]在直接运动估计中采用了基于块的仿射照明模型。Chen等[54]利用非线性最小二乘优化最小化归一化信息距离进行图像配准。Alismail等人[55]提出了一种二元特征描述符,使用描述符假设来避免亮度恒定。

与手工方法相比,基于学习的方法表现出更好的性能。Savinykh等人[7]提出了DarkSLAM,其中使用生成对抗网络(GAN)[56]来增强输入图像。Pratap Singh等人[57]比较了低光环境下不同的基于学习的vSLAM图像增强方法。TartanVO[16]、DROID- SLAM[17]和iSLAM[18]在TartanAir数据集[58]上训练他们的VO或SLAM网络,这是一个大型模拟数据集,包含各种照明条件,因此,它们在具有挑战性的环境中非常强大。然而,它们通常需要良好的GPU和较长的训练时间。此外,DROID- SLAM运行速度很慢,难以应用于资源受限平台上的实时应用。TartanVO和iSLAM效率更高,但它们无法达到传统vSLAM系统那样精确的性能。

C.长期照明挑战

目前,大多数SLAM系统仍然使用词袋(bag of words, BoW)[59]进行闭环检测和重新定位,因为它能很好地平衡效率和效果[3],[60],[61]。为了使重定位对大光照变化更具鲁棒性,Labb等人[19]提出了多会话重新定位方法,他们将不同时间和不同光照条件下生成的多个地图组合在一起。DXSLAM[36]为SuperPoint训练词汇表,并同时使用BoW和NetVLAD[62]进行重定位。

机器人和计算机视觉领域的另一个类似任务是视觉位置识别(VPR)问题,许多研究人员使用图像检索方法处理定位问题[62],[63]。这些VPR解决方案尝试从数据库中找到与查询图像最相似的图像。它们通常不能直接提供机器人应用中需要的精确姿态估计。Sarlin等人解决了这个问题,并提出了Hloc[8]。他们使用全局检索来获得几个候选对象,并在这些候选对象中匹配局部特征。Hloc工具箱集成了许多图像检索方法、局部特征提取器和匹配方法,目前是SOTA系统。Yan等[64]提出了一种面向移动平台的长期视觉定位方法,但其粗定位依赖其他传感器,如GPS、指南针、重力传感器等。

3.系统概述

我们认为一个实用的vSLAM系统应该具备以下特点:

  • 效率高。该系统应在资源受限的平台上具有实时性能
  • 可伸缩性。系统应该易于扩展以满足各种目的和实际应用
  • 易于部署。该系统应易于在真实机器人上部署,并能够实现鲁棒定位

因此,我们设计了一个系统,如图1所示。提出的系统是一个混合系统,因为我们需要数据驱动方法的鲁棒性和几何方法的准确性。它由三个主要组成部分组成:双目VO/VIO,离线地图优化和轻量重新定位。

  1. 双目VO/VIO:提出了一个基于点线的视觉里程计,可以同时处理双目和双目惯性输入。
  2. **离线地图优化:**我们实现了几个常用的插件,如回环检测、位姿图优化和全局BA。通过添加自定义插件,该系统可以很容易地扩展到其他地图处理目的。例如,我们已经实现了一个插件,使用线特征的端点来训练场景相关的连接词汇表,这在我们的轻量级多阶段重新定位中得到了利用。
  3. **轻量重定位:**我们提出了一种多阶段重定位方法,在保持有效性的同时提高了效率。在第一阶段,使用提出的PLNet检测关键点和线特征,并使用在大型数据集上训练的关键点词汇表检索几个候选点。在第二阶段,使用场景相关的连接词汇表和结构图快速过滤掉大多数错误候选。第三阶段,在查询帧和剩余候选帧之间进行特征匹配,找到最佳匹配并估计查询帧的姿态。由于第三阶段的特征匹配通常是耗时的,第二阶段的过滤过程与其他两阶段的重新定位系统相比,提高了系统的效率。

请添加图片描述
图1.所提出的系统包括三个主要部分:在线双目VO/VIO,离线地图优化和在线重新定位。VO/VIO模块使用地图图像序列来构建初始地图。然后,将初始地图离线处理,并输出优化的地图。优化的地图可用于one-shot重定位。

我们将一些耗时的过程,如闭环检测、位姿图优化和全局BA,转移到离线阶段。这提高了我们在线建图模块的效率。在仓库机器人等许多实际应用中,地图通常由一个机器人构建,然后由其他机器人重用。我们的系统在设计时考虑到了这些应用。轻量级的建图和地图重用模块可以很容易地部署在资源受限的机器人上,而离线优化模块可以在更强大的计算机上运行,用于各种地图操作,如地图编辑和可视化。建图机器人将初始地图上传到计算机,然后将优化后的地图分发给其他机器人,确保无漂移的重定位。在接下来的章节中,我们分别在第四节和第五节介绍我们的特征检测和视觉里程计(VO)管道。离线优化和重定位模块在第六节中介绍。

4.特征检测

A.动机

随着深度学习技术的进步,与传统方法相比,基于学习的特征检测方法在光照困难的环境中表现出更稳定的性能。但是,现有的基于点线的VO/VIO和SLAM系统通常会分别检测键点和线特征。尽管由于其效率而可以接受手工制作的方法,但在VO/VIO或SLAM系统中同时应用关键点检测和线路检测网络,尤其是在双目配置中,通常会阻碍资源受限平台上的实时性能。因此,我们的目标是设计一个有效的统一模型,可以同时检测关键点和线特征。

然而,实现关键点和直线检测的统一模型是具有挑战性的,因为这些任务通常需要不同的真实图像数据集和训练程序。关键点检测模型通常在包含不同图像的大型数据集上进行训练,并依赖于增强步骤或图像对的对应关系进行训练[23],[37],[38]。对于线检测,我们发现线框解析方法[47],[49]可以提供比自监督模型[48][65]更强的几何线索,因为它们能够检测更长的更完整的线,然而,这些方法是在Wireframe数据集[66]上训练的,该数据集只有5,462张不连续图像。在下面的部分中,我们将处理这个挑战,并演示如何训练一个能够执行这两个任务的统一模型。值得注意的是,在本文中,线检测特指线框解析任务。

B.结构设计

如图2所示,在将关键点和直线检测网络的结果可视化时,我们有两个发现:

  1. 直线检测模型检测到的大多数连接点(直线端点)也被关键点检测模型选择为关键点。
  2. 关键点检测模型输出的特征图包含边缘信息。

因此,我们认为可以在预先训练的关键点检测模型的主干上建立直线检测模型。基于这个假设,我们将PLNet设计为在一个统一的框架中检测关键点和线条。如图3所示,它由共享骨干网、关键点模块和线模块组成。
请添加图片描述
图2. 我们可视化了关键点检测模型的特征图(右上)和检测到的关键点(左下),以及线检测模型检测到的结构线(右下)。关键点和连接点的重叠以及特征图中的边缘信息为我们的PLNet设计提供了灵感
在这里插入图片描述
图3.所提出的PLNET的框架。它由共享骨干,关键点模块和线模块组成

Backbone:我们遵循SuperPoint[23]设计了具有良好效率和效果的主干。它使用8个卷积层和3个最大池化层。

输入是灰度图像尺寸 H × W H \times W H×W。输出是
H × W × 64 H\times W \times 64 H×W×64 H 2 × W 2 × 64 , H 4 × W 4 × 128 , H 8 × W 8 × 128 \frac H2\times\frac W2\times64, \frac H4\times\frac W4\times128, \frac H8\times\frac W8\times128 2H×2W×64,4H×4W×128,8H×8W×128的特征图。

Keypoint Module:我们还遵循SuperPoint[23]来设计关键点检测头。它有两个分支:分数分支和描述符分支。输入是由backbone输出的 H 8 × W 8 × 128 \frac H8\times\frac W8\times128 8H×8W×128特征图,得分分支输出张量 H 8 × W 8 × 65 \frac H8\times\frac W8\times65 8H×8W×65,65个通道对应一个8 - 8的网格区域和一个没有关键点的垃圾箱。张量由softmax处理,然后调整大小为 H × W H \times W H×W。描述子分支输出张量 H 8 × W 8 × 256 \frac H8\times\frac W8\times256 8H×8W×256 ,这是用于插值计算描述符的关键点。

Line Module:这个模块使用 H 4 × W 4 × 128 \frac H4\times\frac W4\times128 4H×4W×128特征图作为输入,它由一个类似U-Net的CNN和线检测头组成。我们修改了U-Net[67],使其包含更少的卷积层,从而提高了效率。类似U-Ne的CNN是为了增加接收野,因为检测线比检测关键点需要更大的接收野。EPD LOIAlign[49]用于处理线模块的输出,最后输出关键点和线。

C.网络训练

由于第IV-A节描述的训练问题和第IV-B节的假设,我们分两轮训练我们的PLNet。在第一轮中,只训练骨干和关键点检测模块,这意味着我们需要训练一个关键点检测网络。在第二轮中,固定主干和关键点检测模块,只在Wireframe数据集上训练线检测模块。我们跳过第一轮的细节,因为它们与[23]非常相似。相反,我们提出了线检测模块的训练。

线编码:我们采用吸引区域场[49]对线段进行编码。对于线段 l = ( x 1 , x 2 ) \mathbf{l}=(\mathbf{x_1},\mathbf{x_2}) l=(x1,x2),其中 x 1 \mathbf{x_1} x1 x 2 \mathbf{x_2} x2 l \mathbf{l} l的两个端点,在 l \mathbf{l} l的吸引区域中有一个点 p \mathbf{p} p,用四个参数和 p \mathbf{p} p来编码 l \mathbf{l} l

p ( l ) = ( d , θ , θ 1 , θ 2 ) , ( 1 ) \mathbf{p}\left(\mathbf{l}\right)=\left(d,\theta,\theta_1,\theta_2\right),\quad(1) p(l)=(d,θ,θ1,θ2),(1)

这里 d = ∣ p o ∣ d=|\mathbf{po}| d=po o \mathbf{o} o是垂线焦点, θ \theta θ l \mathbf{l} l和图像的Y轴之间的角度。 θ 1 \theta_1 θ1 p o \mathbf{po} po p x 1 \mathbf{px_1} px1之间的角度。 θ 2 \theta_2 θ2 p o \mathbf{po} po p x 2 \mathbf{px_2} px2之间的角度。网络可以对 p \mathbf{p} p点的这四个参数进行预测,然后通过下式对 l \mathbf{l} l进行解码:

l = d ⋅ [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] [ 1 1 tan ⁡ θ 1 tan ⁡ θ 2 ] + [ p p ] . ( 2 ) \left.\mathbf{l}=d\cdot\left[\begin{array}{cc}\cos\theta&-\sin\theta\\\sin\theta&\cos\theta\end{array}\right.\right]\left[\begin{array}{cc}1&1\\\tan\theta_1&\tan\theta_2\end{array}\right]+\left[\begin{array}{cc}\mathbf{p}&\mathbf{p}\end{array}\right].\quad (2) l=d[cosθsinθsinθcosθ][1tanθ11tanθ2]+[pp].(2)

线检测:线检测模块输出大小为 H 4 × W 4 × 4 \frac H4\times\frac W4\times4 4H×4W×4的张量来预测(1)中的参数,输出热图来预测连接。对于由(2)解码的每一个线段,将选择离其端点最近的两个结点与其构成一条线提案。具有相同连接点的提案将被删除,只保留一个。然后应用EPD LOIAlign[49]和头部分类器来判断线提案是否为真正的线特征。

线模块训练:我们使用L1损失来监督(1)中参数的预测,并使用二元交叉熵损失来监督结热图和头部分类器。总损失是它们的总和。如图4所示,为了提高光照不足环境下线检测的鲁棒性,我们采用了七种光度数据增强方法对训练图像进行处理。训练使用ADAM优化器[68],前35个epoch的学习率 l r = 4 e − 4 lr=4e-4 lr=4e4,最后5个epoch学习率 l r = 4 e − 5 lr=4e-5 lr=4e5
在这里插入图片描述
图4所示。我们使用7种类型的光度数据增强来训练我们的PLNet,使其对具有挑战性的照明更加稳健

5.双目视觉里程计

A.概述

所提出的基于点-线的双目视觉里程计如图5所示。它是一个混合的VO系统,利用了基于学习的前端和传统的优化后端。对于每个双目图像对,我们首先使用所提出的PLNet提取关键点和线特征。然后使用GNN (LightGlue[26])来匹配关键点。同时,我们将线特征与关键点相关联,并使用关键点匹配结果对它们进行匹配。之后,我们执行初始姿态估计并拒绝异常值。在此基础上,我们对关键帧的二维特征进行三角剖分,并将其插入到地图中。最后,将执行局部BA以优化点、线和关键帧姿态。同时,如果一个IMU是可用的,则使用IMU预积分方法对其测量值进行处理[69],并将其添加到初始姿态估计和局部BA中。
在这里插入图片描述
图5所示。我们的视觉(惯性)里程计的框架。系统分为两个主线程,由两个不同颜色的区域表示。请注意,IMU输入不是严格要求的。该系统可选择使用双目数据或双目惯性数据。

将基于学习的特征检测和匹配方法应用于双目VO是非常耗时的。因此为了改善效率,在我们的系统中使用了以下三种技术。

  1. 对于关键帧,我们提取左右图像的特征,并进行立体匹配来估计真实尺度。但是对于非关键帧,我们只处理左边的图像。此外,我们使用了一些宽松的标准使系统所选择的关键帧非常稀疏,从而使系统的特征检测和匹配的运行时间和资源消耗接近于单目系统。
  2. 我们将CNN和GNN的推理代码从Python转换为c++,并使用ONNX和NVIDIA TensorRT进行部署,其中16位浮点运算取代32位浮点运算。
  3. 设计了一个多线程流水线。生产者-消费者模型用于将系统划分为两个主线程,即前端线程和后端线程。前端线程提取和匹配特征,后端线程执行初始姿态估计、关键帧插入和局部BA。

B.特征匹配

我们使用LightGlue[26]来匹配关键点。对于线特征,目前大多数VO和SLAM系统使用LBD算法[70]或跟踪采样点来匹配它们。然而,LBD算法从线的局部带区域提取描述子,因此由于光照不足或视点变化而导致线检测不稳定。跟踪采样点可以匹配两帧中检测到的不同长度的线,但目前的SLAM系统通常使用光流来跟踪采样点,当光照条件快速或剧烈变化时,这种方法的性能很差。一些基于学习的行特征描述符[48]也被提出,然而,由于时间复杂性的增加,它们在当前的SLAM系统中很少使用。

因此,为了解决有效性问题和效率问题,我们设计了一种快速且鲁棒的光照条件下的线匹配方法。首先,我们通过距离将关键点与线段联系起来。假设在图像上检测到了M个关键点和N个线段,每个关键点表示为 p i = ( x i , y i ) \mathbf{p}_i = (x_i,y_i) pi=(xi,yi),每个线段表示为 l j = ( A j , B j , C j , x j , 1 , y j , 1 , x j , 2 , y j , 2 ) \mathbf{l}_j=(A_j,B_j,C_j,x_{j,1},y_{j,1},x_{j,2},y_{j,2}) lj=(Aj,Bj,Cj,xj,1,yj,1,xj,2,yj,2) ( A j , B j , C j ) (A_j,B_j,C_j) (Aj,Bj,Cj)是线段 l j \mathbf{l}_j lj的参数, ( x j , 1 , y j , 1 , x j , 2 , y j , 2 ) (x_{j,1},y_{j,1},x_{j,2},y_{j,2}) (xj,1,yj,1,xj,2,yj,2)是端点。

我们首先计算 p i \mathbf{p}_i pi l i \mathbf{l}_i li之间的距离

d i j = d ( p i , l j ) = ∣ A j ⋅ x i + B j ⋅ y i + C j ∣ A j 2 + B j 2 . (3) d_{ij}=d\left(\mathbf{p}_i,\mathbf{l}_j\right)=\frac{\left|A_j\cdot x_i+B_j\cdot y_i+C_j\right|}{\sqrt{A_j^2+B_j^2}}.\text{(3)} dij=d(pi,lj)=Aj2+Bj2 Ajxi+Bjyi+Cj.(3)

如果 d i j < 3 d_{ij}<3 dij<3,且 p i \mathbf{p}_i pi在坐标轴上的投影位于线段端点的投影内,例如 min ⁡ ( x j , 1 , x j , 2 ) ≤ x i ≤ max ⁡ ( x j , 1 , x j , 2 ) \min(x_{j,1},x_{j,2}) \leq x_{i} \leq \max(x_{j,1},x_{j,2}) min(xj,1,xj,2)ximax(xj,1,xj,2) min ⁡ ( y j , 1 , y j , 2 ) ≤ y i ≤ max ⁡ ( y j , 1 , y j , 2 ) \min(y_{j,1},y_{j,2})\leq y_i\leq\max(y_{j,1},y_{j,2}) min(yj,1,yj,2)yimax(yj,1,yj,2),我们会说pi p i \mathbf{p}_i pi l i \mathbf{l}_i li。然后根据两幅图像的点匹配结果对两幅图像上的线段进行匹配。对于图像k上的 l k , m \mathbf{l}_{k,m} lk,m和图像k+1上的 l k + 1 , n \mathbf{l}_{k+1,n} lk+1,n,计算一个分数 S m n S_{mn} Smn代表他们位于同一条线的置信度。

S m n = N p m min ⁡ ( N k , m , N k + 1 , n ) , ( 4 ) S_{mn}=\frac{N_{pm}}{\min(N_{k,m},N_{k+1,n})},(4) Smn=min(Nk,m,Nk+1,n)Npm,(4)

N p m N_{pm} Npm l k , m \mathbf{l}_{k,m} lk,m的点特征和 l k + 1 , n \mathbf{l}_{k+1,n} lk+1,n的点特征的匹配数量。 N k , m , N k + 1 , n N_{k,m},N_{k+1,n} Nk,m,Nk+1,n分别是 l k , m \mathbf{l}_{k,m} lk,m l k + 1 , n \mathbf{l}_{k+1,n} lk+1,n的点特征数。如果 S m n > δ S S_{mn}>\delta_{S} Smn>δS N p m > δ N N_{pm}>\delta_{N} Npm>δN,其中 δ S \delta_{S} δS δ N \delta_{N} δN是两个预设阈值,我们将 l k , m \mathbf{l}_{k,m} lk,m l k + 1 , n \mathbf{l}_{k+1,n} lk+1,n看作同一条直线。这种耦合特征匹配方法使我们的线匹配既具有关键点匹配的鲁棒性,又不需要另一个线匹配网络,因此具有很高的效率。

C.3D特征处理

在这一部分中,我们将介绍我们的3D特征处理方法,包括3D特征表示,三角化,即从2D特征构建3D特征,以及重新影,即将3D特征投影到图像平面。我们在我们的系统中跳过3D点处理的细节,因为它们很容易做到,类似于其他基于点的VO和SLAM系统。相反,与三维点相比,三维线具有更大的自由度,在三角化时更容易退化。因此,将对3D线条加工进行详细说明。

1.3D线表示

我们使用pl̈ucker坐标[71]代表3D空间线

L = [ n v ] ∈ R 6 , ( 5 ) \mathbf{L}=\left[\begin{array}{c}\mathbf{n}\\\mathbf{v}\end{array}\right]\in\mathbb{R}^6,\quad(5) L=[nv]R6,(5)

其中v是直线的方向向量,n是由直线和原点确定的平面的法向量。plucker坐标用于3D线三角测量、变换和投影。它是过度参数化的,因为它是一个6维向量,但是一条3D直线只有4个自由度。在图优化阶段,额外的自由度会增加计算成本,导致系统的数值不稳定[72]。因此,我们也使用正交表示[71]来表示三维直线

( U , W ) ∈ S O ( 3 ) × S O ( 2 ) ( 6 ) (\mathbf{U},\mathbf{W})\in SO(3)\times SO(2)\quad(6) (U,W)SO(3)×SO(2)(6)

Plucker坐标与标准正交表示的关系类似于 S O ( 3 ) SO(3) SO(3) s o ( 3 ) so(3) so(3),正交表示可以由pl̈ucker坐标获得:

L = [ n ∣ v ] = [ n ∥ n ∥ v ∥ v ∥ n × v ∥ n × v ∥ ] ⏟ U ∈ S O ( 3 ) [ ∥ n ∥ 0 0 ∥ v ∥ 0 0 ] ⏟ Σ 3 × 2 , ( 7 ) \mathbf{L}=[\mathbf{n}\mid\mathbf{v}]=\underbrace{\left[\begin{array}{ccc}\frac{\mathbf{n}}{\|\mathbf{n}\|}&\frac{\mathbf{v}}{\|\mathbf{v}\|}&\frac{\mathbf{n}\times\mathbf{v}}{\|\mathbf{n}\times\mathbf{v}\|}\end{array}\right]}_{\mathbf{U}\in SO(3)}\underbrace{\left[\begin{array}{ccc}\|\mathbf{n}\|&\mathbf{0}\\\mathbf{0}&\|\mathbf{v}\|\\\mathbf{0}&\mathbf{0}\end{array}\right]}_{\Sigma_{3\times2}},\quad(7) L=[nv]=USO(3) [nnvvn×vn×v]Σ3×2 n000v0 ,(7)

其中 Σ 3 × 2 \Sigma_{3\times2} Σ3×2是一个对角矩阵,它的两个按比例定义的非零项可以用 s o ( 2 ) so(2) so(2)矩阵表示

W = 1 ∥ n ∥ 2 + ∥ v ∥ 2 [ ∥ n ∥ − ∥ v ∥ ∥ v ∥ ∥ n ∥ ] ∈ S O ( 2 ) . ( 8 ) \left.\mathbf{W}=\frac1{\sqrt{\left\|\mathbf{n}\right\|^2+\left\|\mathbf{v}\right\|^2}}\left[\begin{array}{cc}\|\mathbf{n}\|&-\|\mathbf{v}\|\\\|\mathbf{v}\|&\|\mathbf{n}\|\end{array}\right.\right]\in SO(2).\quad(8) W=n2+v2 1[nvvn SO(2).(8)

在实践中,这种转换可以通过QR分解简单而快速地完成。

2.三角化

三角测量是从两个或多个2D线特征初始化一个3D线。在我们的系统中,我们使用两种方法对三维线进行三角测量。第一种类似于[73]中的线三角测量算法B,其中可以从两个平面计算三维线的姿态。为了实现这一点,我们在两个图像上选择两个线段 l 1 \mathbf{l}_1 l1 l 2 \mathbf{l}_2 l2,这是对3D线的两个观测。注意,这两个图像可以来自同一关键帧的双目对,也可以来自两个不同的关键帧。 l 1 \mathbf{l}_1 l1 l 2 \mathbf{l}_2 l2可以反投影并构建两个3D平面: π 1   a n d   π 2 \pi_1\mathrm{~and~}\pi_2 π1 and π2,然后3D直线可以看作两个平面的交线。

然而,对一条三维直线进行三角测量比对一个三维点进行三角测量要困难得多,因为它更容易受到退化运动的影响[73]。因此,如果上述方法失败,我们还采用第二种线三角化方法,其中利用点来计算3D线。在章节V-B中,我们将点特征与线特征相关联。因此,为了初始化一条三维直线,我们选择属于这条直线并且在图像平面上离这条直线距离最近的两个三角化点X1和X2,则可得到该线的普吕克坐标

L = [ n v ] = [ X 1 × X 2 X 1 − X 2 ∥ X 1 − X 2 ∥ ] . ( 9 ) \left.\mathbf{L}=\left[\begin{array}{c}\mathbf{n}\\\mathbf{v}\end{array}\right.\right]=\left[\begin{array}{c}\mathbf{X}_1\times\mathbf{X}_2\\\frac{\mathbf{X}_1-\mathbf{X}_2}{\|\mathbf{X}_1-\mathbf{X}_2\|}\end{array}\right].\quad(9) L=[nv]=[X1×X2X1X2X1X2].(9)

3.重投影

重投影用于计算重投影误差。我们使用plucker坐标来转换和重新投影3D线。首先,我们将3D线从世界系转换到相机系

L c = [ n c v c ] = [ R c w [ t c w ] × R c w 0 R c w ] [ n w v w ] = H c w L w , ( 10 ) \begin{aligned}\mathbf{L}_c=\left[\begin{array}{c}\mathbf{n}_c\\\mathbf{v}_c\end{array}\right]=\left[\begin{array}{cc}\mathbf{R}_{cw}&[\mathbf{t}_{cw}]_\times\mathbf{R}_{cw}\\\mathbf{0}&\mathbf{R}_{cw}\end{array}\right]\left[\begin{array}{c}\mathbf{n}_w\\\mathbf{v}_w\end{array}\right]=\mathbf{H}_{cw}\mathbf{L}_w,\\(10)\end{aligned} Lc=[ncvc]=[Rcw0[tcw]×RcwRcw][nwvw]=HcwLw,(10)

式中, L c \mathbf{L}_c Lc L w \mathbf{L}_w Lw分别为相机帧和世界帧中三维直线的plucker坐标。 R c w ∈ S O ( 3 ) \mathbf{R}_{cw} \in SO(3) RcwSO(3)为世界系到相机系的旋转矩阵, t c w ∈ R 3 \mathbf{t}_{cw}\in\mathbb{R}^3 tcwR3是平移向量。 [ ⋅ ] × \left[\cdot\right]_{\times} []×为矢量的斜对称矩阵, H c w \mathbf{H}_{cw} Hcw为三维直线从世界系到相机系的变换矩阵。

然后将三维直线 L c \mathbf{L}_c Lc通过直线投影矩阵 P c \mathbf{P}_{c} Pc投影到像平面上

l = [ A B C ] = P c L c [ : 3 ] = [ f x 0 0 0 f y 0 − f y c x − f x c y f x f y ] n c , ( 11 ) \left.\mathbf{l}=\left[\begin{array}{c}A\\B\\C\end{array}\right.\right]=\mathbf{P}_c\mathbf{L}_{c\left[:3\right]}=\left[\begin{array}{ccc}f_x&0&0\\0&f_y&0\\-f_yc_x&-f_xc_y&f_xf_y\end{array}\right]\mathbf{n}_c, (11) l= ABC =PcLc[:3]= fx0fycx0fyfxcy00fxfy nc,(11)

其中, l = [ A B C ] ⊤ \mathbf{l}=\left[\begin{array}{ccc}A&B&C\end{array}\right]^\top l=[ABC] 是图像平面上的重投影2D直线, L c [ : 3 ] \mathbf{L}_{c[:3]} Lc[:3]代表向量 L c \mathbf{L}_{c} Lc的前三行。

D.关键帧选择

观察到我们系统中使用的基于学习的数据关联方法能够跟踪两个具有较大基线的帧,因此与其他VO或SLAM系统中使用的逐帧跟踪策略不同,我们只将当前帧与最后一个关键帧进行匹配。我们认为这种策略可以减少累积的跟踪误差。

因此,关键帧的选择对我们的系统至关重要。一方面,如V-A节所述,我们希望使关键帧稀疏,以减少计算资源的消耗。另一方面,关键帧越稀疏,跟踪失败的可能性就越大。为了平衡效率和跟踪鲁棒性,如果满足以下任何一个条件,将选择一帧作为关键帧:

  • 跟踪的特征点少于 α 1 ⋅ N s \alpha_{1}\cdot N_{s} α1Ns
  • 跟踪特征在当前帧和最后一帧之间的平均视差大于 α 2 ⋅ W H \alpha_2\cdot\sqrt{WH} α2WH
  • 跟踪特征的数量小于 N k f \boldsymbol{N}_{kf} Nkf

以上 α 1 , α 2 , N k f \alpha_1,\alpha_2,\boldsymbol{N}_{kf} α1,α2,Nkf都是预设阈值,W和H分别表示输入图像的宽度和高度。

E.局部图优化

为了提高精度,我们在插入新关键帧时执行局部BA。选取最近的 N o N_{o} No个相邻关键帧构建局部图,其中地图点、3D线和关键帧为顶点,姿态约束为边。如果IMU是可访问的,我们使用点约束和线约束以及IMU约束。它们的相关误差项定义如下:

  1. 点重投影残差:如果第i帧能够观测到三维地图点 X p \mathbf{X}_p Xp,则重投影误差定义为

r i , X p = x ~ i , p − π ( R c w X p + t c w ) , ( 12 ) \mathbf{r}_{i,X_p}=\tilde{\mathbf{x}}_{i,p}-\pi\left(\mathbf{R}_{cw}\mathbf{X}_p+\mathbf{t}_{cw}\right),\quad(12) ri,Xp=x~i,pπ(RcwXp+tcw),(12)

其中 x ~ i , p \tilde{\mathbf{x}}_{i,p} x~i,p X p \mathbf{X}_p Xp在帧i上的观测值, π ( ⋅ ) \pi\left(\cdot\right) π()为摄像机投影。

  1. 线重投影残差。如果帧 i i i能够观测到3D线段 L q \mathbf{L}_q Lq,重投影误差项定义为:

r i , L q = e l ( l ~ i , q , P c ( H c w L q ) [ : 3 ] ) ∈ R 2 , (13a) e l ( l ~ i , q , l i , q ) = [ d ( p ~ i , q 1 , l i , q ) d ( p ~ i , q 2 , l i , q ) ] ⊤ , (13b) \begin{aligned}\mathbf{r}_{i,L_q}&=e_l\left(\mathbf{\tilde{l}}_{i,q},\mathbf{P}_c\left(\mathbf{H}_{cw}\mathbf{L}_q\right)_{[:3]}\right)\in\mathbb{R}^2,&\text{(13a)}\\e_l\left(\mathbf{\tilde{l}}_{i,q},\mathbf{l}_{i,q}\right)&=\left[\begin{array}{cc}d\left(\mathbf{\tilde{p}}_{i,q1},\mathbf{l}_{i,q}\right)&d\left(\mathbf{\tilde{p}}_{i,q2},\mathbf{l}_{i,q}\right)\end{array}\right]^\top,&\text{(13b)}\end{aligned} ri,Lqel(l~i,q,li,q)=el(l~i,q,Pc(HcwLq)[:3])R2,=[d(p~i,q1,li,q)d(p~i,q2,li,q)],(13a)(13b)

l ~ i , q \mathbf{\tilde{l}}_{i,q} l~i,q L q \mathbf{L}_q Lq在帧 i i i上的观测, p ~ i , q 1   a n d   p ~ i , q 2 \mathbf{\tilde{p}}_{i,q1}\mathrm{~and~}\mathbf{\tilde{p}}_{i,q2} p~i,q1 and p~i,q2 l ~ i , q \mathbf{\tilde{l}}_{i,q} l~i,q的端点, d ( p , l ) d\left(\mathbf{p},\mathbf{l}\right) d(p,l)是点 p \mathbf{p} p到直线 l \mathbf{l} l的距离由式(3)计算得到。

  1. IMU残差。我们首先按照[69]对帧 i i i和帧 j j j之间的IMU测量进行预积分:

Δ R ~ i j = ∏ k = i j − 1 Exp ⁡ ( ( ω ~ k − b k g − η k g d ) Δ t ) , (14a) Δ v ~ i j = ∑ k = i j − 1 Δ R ~ i k ( a ~ k − b k a − η k a d ) Δ t , (14b) Δ p ~ i j = ∑ k = i j − 1 ( Δ v ~ i k Δ t + 1 2 Δ R ~ i k ( a ~ k − b k a − η k a d ) Δ t 2 ) , ( 14 c ) \begin{gathered}\Delta\mathbf{\tilde{R}}_{ij} =\prod_{k=i}^{j-1}\operatorname{Exp}\left(\left(\boldsymbol{\tilde{\omega}}_k-\mathbf{b}_k^g-\boldsymbol{\eta}_k^{gd}\right)\Delta t\right), \text{(14a)} \\\Delta\mathbf{\tilde{v}}_{ij} =\sum_{k=i}^{j-1}\Delta\mathbf{\tilde{R}}_{ik}\left(\mathbf{\tilde{a}}_k-\mathbf{b}_k^a-\boldsymbol{\eta}_k^{ad}\right)\Delta t, \text{(14b)} \\\Delta\mathbf{\tilde{p}}_{ij} =\sum_{k=i}^{j-1}\left(\Delta\mathbf{\tilde{v}}_{i k}\Delta t+\frac{1}{2}\Delta\mathbf{\tilde{R}}_{i k}\left(\mathbf{\tilde{a}}_{k}-\mathbf{b}_{k}^{a}-\boldsymbol{\eta}_{k}^{a d}\right)\Delta t^{2}\right),\quad(14\mathrm{c}) \end{gathered} ΔR~ij=k=ij1Exp((ω~kbkgηkgd)Δt),(14a)Δv~ij=k=ij1ΔR~ik(a~kbkaηkad)Δt,(14b)Δp~ij=k=ij1(Δv~ikΔt+21ΔR~ik(a~kbkaηkad)Δt2),(14c)

其中 ω ~ k   a n d   a ~ k \tilde{\boldsymbol{\omega}}_k\mathrm{~and~}\mathbf{\tilde{a}}_k ω~k and a~k分别是角速度和加速度, b k g   a n d   b k a \mathbf{b}_k^g\mathrm{~and~}\mathbf{b}_k^a bkg and bka是传感器偏置,通过 b k g = b k + 1 g \mathbf{b}_k^g=\mathbf{b}_{k+1}^g bkg=bk+1g b k a = b k + 1 a \mathbf{b}_k^a=\mathbf{b}_{k+1}^a bka=bk+1a在两帧之间被建模为常量。 η k g d   a n d   η k a d \boldsymbol{\eta}_k^{gd}\mathrm{~and~}\boldsymbol{\eta}_k^{ad} ηkgd and ηkad是高斯噪声,则IMU残差定义为:

r Δ R i j = L o g ( ( Δ R ~ i j E x p ( ∂ Δ R i j ∂ b g δ b g ) ) ⊤ R i ⊤ R j ) , (15a) r Δ ν i j = R i ⊤ ( v j − v i − g Δ t i j ) − ( Δ v ~ i j + ∂ Δ v i j ∂ b g δ b g + ∂ Δ v i j ∂ b a δ b a ) , (15b) r Δ p i j = R i ⊤ ( p j − p i − v i Δ t i j − 1 2 g Δ t i j 2 ) − ( Δ p ~ i j + ∂ Δ p i j ∂ b g δ b g + ∂ Δ p i j ∂ b a δ b a ) , (15c) r b i j = [ ( b j g − b i g ) ⊤ ( b j a − b i a ) ⊤ ] ⊤ (15d) \begin{aligned}\mathbf{r}_{\Delta R_{ij}}& =\mathrm{Log}\left(\left(\Delta\mathbf{\tilde{R}}_{ij}\mathrm{Exp}\left(\frac{\partial\Delta\mathbf{R}_{ij}}{\partial\mathbf{b}^g}\delta\mathbf{b}^g\right)\right)^\top\mathbf{R}_i^\top\mathbf{R}_j\right), && \text{(15a)} \\\mathbf{r}_{\Delta\nu_{ij}}& =\mathbf{R}_i^\top\left(\mathbf{v}_j-\mathbf{v}_i-\mathbf{g}\Delta t_{ij}\right) \\&-\left(\Delta\mathbf{\tilde{v}}_{ij}+\frac{\partial\Delta\mathbf{v}_{ij}}{\partial\mathbf{b}^g}\delta\mathbf{b}^g+\frac{\partial\Delta\mathbf{v}_{ij}}{\partial\mathbf{b}^a}\delta\mathbf{b}^a\right),&& \text{(15b)} \\\mathbf{r}_{\Delta p_{ij}}& =\mathbf{R}_i^\top\left(\mathbf{p}_j-\mathbf{p}_i-\mathbf{v}_i\Delta t_{ij}-\frac12\mathbf{g}\Delta t_{ij}^2\right) \\&-\left(\Delta\tilde{\mathbf{p}}_{ij}+\frac{\partial\Delta\mathbf{p}_{ij}}{\partial\mathbf{b}^g}\delta\mathbf{b}^g+\frac{\partial\Delta\mathbf{p}_{ij}}{\partial\mathbf{b}^a}\delta\mathbf{b}^a\right),&& \text{(15c)} \\\mathbf{r}_{b_{ij}}& =\left[\begin{array}{cc}\left(\mathbf{b}_j^g-\mathbf{b}_i^g\right)^\top&\left(\mathbf{b}_j^a-\mathbf{b}_i^a\right)^\top\end{array}\right]^\top && \text{(15d)} \end{aligned} rΔRijrΔνijrΔpijrbij=Log((ΔR~ijExp(bgΔRijδbg))RiRj),=Ri(vjvigΔtij)(Δv~ij+bgΔvijδbg+baΔvijδba),=Ri(pjpiviΔtij21gΔtij2)(Δp~ij+bgΔpijδbg+baΔpijδba),=[(bjgbig)(bjabia)](15a)(15b)(15c)(15d)

g \mathbf{g} g代表世界坐标系下的重力向量,在我们的系统中,我们结合了[3]和[60]中的初始化过程来估计 g \mathbf{g} g和偏差的初始值。

因子图通过G2O工具箱进行优化[74]。成本函数定义为

E = ∑ ∥ r i , X P ∥ Σ P 2 + ∑ ∥ r i , L q ∥ Σ L 2 + ∑ ∥ r Δ R i j ∥ Σ Δ R 2 + ∑ ∥ r Δ ν i j ∥ Σ Δ ν 2 + ∑ ∥ r Δ p i j ∥ Σ Δ p 2 + ∑ ∥ r b i j ∥ Σ b 2 . ( 16 a ) \begin{aligned}\mathbf{E}&=\sum\left\|\mathbf{r}_{i,X_P}\right\|_{\Sigma_P}^2+\sum\left\|\mathbf{r}_{i,L_q}\right\|_{\Sigma_L}^2+\sum\left\|\mathbf{r}_{\Delta R_{ij}}\right\|_{\Sigma_{\Delta R}}^2\\&+\sum\left\|\mathbf{r}_{\Delta\nu_{ij}}\right\|_{\Sigma_{\Delta\nu}}^2+\sum\left\|\mathbf{r}_{\Delta p_{ij}}\right\|_{\Sigma_{\Delta p}}^2+\sum\left\|\mathbf{r}_{b_{ij}}\right\|_{\Sigma_b}^2.\quad(16\mathrm{a})\end{aligned} E=ri,XPΣP2+ ri,Lq ΣL2+ rΔRij ΣΔR2+ rΔνij ΣΔν2+ rΔpij ΣΔp2+ rbij Σb2.(16a)

我们使用Levenberg-Marquardt优化器来最小化成本函数。如果点和线的离群值对应的残差太大,在优化中也会被拒绝。

F.初始地图

如第三节所述,我们的地图是离线优化的。因此,关键帧、地图点和3D线将被保存到磁盘中,以便在视觉里程计完成后进行后续优化。对于每个关键帧,我们保存它的索引、姿态、关键点、关键点描述符、线特征和连接点。还记录了二维特征和三维特征之间的对应关系。为了使地图在不同设备之间更快地保存、加载和传输,上述信息以二进制形式存储,这也使得初始地图比原始数据小得多。例如,在OIVIO数据集[75]上,我们的初始地图大小仅为原始数据大小的2%左右。

6.地图优化和重用

A.离线地图优化

这一部分的目的是处理VO模块生成的初始地图,并输出优化后的地图,用于无漂移重新定位。离线地图优化模块包括以下几个地图处理插件。

1)回环检测

与大多数当前的vSLAM系统类似,我们使用从粗到细的管道来检测回环。我们的闭环检测依赖于DBoW2[76]来检索候选对象,依赖于LightGlue[26]来匹配特征。我们在包含35k张图像的数据库上训练由PLNet检测到的关键点词汇表。这些图像选自几个大型数据集[77][79],包括室内和室外场景。词汇表有4层,每层有10个节点,因此它包含10,000个单词。

粗略的候选帧选择:这一步的目的是从集合 S 1 = { K j ∣ j < i } \boldsymbol{S}_{1}=\begin{Bmatrix}\mathcal{K}_j\mid j<i\end{Bmatrix} S1={Kjj<i}中找到三个与关键帧 K i \mathcal{K}_{i} Ki最相似的候选帧,请注意,我们不会将索引大于 K i \mathcal{K}_{i} Ki的关键帧添加到集合中,因为这可能会错过一些回环对。我们为所有关键帧建立了一个共视图,如果两个关键帧至少有一个特征是相连的。所有和 K i \mathcal{K}_{i} Ki连接的关键帧首先从 S 1 \boldsymbol{S}_{1} S1中删除,然后,我们使用DBoW2计算 K i \mathcal{K}_{i} Ki S 1 \boldsymbol{S}_{1} S1中每个关键帧之间的相似性得分。 S 1 \boldsymbol{S}_{1} S1中只保留分数大于 0.3 ⋅ S m a x 0.3\cdot S_{max} 0.3Smax的关键帧,其中 S m a x S_{max} Smax为最大计算分数。之后,我们对剩下的关键帧进行分组。如果两个关键帧可以观察到10个以上的共同特征,它们将在同一组中。对于每一组,我们将该组关键帧的分数相加,并将其作为组分数。只有得分最高的前3组才会被保留。然后从每组中选择一个得分最高的关键帧作为候选帧。这三个候选者将在随后的步骤中处理。

精细特征匹配:对于每个选定的候选帧,我们将其特征与 K i \mathcal{K}_{i} Ki进行匹配。然后进行具有异常值抑制的相对姿态估计。如果内点数超过50,候选帧将与 K i \mathcal{K}_{i} Ki形成有效的回环对。

2)地图合并

由两个回环对的帧观察到的三维特征通常被错误地看作两个特征。因此,在这一部分中,我们的目标是合并回环对观察到的重复点和线特征。对于关键点特征,我们使用上述回环对之间的特征匹配结果。如果两个匹配的关键点与两个不同的地图点相关联,它们将被视为重复特征,只保留一个地图点。2D关键点与3D地图点之间的对应关系以及共视图中的连接也将被更新。

对于线特征,首先通过章节V-B中建立的2D-3D特征对应和2D点-线关联来关联3D线和地图点。然后我们检测与相同地图点相关联的3D线对。如果两条三维线共享超过3个相关的地图点,它们将被视为重复,只保留一条三维线。

3)全局BA

在合并重复的特征后执行全局BA(GBA)。残差和代价函数与章节V-E相似,不同之处在于所有关键帧和特征都将在该模块中进行优化。在优化的初始阶段,由于VO漂移误差,合并特征的重投影误差比较大,因此我们先在不剔除离群点的情况下迭代50次,将变量优化到较好的粗糙位置,然后再进行剔除离群点的迭代40次。

我们发现,当地图很大时,最初的50次迭代不能将变量优化到满意的位置。为了解决这个问题,如果一个地图包含超过80k个地图点,我们首先在全局束调整之前执行位姿图优化(PGO)。在PGO中只调整关键帧姿态,成本函数定义如下:

E p g o = ∑ ∥ log ⁡ ( Δ T ~ i j − 1 T i − 1 T j ) ∨ ∥ Σ i j 2 , ( 17 ) \mathbf{E}_{pgo}=\sum\|\log\left(\Delta\tilde{\mathbf{T}}_{ij}^{-1}\mathbf{T}_i^{-1}\mathbf{T}_j\right)^{\vee}\|_{\Sigma_{ij}}^2,\quad (17) Epgo=log(ΔT~ij1Ti1Tj)Σij2,(17)

T i ∈   S E ( 3 )   a n d   T j ∈   S E ( 3 ) \mathbf{T}_i\in\mathrm{~SE}(3)\mathrm{~and~}\mathbf{T}_j\in\mathrm{~SE}(3) Ti SE(3) and Tj SE(3)分别是 K i   a n d   K j \mathcal{K}_i\mathrm{~and~}\mathcal{K}_j Ki and Kj的位姿。 K i   a n d   K j \mathcal{K}_i\mathrm{~and~}\mathcal{K}_j Ki and Kj应该相邻或形成回环对。在位姿图优化之后,地图点和3D线的位置也会随着它们首次被观察到的关键帧进行调整。

在线环路检测系统通常在检测到一个新的回环后进行GBA,因此当一个场景包含多个回环时,它们会进行多次重复的GBA。相比之下,我们的离线地图优化模块只在检测到所有回环后才进行GBA,与他们相比,我们可以大大减少优化迭代。

4)场景依赖的词典

我们训练了一个连接点(线段端点)词袋,目的是用于重定位。词汇表通过地图中关键帧的连接点构建,所以它是场景依赖。与第VI-A1节训练的关键点词汇表相比,用于训练连结点词汇表的数据库通常要小得多,因此我们将层数设置为3层,每层10个节点。连接词汇表很小,即大约1兆字节,因为它只包含1000个单词。其详细用法将在第六- b节中介绍。

5)优化地图

我们保存优化后的地图以供后续的地图重用。与Section V-F中的初始地图相比,保存了更多的信息,如每个关键帧的单词包、全局共视图和场景相关的连接词汇表。同时,由于重复的地图点和三维线的融合,减少了三维特征的数量。因此,优化后的地图占用与初始地图相似的内存。

B.地图重用

在这一部分中,我们提出了使用现有优化地图的光照鲁棒重新定位。在大多数vSLAM系统中,识别重访地点通常需要两个步骤:(1)检索 N k c N_{kc} Nkc个候选关键帧,(2)进行特征匹配和相对姿态估计。第二步通常是耗时的,所以选择一个合适的 N k c N_{kc} Nkc是非常重要的。较大的 N k c N_{kc} Nkc会降低系统的效率,较小的 N k c N_{kc} Nkc可能会阻止正确的候选帧被召回。例如ORB- SLAM3[60]的闭环模块中,为了提高效率,只使用DBoW2[76]检索到的三个最相似的关键帧。它工作得很好,因为在一个循环对中的两个帧通常有很短的时间间隔,因此照明条件相对相似。但是对于具有挑战性的任务,例如白天/夜晚重新定位问题,检索这么少的候选帧通常会导致低召回率。然而,检索更多的候选对象需要对每个查询帧执行更多的特征匹配和姿态估计,这使得它难以部署到实时应用程序中。

为了解决这个问题,我们提出了一种有效的多阶段重新定位方法,使优化后的地图在不同的光照条件下可用。我们的见解是,如果能够快速过滤掉大多数错误候选,那么在保持甚至提高重新定位召回率的同时,可以提高效率。因此,我们在上面提到的两步管道中添加另一个步骤。接下来,我们详细介绍了所提出的多级管道:

1)第一步:此步骤是检索地图中与查询框架相似的关键帧。对于每个输入的单目图像,我们使用PLNet检测关键点、连接点和线特征。然后将执行一个类似于第VI-A1节中的粗候选选择的管道,但有两个不同之处。第一个区别是,由于查询帧不在共视图中,我们没有使用共视图过滤掉候选对象。其次,是所有候选帧,而不仅仅是3帧,都将被保留到下一步。

2)第二步:这一步使用结点和线特征过滤掉第一步中选择的大部分候选对象。对于查询帧 K q \mathcal{K}_{q} Kq和每一个候选帧 K b \mathcal{K}_{b} Kb,我们首先通过在第VI-A4节中训练的连接点词袋找到相同的单词来匹配它们的连接点。使用 { ( q i , b i ) ∣ q i ∈ K q , b i ∈ K b } \left\{(q_i,b_i)\mid q_i\in\mathcal{K}_q,b_i\in\mathcal{K}_b\right\} {(qi,bi)qiKq,biKb}表示匹配对,然后构造两个结构图,例如 G q J  and  G b J G_q^J\text{ and }G_b^J GqJ and GbJ,分别对应 K q   a n d   K b \mathcal{K}_q\mathrm{~and~}\mathcal{K}_b Kq and Kb,顶点是匹配的连结点,即 V q J = { q i ∣ q i ∈ K q }  and  V b J = { b i ∣ b i ∈ K b } V_q^J=\left\{q_i\mid q_i\in\mathcal{K}_q\right\}\text{ and }V_b^J=\{b_i\mid b_i\in\mathcal{K}_b\} VqJ={qiqiKq} and VbJ={bibiKb},描述顶点之间连接的相关相邻矩阵定义为:

A q J = [ q 11 ⋯ q 1 n ⋮ ⋱ ⋮ q n 1 ⋯ q n n ] , A b J = [ b 11 ⋯ b 1 n ⋮ ⋱ ⋮ b n 1 ⋯ b n n ] , ( 18 ) \left.\mathbf{A}_q^J=\left[\begin{array}{ccc}q_{11}&\cdots&q_{1n}\\\vdots&\ddots&\vdots\\q_{n1}&\cdots&q_{nn}\end{array}\right.\right],\mathbf{A}_b^J=\left[\begin{array}{ccc}b_{11}&\cdots&b_{1n}\\\vdots&\ddots&\vdots\\b_{n1}&\cdots&b_{nn}\end{array}\right],\quad(18) AqJ= q11qn1q1nqnn ,AbJ= b11bn1b1nbnn ,(18)

其中 n n n为连接点匹配对的个数。如果 q i q_i qi q j q_j qj是同一条线上的两个端点,则将 q i j q_{ij} qij设置为1,否则设置为0。 b i j b_{ij} bij也是一样,然后图 G q J  and  G b J G_q^J\text{ and }G_b^J GqJ and GbJ的相似度可以计算通过:

S q b G = ∑ ∣ q i j − b i j ∣ . ( 19 ) S_{qb}^G=\sum|q_{ij}-b_{ij}|.\quad(19) SqbG=qijbij∣.(19)

我们还使用连接点词汇表和DBoW2算法计算了连接相似度得分 S q b J S_{qb}^J SqbJ,最后,结合关键点相似度、连接点相似度和结构图相似度,给出 K q   a n d   K b \mathcal{K}_q\mathrm{~and~}\mathcal{K}_b Kq and Kb的相似度得分:

S q b = S q b K + S q b J ⋅ ( 1 + S q b G n ) , ( 20 ) S_{qb}=S_{qb}^K+S_{qb}^J\cdot\left(1+\frac{S_{qb}^G}n\right), \quad(20) Sqb=SqbK+SqbJ(1+nSqbG),(20)

其中 S q b K S_{qb}^K SqbK为第一步计算的 K q   a n d   K b \mathcal{K}_q\mathrm{~and~}\mathcal{K}_b Kq and Kb的关键点相似度。我们使用查询帧计算每个候选的相似度分数,只有具有最高相似度分数的前3个候选将被保留用于下一步。

分析:接下来分析第二步。在使用DBoW方法的普通两步管道中,仅使用外观信息来检索候选项。在第一步中忽略了结构信息,即查询帧和候选对象之间特征空间分布一致的必要性,只在第二步中使用。然而,在具有照明挑战性的场景中,结构信息是必不可少的,因为它对照明条件是不变的。在第二步中,利用部分结构信息来选择候选对象。首先,我们的PLNet使用线框图解析方法来检测结构线,这在光照较差的环境中更稳定。其次,在(20)中计算的相似度同时利用了外观信息和结构信息。因此,我们的系统虽然采用了高效的DBoW方法,但在光照不足的环境中仍能取得良好的性能。第二步效率也很高。一方面,结点通常比关键点少得多。在正常场景中,我们的PLNet可以检测到400多个良好的关键点,但只有大约50个连接点。另一方面,连接词汇量很小,只有1000个单词。因此,使用DBoW2进行节点匹配、构建节点图和计算相似度分数都是非常有效的。实验表明,第二步可以在0.7ms内完成。更多的结果将在第7章节中展示。

3)第三步:第三步旨在估计查询帧的姿态。我们首先使用LightGlue来匹配查询帧和保留的候选对象之间的特征。内点匹配度最高的候选帧将被选为最佳候选人。然后根据查询帧与最佳候选帧的匹配结果,将查询帧关键点与地图点关联起来。最后,利用RANSAC算法求解一个PnP问题来估计姿态。如果内点数超过20,则认为该位姿有效。

7.实验

在本节中给出了实验结果。本节的其余部分组织如下。在第VII-A节中,我们评估了所提出的PLNet的线检测性能。在第VII-B节中,我们通过与其他SOTA VO或SLAM系统进行比较来评估我们系统的建图精度。在第VII-C节中,我们在三种具有照明挑战性的场景下测试了我们的系统:车载照明、动态照明和低照明。通过对这三种情况的比较,可以看出我们的系统具有良好的鲁棒性。在第VII-D节中,我们评估了地图重用模块的性能,以应对白天/夜间定位挑战,即白天的建图和夜间重定位。在第七节中,我们介绍了消融研究。在VII-F节中,我们评估了效率。

我们在实验中使用了两个平台。大多数评估都是在一台配备英特尔i9-13900 CPU和NVIDIA GeForce RTX 4070 GPU的个人电脑上进行的。在第VII-F节的效率实验中,我们还在NVIDIA Jetson Orin上部署了AirSLAM,证明我们的系统在嵌入式平台上可以达到良好的精度和效率。

A.线检测

在本节中,我们将评估PLNet的性能。如第IV-B节所述,我们按照SuperPoint[23]来设计和训练我们的骨干和关键点检测模块,我们甚至可以使用SuperPoint的预训练模型,因此,我们不再评估关键点检测。相反,我们通过将其与SOTA系统进行比较来评估线检测模块的性能,因为它是用固定主干训练的,这与其他线检测器不同。

1)数据集和基线

本实验在Wireframe数据集[66]和YorkUrban数据集[80]上进行。Wireframe数据集包含5000张训练图像和462张测试图像,这些图像都是在人工环境中收集的。我们用它们来训练和测试我们的PLNet。为了验证泛化能力,我们还在包含102张测试图像的YorkUrban数据集上比较了各种方法。所有的训练和测试图像都被调整为 512 × 512 512 \times 512 512×512。我们将该方法与AFM[81]、AFM++[82]、L-CNN[47]、LETR[83]、F-Clip[84]、ELSD[85]和HAWPv2[49]进行了比较。

2)评估指标

我们评估了线检测的精度和效率。对于准确性而言,结构平均精度(sAP)[47]是线框解析任务中最具挑战性的度量。它的灵感来自于目标检测中常用的平均精度(mAP)。检测线 l ~ = ( p ~ 1 , p ~ 2 ) \tilde{l}=(\tilde{\mathbf{p}}_1,\tilde{\mathbf{p}}_2) l~=(p~1,p~2)当且仅当满足以下条件时为真(TP):

min ⁡ ( p 1 , p 2 ) ∈ L ∥ p 1 − p ~ 1 ∥ 2 + ∥ p 2 − p ~ 2 ∥ 2 ≤ ϑ , ( 21 ) \min\limits_{(\mathbf{p}_1,\mathbf{p}_2)\in\mathcal{L}}\|\mathbf{p}_1-\tilde{\mathbf{p}}_1\|^2+\|\mathbf{p}_2-\tilde{\mathbf{p}}_2\|^2\leq\vartheta, \quad (21) (p1,p2)Lminp1p~12+p2p~22ϑ,(21)

其中 L \mathcal{L} L是真值集合, ϑ \vartheta ϑ是预定义阈值,我们按照前面的方法将 ϑ \vartheta ϑ设置为5、10和15,那么对应的sAP分数分别用sAP5、sAP10和sAP15表示。为了提高效率,我们使用每秒帧数(FPS)来评估各种系统。

3)结果和分析

结果呈现在表1中。表现最好的结果按顺序明显突出显示和下划线。可以看到,我们的PLNet在Wireframe数据集上实现了第二好的性能,在YorUrban数据集上实现了最佳性能。在Wireframe数据集上,最好的方法HAWPv2在sAP5、sAP10和sAP15上分别只比我们的PLNet高出0.5、0.5和0.4个点。在YorUrban数据集上,我们的方法在这三个指标上分别比第二好的方法高出0.4、0.8和0.9个点。总的来说,我们可以得出结论,我们的PLNet达到了与SOTA方法相当的精度。

在这里插入图片描述
泛化性分析:我们还可以得出结论,PLNet的泛化性优于其他方法。这一结论是基于我们的方法与目前最好的线框解析方法HAWPv2的对比结果。首先,在同时作为训练数据集的Wireframe数据集上,HAWPv2的性能优于我们的PLNet。然而,在YorUrban数据集上,我们的方法超越了它。其次,之前的方法都是在原始论文中使用颜色输入进行评估的。考虑到灰度图像在vSLAM系统中也被广泛使用,我们使用灰度输入来训练PLNet。我们还重新训练了HAWPv2,并使用灰度图像进行比较。结果表明,当输入是灰度图像时,我们的PLNet在两个数据集上都明显优于HAWPv2。我们认为更好的泛化性来自于我们的主干。其他方法仅在5000张图像的Wireframe数据集上进行训练,而我们的主干是在一个大而多样的数据集上训练的,这使它具有更强的特征提取能力。

效率分析:值得注意的是,表1中我们方法的FPS是同时检测关键点和线条的速度,而其他方法只能输出线条。然而,由于采用了共享骨干网的设计,我们的PLNet仍然是最快的方法之一。PLNet处理每张图像的速度仅比最快的算法HAWPv2慢0.86ms。

注意,所选择的基线都是线框解析方法。非线框图解析行检测方法,如SOLD2[48]和DeepLSD[65],没有被添加到比较中,因为这样做是不公平的。如图6所示,线框解析技术旨在检测结构线。它们通常使用sAP进行评估,并与真值进行比较。非线框图分析方法可以检测到具有显著梯度的更一般的线,但是,它们通常将长线段检测为多个短线段,这导致它们的sAP性能较差。

在这里插入图片描述
图6. 我们的PLNet(一种线框解析方法)和SOLD2(一种非线框解析方法)的行检测比较。其中红线为检测到的线特征,绿点为线的端点。我们的PLNet旨在检测结构线条,而SOLD2则检测具有显著梯度的一般线条,例如地板和墙壁上的图案。

B.建图精度

在本节中,我们评估我们的系统在良好照明条件下的建图精度。EuRoC数据集[95]是vSLAM中使用最广泛的数据集之一,因此我们使用它来进行精度评估。我们只能和能够估计真实尺度的系统进行比较,所以选择的基线要么是视觉惯性系统,要么是双目系统,要么是两者兼而有之。我们将传统方法、基于学习的系统和混合系统纳入比较。我们使用AirVIO来表示没有环路检测的系统。使用均方根误差(RMSE)作为度量,并由evo计算[96]。

对比结果见表2。我们在11个序列上评估了有和没有回环检测的系统。对于没有回环检测的比较,我们的方法优于其他SOTA VIO方法:我们在11个序列中的8个上取得了最佳结果。AirVIO的平均平移误差比第二好的系统Kimera-VIO低20%。通过带回环检测的比较,我们的系统达到了与ORB-SLAM3相当的性能,并且优于其他方法。我们的AirSLAM在7个序列上取得了最好的结果,ORB-SLAM3在另外5个序列上取得了最好的结果,而我们的平均误差比ORB-SLAM3略好。从表2可以得出的另一个结论是,回环检测显著提高了我们系统的准确性。经过回环检测后,系统的平均误差降低了74%。
在这里插入图片描述

C.建图鲁棒性

尽管许多vSLAM系统在前面的VII-B节中已经取得了令人印象深刻的精度,但在实际应用中部署时,复杂的照明条件通常会使它们失效。因此,在本节中,我们评估了各种vSLAM系统对照明条件的鲁棒性。我们选择了几个有代表性的SOTA系统作为基准。它们是ORB-SLAM3[60],一种基于精确特征的系统,DROID-SLAM[17],一种基于学习的混合系统,Basalt[14],一种使用LSSD算法实现光照鲁棒光流跟踪的系统,Kimera[89],一种直接视觉惯性SLAM系统,以及OKIVS[87],一种在我们之前的工作中被证明具有光照鲁棒性的系统[21]。我们在三种情况下测试了这些方法和我们的系统:车载照明、动态照明和低照明环境。

首先分别在第VII-C1节、第VII-C2节和第VII-C3节中给出了评价结果,然后在第VII-C4节中进行了整体分析。

1)车载照明:

我们利用OIVIO数据集[75]来评估带有车载照明的各种系统的性能。OIVIO数据集在隧道和矿井收集视觉惯性数据。在每个序列中,场景被大约1300、4500或9000流明的板载灯照亮。我们使用了徕卡TCRP1203 R300获得的所有九个序列的地面真值。如果所选序列中不存在闭环,那么将VO系统与SLAM系统进行比较是公平的。平移误差的表现如表3所示。最准确的结果以粗体表示,F表示跟踪丢失超过10s或RMSE超过10m。可以看出,我们的方法在9个序列中的7个序列上获得了最准确的结果,并且平均误差最小。机载照明对我们的AirSLAM和ORB-SLAM3几乎没有影响,但是,它降低了OKVIS、Basalt和PL-SLAM的精度。Kimera深受这种光照条件的影响。它甚至在三个序列上经历了跟踪失败和大漂移误差。

在这里插入图片描述
我们在图7中显示了在OIVIO TN 100 GV 01序列上选择的方法的比较。在这种情况下,机器人通过带有机上照明的矿山。距离约为150米,平均速度约为0.84m/s。该图显示了水平轴上姿态误差小于给定的水平轴对准误差阈值的比例。我们的系统比其他系统在这个序列上得到了更准确的结果。
在这里插入图片描述
图7. 基于OIVIO数据集的比较。纵轴是姿态误差在横轴上小于给定对齐误差阈值的比例。我们的AirSLAM可以获得最准确的结果

2)动态光照

UMA-VI数据集是在具有挑战性的场景中使用手持定制传感器收集的视觉惯性数据集。我们选择有光照变化的序列来评估我们的系统。如图8所示,它包含许多子序列,其中图像由于关闭灯而突然变暗。对于vSLAM系统,它比OIVIO数据集更具挑战性。由于真实姿态仅在每个序列的开始和结束时可用,因此我们在所有评估方法中禁用了回环部分。
在这里插入图片描述
我们在UMA-VI数据集中对一个具有挑战性的序列进行特征检测和匹配。红线表示检测到的线特征,跨图像的彩色线表示特征关联。由于关灯,图像可能会突然变暗,这对于vSLAM系统来说是非常困难的

平移误差如表4所示,最准确的结果以粗体表示,F表示跟踪丢失超过10s或RMSE超过10m。可以看出,我们的AirSLAM优于其他方法。我们的系统在10个序列中有7个达到了最好的结果。UMA-VI数据集非常具有挑战性,PL-SLAM和ORB- SLAM3在大多数序列上都失败了。虽然与我们的系统一样,OKVIS和Basalt可以完成所有的序列,但它们的精度明显低于我们的系统。OKVIS和Basalt的平均rmse分别在1.134m和0.724m左右,然而我们的误差约为0.441m,这意味着我们的平均误差仅为OKVIS的62.6%和Basalt的38.9%。
在这里插入图片描述

3) 低光照

受[15]的启发,通过调整其图像的亮度水平来处理公开可用的序列。然后将处理后的序列用于评估各种SLAM系统在低照度条件下的性能。我们选择EuRoC数据集的V2 01 easy作为基序列。图像亮度是利用伽马非线性调节:

V o u t = A V i n 1 γ , ( 22 ) V_{out}=AV_{in}^{\frac1\gamma},\quad(22) Vout=AVinγ1,(22)

其中 V o u t V_{out} Vout V i n V_{in} Vin分别为归一化的输入和输出像素值。 A A A γ \gamma γ控制最大亮度和对比度。我们设置了12个调整级别,并使用 L i L_i Li表示第 i i i级。 L 0 L_0 L0表示原始序列,即 A 0 = 1 A_0 =1 A0=1,훾 γ = 1 \gamma =1 γ=1。当 i ∈ [ 1 , 12 ] i\in[1,12] i[1,12]时, A i   a n d   γ i A_i\mathrm{~and~}\gamma_i Ai and γi按降序交替,使图像逐渐变暗。图9给出了 A i   a n d   γ i A_i\mathrm{~and~}\gamma_i Ai and γi的值,以及每一层处理后的图像。我们将处理后的数据集命名为Dark EuRoC。
在这里插入图片描述

对比结果如图10所示。由于PL-SLAM的误差比其他方法大得多,我们没有给出结果。跟踪失败和较大的漂移误差,即RMSE大于1m,也被标记。可以看出,低照度对不同系统的影响程度是不同的。我们的系统和玄武岩取得了最好的结果。玄武岩在低照度下更稳定:在不同的亮度水平下,其RMSE几乎保持不变。我们的系统更加精确:AirSLAM在大多数序列上的误差最小。ORB-SLAM3和OKVIS的均一误差随亮度的减小而增大。他们甚至在 L 10 L_{10} L10 L 11 L_{11} L11上经历了跟踪失败或较大的漂移误差。
在这里插入图片描述

4)结果分析

我们认为上述三种照明条件以不同的方式影响视觉系统。OIVIO数据集在只有机载照明的黑暗环境中收集序列,因此光源会随着机器人移动,从而产生两种影响。一方面,环境光照不均匀。机器人面对的方向且靠近机器人的区域比其他区域更亮。图像亮度不均匀会导致特征分布不均匀。另一方面,当机器人移动时,同一区域的照明会发生变化,导致不同帧的亮度不同。在这种情况下,某些系统的亮度恒定假设将受到影响。UMA-VI数据集是在动态照明条件下采集的,其中动态照明是由灯光的突然切换或室内外环境之间的移动引起的。UMA-VI数据集中的图像亮度变化比OIVIO数据集中的图像亮度变化要强烈得多,这甚至可能导致提取的特征描述符在连续帧中不一致。在低照度环境下,捕获图像的亮度和对比度都很低,使得vSLAM系统更难检测到足够好的特征并提取出清晰的描述符。

我们对上述实验结果进行总结,得出以下结论:首先,在光照动态环境中,使用描述符进行匹配的系统比直接方法更健壮。在OIVIO数据集上,我们的AirSLAM和ORB-SLAM3的性能明显优于其他系统。在UMA-VI数据集上,我们的方法和OKVIS分别获得了最佳和次优结果。这是合理的,因为亮度恒定假设限制了直接方法。尽管玄武岩利用LSSD增强了光流跟踪,但在这两种情况其精度仍然显著下降。其次,直接法在低照度环境下更稳定。这是因为基于描述符的SLAM系统依赖于足够高质量的特征和描述符,而这些特征和描述符很难在低亮度和对比度的图像上获得。直接法使用的角点更容易检测,因此低照度对角点的影响较小。第三,由于鲁棒的特征检测和匹配,我们的系统的照明鲁棒性远远优于其他系统。在这三种具有挑战性的照明场景中,AirSLAM实现了相对较高的精度。

D.地图重用

1)数据集

由于许多当前的VSLAM系统在相同鲜明的环境中的建图和重定位不再困难,我们仅在照明挑战条件下评估我们的地图重用模块,即白天/夜间定位任务。我们使用TartanAir数据集[58]中的废弃工厂和废弃工厂夜景,因为它们可以为SLAM制图提供连续的双目图像序列,并为评估提供相应的精确地面真值。这两个场景中的图像分别是在白天和晚上采集的。我们使用废弃工厂场景中的序列来构建地图。然后,对于每张建图图像,选取废弃工厂夜景中与其相对距离小于3m且相对角度小于15的图像作为查询图像。我们将生成的地图和重定位序列称为“TartanAir Day/Night Localization”数据集。图11显示了一些用于建图和重定位的样本对。值得注意的是,由于捕获视点和场景深度的差异,基于相对距离和角度选择的查询图像可能并不总是与地图图像具有有效的重叠。
在这里插入图片描述

2)Baseline

我们已经尝试了几种传统的vSLAM系统,例如ORB-SLAM3[60],以及基于SOTA学习的单阶段重新定位方法,例如ACE [97],在“TartanAir Day/Night Localization”数据集上,结果发现他们的表现很糟糕:他们的重新定位召回率低于1%。因此,我们只给出了我们的系统和一些VPR方法的比较结果。Hloc工具箱[8]使用SFM (structure from motion)方法构建地图,并集成了多种图像检索方法、局部特征提取器和匹配方法进行定位。我们主要将我们的系统与这些方法进行比较。具体而言,使用NetVlad [62],AP-GEM/DIR [98],OpenIBL [99]和EigenPlaces[100]用于提取全局特征,SuperPoint [23],Sift [101],D2-NET [39]],Sosnet [102],R2D2 [37]和DISK[38]用于提取本地特征,Lightglue [26],Adalam [103]和最近邻匹配用于匹配特征。我们将这些方法组合成各种全局特征+匹配+局部特征建图和重定位管道。

3)结果

为了达到公平的比较和效率与效果的平衡,我们提取了400个局部特征,并在粗定位阶段检索了3个候选帧。与具有关键帧选择机制的vSLAM系统不同,SfM地图优化了所有输入图像,因此在与原始序列进行建图时非常慢。因此,为了加速SfM建图,同时确保其地图帧多于我们的关键帧,我们通过每四帧选择一帧对其建图序列进行采样。我们在图12中展示了由我们的AirSLAM构建的点线图。重定位结果如表5所示。我们给出了每种方法的运行时间(FPS)和重定位召回率。我们定义如果估计姿态的查询帧在2m和15度的真值范围,为一个成功的重新定位。可以看出,我们的AirSLAM在效率和召回率方面都优于其他方法。我们的系统在11个序列中的5个上取得了最好的结果。AirSLAM的平均召回率比第二好的算法高4.2%,速度是第二好的算法的2.4倍。

在这里插入图片描述
在这里插入图片描述

4)分析

我们发现,在 TartanAir Day/Night Localization数据集中,我们的系统比VPR方法更稳定。在几个序列,例如P000,P002和P010上,一些VPR方法取得了显着的结果,召回率接近100%。然而,在其他一些序列上,如P001和P006,它们的召回率低于40%。相比之下,我们的系统在大多数序列上保持了70%到90%的召回率。

为了弄清楚这一点,我们检查了每个序列,并将图像大致分为三种类型。如图11所示,第一种类型的图像被摄像机相对较远捕获,因此白天/夜图像对之间存在显着的重叠。此外,这些图像包含独特的建筑和地标。第二种图像对也有明显的重叠。然而,这些图像对中的共同区域不包含大型建筑物和地标。第三种类型的图像是用非常接近特征的相机拍摄的。虽然白天/黑夜图像对相机之间的距离不大,它们几乎没有重叠,使得它们的局部特征匹配不可能。

我们发现VPR方法在第一类图像上表现很好,但在第二类图像上表现不佳。因此,它们在P001和P006上的召回率非常低,P001和P006包含更多的第二类图像。这可能是因为它们的全局特征通常是在具有许多不同建筑和地标的数据集上训练的,这使得它们更多地依赖于这些语义线索来检索相似的图像。相比之下,我们的系统基于DBoW方法,该方法只利用了图像的低级局部特征,因此在第一类和第二类图像上的性能相似。这也证明了系统具有良好的泛化能力。然而,由于依赖于局部特征匹配,我们的系统和VPR方法都无法处理重叠较小的对。这样的图像对在P011中非常丰富。

E.消融研究

在这一部分中,我们验证了重新定位方法的有效性。该实验是在 TartanAir Day/Night Localization数据集进行的。我们将有或没有在VI-B2节中提出的第二步进行比较。结果显示在表VI中,其中w/o G.表示我们的系统没有结构图, N c N_c Nc表示局部特征匹配的候选帧号。它表明,使用连接,线特征和结构图来过滤降级候选帧可显着提高召回率。在所有序列上Airslam的表现优于w/o G。当 N c N_c Nc = 3、5和10时,平均改进率分别为9.6%、6.0%和3.8%,表明所提方法性能有效。
在这里插入图片描述

F.效率分析

效率是机器人应用的关键,因此我们也评估了所提出系统的效率。我们首先比较了我们的AirSLAM与几个SOTA VO和SLAM系统在一台具有Intel i9-13900 CPU和NVIDIA RTX 4070 GPU的计算机上的运行时间。然后,我们在NVIDIA Jetson AGX Orin上部署了AirSLAM,以验证我们的系统在嵌入式平台上的效率和性能。
在这里插入图片描述

1)里程计效率

VO/VIO效率实验是在EUROC数据集的MH 01 easy序列上进行的。我们将AirSlam与多个SOTA系统进行比较。循环检测和GBA从所有系统中都禁用,以进行公平的比较。指标是每个帧的运行时间和CPU使用情况。结果显示在图13A中,其中100%的CPU使用意味着使用1个CPU核心。另外应该注意的是,DROID-SLAM实际上使用32个CPU内核,图13a中它的CPU使用情况只是为了简洁地表示。我们的系统是这些系统中最快的,达到73 FPS的速率。此外,由于使用GPU提取和匹配特征,我们的系统需要相对较少的CPU资源。我们还测试了GPU的使用情况。它显示DROID-SLAM需要大约8GB的GPU内存,而我们的AirSLAM只需要大约3GB。

2)建图效率

我们还评估了建图时间,即构建初始地图和离线优化地图的总运行时间。当我们在地图重用实验中使用TartanAir数据集将我们的系统与Hloc进行比较时,我们在这个实验中使用了相同的基线和数据集。当地图大小不同时,每帧的平均建图时间可能会有所不同,因此,我们使用不同数量的输入图像来测量建图时间。结果如图13b所示,其中 n × n \times n×表示我们的系统比Hloc快 n n n倍。可以看出,我们的系统比Hloc效率高得多,特别是当输入图像增加时。此外,Hloc只能使用单目图像来构建没有真实比例的地图,并且地图只包含点特征,而我们的系统可以使用双目摄像机和IMU来构建点线地图并估计真实比例。因此,我们的系统在机器人应用方面比Hloc更加稳定和实用。

3)嵌入式平台

我们使用EuRoC数据集中的8个序列来评估AirSLAM在嵌入式平台上的效率。添加后缀,即-Jetson和-PC,以区分不同平台上的结果。在Jetson上,我们修改了系统中的三个参数以提高效率。首先,我们将检测到的关键点数量从350个减少到300个。其次,我们改变V-D节中的两个参数,使关键帧更稀疏,即 α 1 \alpha_1 α1 α 2 \alpha_2 α2分别从0.65和0.1改为0.5和0.2。其他参数在这两个平台上是相同的。效率和绝对轨迹误差(ATE)的比较分别见表7和图14。我们的AirSLAM可以在Jetson上以40Hz的速率运行,同时只消耗2个CPU内核和989MB GPU内存。我们发现离线地图优化在这两个平台上的运行时间非常接近。这是因为AirSLAM-Jetson比AirSLAM-PC选择更少的关键帧,所以循环关闭和GBA更快。
在这里插入图片描述
在这里插入图片描述

8.结论

在这项工作中,我们提出了一种高效且光照鲁棒的混合vSLAM系统。为了对具有挑战性的照明具有鲁棒性,该系统采用CNN来检测关键点和结构线。然后使用GNN将这两个特征关联并跟踪。为了提高系统的效率,我们提出了PLNet,这是第一个同时检测点和线特征的统一模型。在此基础上,提出了一种基于外观信息和几何信息的多阶段重定位方法,实现了地图的高效复用。我们设计的系统架构包括在线建图、离线优化和在线重新定位,使其更容易部署在真实的机器人上。大量的实验表明,该系统在光照恶劣的环境中,在精度、效率和鲁棒性方面优于其他SOTA vSLAM系统

尽管具有显著的性能,但所提出的系统仍然存在局限性。像其他基于点-线的SLAM系统一样,我们的AirSLAM依赖于足够的线特征,因此最好将其应用于人造环境。这是因为我们的系统最初是为仓库机器人设计的。在非结构化环境中,它将降级为纯点云系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值