没有合适的资源?快使用搜索试试~ 我知道了~
GSLAM:一个通用的SLAM框架和基准测试
11100GSLAM:一个通用的SLAM框架和基准测试0赵勇 � ,1 ,徐世彪 † ,2 ,卜树辉 1 ,姜洪凯 1 ,韩鹏程 101 西北工业大学 2 中国科学院自动化研究所,国家实验室0摘要0SLAM技术最近取得了许多成功,并引起了高科技公司的关注。然而,如何统一现有或新兴算法的接口,并有效地进行速度、鲁棒性和可移植性的基准测试仍然是问题。在本文中,我们提出了一个名为GSLAM的新型SLAM平台,它不仅提供评估功能,还为研究人员提供了有用的工具包,以快速开发他们的SLAM系统。我们的核心贡献是一个通用、跨平台和完全开源的SLAM接口,旨在处理与输入数据集、SLAM实现、可视化和应用程序的交互。通过这个平台,用户可以使用插件形式实现自己的功能,以获得更好的性能,并进一步推动SLAM的实际应用。01. 引言0同时定位与地图构建(SLAM)是计算机视觉和机器人领域的热门研究课题,自20世纪80年代以来已经有几十年的历史。SLAM为许多需要实时导航的应用提供了基本功能,如机器人、无人机、自动驾驶以及虚拟和增强现实。近年来,SLAM技术发展迅速,提出了各种SLAM系统,包括单目SLAM系统(基于关键点的[12,37,49]、直接法[15,16,53]和半直接法[22,23])、多传感器SLAM(RGBD[7,36,68]、立体[17,23,51]和惯性辅助方法[45,56,66])以及基于学习的SLAM(有监督[6,55,67]和无监督方法[71,72])。0� 赵勇和徐世彪为本文的共同第一作者。†徐世彪和卜树辉为共同通讯作者(电子邮件:shibiao.xu@nlpr.ia.ac.cn;bushuhui@nwpu.edu.cn)。0然而,随着快速发展的SLAM技术,几乎所有的研究者都专注于他们自己的SLAM系统的理论和实现,这使得交流思想变得困难,也不容易将实现移植到其他系统。这阻碍了SLAM系统在各个行业领域的快速应用。目前,存在许多SLAM系统的实现,如何有效地进行速度、鲁棒性和可移植性的基准测试仍然是一个问题。最近,Nardi等人[52]和Bodin等人[4]提出了统一的SLAM基准测试系统,用于进行各种SLAM系统之间的定量、可比较和可验证的实验研究,以研究各种SLAM系统之间的权衡。通过这些系统,可以使用数据集和度量评估模块轻松进行评估实验。由于这些系统只提供评估基准,我们认为可以建立一个平台,为SLAM算法的整个生命周期提供服务,包括开发、评估和应用阶段。此外,基于深度学习的SLAM在近年来取得了显著进展,有必要创建一个平台,不仅支持C++,还支持Python,以更好地支持几何和基于深度学习的SLAM系统的集成。因此,在本文中,我们介绍了一个新颖的SLAM平台,不仅提供评估功能,还为研究人员提供有用的工具包,以快速开发他们自己的SLAM系统。通过这个平台,常用的功能以插件形式提供,因此用户可以直接使用它们或创建自己的功能以获得更好的性能。我们希望这个平台能进一步推动SLAM系统的实际应用。总之,本文的主要贡献如下:01.我们提供了一个通用、跨平台和完全开源的SLAM平台,适用于研究和商业用途,超越了以前的基准。SLAM接口由几个轻量级、无依赖的头文件组成,易于与不同的数据集、S-交互。1https://github.com/zdzhaoyong/GSLAM11110在一个统一的框架中以插件形式提供了多种SLAM算法和应用。此外,还提供了基于JavaScript和Python的基于Web和深度学习的SLAM应用。02.我们在提出的GSLAM平台中引入了三个优化模块,包括Estimator、Optimizer和Vocabulary。Estimator旨在提供一组包含鲁棒采样一致性(RANSAC)的闭合形式求解器的集合,以涵盖所有有趣的情况;Optimizer旨在为流行的非线性SLAM问题提供统一的接口;Vocabulary旨在提供一种高效且可移植的用于多线程和SIMD优化的词袋实现,用于地点识别。03.在上述接口的基础上,我们在一个统一的框架中实现和评估了现有数据集、SLAM实现和可视化应用的插件,并且未来可以很容易地进一步集成新的基准或应用。0GSLAM的源代码和文档wiki已发布,可以在我们的GitHub上找到1。02. 相关工作0在本节中,我们将简要回顾SLAM技术,包括方法、系统和基准。02.1. 同时定位与地图构建0SLAM技术在未知环境中构建地图,并将传感器在地图中定位,强调实时操作。早期的SLAM主要基于扩展卡尔曼滤波器(EKF)[12]。6自由度运动参数和3D地标以概率方式表示为单个状态向量。经典EKF的复杂度随着地标数量的增加而呈二次增长,限制了其可扩展性。近年来,SLAM技术发展迅速,提出了许多单目视觉SLAM系统,包括基于关键点的[12, 37, 49],直接的[15, 16, 53]和半直接的方法[22,23]。然而,单目SLAM系统缺乏尺度信息,无法处理纯旋转情况,因此,一些其他多传感器SLAM系统,包括RGBD[7,36,68],立体[17,23,51]和惯性辅助方法[45,56,66]正在研究中,以提高鲁棒性和精度。虽然已经提出了大量的SLAM算法,但很少有努力统一这些算法的接口,或者对它们的能力进行整体比较。这些SLAM算法的实现通常以独立的可执行文件形式发布,而不是作为库,并且通常不符合任何标准结构。0最近,与传统基于几何的方法相比,监督[6,55,67]和无监督[71,72]的基于深度学习的视觉里程计(VO)提出了新的思路,但仍然不容易进一步优化预测的姿态以获得多个关键帧的一致性。GSLAM可以帮助它们获得更好的全局一致性,更容易可视化或评估结果,并进一步应用于各种行业领域。02.2. 计算机视觉和机器人平台0在机器人和计算机视觉社区中,机器人中间件(例如ROS[57])提供了一种非常方便的节点之间的通信方式,受到大多数机器人研究人员的青睐。许多SLAM实现提供ROS包装器来订阅传感器数据和发布可视化结果。但它不能统一SLAM实现的输入和输出,并且很难进一步评估不同的SLAM系统。在本文中,GSLAM提供了一种替代选项,以取代SLAM实现内部的ROS,并保持兼容性。02.3. SLAM基准0目前存在几个SLAM基准,包括KITTI基准套件[28]、TUMRGB-D基准测试[62]和ICL-NUIMRGB-D基准数据集[32],它们仅提供评估功能。此外,SLAMBench2[4]将这些基准扩展为算法和数据集,要求用户使发布的实现与SLAMBench2兼容以进行评估,并且很难扩展到更多应用。与这些系统不同,提出的GSLAM平台提供了一个解决方案,它为SLAM实现的整个生命周期提供服务,从开发、评估到应用。我们为研究人员提供了有用的工具包,以快速开发他们自己的SLAM系统,并且进一步的可视化、评估和应用是基于统一的接口开发的。03. 通用SLAM框架0GSLAM的核心工作是提供一个通用的SLAM接口和框架。为了更好的体验,接口被设计为轻量级,由几个头文件组成,仅依赖于C++11标准库。基于接口,支持像JavaScript和Python这样的脚本语言。在本节中,介绍了GSLAM框架,并对几个基本接口类进行了简要介绍。03.1. 框架概述0GSLAM的框架如图1所示,一般来说,接口旨在处理与三个部分的交互:SO(3)SE(3)mult28.655.229.3-trans19.319.812.1-exp152.4249.299.2-log152.7194.0205.8-SIM(3)mult33.258.534.5-trans16.917.213.7-exp180.2286.8229.0-log202.5341.6303.6-2https://github.com/gflags/gflags11120图1:GSLAM的框架概述。01.SLAM实现的输入。运行SLAM时,需要传感器数据和一些参数。对于GSLAM,使用Svar类进行参数配置和命令处理。并且由数据集实现提供SLAM实现所需的所有传感器数据,并使用Messenger进行传输。GSLAM实现了几个流行的视觉SLAM数据集,用户可以自由地实现自己的数据集插件。02.SLAM实现。GSLAM将每个实现视为插件库。开发者可以很容易地基于GSLAM接口和实用类设计一个SLAM实现。开发者还可以使用接口包装实现,而无需导入额外的依赖。用户可以专注于核心算法的开发,而不必关心在SLAM实现之外应该处理的输入和输出。03.可视化部分或使用SLAM结果的应用程序。在SLAM实现处理输入帧之后,用户可能希望展示或利用结果。为了通用性,SLAM结果应以标准格式发布。默认情况下,GSLAM使用Qt进行可视化,但用户可以自由地实现自定义的可视化器,并添加应用程序插件,如评估应用程序。0该框架旨在与不同类型的SLAM实现兼容,包括但不限于单目、立体、RGBD和多相机视觉惯性测距仪与多传感器融合。现在它最适合基于特征的实现,同时也支持直接或深度学习的SLAM系统。由于现代深度学习平台和开发者更喜欢使用Python进行编码,GSLAM提供了Python绑定,因此开发者能够使用Python实现SLAM。0表1:与三种流行实现的变换比较。该表统计了在运行1e6次变换乘法、点变换、指数和对数时所用的时间,以毫秒为单位,运行在一台i7-6700 CPU上,运行64位Ubuntu。0方法 GSLAM Sophus TooN Ceres0多项式 14.9 34.3 17.8 159.10转换 15.4 17.2 14.5 90.40经验 80.7 98.4 106.8 -0对数 55.7 72.5 63.8 -0使用GSLAM调用GSLAM或使用Python调用基于C++的SLAM实现。此外,GSLAM还可以用于训练SLAM模块,其监督过程可以总结如下:1)使用传统的SLAM插件计算稀疏深度图和相机姿态;2)使用深度图和相机姿态作为监督来训练估计器。GSLAM还可以应用无监督的方法来联合学习深度和姿态估计器,只需要图像序列而不需要训练数据集的地面真实深度。然后,使用多视角几何约束作为损失函数来训练网络。03.2. 基本接口类0SLAM接口经常使用一些数据结构,包括参数设置/读取、图像格式、姿态变换、相机模型和地图数据结构。下面将对一些基本接口类进行简要介绍。03.2.1 参数设置0GSLAM使用一个小型的参数解析和参数设置类Svar,它只包含一个头文件,依赖于C++11,并具有以下特点:01.参数解析和配置加载,带有帮助信息。类似于流行的参数解析工具如Google gflags2,变量配置可以从参数、文件和系统环境中加载。用户还可以定义不同类型的参数,并提供介绍,这将显示在帮助中。2D-2DF8-Point[20]FundamentalF7-Point[33]FundamentalE5-Stewenius[61]EssentialE5-Nister[54]EssentialE5-Kneip[42]EssentialH4-Point[33]HomographyA3-Point[5]Affine2D2D-3DP4-EPnP[44]SE3P3-Gao[27]SE3P3-Kneip[41]SE3P3-GPnP[40]SE3P2-Kneip[38]SE3T2-Triangulate[39]Translation3D-3DA4-Point[5]Affine3DS3-Horn[34]SIM3P3-Plane[41]SE3� p′1�=� sRt0T1� � p1�.(1)R=exp(φ∧) = exp(θa∧)(2)=cos θI + (1 − cos θ)aaT + sin θaT .(3)111302.一个带有变量、函数和条件的小型脚本语言,使配置文件更加强大。03.线程安全的变量绑定和共享。建议将使用频率非常高的变量与指针或引用绑定在一起,这既提高了效率,又提供了便利。04.简单的函数定义和从C++或纯脚本调用。命令和函数之间的绑定有助于开发人员解耦文件依赖关系。05.支持树形结构表示,这意味着可以使用XML、JSON和YAML格式轻松加载或保存配置。03.2.2 进程内通信0由于ROS提供了一种非常方便的节点间通信方式,并受到大多数机器人学研究人员的青睐。受到ROS2消息架构的启发,GSLAM实现了一个类似的进程内通信实用类,名为Messenger。这提供了一种替代选项,用于替换SLAM实现中的ROS,并保持兼容性。由于进程内设计,Messenger能够在没有额外成本的情况下发布和订阅任何类。以下是更多功能的列表:01.接口保持了ROS的风格,对用户来说非常容易上手。并且支持所有ROS定义的消息,这意味着几乎不需要修改原始的ROS消息。02.由于没有序列化和数据传输,消息可以在没有延迟和额外成本的情况下发送。同时,有效载荷不限于ROS定义的消息,而是支持任何可复制的数据结构。03.源代码只是基于C++11的头文件,没有额外的依赖性,这使得它具有可移植性。04.API是线程安全的,并且在队列大小大于零时支持多线程条件通知。在发布者和订阅者连接之前,会对主题名称和RTTI数据结构进行检查,以确保正确的调用。03.2.3 3D变换0旋转、刚性和相似性是SLAM研究中最常用的三种变换之一。点 p = ( x, y, z ) T 的相似变换通常使用一个 4 × 4的齐次变换矩阵或将这样一个矩阵分解为旋转和平移分量:0表2:GSLAM Estimator实现的算法。0算法参考模型0这里,R ∈ R 3 × 3 代表旋转矩阵,它是 SO (3)李群的一个成员,具有三个单位方向轴。t ∈ R 3表示平移,s 是缩放因子。相似变换矩阵属于 SIM (3)群。当缩放因子 s = 1 时,变换变为刚性变换,属于 SE (3)群。对于旋转部分,有几种表示方法可供选择,包括矩阵、欧拉角、单位四元数和李代数 so(3)。对于给定的变换,我们可以使用其中任何一种表示,并且可以相互转换。然而,当考虑多个变换和流形优化时,我们需要密切注意所选的表示。矩阵表示使用9个参数进行超参数化,而旋转只有3个自由度(DOF)。欧拉角表示使用3个变量,易于理解,但面临着众所周知的万向锁问题,并且不方便进行多个变换。单位四元数是执行多个变换的最有效方法,而李代数是执行流形优化的常用表示。旋转矩阵 R的矩阵表示是根据李代数 so (3) 中的指数函数从 φ ∈ R 3计算得出的:0其中,a 是旋转轴,θ 是旋转角度。 φ ∧0是 φ 的反对称矩阵。x = Kpc =fxcxfycy1 pc(4)ORB-467.3us47.2ms7.1ms72.3usORB-67.2ms6.8 s1.1 s9.5msSIFT-41.0ms436.1ms5.1ms1.1msORB-4437.9us40.4ms1.7ms553.1usORB-634.4ms4.8 s632.4ms20.6msSIFT-44.4ms437.6ms6.7ms2.7msORB-47.6 s24.8 s23.6 s8.5 sORB-6230.5 s1.1Ks911.4 s270.4 sSIFT-423.5 s327.7 s299.0 s18.7 sORB-4615.5us2.1ms1.9ms862.4usORB-6723.7us6.0ms4.9ms1.2msSIFT-41.1ms10.3ms9.2ms11.5msORB-40.44MB2.5MB2.5MB0.45MBORB-644.4MB 247.1MB 246.5MB 45.3MBSIFT-45.8MB7.8MB7.8MB5.8MB4.1. Estimator11140类似地,刚性和相似变换的李代数 se (3) 和 sim (3)被定义。GSLAM使用四元数来表示旋转分量,并提供了将一种表示转换为其他表示的函数。表1展示了我们的变换实现与另外三种流行实现Sophus、TooN和Ceres的比较。由于Ceres的实现使用角轴表示,因此不需要旋转指数和对数。正如表格所示,GSLAM的实现由于使用了四元数和更好的优化而表现出色,而TooN则利用矩阵实现,在点变换方面表现出色。03.2.4 图像格式0图像数据存储和传输是视觉SLAM中最重要的功能之一。为了提高效率和便利性,GSLAM使用了与cv::Mat兼容的数据结构GImage。它具有智能指针计数器,可以安全地释放内存,并且易于在不进行内存复制的情况下传输。数据指针对齐,以便更容易进行单指令多数据(SIMD)加速。用户可以在GImage和cv::Mat之间无缝、安全地进行转换,而无需进行内存复制。03.2.5 相机模型0相机模型应该被定义为将相机坐标中的3D点 p c投影到2D像素 x上的过程。最流行的相机模型之一是针孔模型,其中投影可以通过乘以一个称为内参矩阵 K 的矩阵来表示:0由于SLAM的图像可能由于制造不完美或使用鱼眼或全景相机而包含径向和切向畸变,因此提出了不同的相机模型来描述投影。GSLAM提供了包括OpenCV [24](ORBSLAM[51]使用的)、ATAN(PTAM[37]使用的)和O-CamCalib [59](MultiCol-SLAM[65]使用的)在内的实现。用户也可以轻松继承该类并实现其他相机模型,如Kannala-Brandt[35]和Equirectangular全景模型。03.2.6 地图数据结构0对于SLAM实现,其目标是定位实时姿态并生成地图。GSLAM建议使用一个统一的地图数据结构,由多个地图帧和地图点组成。这种数据结构适用于大多数SLAM系统。0表3:加载、保存和训练相同词汇的四种BoW实现的比较,以及内存使用统计数据。实验在一台搭载i7-6700CPU、16GBRAM、64位Ubuntu的计算机上进行。使用DroneMap[8]数据集中的400和10k张图像来训练模型,分别使用4和6个级别。0实现 我们的 DBoW2 DBoW3 FBoW0加载0保存0训练0传输0内存0已有的视觉SLAM系统包括基于特征或直接方法。地图帧用于表示不同时间的位置状态,包括传感器捕获的各种信息或估计结果,包括IMU或GPS原始数据、深度信息和相机模型。它们之间的关系由SLAM实现估计,并形成一个位姿图。地图点用于表示由帧观察到的环境,通常由基于特征的方法使用。然而,地图点不仅可以表示关键点,还可以表示GCP、边缘线或3D对象。它们与地图帧的对应关系形成一个观察图,通常称为束图。04. SLAM实现工具0为了更容易实现SLAM系统,GSLAM提供了一些实用类。本节将简要介绍三个优化模块,分别是Estimator、Optimizer和Vocabulary。0纯几何计算仍然是一个需要稳健和准确的实时解决方案的基本问题。无论是经典的视觉SLAM算法[22, 37,49]还是现代的视觉惯性解决方案[45, 56,66]都依赖于几何视觉算法进行初始化、重定位和闭环。OpenCV [5]提供了几个几何算法。11150表4:目前已实现的内置数据集插件。0数据集 年份 环境 类型0KITTI [29] 2012 室外 多相机,IMU TUMRGBD [63]2012 室内 RGBD ICL [32] 2014 仿真 RGBD TUMMono[18] 2016 室内 单目 Euroc [9] 2016 室内 立体,IMUNPUDroneMap [8] 2016 空中 单目 TUMVI [60] 2018室内/室外 立体,IMU CVMono [5] - - 单目 ROS [57] -- -0GSLAM的估计器旨在提供一组闭合形式的求解器,涵盖所有有趣的情况,并使用鲁棒采样一致性(RANSAC)[19]方法。表2列出了估计器支持的算法。它们根据给定的观测分为三类。2D-2D匹配用于估计极线或单应约束,并可以从中分解出相对位姿。2D-3D对应用于估计单目或多相机系统的中心或非中心绝对位姿,这是著名的PnP问题。还支持3D几何函数,如平面拟合和估计两个点云的SIM3变换。大多数算法都是基于线性代数库Eigen实现的,它是一个仅包含头文件的库,适用于大多数平台。04.2. 优化器0非线性优化是现代几何SLAM系统的核心部分。由于Hessian矩阵的高维度和稀疏性,图结构被用于建模SLAM的复杂估计问题。提出了几个框架,包括Ceres [1]、G2O[43]和GT-SAM[13],用于解决一般的图优化问题。这些框架被不同的SLAM系统广泛使用。ORB-SLAM [49, 51]、SVO [22,23]使用G2O进行束调整和位姿图优化。OKVIS [45]、VINS[56]使用Ceres进行带有IMU因子的图优化,并使用滑动窗口来控制计算复杂度。Forster等人提出了一种基于SVO的视觉初始化方法[21],并使用GTSAM实现了后端。GSLAM的优化器旨在为大多数非线性SLAM问题提供统一的接口,如PnP求解器、束调整、位姿图优化。基于Ceres库实现了这些问题的通用插件。对于特定的问题,如束调整,还可以提供一些更高效的实现方法。0图2:ORBSLAM[49,51]可以在不同的数据集上运行,只需在GSLAM中修改一个参数,包括NPUDroneMap [8](左上)、Euroc [9](右上)、KITTI[29](左下)和TUMMono [18](右下)。0例如,PBA [70]和ICE-BA[46]也可以作为插件提供。通过优化器工具,开发人员可以访问具有统一接口的不同实现,特别是基于深度学习的SLAM系统。04.3. 词汇表0场所识别是SLAM重定位和循环检测中最重要的部分之一。词袋(BoW)方法在SLAM系统中广泛使用,因为它的效率和性能。FabMap [11][30]提出了一种基于外观识别场所的概率方法,被RSLAM[47]、LSD-SLAM[16]等系统使用。由于它使用像SIFT和SURF这样的浮点描述符,DBoW2[25]构建了一个用于训练和检测的词汇树,支持二进制和浮点描述符。Rafael提出了两个改进版本的DBoW2,命名为DBoW3和FBoW[48],简化了接口并加速了训练和加载速度。在ORB-SLAM[49]中,采用ORB [58]描述符并使用DBoW2进行循环检测[50]、重定位和快速匹配后,诸如ORB-SLAM2[51]、VINS-Mono [56]和LDSO[26]等多种SLAM系统使用DBoW3进行循环检测。它已成为实现SLAM系统场所识别的最流行工具。受到上述工作的启发,GSLAM使用仅头文件的方式实现了DBoW3词汇,并具有以下特点:01.移除了对OpenCV的依赖,所有功能都在一个单独的头文件中实现,仅依赖于C++11。02. 结合了DBoW2/3和F-BoW[48]的优点,这两者都非常快速和易于使用。提供了类似于DBoW3的接口,并且使用SSE和AVX指令加速了二进制和浮点描述符。11160图3:实现的一些SLAM和SfM插件的截图,包括直接DSO [15]、半直接视觉里程计SVO [22,23]、基于特征的ORBSLAM[49,51]、全局SfM系统TheiaSfM [64]和密集深度学习 [2]。03.我们改进了内存使用和加载、保存或训练词汇表和从图像特征到BoW向量的转换速度。0表3展示了这四种实现的比较。在实验中,每个父节点有10个子节点,ORB特征检测使用ORB-SLAM[51],SIFT检测使用SiftGPU[69]。结果中使用了两个具有4和6级的ORB词汇表和一个SIFT词汇表。FBoW和GSLAM都使用多线程进行词汇表训练。我们的实现在几乎所有项目中都表现出色,包括加载和保存词汇表、训练新词汇表、将描述符列表转换为用于地点识别的BoW向量和用于快速特征匹配的特征向量。此外,GSLAM的实现使用更少的内存,并分配更少的动态内存块,因为我们发现碎片化问题是DBoW2需要大量内存的主要原因。05. SLAM评估基准0现有的基准测试[29,63]需要用户下载测试数据集并上传结果进行精度评估,这无法统一运行环境并进行公平的性能比较。借助GSLAM的统一接口,SLAM系统的评估变得更加优雅。借助GSLAM的帮助,开发人员只需上传SLAM插件,就可以在具有固定资源的容器化环境中进行速度、计算成本和准确性等各种评估。在本节中,我们对速度、准确性、内存和CPU使用情况进行了三种代表性SLAM实现的评估,以展示不同SLAM实现插件的统一SLAM基准测试的可能性。05.1. 数据集0运行SLAM系统通常需要传感器数据流及其相关配置。为了让开发人员专注于核心SLAM插件的开发,GSLAM提供了一个标准的数据集接口,开发人员无需关心SLAM输入。通过不同的数据集插件提供在线传感器输入和离线数据,并动态加载正确的插件。0通过识别给定数据集路径后缀来确定数据集的实现。数据集实现应提供所有请求的传感器流及其相关配置,因此对于不同的数据集不需要额外的设置。所有不同的传感器流都通过第3.2.2节介绍的Messenger以标准的主题名称和数据格式进行发布。GSLAM已经实现了几个流行的视觉SLAM数据集插件,这些插件列在表4中。用户也可以很容易地基于头文件GSLAM核心实现一个数据集插件,并将其作为插件发布或与应用程序一起编译。此外,我们在图2中提供了ORBSLAM在不同数据集上只需修改一个参数即可运行的截图。05.2. SLAM实现0图3展示了一些开源SLAM和SfM插件在内置的Qt可视化器上运行的截图。我们的框架支持包括直接法、半直接法、基于特征的方法、甚至SfM方法和基于学习的密集深度估计在内的不同SLAM系统架构。需要提到的是,由于SVO、ORB-SLAM和TheiaSfM利用了第3.2.6节介绍的地图数据结构,因此可视化是自动支持的。DSO实现需要发布诸如点云、相机位姿、轨迹和位姿图等结果以进行可视化,就像基于ROS的实现一样。用户可以通过统一的框架访问不同的SLAM插件,并且依赖于C++、Python和Node-JS接口开发基于SLAM的应用程序非常方便。由于许多研究人员在开发中使用ROS,GSLAM还提供了ROS可视化器插件,以实现无缝传输ROS定义的消息,并且开发人员可以利用Rviz进行显示或继续开发其他基于ROS的应用程序。05.3. 评估0由于大多数基准测试只提供带有或不带有真值的数据集供用户自行评估。GSLAM提供了内置的插件和脚本工具,用于计算性能和准确性评估。使用TUMRGBD数据集的序列nostructure-texture-near-withloop来演示评估的执行情况。并采用了三个开源单目SLAM插件DSO、SVO和ORBSLAM进行以下实验。所有实验均在运行64位Ubuntu 16.04的i7-6700 CPU、GTX 1060 GPU和16GBRAM的计算机上进行。计算性能评估包括内存使用情况、malloc次数、CPU使用情况和每帧统计所用时间,如图4所示。结果表明,SVO使用的内存和CPU资源最少,并且速度最快。由于SVO是一个视觉里程计,只在实现内部维护了一个局部地图,因此所有成本保持稳定。DSO分配的内存块数较少,但消耗超过100MB的RAM,增长缓慢。DSO的一个问题是当帧数低于500时,处理时间会急剧增加,此外,关键帧的处理时间更长。ORBSLAM使用的CPU资源最多,计算时间稳定,但内存使用量增加快,并且它分配和释放了大量的内存块,因为捆绑调整使用了G2O库,没有使用增量优化方法。里程计轨迹评估如图5所示。可以看出,SVO速度更快,但漂移较大,而ORBSLAM在绝对姿态误差(APE)方面达到最佳精度。还提供了相对姿态误差(RPE),但由于参数的限制,无法提供完整的结果。(d) Frame duration(b) DSO(d) ORBSLAM11170(a) 内存使用情况0(b) 内存分配次数0(c) CPU使用情况0图4:三种单目实现集成在评估工具中的计算性能统计。内存使用情况和分配的内存块数的记录在SLAM应用程序加载后开始,并在每帧处理后更新。CPU使用情况在进程占用CPU时间增加一定值时更新。帧持续时间是指当前帧发布和处理之间的时间。0(d) 帧持续时间0(c) SVO01060 GPU和16GBRAM的计算机上进行。计算性能评估包括内存使用情况、malloc次数、CPU使用情况和每帧统计所用时间,如图4所示。结果表明,SVO使用的内存和CPU资源最少,并且速度最快。由于SVO是一个视觉里程计,只在实现内部维护了一个局部地图,因此所有成本保持稳定。DSO分配的内存块数较少,但消耗超过100MB的RAM,增长缓慢。DSO的一个问题是当帧数低于500时,处理时间会急剧增加,此外,关键帧的处理时间更长。ORBSLAM使用的CPU资源最多,计算时间稳定,但内存使用量增加快,并且它分配和释放了大量的内存块,因为捆绑调整使用了G2O库,没有使用增量优化方法。里程计轨迹评估如图5所示。可以看出,SVO速度更快,但漂移较大,而ORBSLAM在绝对姿态误差(APE)方面达到最佳精度。还提供了相对姿态误差(RPE),但由于参数的限制,无法提供完整的结果。0图5:里程计轨迹与地面真值对齐(左)和DSO、SVO和ORBSLAM的绝对姿态误差(APE)分布。使用实时发布的里程计轨迹而不是最终结果。06. 结论0在本文中,我们介绍了一个名为GSLAM的新颖通用SLAM平台,该平台提供了从开发、评估到应用的支持。常用的工具包以插件形式提供,用户还可以轻松开发自己的模块。为了使平台易于使用,我们使接口仅依赖于C++11。此外,还提供了Python和JavaScript接口,以更好地集成传统的和基于深度学习的SLAM或在Web上进行分布式处理。07. 致谢0本工作得到了中国国家自然科学基金委员会的支持,项目编号为61573284,61620106003,91860124,61671451,51875459和61971418。本工作还得到了中国国家重点研发计划的支持,项目编号为2018 YFB 2100602。[1] Sameer Agarwal, Keir Mierle, and Others.Ceres solver.http://ceres-solver.org.[2] Ibraheem Alhashim and Peter Wonka. High quality monoc-ular depth estimation via transfer learning.CoRR, ab-s/1812.11941, 2018.[3] Tim Bailey and Hugh Durrant-Whyte. Simultaneous local-ization and mapping (slam): Part ii. IEEE Robotics & Au-tomation Magazine, 13(3):108–117, 2006.[4] Bruno Bodin, Harry Wagstaff, Sajad Saecdi, Luigi Nardi,Emanuele Vespa, John Mawer, Andy Nisbet, Mikel Luj´an,Steve Furber, Andrew J Davison, et al. Slambench2: Multi-objective head-to-head benchmarking for visual slam.In2018 IEEE International Conference on Robotics and Au-tomation (ICRA), pages 1–8. IEEE, 2018.[5] Gary Bradski et al. The opencv library (2000). Dr. DobbsJournal of Software Tools, 2000.[6] Samarth Brahmbhatt, Jinwei Gu, Kihwan Kim, James Hays,and Jan Kautz. Mapnet: Geometry-aware learning of mapsfor camera localization. arXiv preprint arXiv:1712.03342,2017.[7] Shuhui Bu, Yong Zhao, Gang Wan, and Ke Li. Semi-directtracking and mapping with rgb-d camera for mav. Multime-dia Tools and Applications, 75:1–25, 2016.[8] Shuhui Bu, Yong Zhao, Gang Wan, and Zhenbao Liu.Map2dfusion: real-time incremental uav image mosaicingbased on monocular slam. In Intelligent Robots and Systems(IROS), 2016 IEEE/RSJ International Conference on, pages4564–4571. IEEE, 2016.[9] Michael Burri, Janosch Nikolic, Pascal Gohl, ThomasSchneider, Joern Rehder, Sammy Omari, Markus W Achte-lik, and Roland Siegwart. The euroc micro aerial vehicledatasets. The International Journal of Robotics Research,35(10):1157–1163, 2016.[10] Cesar Cadena, Luca Carlone, Henry Carrillo, Yasir Latif,Davide Scaramuzza, Jos´e Neira, Ian Reid, and John JLeonard. Past, present, and future of simultaneous localiza-tion and mapping: Toward the robust-perception age. IEEETransactions on Robotics, 32(6):1309–1332, 2016.[11] Mark Cummins and Paul Newman. Fab-map: Probabilisticlocalization and mapping in the space of appearance. TheInternational Journal of Robotics Research, 27(6):647–665,2008.[12] Andrew J Davison, Ian D Reid, Nicholas D Molton, andOlivier Stasse. Monoslam: Real-time single camera slam.IEEE transactions on pattern analysis and machine intelli-gence, 29(6):1052–1067, 2007.[13] Frank Dellaert. Factor graphs and gtsam: A hands-on intro-duction. Technical report, Georgia Institute of Technology,2012.[14] Hugh Durrant-Whyte and Tim Bailey. Simultaneous local-ization and mapping: part i
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功