#GSLAM
自动驾驶相关~~~ 一个通用的SLAM架构和基准
GSLAM:A General SLAM Framework and Benchmark
开源代码:https://github.com/zdzhaoyong/GSLAM
SLAM技术最近取得了许多成功,并吸引了高科技公司的关注。然而,如何同一现有或新兴算法的界面,一级有效地进行关于速度、稳健性和可移植性的基准测试仍然是问题。本文,提出了一个名为GSLAM的新型SLAM平台,它不仅提供评估功能,还为研究人员提供了快速开发自己的SLAM系统的有用工具。GSLAM的核心贡献是一个通用的。跨平台的、完全开源的SLAM接口,旨在处理输入数据集、SLAM实现、可视化和应用程序的统一框架中的交互。通过这个平台,用户可以以插件形式实现自己的功能,以提高SLAM的性能,并进一步将SLAM的应用推向实际应用。
从上世纪80年代以来,同时定位与地图构建(SLAM)一直是计算机视觉和机器人领域的热门研究主题。SLAM为许多需要实时导航的应用提供了基本功能,如机器人技术、无人机(UAVs)、自动驾驶、以及虚拟现实和增强现实。近来年,SLAM技术得到了迅速发展,提出了各种SLAM系统,包括单目SLAM系统(基于特征点,直接和半直接方法)、多传感器SLAM系统(RGBD、双目和惯性辅助的方法)以及基于学习的SLAM系统(有监督和无监督方法)。
然而,随着SLAM技术的迅速发展,几乎所有的研究人员都集中精力于自己的SLAM系统的理论和实施,这使得难以交流思想,并且不容易实现迁移到其他系统。这妨碍了SLAM技术快速应用于各种行业领域。此外,目前存在许多SLAM系统的不同实现版本,如何有效地进行速度、稳健性和可移植性的基准测试仍然是一个问题。最近,Nardi等人和Bodin等人提出了统一的SLAM基准测试系统,以进行定量、可比较和可验证的实验研究,也探究各种SLAM系统之间的权衡。通过这些系统,可以使用数据集和度量评估模块轻松进行评估实验。
由于现有的系统仅提供评估基准,该论文认为有可能建立一个平台,以服务SLAM算法的整个生命周期,包括开发、评估和应用阶段。此外,近年来深度学习基础的SLAM已取得显著进展,因此有必要创建一个平台,不仅支持C++,还支持Python,以更好地支持几何和深度学习基础的SLAM系统的集成。因此,在本文中,介绍了一个新型的SLAM平台,不仅提供评估功能,还为研究人员提供了有用的工具,以快速开发他们自己的SLAM系统。通过这个平台,常用功能以插件形式提供,因此用户可以直接使用它们或创建自己的功能以实现更好的性能。希望这个平台能进一步推动SLAM系统的实际应用。总而言之,本文的主要贡献如下:
- 本文提出了一个通用的、跨平台的、完全开源的SLAM平台,旨在用于研究和商业用途,超越了以往的基准测试系统。SLAM接口由多个轻量级、无依赖的头文件组成,这使得在统一框架中以插件形式与不同数据集、SLAM算法和应用进行交互变得容易。此外,还提供了JavaScript和Python,以支持基于Web和深度学习的SLAM应用。
- 提出的GSLAM平台中,引入了三个经过优化的模块作为实用工具类,包括Estimator、Optimizer和Vocabulary。Estimator旨在提供一组封闭形式的求解器,涵盖所有情况,具有强大的样本一致性(RANSAC);Optimizer旨在提供流行的非线性SLM问题的统一接口;Vocabulary旨在提供高效且可移植的词袋实现,用于多线程和SIMD优化的地点识别。
- 受益于上述接口,该工作在一个统一的框架中实现并评估了现有数据集、SLAM实现和可视化应用的插件,未来出现的基准测试或应用也可以轻松地进行进一步集成。
下面首先介绍GSLAM框架的接口,并解释GSLAM的工作原理。其次,介绍三个实用组件,即Estimator, Optimizer和Vocabulary。然后,使用几个典型的公共数据集,使用GSLAM框架来评估不同流行的SLAM实现。最后,总结这些工作,并展望未来的研究方向。
Simultaneous Localization And Mapping
SLAM技术用于在未知环境中构建地图,并将传感器在地图中进行定位,主要侧重于实时操作。早期的SLAM主要基于扩展卡尔曼滤波(EKF)。将6自由度的运动参数和3D地标以概率方式表示为单一状态向量。经典EKF的复杂性随着地标数量的增加呈二次增长,限制了其可拓展性。近年来,SLAM技术得到了快速发展,提出了许多单目视觉SLAM系统,包括基于特征点、直接法和半直接方法。然而,单目SLAM系统缺乏尺度信息,无法处理纯旋转情况,因此一些其他多传感器SLAM系统,包括RGBD,双目和惯性辅助方法出现,以提高鲁棒性和精度。
尽管提出了大量的SLAM系统,但在统一这些算法的接口方面几乎没有什么工作,也没有对它们的性能进行全面的比较。此外,这些SLAM算法的实现通常以独立的可执行文件的形式发布,而不是以库的形式,而且往往不符合任何标准结构。
最近,基于深度学习的有监督和无监督的视觉里程计(VO)与传统的基于几何的方法相比,提出了新颖的思路。但是,进一步优化多个关键帧的一致性仍然不容易。GSLAM提供的工具可以帮助获得更好的全局一致性。通过该框架,更容易可视化或评估结果,并进一步应用于各种行业领域。
Computer Vision and Robotics Platform
在机器人技术和计算机领域,机器人系统(ROS)提供了节点之间非常便捷的通信方式,受到大多数机器人研究人员的青睐。许多SLAM实现提供了ROS包装器,以订阅传感器数据并发布可视化结果。但它并未统一SLAM实现的输入和输出,难以进一步评估不同SLAM系统。
受ROS消息架构的启发,GSLAM实现了一个类似的进程间通信实用类,称为Messenger。这为替代SLAM实现内部的ROS提供了另一种选择,并保持了兼容性,也就是说,该框架内支持所有ROS定义的消息,并自然地实现了ROS包装器。由于采用了进程内设计,消息传递时没有序列化和数据传输,消息可以无延迟和额外成本地发送。与此同时,消息的有效载荷不仅限于ROS定义的消息,还可以是任何可复制的数据结构。此外,不仅提供评估功能,还为研究人员提供了有用的工具,以快速开发和集成他们自己的SLAM算法。
SLAM Benchmarks
目前存在几种SLAM基准测试系统,包括KITTI基准测试、TUM RGB-D基准测试和ICL-NUIM RGB-D基准数据集,这些系统仅提供评估功能。此外,SLAMBench2将这些基准测试扩展为算法和数据集,要求用户将已发布的实现与SLAMBench2兼容,以进行评估,这难以扩展到更多应用领域。与这些系统不同,本文提出的GSLAM平台提供了一个解决方案,可为SLAM实现的整个生命周期提供服务,从开发、评估到应用。为研究人员提供了有用的工具,以快速开发他们自己的SLAM系统,并进一步基于统一接口开发可视化、评估和应用程序。
通用SLAM架构
Framework Overview
GSLAM的框架如图所示。总的来说,接口旨在处理三个部分的交互。
- 处理SLAM实现的输入。运行SLAM时,需要传感器数据和一些参数。对于GSLAM,使用Svar类进行参数配置和命令处理。所有SLAM实现所需的传感器数据都由Dataset实现提供,并使用Messenger进行传输。GSLAM实现了几个流行的视觉SLAM数据集,用于可以自由实现自己的数据集插件。
- SLAM实现。GSLAM将每个实现视为插件库。开发人员可以非常容易地基于GSLAM接口和实用类设计一个SLAM实现。开发人员还可以使用接口包装实现,而无需引入额外的依赖。用户可以专注于核心算法的开发,而无需关心SLAM实现外部需要处理的输入和输出。
- 可视化部分或使用SLAM结果的应用。在SLAM实现处理输入帧后,用户可能希望展示或利用结果。为了通用性,SLAM结果应以标准格式发布。默认情况下,GSLAM使用Qt进行可视化,但用户可以自由实现自定义的可视化工具,并添加应用插件,如评估应用程序。
该框架被设计为与各种不同类型的SLAM实现兼容,包括但不限于单目、双目、RGBD和多摄像头视觉惯性里程计与多传感器融合。现代深度学习平台和开发人员更喜欢使用Python进行编码,因此GSLAM提供了Python绑定,开发人员能够使用Python实现SLAM,并使用GSLAM调用它,或者使用Python调用基于C++的SLAM实现。此外,还支持JavaScript用于基于Web的用途。
Basic Interface Classes
SLAM接口通常使用的一些数据结构包括参数设置/读取、图像格式、姿态变换、相机模型和地图数据结构。以下是一些基本接口类的简要介绍。
Paramter Setting
GSLAM使用一个小巧的参数解析和参数设置类Svar,它仅包含一个头文件,依赖于C++11,并具有以下特点:
a.参数解析和配置加载以及帮助信息。类似于流行的参数解析工具,如Google gflags,变量配置可以从命令行参数、文件和系统环境中加载。用户还可以定义不同类型的参数,并提供介绍信息,这些信息将显示在帮助文档中。
b.一个小型脚本语言,支持变量、函数和条件语句,使配置文件更加强大。
c.线程安全的变量绑定和共享。建议将使用频率非常高的变量绑定到指针或引用上,这不仅提供了高效性,还提供了便利性。
d,简单的函数定义和从C++或纯脚本进行调用。命令和函数之间的绑定有助于开发人员解耦文件依赖关系。
e.支持树形结构表示,这意味着可以轻松地使用XML、JSON和YAML格式加载或保存配置。
Intra-Process Messaging
由于ROS提供了一个非常便捷的节点间通信方式,受到大多数机器人研究人员的青睐。受到ROS2消息架构的启发,GSLAM实现了一个类似的进程间通信实用类,称为Messenger。这为替代SLAM实现内部的ROS提供了另一种选择,并保持了兼容性。由于采用了进程间设计,Messenger能够发布和订阅任何类,而无需额外成本。以下是更多功能的介绍:
a.该接口采用了ROS的风格,对用来说容易上手。而且支持所有ROS定义的消息,这意味着只需要很少的工作就能替代原来的ROS消息传递系统。
b.由于没有序列化和数据传输,消息可以无延迟和额外成本地发送。与此同时,消息的有效载荷不仅限于ROS定义的消息,还支持任何可复制的数据结构。
c.源代码只包括基于C++11的头文件,没有额外的依赖,使其具有可移植性。
d.API是线程安全的,并在列队大小大于零时支持多线程条件通知。在发布者和订阅者相互连接之前,会对主题名称和RTTI数据结构进行检查,以确保正确地调用。
3D Transforamtion
类似地,定义了刚体和相似性变换的李代数se(3)和sim(3)。GSLAM使用四元数来表示旋转部分,并提供了一种表示形式转换为另一种表示形式的函数。表格1展示了变换实现,并于另外三种流形的实现(Sophus, TooN和Ceres)进行了比较。由于Ceres实现使用角轴表示,因此不需要旋转的指数和对数。如表格所示,GSLAM的实现性能更佳,因为它使用四元数并具有更好的优化,而TooN使用矩阵实现,在点变换方面性能更好。
Image format
图像数据的存储和传输是视觉SLAM中最重要的功能之一。为了提高效率和便利性,GSLAM使用了一个数据结构GImage,它与cv::Mat兼容。它具有智能指针计数器,以确保内存安全释放,并且可以在不进行内存复制的情况下轻松传输。数据指针对齐,以便更容易进行单指令多数据(SIMD)加速。用户可以在GImage和cv::Mat之间无缝、安全地进行转换,而无需进行内存复制。
Camera Models
由于SLAM可能包含由于制造不完美而引起的径向和切向畸变,或者是由鱼眼或全景相机捕捉的图像,因此提出了不同的相机模型来描述投影。GSLAM提供了包括OpenCV(ORB-SLAM使用)、ATAN(PTAM使用)和OCamCalib(MultiCol-SLAM使用)在内的实现。用户也可以轻松继承这些类并实现其他相机模型,如Kannala-Brandt和等距全景模型。
Map Data Structure
对于SLAM实现,其目标是实时定位并生成地图。GSLAM建议使用一个统一的地图数据结构,有多个地图帧和地图点组成。这个数据结构适用于大多数已有的视觉SLAM系统,包括基于特征或直接方法。
地图帧用于表示不同时间的位置状态,包括由传感器捕捉的各种信息或估算结果,包括IMU或GPS原始数据、深度信息和相机模型。SLAM实现估算它们之间的关系,它们之间的连接形成了一个姿势图。
地图点用于表示由帧观察到的环境,通常由基于特征的方法使用。但是,一个地图点不仅可以表示一个关键点,还可以表示一个GCP(地面控制点)、边缘线或3D对象。它们与地图帧的对应关系形成了一个观察图,通常被称为捆绑图。
SLAM实现工具
为了更容易实现一个SLAM系统,GSLAM提供了一个实用类。本节将简要介绍三个经过优化的模块,分别是Estimator, Optimizer和Vocabulary。
Estimator
纯几何计算仍然是一个需要强大和准确的实时解决方案的基本问题。传统的视觉SLAM算法或现代的视觉惯性解决方案都依赖与几何视觉算法来进行初始化、重定位和回环闭合。OpenCV提供了多个几何算法,Kneip提供了一个用于几何视觉的工具箱OpenGV,该工具箱仅限于相机姿态计算。GSLAM的Estimator旨在提供一系列包括所有情况的封闭形式解算器,并使用了鲁棒的随机采样一致性方法(RANSAC)。
表2列出了Estimator支持的算法。根据给定的观测数据,它们被分成三类。2D-2D匹配用于估计极线或单应约束,并且可以从中分解相对姿态。2D-3D对应于估计单目或多摄像头系统的中心或非中心绝对位姿,这是著名的PnP问题。还支持3D几何函数,如平面拟合,以及估算两个点云的SIM变换。大多数算法都依赖与开源线性代数库Eigen,它是一个仅包含头文件的库,并且适用于大多数平台。
Optimizer
非线性优化是现代几何SLAM系统的核心部分。由于Hessian矩阵的高纬度和稀疏性,图结构被用来建模SLAM的复杂估计问题。提出了几种框架,包括Ceres、G2O和GTSAM,用于解决一般的图优化问题。这些框架在不同的SLAM系统中广泛使用。ORB-SLAM、SVO使用G2O进行BA和位姿图优化。OKVIS、VINS使用Ceres进行带IMU因素的图优化,滑动窗口用于控制计算复杂性。Forster等人提出了一种基于SVO的视觉初始化方法,并使用GTSAM实现后端。
GSLAM的Optimizer旨在为大多数非线性SLAM问题提供一个统一的接口,如PnP求解器,BA,姿态图优化。基于Ceres库实现了这些问题的通用插件。对于特定问题,如BA,还可以提供一些更高效的实现,如PBA和ICE-BA作为插件。使用优化器工具,开发人员可以使用统一的接口访问不同的实现,特别是用于基于深度学习的SLAM系统。
Vocabulary
地点识别是SLAM系统中最重要的部分之一,用于重新定位和回环检测。词袋(BoW)方法在SLAM系统中广泛使用,因为它高效且性能出色。FabMap提出了一种基于外观的地点识别的概率方法,该方法用于RSLAM、LSD-SLAM等系统。由于它使用了像SIFT和SURF这样的浮点描述子,DBoW2为训练和检测构建了一个词汇树,支持二进制和浮点描述子。Refael提出了DBoW2的两个改进版本,DBoW3和FBoW,它们简化了接口并加快了训练和加载速度。之后,ORB-SLAM采用了ORB描述子,并使用DBoW2进行回环检测、重定位和快速匹配。随后,一系列SLAM系统,如ORB-SLAM2、VINS-Mono和LDSO,使用DBoW3进行回环检测。它已经成为实现SLAM系统地点识别的最流行工具。
受上述工作的启发,GSLAM对DBoW3词汇进行了仅包含头文件的实现,具有以下特点:
- 去除了对OpenCV的依赖,所有函数都在一个仅依赖C++11的头文件中实现。
- 结合DBoW2/3和FBoW的优点,具有极快的速度和易于使用。提供了类似于DBoW3的接口,并使用SSE和AVX指令加速了二进制和浮点描述子。
- 改进了内存使用和加速了加载、保存或训练词汇以及从图像特征到BoW向量转换的速度。
表3展示了四个词袋库的比较。在实验中,每个父节点有10个子节点,ORB特征检测使用ORB-SLAM,SIFT检测使用SiftGPU。实现结果中使用了ORB词汇,分别有4级和6级,以及一个SIFT词汇。FBoW和GSLAM都使用多线程进行词汇训练。GSLAM的实现在几乎所有项目中的表现都优于其他实现,包括加载和保存词汇、训练新词汇、将描述符列表转换为用于地点识别的BoW向量和用于快速特征匹配的特征向量。此外GSLAM实现使用更少的内存,并分配了更少的动态内存块,因为DBoW2需要大量内存的主要原因是碎片问题。
SLAM评估基准
现有的基准需要用户下载测试数据集并上传结果以进行精确性评估,这不足以统一运行环境并评估公平的性能比较。得益于GSLAM的统一接口,SLAM系统的评估变得更加优雅。在GSLAM的帮助下,开发人员只需上传SLAM插件,便可以在一个使用固定资源的docker化环境中进行速度、计算成本和准确性的各种评估。在本节中,将首先介绍一些数据集和已实现的SLAM插件。然后,对速度、准确性、内存和CPU使用率进行三个代表SLAM实现的评估。此评估旨在展示具有不同SLAM插件的统一SLAM基准实现的可能性。
Datasets
运行SLAM系统通常需要传感器数据流和相应的配置。为了让开发人员专注于核心SLAM插件的开发,GSLAM提供了一个标准的数据集接口,开发人员不需要关心SLAM的输入。通过不同的数据集插件,提供了在线传感器输入和离线数据,正确地插件会根据给定的数据集路径后缀动态加载。数据集的实现应该提供所有请求的传感器流以及相关配置,因此不需要为不同的数据集进行额外设置。所有不同的传感器流通过Messenger发布,使用标准的主题名称和数据格式。
GSLAM已经实现了几个流行的视觉SLAM数据集插件,如表4所示。用户也可以非常容易地基于仅包含头文件的GSLAM核心来实现一个数据集插件,并将其发布为插件并与应用程序一起进行编译。
SLAM Implementations
图2展示了一些使用内置Qt可视化器运行的开源SLAM和SfM插件的屏幕截图。该框架支持不同体系结构的SLAM系统,包括直接法、半直接法、基于特征的方法,甚至SfM方法。DSO实现需要发布结果,例如点云、相机姿势、轨迹和姿态图,以便像基于ROS的实现一样进行可视化。用户可以使用统一的框架访问不同的SLAM插件,根据C++、Python和Node-JS接口开发基于SLAM的应用程序非常方便。由于许多研究人员在开发中使用ROS,GSLAM还提供了ROS可视化插件,以无缝传输ROS定义的消息,并使开发人员可以利用Rviz进行显示或继续开发其他基于ROS的应用程序。
Evaluation
由于大多数现有的基准只提供数据集,或者没有groundtruth供用户自行进行评估,GSLAM提供了一个内置插件和一些脚本工具,用于计算性能和精度评估。
论文中使用TUM RGBD数据集中的序列nostructure-texture-near-withloop来演示评估的执行情况。接下来的实验采用三个开源的单目SLAM插件DSO, SVO和ORB-SLAM。在所有实验中,使用一台搭载i7-6700 CPU、GTX 1060 GPU和16GB RAM的计算机,运行64位Ubuntu 16.04。
计算性能评估包括内存使用、分配内存块数量、CPU使用率以及统计每帧所用的时间,如图3所示。结果表明,SVO使用的内存和CPU资源最少,并获得了最快的速度。而且由于SVO只是一个视觉里程计,在实现内部只维护了一个本地地图,所以成本保持稳定。DSO分配的内存块数较少,但消耗了100MB以上的内存,且增长较慢。DSO的一个问题是当帧数低于500时,处理时间会急剧增加,此外,关键帧的处理时间甚至更长。ORB-SLAM使用了最多的CPU资源,计算时间稳定,但内存使用快速增加,并且它分配和释放了大量的内存块,因为其BA使用了G2O库,没有使用增量优化方法。
图4展示了里程计轨迹的评估结果。如图所示,SVO速度较快,但漂移较大,而ORBSLAM在绝对姿态误差(APE)方面达到了最高的精度。由于综合评估是一个可插拔的插件应用程序,可以重新实施更多的评估指标,例如点云的精度。
总结
本文介绍了一个名为GSLAM的新型通用SLAM平台,该平台提出了从开发、评估到应用的支持。通过这个平台,常用的工具包以插件形式提供,用户还可以轻松地开发自己的模块。为了使平台易于使用,使接口只依赖于C++11。此外,还提供了Python和JavaScript接口,以更好地集成传统SLAM和基于深度学习的SLAM,或在Web上进行分布式操作。
在接下来的研究中,会提供更多的SLAM实现、文档和演示代码,以便学习和使用。此外,还将提供传统SLAM和基于深度学习的SLAM的集成,以进一步探索SLAM系统的未知可能性。
#SLAM ~
这是一篇多传感器/姿态估计/动态环境/视觉里程计的文章
近年来,基于视觉的传感器在SLAM系统中显示出显著的性能、精度和效率提升。在这方面,视觉SLAM(VSLAM)方法是指使用相机进行姿态估计和地图生成的SLAM方法。许多研究工作表明,VSLAM优于传统方法,传统方法仅依赖于特定传感器,例如激光雷达,即使成本较低。VSLAM利用不同的摄像机类型(例如单目、双目和RGB-D),在不同的数据集(例如KITTI、TUM RGB-D和EuRoC)和不同的环境(例如,室内和室外)中进行测试,并采用了多种算法和方法论,以更好地解析环境。
上述变化使这一主题受到研究人员的广泛关注,并产出了许多经典VSLAM算法。在这方面,论文调查的主要目的是介绍VSLAM系统的最新进展,并讨论现有的挑战和未来趋势。论文对在VSLAM领域发表的45篇有影响力的论文进行了深入的调查,并根据不同的特点对这些方法进行了分类,包括novelty domain、目标、采用的算法和语义水平。最后论文讨论了当前的趋势和未来的方向,有助于研究人员进行研究。
总结来说,图1显示了标准VSLAM方法的整体架构。系统的输入可以与其他传感器数据集成以提供更多信息,例如惯性测量单元(IMU)和激光雷达,而不是只有视觉数据。此外,对于VSLAM 范式中使用的直接或间接方法,视觉特征处理模块的功能可能会被更改或忽略。例如,“特征处理”阶段仅用于间接方法。另一个因素是利用一些特定模块,如回环检测和光束法平差,以改进执行。
视觉SLAM 的算法的发展
VSLAM系统在过去的几年中已经成熟,一些框架在这个开发过程中发挥了重要作用。图2展示了视觉SLAM发展过程中的里程碑算法。
首篇实时单目VSLAM于2007年由Davison提出,名为Mono SLAM的框架[17]。他们的间接框架可以使用扩展卡尔曼滤波(EKF)算法估计现实世界中的相机运动和3D元素[18]。尽管缺乏全局优化和回环检测模块,Mono SLAM开始在VSLAM域中发挥主要作用。然而用这种方法重建的地图只包括地标,没有提供关于该区域的进一步详细信息。
Klein等人[14]在同一年提出了Parallel Tracking and Mapping(PTAM),他们将整个VSLAM系统分为两个主要线程:tracking和mapping。PTAM为后续很多工作奠定了基石。PTAM方法的主要思想是降低计算成本,并使用并行处理来实现实时性能。当tracking实时估计摄像机运动时,mapping预测特征点的3D位置。PTAM也是第一个利用光束法平差(BA)联合优化相机姿态和3D地图创建的方法。其使用Features from Accelerated Segment Test(FAST)[19]的角点检测器算法进行关键点匹配和跟踪。尽管该算法的性能优于Mono SLAM,但其设计复杂,在第一阶段需要用户输入。
Newcombe等人于2011年提出了一种用于测量深度值和运动参数来构建地图的直接方法,即密集跟踪和映射(DTAM)。DTAM是一种密集建图和密集跟踪模块的实时框架,可通过将整个帧与给定深度图对齐来确定相机姿态。为了构建环境地图,上述阶段分别估计场景的深度和运动参数。虽然DTAM可以提供地图的详细信息,但实时执行需要较高的计算成本。作为3D 建图和基于像素的优化领域中的另一种间接方法,Endres等人在2013年提出了一种可用于RGB-D相机的方法。他们的方法是实时的,专注于低成本嵌入式系统和小型机器人,但在无特征或具有挑战性的场景中无法产生准确的结果。同年,Salas Moreno等人[22]提出了SLAM++,是实时SLAM框架中利用语义信息的开山之作。SLAM++采用RGB-D传感器输出,并进行3D相机姿态估计和跟踪以形成姿态图。然后通过合并从场景中的语义目标获得的相对3D姿态来优化预测姿态。
随着VSLAM基线的成熟,研究人员专注于提高这些系统的性能和精度。Forster等人在2014年提出了一种混合VO方法,称为Semi-direct Visual Odometry(SVO)[24]。SVO可以结合基于特征的方法和直接方法来实现传感器的运动估计和建图任务。SVO可以与单目和双目相机一起工作,并配备了一个姿态细化模块,以最小化重投影误差。然而,SVO的主要缺点是采用短期数据关联,并且无法进行回环检测和全局优化。
LSD-SLAM[25]是Engel等人于2014年提出的另一种有影响力的VSLAM方法,包含跟踪、深度估计和地图优化。该方法可以使用其姿态图估计模块重建大规模地图,并具有全局优化和回环检测功能。LSD-SLAM的弱点在于其初始化阶段,需要平面中的所有点,这使其成为一种计算密集型方法。Mur Artal等人介绍了两种精确的间接VSLAM方法,迄今为止广受关注:ORB-SLAM[26]和ORBSLAM 2.0[27]。这些方法可以在纹理良好的序列中完成定位和建图,并使用Oriented FAST and Rotated BRIEF(ORB)特征实现高性能的位置识别。ORB-SLAM的第一个版本能够使用从相机位置收集的关键帧来计算相机位置和环境结构。第二个版本是对ORB-SLAM的扩展,有三个并行线程,包括查找特征对应的跟踪、地图管理操作的局部建图,以及用于检测新环路和纠正漂移错误的回环。尽管ORB-SLAM 2.0可以与单目和立体相机一起使用,但由于重建具有未知比例的地图,因此不能用于自主导航。这种方法的另一个缺点是其无法在没有纹理的区域或具有重复模式的环境中工作。该框架的最新版本名为ORB-SLAM 3.0,于2021提出[28]。它适用于各种相机类型,如单目、RGB-D和双目视觉,并提供改进的姿态估计输出。
近年来,随着深度学习的快速发展,基于CNN的方法可以通过提供更高的识别和匹配率来解决许多问题。类似地,用学习特征替换人工设计的特征是许多最近基于深度学习的方法提出的解决方案之一。在这方面,Tateno等人提出了一种基于CNN的方法,该方法处理相机姿态估计的输入帧,并使用关键帧进行深度预测,命名为CNN-SLAM[29]。CNN-SLAM实现并行处理和实时性能的核心思想之一是,将相机帧分割成较小的部分以更好地理解环境。Engel等人还引入了Direct Sparse Odometry(DSO)[30],其将直接方法和稀疏重建相结合,以提取图像块中的最高强度点。
综上所述,VSLAM系统演进过程中的里程碑表明,最近的方法侧重于多个专用模块的并行执行。这些模块形成了与广泛的传感器和环境兼容的通用技术和框架。上述特性使它们能够实时执行,并且在性能改进方面更加灵活。
相关综述
VSLAM领域已有不少综述,对不同的现有方法进行了全面调查。每一篇论文都回顾了使用VSLAM方法的主要优点和缺点。Macario Barros等人[31]将方法分为三个不同类别:仅视觉(单目)、视觉惯性(立体)和RGB-D。他们还提出了简化分析VSLAM算法的各种标准。然而[31]并没有包括其他视觉传感器,比如基于事件的传感器。Chen等人[32]调查了广泛的传统和语义VSLAM。他们将SLAM开发时代分为经典、算法分析和鲁棒感知阶段。并总结了采用直接/间接方法的经典框架,研究了深度学习算法在语义分割中的影响。
尽管他们的工作提供了该领域高级解决方案的全面研究,但方法的分类仅限于基于特征的VSLAM中使用的特征类型。Jia等人[33]调查了大量文献,并对基于图优化的方法和配备深度学习的方法进行了简要比较。在另一项工作中,Abaspur Kazerouni等人[34]涵盖了各种VSLAM方法,利用了感官设备、数据集和模块,并模拟了几种间接方法进行比较和分析。它们只对基于特征的算法进行分析,例如HOG、尺度不变特征变换(SIFT)、加速鲁棒特征(SURF)和基于深度学习的解决方案。Bavle等人[35]分析了各种SLAM和VSLAM应用中的态势感知方面,并讨论了它们的缺失点。还有一些其他综述如[15]、[36]、[37]、[32]、[37]在此不再赘述。
与上述综述不同,本文对不同场景的VSLAM系统进行全面调查,主要贡献如下:
对各种最近的VSLAM方法进行分类,这些方法涉及研究人员在提出新解决方案方面的主要贡献、标准和目标;
通过深入研究不同方法的不同方面,分析VSLAM系统的当前趋势;
介绍VSLAM对研究人员的潜在贡献。
VSLAM 设置标准
考虑到各种VSLAM方法,论文将可用的不同设置和配置分为以下类别:传感器和数据采集、目标环境、视觉特征处理、系统评估和语义类别,下面逐一介绍。
1.传感器和数据采集
Davison等人[17]引入的VSLAM算法的早期阶段配备了用于轨迹恢复的单目摄像机。单目相机是最常见的视觉传感器,用于各种任务,如物体检测和跟踪[39]。另一方面,立体相机包含两个或更多图像传感器,使其能够感知图像中的深度,从而在VSLAM应用中实现更准确的性能。相机设置具有成本效益,并为更高的精度要求提供信息感知。RGB-D相机也是VSLAM中使用的视觉传感器,其可以提供场景中的深度和颜色。上述视觉传感器可以提供丰富的环境信息,例如,适当的照明和运动速度,但它们通常难以应对照明度低或场景动态范围高的情况。
近年来,事件摄像机也被用于各种VSLAM应用中。当检测到运动时,这些低延迟仿生视觉传感器产生像素级亮度变化,而不是标准强度帧,从而实现高动态范围输出,而不会产生运动模糊影响[40]。与标准相机相比,事件传感器在高速运动和大范围动态场景中可以提供可靠的视觉信息,但在运动速度较低时无法提供足够的信息。另一方面,事件相机主要输出关于环境的不同步信息。这使得传统的视觉算法无法处理这些传感器的输出[41]。此外,使用事件的时空窗口以及从其他传感器获得的数据可以提供丰富的姿态估计和跟踪信息。
此外,一些方法使用多目相机设置来解决在真实环境中工作的常见问题,并提高定位精度。利用多目传感器有助于解决复杂问题,例如遮挡、伪装、传感器故障或可跟踪纹理稀疏等,为摄像机提供重叠视角。尽管多目相机可以解决一些数据采集问题,但纯视觉的VSLAM可能会面临各种挑战,例如遇到快速移动目标时的运动模糊、低照度或高照度下的特征不匹配、高速变化场景下的动态目标忽略等。因此,一些VSLAM应用程序可能会在摄像机旁边配备多个传感器。融合事件和标准帧[42]或将其他传感器(如激光雷达[43]和IMU)集成到VSLAM是一些现有的解决方案。
2.目标环境
作为许多传统VSLAM实践中的一个有力假设,机器人在静态世界中工作,没有突然或意外的变化。因此,尽管许多系统可以在特定环境中成功应用,但环境中的一些意外变化(例如,移动目标的存在)可能会导致系统复杂化,并在很大程度上降低状态估计质量。在动态环境中工作的系统通常使用诸如光流或随机采样一致性(RANSAC)[44]之类的算法来检测场景中的移动,将移动目标分类为异常值,并在重建地图时跳过它们。这样的系统利用几何/语义信息或试图通过组合这两个结果来改进定位方案[45]。
此外作为一般分类法,论文将环境分为室内和室外两类。室外环境可以是具有结构地标和大规模运动变化(如建筑物和道路纹理)的城市区域,或具有弱运动状态(如移动的云和植被、沙子纹理等)的越野区域,这增加了定位和回环检测失败的风险。另一方面,室内环境包含具有完全不同的全局空间属性的场景,例如走廊、墙和房间。论文认为,虽然VSLAM系统可能在上述区域中的一个工作良好,但在其他环境中可能表现不出相同的性能。
3.视觉特征处理
如前文所述,检测视觉特征并利用特征描述子信息进行姿态估计是间接VSLAM方法的一个必要阶段。这些方法使用各种特征提取算法来更好地理解环境并跟踪连续帧中的特征点。特征提取算法有很多,包括SIFT[46]、SURF[47]、FAST[19]、BRIEF[48]、ORB[49]等。其中,与SIFT和SURF[50]相比,ORB特征具有快速提取和匹配而不大幅损失准确度的优点。
上述一些方法的问题是它们不能有效地适应各种复杂和不可预见的情况。因此,许多研究人员使用CNN来提取图像特征,包括VO、姿态估计和回环检测。根据方法的功能,这些技术可以表示有监督或无监督的框架。
4.系统评估
虽然一些VSLAM方法,特别是那些能够在动态和挑战性环境中工作的方法,在真实世界中进行测试。但许多研究工作都使用了公开的数据集来证明其适用性。在这方面,Bonarini等人[51]的RAWSEEDS数据集是一个著名的多传感器基准测试工具,包含室内、室外和混合机器人轨迹与真值数据。它是用于机器人和SLAM目的的最古老的公开基准测试工具之一。McCormac等人[52]的Scenenet RGB-D是场景理解问题的另一个受欢迎的数据集,例如语义分割和目标检测,包含500万个大规模渲染的RGB-D图像。
最近在VSLAM和VO领域的许多工作已经在TUM RGB-D数据集上测试了它们的方法[53]。此外,Nguyen等人[54]的NTU VIRAL是由配备3D激光雷达、相机、IMU和多个超宽带(UWB)的无人机收集的数据集。该数据集包含室内和室外实例,旨在评估自动驾驶和空中操作性能。其他数据集如EuRoC MAV[55]、OpenLORIS Scene[56]、KITTI[57]、TartanAir[58]、ICL-NUIM[59]和基于事件相机的数据集[60]可以参考相关论文。
根据传感器设置、应用和目标环境,上述数据集用于多种VSLAM方法。这些数据集主要包含摄像机的内外参以及GT。表I和图3分别显示了数据集的总结特征和每个数据集的一些实例。
5.语义等级
机器人需要语义信息才能理解周围的场景并做出更优决策。在许多最近的VSLAM工作中,将语义级信息添加到基于几何的数据中优于纯几何的方法,使其能够提供环境的概念知识[61]。在这方面,预先训练的目标识别模块可以将语义信息添加到VSLAM模型[62]。最新的方法之一是在VSLAM应用中使用CNN。一般来说,语义VSLAM方法包含以下四个主要组成部分[43]:
跟踪模块:它使用从连续视频帧中提取的二维特征点来估计相机姿态并构建三维地图点。相机姿态的计算和3D地图点的构建分别建立了定位和建图过程的基线;
局部建图模块:通过处理两个连续视频帧,创建了一个新的3D地图点,该点与BA模块一起用于改进相机姿态;
回环模块:通过将关键帧与提取的视觉特征进行比较并评估它们之间的相似性,进一步调整相机姿态并优化构建的地图;
非刚性上下文消隐 (Non-Rigid Context Culling,NRCC):使用NRCC的主要目标是从视频帧中过滤时间目标,以减少它们对定位和建图阶段的不利影响。其主要包含一个分割过程,用于分离帧中的各种不稳定实例,例如人。由于NRCC可以减少待处理的特征点的数量,因此简化了计算部分并获得了更鲁棒的性能。
因此,在VSLAM方法中利用语义信息可以改善姿态估计和地图重建的不确定性。然而,当前的挑战是如何正确使用提取的语义信息,而不影响计算成本。
基于主要目标的VSLAM方法目标一:多传感器处理
这一类别涵盖了使用各种传感器以更好地了解环境的VSLAM方法的范围。虽然一些技术仅依赖摄像机作为所使用的视觉传感器,但其他技术将各种传感器结合起来以提高算法的准确性。
1)使用多相机
一个相机重建运动物体的3D轨迹可能很困难,一些研究人员建议使用多相机。例如,CoSLAM是Zou和Tan[63]推出的一个VSLAM系统,它使用部署在不同平台上的单摄像机来重建鲁棒地图。CoSLAM结合了在动态环境中独立移动的多个摄像机,并根据它们重叠的视场重建地图。该过程通过混合相机内和相机间姿态估计和建图,使得在3D中重建动态点更容易。CoSLAM使用Kanade-Lucas-Tomasi(KLT)算法跟踪视觉特征,并在静态和动态环境中运行,包括室内和室外,其中相对位置和方向可能会随时间变化。这种方法的主要缺点是需要复杂的硬件来理解大量的摄像机输出,并通过增加更多的摄像机来增加计算成本。
对于具有挑战性的野外场景,Yang等人[64]开发了一种多摄像机协同全景视觉VSLAM方法。[64]赋予每个摄像机独立性,以提高VSLAM系统在挑战场景下的性能,例如遮挡和纹理稀疏。为了确定匹配范围,他们从摄像机的重叠视场中提取ORB特征。此外,[64]还使用了基于CNN的深度学习技术来识别回环检测的类似特征。在实验中,作者使用了由全景相机和集成导航系统生成的数据集。相关工作还有MultiCol-SLAM[65]。
2)使用多传感器
其他一些方法建议融合多传感器,并使用基于视觉和惯性的传感器输出以获得更好的性能。在这方面,Zhu等人[66]提出了一种称为CamVox的低成本间接激光雷达辅助VSLAM,并证明了其可靠的性能和准确性。他们的方法使用ORB-SLAM 2.0,将Livox激光雷达作为高级深度传感器提供的独特功能与RGB-D相机的输出相结合。作者使用IMU来同步和校正非重复扫描位置。CamVox贡献是提出了一种在不受控制的环境中运行的自主激光雷达-相机校准方法。在机器人平台上的实测表明,CamVox在能够实时运行。
[67]提出了一种名为VIRAL(视觉-惯性-测距-激光雷达)SLAM的多模态系统,该系统将相机、激光雷达、IMU和UWB耦合起来。并提出了一种基于激光雷达点云构建的局部地图的视觉特征地图匹配边缘化方案。使用BRIEF算法提取和跟踪视觉分量。该框架还包含用于所使用的传感器的同步方案和触发器。VIRAL在NTU VIRAL[54]数据集上测试了他们的方法,该数据集包含相机、激光雷达、IMU和UWB传感器捕获的数据。然而,由于处理同步、多线程和传感器冲突解决,他们的方法计算量很大。其他相关算法Ultimate SLAM[68]、[69]可以参考相关论文。
目标二:姿态估计
这类方法的重点是如何使用各种算法改进VSLAM方法的姿态估计。
1)使用线/点数据
在这方面,Zhou等人[70]建议使用建筑结构线段作为有用的特征来确定相机姿态。结构线与主导方向相关联,并编码全局方向信息,从而改善预测轨迹。方法名为StructSLAM,是一种6自由度(DoF)VSLAM技术,可在低特征和无特征条件下运行。
Point and Line SLAM(PL-SLAM)是一种基于ORB-SLAM的VSLAM系统,针对非动态低纹理场景进行了优化,由Pumarola等人提出[71]。该系统同时融合线和点特征以改进姿态估计,并帮助在特征点较少的情况下运行。作者在生成的数据集和TUM RGB-D上测试了PL-SLAM。其方法的缺点是计算成本和必须使用其他几何图元(例如平面),以获得更稳健的精度。
Gomez-Ojeda等人[72]介绍了PL-SLAM(不同于Pumarola等人[71]中同名的框架),这是一种间接VSLAM技术,使用立体视觉相机中的点和线来重建看不见的地图。他们将从所有VSLAM模块中的点和线获得的片段与从其方法中的连续帧获取的视觉信息合并。使用ORB和线段检测器(LSD)算法,在PL-SLAM中的后续立体帧中检索和跟踪点和线段。作者在EuRoC和KITTI数据集上测试了PL-SLAM,在性能方面可能优于ORB-SLAM 2.0的立体版本。PL-SLAM的主要缺点之一是特征跟踪模块所需的计算时间以及考虑所有结构线以提取关于环境的信息。其他相关算法[73]可以参考论文。
2)使用额外特征
[74]中提出了Dual Quaternion Visual SLAM(DQV-SLAM),一种用于立体视觉相机的框架,该框架使用广泛的贝叶斯框架进行6-DoF姿态估计。为了防止非线性空间变换组的线性化,他们的方法使用渐进贝叶斯更新。对于地图的点云和光流,DQV-SLAM使用ORB功能在动态环境中实现可靠的数据关联。在KITTI和EuRoC数据集上,该方法可以可靠地得到预测结果。然而,它缺乏姿态随机建模的概率解释,并且对基于采样近似的滤波的计算要求很高。其他相关算法SPM-SLAM[75]可以参考论文。
3)深度学习
Bruno和Colombini[76]提出了LIFT-SLAM,它将基于深度学习的特征描述子与传统的基于几何的系统相结合。并扩展了ORB-SLAM系统的流水线,使用CNN从图像中提取特征,基于学习得到的特征提供更密集和精确的匹配。为了检测、描述和方向估计,LIFT-SLAM微调学习不变特征变换(LIFT)深度神经网络。使用KITTI和EuRoC MAV数据集的室内和室外实例进行的研究表明,LIFT-SLAM在精度方面优于传统的基于特征和基于深度学习的VSLAM系统。然而,该方法的缺点是其计算密集的流水线和未优化的CNN设计。
Naveed等人[77]提出了一种基于深度学习的VSLAM解决方案,该解决方案具有可靠且一致的模块,即使在极端转弯的路线上也是如此。他们的方法优于几种VSLAM,并使用了在真实模拟器上训练的深度强化学习网络。此外,它们还为主动VSLAM评估提供了基线,并可在实际室内和室外环境中适当推广。网络的路径规划器开发了理想的路径数据,由其基础系统ORB-SLAM接收。[77]制作了一个数据集,包含了挑战性和无纹理环境中的实际导航事件,以供评估。其他方法RWT-SLAM[78]可参考相关论文。
目标三:现实世界可行性
这类方法的主要目标是在各种环境中使用,并在多种场景下工作。论文注意到,本节中的引用与从环境中提取的语义信息高度集成,并展示了端到端的VSLAM应用。
1)动态环境
在这方面,Yu等人[61]引入了一个名为DS-SLAM的VSLAM系统,该系统可用于动态上下文,并为地图构建提供语义级信息。该系统基于ORB-SLAM 2.0,包含五个线程:跟踪、语义分割、局部建图、回环和密集语义图构建。为了在姿态估计过程之前排除动态目标并提高定位精度,DS-SLAM使用了实时语义分割网络SegNet的光流算法[80]。DS-SLAM已经在现实世界环境中、RGB-D相机以及TUM RGB-D数据集上进行了测试。然而,尽管它的定位精度很高,但它仍面临语义分割限制和计算密集型特征的问题。
Semantic Optical Flow SLAM(SOF-SLAM)是基于ORB-SLAM 2.0的RGB-D模式构建的间接VSLAM系统[45]。他们的方法使用语义光流动态特征检测模块,该模块提取并跳过ORB特征提取提供的语义和几何信息中隐藏的变化特征。为了提供准确的相机姿态和环境信息,SOF-SLAM使用了SegNet的像素级语义分割模块。在极端动态的情况下,TUM RGB-D数据集和现实环境中的实验结果表明,SOF-SLAM的性能优于ORB-SLAM 2.0。然而,非静态特征识别的无效方法和仅依赖于两个连续帧是SOF-SLAM的缺点。其他相关算法[81]、[82]可以参考相关论文。
2)基于深度学习的解决方案
在Li等人[83]的另一个名为DXSLAM的工作中,深度学习用于找到类似于SuperPoints的关键点,并生成通用描述子和图像的关键点。他们训练先进的CNN HF-NET,通过从每个帧中提取局部和全局信息,生成基于帧和关键点的描述子。此外还使用离线Bag of Words(BoW)方法训练局部特征的视觉词汇表,以实现精确的回环识别。DXSLAM在不使用GPU的情况下实时运行,并且与当代CPU兼容。即使这些品质没有得到特别的处理,它也有很强的抵抗动态环境中动态变化的能力。DXSLAM已经在TUM RGB-D和OpenLORIS场景数据集以及室内和室外图像上进行了测试,可以获得比ORB-SLAM 2.0和DS-SLAM更准确的结果。然而,这种方法的主要缺点是复杂的特征提取架构和将深层特征合并到旧的SLAM框架中。
在另一种方法中,Li等人[84]开发了一种实时VSLAM技术,用于在复杂情况下基于深度学习提取特征点。该方法可以在GPU上运行,支持创建3D密集地图,是一个具有自监督功能的多任务特征提取CNN。CNN输出是固定长度为256的二进制代码串,这使得它可以被更传统的特征点检测器(如ORB)所取代。系统包括三个线程,用于在动态场景中实现可靠和及时的性能:跟踪、局部建图和回环。支持使用ORB-SLAM 2.0作为基线的单目和RGB-D相机的系统。其他相关算法[85]可以参考相关论文。
3)使用人工地标
Medina Carnicer等人提出的一种称为UcoSLAM[86]的技术,通过结合自然和人造地标,并使用基准标记自动计算周围环境的比例,从而优于传统的VSLAM系统。UcoSLAM的主要驱动力是对抗自然地标的不稳定性、重复性和较差的跟踪质量。它可以在没有标签或特征的环境中运行,因为它只能在关键点、地标和混合模式下运行。为了定位地图对应关系,优化重投影误差,并在跟踪失败时重新定位,UcoSLAM具有跟踪模式。此外,它有一个基于地标的回环检测系统,可以使用任何描述子描述特征,包括ORB和FAST。尽管UcoSLAM有很多优点,但系统在多线程中执行,这使得它成为一种耗时的方法。
4)广泛的设置
用于动态室内和室外环境的另一种VSLAM策略是DMS-SLAM[87],它支持单目、立体和RGB-D视觉传感器。该系统采用滑动窗口和基于网格的运动统计(GMS)[88]特征匹配方法来找到静态特征位置。DMS-SLAM以ORB-SLAM 2.0系统为基础,跟踪ORB算法识别的静态特征。作者在TUM RGB-D和KITTI数据集上测试了他们建议的方法,并优于先进的的VSLAM算法。此外,由于在跟踪步骤中删除了动态目标上的特征点,DMS-SLAM比原始的ORB-SLAM 2.0执行得更快。尽管有上述优点,但DMS-SLAM在纹理少、运动快和高度动态环境的情况下会遇到困难。
目标四:资源限制
在另一类中,与其他标准设备相比,一些VSLAM方法是为计算资源有限的设备构建的。例如,为移动设备和具有嵌入式系统的机器人设计的VSLAM系统就属于这一类别。
1)处理能力有限的设备
在这方面,edgeSLAM是Xu等人提出的用于移动和资源受限设备的实时、边缘辅助语义VSLAM系统[89]。它采用了一系列细粒度模块,由边缘服务器和相关移动设备使用,而不需要多线程。edgeSLAM中还包括基于Mask-RCNN技术的语义分割模块,以改进分割和目标跟踪。作者在一个边缘服务器上安装了一些商用移动设备,如手机和开发板。通过重用目标分割的结果,他们通过使系统参数适应不同的网络带宽和延迟情况来避免重复处理。EdgeSLAM已在TUM RGB-D、KITTI的单目视觉实例和为实验设置创建的数据集上进行了评估。
对于立体相机设置,Grisetti等人[90]提出了一种轻量级的基于特征的VSLAM框架,名为ProSLAM,其结果与先进技术不相上下。四个模块组成了他们的方法:triangulation模块,它创建3D点和相关的特征描述子;增量运动估计模块,其处理两个帧以确定当前位置;创建局部地图的地图管理模块;以及基于局部地图的相似性更新世界地图的重新定位模块。ProSLAM使用单个线程检索点的3D位置,并利用少量已知库来创建简单的系统。根据KITTI和EuRoC数据集的实验,他们的方法可以获得稳健的结果。然而,它在旋转估计方面表现出不足,并且不包含任何光束法平差模块。其他相关算法VPS-SLAM[91]、[94]可以参考相关论文。
2)计算迁移
Ben Ali等人[96]建议使用边缘计算将资源密集型操作迁移到云上,并减少机器人的计算负担。他们在其间接框架Edge-SLAM中修改了ORB-SLAM 2.0的架构,在机器人上维护了跟踪模块,并将剩余部分委派给边缘。通过在机器人和边缘设备之间拆分VSLAM流水线,系统可以维护局部和全局地图。在可用资源较少的情况下,它们仍然可以在不牺牲准确性的情况下正确运行。[96]使用TUM RGB-D数据集和两个不同的移动设备,基于RGB-D相机生成定制的室内环境数据集进行评估。然而,该方法的缺点之一是由于各种SLAM模块的解耦而导致架构的复杂性。另一个问题是,系统仅在短期设置下工作,在长期场景(例如,多天)中使用Edge SLAM将面临性能下降。
目标五:弹性化(Versatility)
VSLAM在这一类中的工作侧重于直接的开发、利用、适应和扩展。
在这方面,Sumikura等人[95]引入了OpenVSLAM,这是一个高度适应性的开源VSLAM框架,旨在快速开发并被其他第三方程序调用。他们基于特征的方法与多种相机类型兼容,包括单目、立体和RGB-D,并且可以存储或重用重建的地图以供以后使用。由于其强大的ORB特征提取模块,OpenVSLAM在跟踪精度和效率方面优于ORB-SLAM和ORB-SLAM2.0。然而,由于担心代码相似性侵犯了ORB-SLAM 2.0的权利,该系统的开源代码已经停止。
为了弥合实时能力、准确性和弹性之间的差距,Ferrera等人[97]开发了OV2SLAM,可用于单目和立体视觉相机。通过将特征提取限制在关键帧中,并通过消除测光误差在后续帧中对其进行监控,他们的方法减少了计算量。从这个意义上讲,OV2SLAM是一种混合策略,它结合了VSLAM直接和间接方法的优点。在室内和室外实验中,使用包括EuRoC、KITTI和TartanAir在内的著名基准数据集,证明OV2SLAM在性能和准确性方面优于几种流行技术。其他相关算法DROID-SLAM[98]、iRotate[99]可以参考相关论文。
目标六:视觉里程计(Visual Odometry)
此类方法旨在以尽可能高的精度确定机器人的位置和方向。
1)深度神经网络
在这方面,[100]中提出了Dynamic-SLAM框架,该框架利用深度学习进行准确的姿态预测和适当的环境理解。作为优化VO的语义级模块的一部分,作者使用CNN来识别环境中的运动目标,这有助于他们降低由不正确的特征匹配带来的姿态估计误差。此外,Dynamic-SLAM使用选择性跟踪模块来忽略场景中的动态位置,并使用缺失特征校正算法来实现相邻帧中的速度不变性。尽管结果很好,但由于定义的语义类数量有限,该系统需要巨大的计算成本,并面临动态/静态目标误分类的风险。
Bloesch等人[101]提出了Code-SLAM,它提供了场景几何体的浓缩和密集表示。他们的VSLAM系统是PTAM的增强版[14],该系统仅与单目摄像机一起工作。其将强度图像划分为卷积特征,并使用根据SceneNet RGB-D数据集的强度图像训练的CNN将其馈送到深度自编码器。EuRoC数据集的实验结果表明,其结果在准确性和性能方面很有希望。其他相关算法DeepVO[102]、[103]、DeepFactors[104]可以参考相关论文。
2)深度相邻帧处理
在另一项工作中,[106]的作者通过减少用于摄像机运动检测的两幅图像之间的光度和几何误差,为RGB-D摄像机开发了一种实时密集SLAM方法,改进了他们先前的方法[107]。他们基于关键帧的解决方案扩展了Pose SLAM[108],它只保留非冗余姿态,以生成紧凑的地图,增加了密集的视觉里程计特征,并有效地利用来自相机帧的信息进行可靠的相机运动估计。作者还采用了一种基于熵的技术来度量关键帧的相似性,用于回环检测和漂移避免。然而,他们的方法仍然需要在回环检测和关键帧选择质量方面进行工作。
在Li等人[109]介绍的另一项工作中,使用称为DP-SLAM的基于特征的VSLAM方法实现实时动态目标移除。该方法使用基于从运动目标导出的关键点的似然性的贝叶斯概率传播模型。使用移动概率传播算法和迭代概率更新,DP-SLAM可以克服几何约束和语义数据的变化。它与ORB-SLAM 2.0集成,并在TUM RGB-D数据集上进行了测试。尽管结果准确,但由于迭代概率更新模块,该系统仅在稀疏VSLAM中工作,并且面临较高的计算成本。其他相关算法[110]可以参考相关论文。
3)各种特征处理
此类别中的另一种方法是Li等人[111]提出的基于文本的VSLAM系统,称为TextSLAM。它将使用FAST角点检测技术从场景中检索的文本项合并到SLAM管道中。文本包括各种纹理、图案和语义,这使得使用它们创建高质量3D文本地图的方法更加有效。TextSLAM使用文本作为可靠的视觉基准标记,在找到文本的第一帧之后对其进行参数化,然后将3D文本目标投影到目标图像上以再次定位。他们还提出了一种新的三变量参数化技术,用于初始化瞬时文本特征。使用单目相机和作者创建的数据集,在室内和室外环境中进行了实验,结果非常准确。在无文本环境中操作、解释短字母以及需要存储大量文本词典是TextSLAM的三大基本挑战。其他相关算法[43]、[112]可以参考相关论文。
确定当前趋势统计数字
关于上述各方面调查论文的分类,论文将图4中的处理数据可视化,以找出VSLAM的当前趋势。在子图“a”中,可以看到,大多数拟议的VSLAM系统都是独立的应用程序,它们使用视觉传感器从头开始执行定位和建图的整个过程。虽然ORB-SLAM2.0和ORB-SLAM是用于构建新框架的其他基础平台,但只有很少的方法基于其他VSLAM系统,如PTAM和PoseSLAM。此外,就VSLAM应用程序的目标而言,子图“b”中最重要的是改进视觉里程计模块。因此,大多数最近的VSLAM都试图解决当前算法在确定机器人位置和方向方面的问题。姿态估计和真实世界生存能力是提出新的VSLAM论文的进一步基本目标。关于调查论文中用于评估的数据集,子图“c”说明了大多数工作都在TUM RGB-D数据集上进行了测试。此外,许多研究人员倾向于对他们生成的数据集进行实验。我们可以假设生成数据集的主要动机是展示VSLAM方法在真实场景中的工作方式,以及它是否可以作为端到端应用程序使用。EuRoC MAV和KITTI分别是VSLAM工作中下一个流行的评估数据集。从子图“d”中提取的另一个有趣信息涉及使用VSLAM系统时使用语义数据的影响。我们可以看到,大多数论文在处理环境时不包括语义数据。论文假设不使用语义数据的原因是:
在许多情况下,训练识别目标并将其用于语义分割的模型的计算成本相当大,这可能会增加处理时间;
大多数基于几何的VSLAM算法被设计在即插即用的设备上工作,因此它们可以用最少的努力使用相机数据进行定位和建图;
从场景中提取的不正确信息也会导致过程中增加更多的噪声。
当考虑环境时,我们可以在子图“e”中看到,一半以上的方法也可以在具有挑战性的动态环境中工作,而其余的系统只关注没有动态变化的环境。此外,在子图“f”中,大多数方法都适用于“室内环境”或“室内和室外环境”,而其余的论文仅在室外条件下进行了测试。应当指出的是,如果在其他情况下采用的方法只能在具有限制性假设的特定情况下工作,则可能不会产生相同的准确性。这是一些方法只集中于特定情况的主要原因之一。
分析当前趋势
本文回顾了最先进的视觉SLAM方法,这些方法吸引了大量关注,并展示了它们在该领域的主要贡献。尽管在过去几年中,VSLAM系统的各个模块都有了广泛的可靠解决方案和改进,但仍有许多高潜力领域和未解决的问题需要在这些领域进行研究,从而在SLAM的未来发展中采用更稳健的方法。鉴于视觉SLAM方法的广泛性,论文介绍以下开放的研究方向:
深度学习:深度神经网络在各种应用中显示出令人鼓舞的结果,包括VSLAM[15],使其成为多个研究领域的一个重要趋势。由于其学习能力,这些体系结构已显示出相当大的潜力,可以用作可靠的特征提取器,以解决VO和回环检测中的不同问题。CNN可以帮助VSLAM进行精确的目标检测和语义分割,并且在正确识别人工设计的特征方面可以优于传统的特征提取和匹配算法。必须指出的是,由于基于深度学习的方法是在具有大量多样数据和有限目标类的数据集上进行训练的,因此总是存在对动态点进行错误分类并导致错误分割的风险。因此,它可能导致较低的分割精度和姿态估计误差。
信息检索和计算成本权衡:通常情况下,处理成本和场景中的信息量应始终保持平衡。从这个角度来看,密集地图允许VSLAM应用程序记录高维完整场景信息,但实时这样做将需要计算量。另一方面,稀疏表示由于其较低的计算成本,将无法捕获所有需要的信息。还应注意的是,实时性能与摄像机的帧速率直接相关,峰值处理时间的帧丢失会对VSLAM系统的性能产生负面影响,而与算法性能无关。此外,VSLAM通常利用紧耦合的模块,修改一个模块可能会对其他模块产生不利影响,这使得平衡任务更具挑战性。
语义分割:在创建环境地图的同时提供语义信息可以为机器人带来非常有用的信息。识别摄像机视场中的目标(例如门、窗、人等)是当前和未来VSLAM工作中的一个热门话题,因为语义信息可用于姿态估计、轨迹规划和回环检测模块。随着目标检测和跟踪算法的广泛使用,语义VSLAM无疑将成为该领域未来的解决方案之一。回环算法:任何SLAM系统中的关键问题之一是漂移问题,以及由于累积的定位误差而导致的特征轨迹丢失。在VSLAM系统中,检测漂移和回环以识别先前访问过的位置会导致计算延迟和高成本[89]。主要原因是回环检测的复杂度随着重建地图的大小而增加。此外,组合从不同地点收集的地图数据并细化估计姿态是非常复杂的任务。因此,回环检测模块的优化和平衡具有巨大的改进空间。检测回环的常见方法之一是通过基于局部特征训练视觉词汇表,然后将其聚合来改进图像检索。
在具有挑战性的场景中工作:在没有纹理的环境中工作,很少有显著特征点,这通常会导致机器人的位置和方向出现漂移误差。作为VSLAM的主要挑战之一,此错误可能导致系统故障。因此,在基于特征的方法中考虑互补的场景理解方法,例如目标检测或线条特征,将是一个热门话题。
结论
本文介绍了一系列SLAM算法,其中从摄像机采集的视觉数据起着重要作用。论文根据VSLAM系统方法的各种特点,如实验环境、新颖领域、目标检测和跟踪算法、语义级生存能力、性能等,对其最近的工作进行了分类。论文还根据作者的主张、未来版本的改进以及其他相关方法中解决的问题,回顾了相关算法的关键贡献以及现有的缺陷和挑战。本文的另一个贡献是讨论了VSLAM系统的当前趋势以及研究人员将更多研究的现有开放问题。