GSLAM: A General SLAM Framework and Benchmark
开源地址
摘要: SLAM技术最近取得了许多成功,并吸引了高科技公司的关注。然而,如何同一现有或新兴算法的界面,一级有效地进行关于速度、稳健性和可移植性的基准测试仍然是问题。本文,提出了一个名为GSLAM的新型SLAM平台,它不仅提供评估功能,还为研究人员提供了快速开发自己的SLAM系统的有用工具。GSLAM的核心贡献是一个通用的、跨平台的、完全开源的SLAM接口,旨在处理输入数据集、SLAM实现、可视化和应用程序的统一框架中的交互。通过这个平台,用户可以以插件形式实现自己的功能,以提高SLAM的性能,并进一步将SLAM的应用推向实际应用。
主要贡献:
- 本文提出了一个通用的、跨平台的、完全开源的SLAM平台,旨在用于研究和商业用途,超越了以往的基准测试系统。SLAM接口由多个轻量级、无依赖的头文件组成,这使得在统一框架中以插件形式与不同数据集、SLAM算法和应用进行交互变得容易。此外,还提供了JavaScript和Python,以支持基于Web和深度学习的SLAM应用。
- 提出的GSLAM平台中,引入了三个经过优化的模块作为实用工具类,包括Estimator、Optimizer和Vocabulary。Estimator旨在提供一组封闭形式的求解器,涵盖所有情况,具有强大的样本一致性(RANSAC);Optimizer旨在提供流行的非线性SLM问题的统一接口;Vocabulary旨在提供高效且可移植的词袋实现,用于多线程和SIMD优化的地点识别。
- 受益于上述接口,该工作在一个统一的框架中实现并评估了现有数据集、SLAM实现和可视化应用的插件,未来出现的基准测试或应用也可以轻松地进行进一步集成。
通用框架:
该框架被设计为与各种不同类型的SLAM实现兼容,包括但不限于单目、双目、RGBD和多摄像头视觉惯性里程计与多传感器融合。现代深度学习平台和开发人员更喜欢使用Python进行编码,因此GSLAM提供了Python绑定,开发人员能够使用Python实现SLAM,并使用GSLAM调用它,或者使用Python调用基于C++的SLAM实现。此外,还支持JavaScript用于基于Web的用途。
- 处理SLAM实现的输入。运行SLAM时,需要传感器数据和一些参数。对于GSLAM,使用Svar类进行参数配置和命令处理。所有SLAM实现所需的传感器数据都由Dataset实现提供,并使用Messenger进行传输。GSLAM实现了几个流行的视觉SLAM数据集,用于可以自由实现自己的数据集插件。
- SLAM实现。GSLAM将每个实现视为插件库。开发人员可以非常容易地基于GSLAM接口和实用类设计一个SLAM实现。开发人员还可以使用接口包装实现,而无需引入额外的依赖。用户可以专注于核心算法的开发,而无需关心SLAM实现外部需要处理的输入和输出。
- 可视化部分或使用SLAM结果的应用。在SLAM实现处理输入帧后,用户可能希望展示或利用结果。为了通用性,SLAM结果应以标准格式发布。默认情况下,GSLAM使用Qt进行可视化,但用户可以自由实现自定义的可视化工具,并添加应用插件,如评估应用程序。
基础接口: SLAM接口通常使用的一些数据结构包括参数设置/读取、图像格式、姿态变换、相机模型和地图数据结构。具体内容可以阅读原文
SLAM实现工具:
-
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词汇进行了仅包含头文件的实现,具有以下特点:
(1)去除了对OpenCV的依赖,所有函数都在一个仅依赖C++11的头文件中实现。
(2)结合DBoW2/3和FBoW的优点,具有极快的速度和易于使用。提供了类似于DBoW3的接口,并使用SSE和AVX指令加速了二进制和浮点描述子。
(3)改进了内存使用和加速了加载、保存或训练词汇以及从图像特征到BoW向量转换的速度。
表3展示了四个词袋库的比较。在实验中,每个父节点有10个子节点,ORB特征检测使用ORB-SLAM,SIFT检测使用SiftGPU。实现结果中使用了ORB词汇,分别有4级和6级,以及一个SIFT词汇。FBoW和GSLAM都使用多线程进行词汇训练。GSLAM的实现在几乎所有项目中的表现都优于其他实现,包括加载和保存词汇、训练新词汇、将描述符列表转换为用于地点识别的BoW向量和用于快速特征匹配的特征向量。此外GSLAM实现使用更少的内存,并分配了更少的动态内存块,因为DBoW2需要大量内存的主要原因是碎片问题。
SLAM评估基准:
-
Dataset
运行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提供了一个内置插件和一些脚本工具,用于计算性能和精度评估。
计算性能评估包括内存使用、分配内存块数量、CPU使用率以及统计每帧所用的时间,如图3所示。结果表明,SVO使用的内存和CPU资源最少,并获得了最快的速度。而且由于SVO只是一个视觉里程计,在实现内部只维护了一个本地地图,所以成本保持稳定。DSO分配的内存块数较少,但消耗了100MB以上的内存,且增长较慢。DSO的一个问题是当帧数低于500时,处理时间会急剧增加,此外,关键帧的处理时间甚至更长。ORB-SLAM使用了最多的CPU资源,计算时间稳定,但内存使用快速增加,并且它分配和释放了大量的内存块,因为其BA使用了G2O库,没有使用增量优化方法。
图4展示了里程计轨迹的评估结果。如图所示,SVO速度较快,但漂移较大,而ORBSLAM在绝对姿态误差(APE)方面达到了最高的精度。由于综合评估是一个可插拔的插件应用程序,可以重新实施更多的评估指标,例如点云的精度。