多传感器融合SLAM|maplab:一个研究视觉-惯性建图和定位的开源框架(上)

发布于 2023-11-7 11:04
浏览
0收藏

多传感器融合SLAM|maplab:一个研究视觉-惯性建图和定位的开源框架(上) -汽车开发者社区

摘要

鲁棒且精确的视觉-惯性估计对机器人当今的很多挑战而言至关重要。如果能够在先验地图上定位并且获取精确且无漂移的位姿估计,则可以进一步推动这类系统的适用性。然而,目前大多数可用的解决方案要么着重于单段的用例上,要么缺少定位能力或者一个端到端的流程。我们相信,一个结合最先进的算法、可扩展的多段建图工具和灵活的用户交互界面的完整系统才能够成为高效的研究平台。


因此,本文提出maplab,它是一个开源的、面向研究的视觉-惯性建图框架用于处理和操作多段地图,其用C++编程。一方面,maplab能够被视作一个现成的视觉-惯性建图和定位系统。另一方面,maplab为研究社区提供一系列的多段建图工具,包括地图合并、视觉-惯性批量优化和回环检测。此外,它还包括一个在线前端,它能够创建视觉-惯性地图,并且还能在定位地图中跟踪全局无漂移的位姿。在本文中,我们提出系统框架、五个用例和公开数据集上对系统的评估。maplab的源码已开源以有益于机器人研究社区。

介绍

同时定位和建图系统不断增加的部署给机器人社区带来新的挑战。在室外和室内都能获得精确且无漂移的位姿估计已经成为很多机器人应用的关键要求,例如导航或者机械臂操纵。视觉-惯性估计系统日渐普及为提高其对视角和外观变化(日光、天气、季节等)或者快速运动的鲁棒性提供了强大的动力。目前的研究工作旨在使用多种工具来采集数据,构建更大规模的地图,覆盖各种视觉外观条件并且在较长时间内维护地图。研究这些和很多相关的挑战需要一个多段的端到端建图系统,该系统能够被容易地部署在各种机器人平台上,并且提供具有最先进性能的现成算法。同时,它需要提供进行研究所需的高度灵活性。


大多数公开可用的视觉和视觉-惯性SLAM框架要么着重于单段情况,要么仅提供大规模批量优化而没有在线前端。通常,它们是为特定流程设计的,没有将地图结构和算法分离。它们通常缺乏完整性,并且无法提供一个完整的工作流程以便在单个框架内创建、操作、与前段地图融合以及在前端中复用。这削弱了这类系统的灵活性,而这是快速发展和研究的关键。


本工作通过引入maplab来解决这个问题,它是一个用C++编写的开源视觉-惯性建图框架。与现有的视觉-惯性SLAM系统相比,maplab不仅提供工具用于创建视觉-惯性地图并且在该地图中进行定位,还提供地图维护和处理功能。这些功能作为一套便利访问控制台的工具被提供,它们能够通过插件系统轻易地扩展。这些工具涉及多段地图合并、稀疏化、回环、稠密重建和地图可视化。此外,maplab还包括ROVIOLI(带有定位集成的ROVIO),它是一个基于ROVIO的建图和定位前端,一个基于批量的视觉-惯性里程计系统。


Maplab已经进行广泛的实地测试,并且已部署在各种机器人平台上,包括微型飞行器、无人机、自动驾驶汽车、自动水下机器人和行走机器人。它还被作为搜索平台用于地图总结、地图质量评估、多段场景3D重建、拓扑建图、视觉定位和分散建图。


据我们所知,maplab是首个在单个系统内集成各种用例的视觉-惯性建图框架。maplab是免费、开源的并且已经被证明对各种研究和工业项目非常有用。我们坚信机器人社区将利用它作为现成的建图和定位解决方案,以及建图研究实验平台。本工作的贡献总结如下: 


1)它引入一种通用的视觉-惯性建图框架,该框架使用具有多段支持的基于特征的地图; 


2)它引入ROVIOLI,一种与定位系统紧耦合的鲁棒视觉-惯性估计器; 


3)它提出用于修改和维护地图的算法和数据结构示例,包括地图合并、稀疏化、位置识别和可视化; 


4)它突出系统的可扩展性,使得它非常适合用于研究;


5)它提供对框架选定组件的评估。

相关工作

目前有一些公开可用的视觉SLAM系统和视觉-惯性SLAM系统。最早的例子之一为PTAM,它是一种用于并行建图和跟踪局部地图的轻量级方法。其最初是为增强现实应用开发的,所以它既没有提供大规模场景定位,也没有提供任何离线处理工具。最近的例子包括OKVIS,一种基于关键帧的视觉-惯性估计器。该方法跟踪由最近获取的关键帧构建的局部地图,从而最小化局部漂移。类似地,半稠密和稠密里程计框架通过使用光度误差公式代替基于特征匹配来实现高质量的位姿估计。然而,这些方法都不支持相对于先前记录的地图进行全局定位。


ORB-SLAM和ORB-SLAM2是基于视觉的框架,它们提供了创建环境地图的可能性,然后在连续段场景中复用该地图,这与我们在此提出的工作流程密切相关。与这些系统相比,maplab提供了一个以控制台用户交互界面为中心的离线处理工具箱,它保证了高度灵活性并且允许用户添加他们自己的扩展工具或者修改正在处理的流程。我们考虑将多个建图段合并成一个单一、一致地图以及使用视觉-惯性最小二乘优化来完善该地图的能力,这是maplab一种与ORB-SLAM不同的核心能力。另一个值得强调的不同点为maplab的在线前端ROVIOLI。使用图像块内的像素强度来代替点特征即使存在运动模糊的情况下,也能保证高度的鲁棒性。


合并处理多个地图的能力已经在SLAM研究社区受到广泛的关注。Bosse等人的工作是最早以混合度量-拓扑方法合并多个地图到多段建图的工作之一。McDonald等人提出使用参考节点将来自多个建图段的位姿图拼接在一起。Churchill等人也提出尝试建立地图间的拓扑关联,其中地图被存储为经验的集合。相反,maplab存储一个统一的定位地图,允许使用经过慎重选择的特征子集,例如基于当前外观条件。


Snavely等人(Photo tourism: exploring photo collections in 3d)、Sweeney(Theia multiview geometry library: Tutorial & reference)和Moulon等人(Openmvg: Open multiple view geometry)提出的系统旨在从大量无序的图像中重建3D结构,该系统也包含类似于maplab的功能。它们通常提供大规模BA优化以及高级的图像和特征匹配技术的高效实现。然而,它们缺少处理惯性数据的算法,并且为了提供在线位姿估计,无法直接运行在机器人平台上。

maplab框架

从用户角度出发,框架由两个主要的部分组成:


i)在线VIO和定位前端ROVIOLI,它接收原始的视觉-惯性传感器数据。它输出(全局)位姿估计,并且能够被用于构建视觉-惯性地图。


ii)(离线)maplab控制台,它让用户以离线批量方式在地图上应用各种算法。其还能作为一个研究实验平台用于测试运行视觉-惯性数据的新算法。


maplab框架遵循可扩展和模块化设计。所有软件组件均用功能包的形式组织,该功能包使用catkin编译,catkin为ROS的官方编译系统。在整个框架中使用C++11标准,第三方依赖项受限于常用且良好维护的库,这些库包括用于线性代数的Eigen和用于非线性优化的Ceres。此外,该框架还提供ROS接口来方便地输入原始传感器数据并且输出结果,例如对于机器人系统上的简单部署输出位姿估计结果。该框架使用Rviz作为一个3d可视化工具,以便可视化在线建图算法的状态以及从maplab控制台离线处理的结果。


A.符号

多传感器融合SLAM|maplab:一个研究视觉-惯性建图和定位的开源框架(上) -汽车开发者社区

B.多段建图和定位的工作流程


maplab系统内建图和定位的典型工作流程如图2所示。

多传感器融合SLAM|maplab:一个研究视觉-惯性建图和定位的开源框架(上) -汽车开发者社区

通常,从多个建图段构建单个定位地图是有益的,以确保区域具有良好的空间和时间(即不同的外观)覆盖。使用VIO模式下的ROVIOLI在每段构建一个初始、开环的地图,并且存储到磁盘中。然后,使用各种(离线)工具对地图进行优化,这些工具包括回环检测、视觉-惯性优化或者多段地图共同配准(地图合并)。使用大量不同的可视化、统计和查询,能够对地图进行详细检查。更高级的模块允许使用来自深度传感器或者来自双目相机的数据来创建环境的稠密表示(TSDF、占据等)。


接着,将生成的(多段)地图导出为一个紧凑的定位地图,并且在第二次访问同一位置时该地图被ROVIOLI(LOC模式)用于在线定位。连续的在线定位能够精确跟踪相对于已知3d结构的全局位姿,从而补偿视觉-惯性状态估计中的漂移。


C.maplab控制台:离线用户交互界面


maplab使用控制台用户交互界面来离线操作地图。多个地图能够被同时加载到控制台中,这促进多段建图实验。所有算法通过控制台指令获得,并且能够被应用于已加载的地图。每个算法的具体参数通过控制台标志或者标志文件设置,并且能够在运行时被修改。结合Rviz中地图的实时可视化,这极大地促进了算法原型设计和参数调试。将多个算法和实验与整个处理流程相结合是可能的。通过从磁盘保存和重新加载地图的中间状态,能够容易地恢复更改内容。

控制台使用插件架构,并且在运行时检测编译工作空间内所有可用的插件。因此,在不改变核心功能包的情况下,集成一个新算法或者功能是可能的。对于运行在标准视觉-惯性地图数据类型上的算法,不需要任何适配工作。


D.地图结构

多传感器融合SLAM|maplab:一个研究视觉-惯性建图和定位的开源框架(上) -汽车开发者社区

多传感器融合SLAM|maplab:一个研究视觉-惯性建图和定位的开源框架(上) -汽车开发者社区

地图结构能够被序列化为谷歌Protobuf格式,从而实现可移植文件序列化和网络传输。此外,使用资源管理系统能够将数据密集型对象(例如图像、稠密重建等)附加到地图中。资源被连接到一个顶点或者一组任务再或者仅一个时间戳,并且被存储在与主要建图数据分离的文件系统中。该框架允许(缓存)按照需要加载这些(可能较大的)对象,从而有效地减少峰值内存使用。这促进在大规模地图的稠密重建和基于图像/增强定位领域的研究,否则可能耗尽特定平台上可用内存。


E.maplab核心功能包


maplab框架包含若干种最先进算法的实现。所有算法能够很方便地从maplab控制台访问。我们仅简要地强调在我们看来给机器人社区带来特定价值的算法:


VIWLS:带有代价项的视觉-惯性加权最小二乘优化。框架的主要批量优化算法被用于优化地图,例如在使用ROVIOLI初始化之后或者在建立回环之后。默认情况下,使用视觉和惯性数据构建优化问题,但是也能够包括车轮里程计、GPS测量数据或者其它类型的位姿先验。


回环/定位:一种基于二进制描述子的完整回环和定位系统。搜索后端使用一种倒排多索引用于投影二进制描述子上高效的最近邻检索。该算法是Lynen等人工作(Get out of my lab: Large-scale, real-time visual-inertial localization)的(部分)实现。


ROVIOLI:在线的视觉-惯性建图和定位前端。


位姿图松弛:使用由回环系统引入的边进行位姿图优化。算法与Sunderhauf等人的工作(Switchable constraints for robust pose graph SLAM)类似。另外,能够使用Cauthy损失函数来增加对于错误回环的鲁棒性。


aslam cv2:计算机视觉数据结构和算法的集合。它包括各种相机模型和畸变模型,以及用于特征检测、特征提取、特征跟踪和几何视觉的算法。


地图稀疏化:选择用于定位的最佳路标的算法和关键帧选择来稀疏化位姿图。这对于处理大规模地图或者长期建图是有用的。


稠密重建:稠密重建、深度融合和表面重建算法的集合。它还包括一个CMVS/PMVS2接口。


F.ROVIOLI:在线的VIO和定位前端


ROVIOLI(集成定位的ROVIO)是maplab的建图和定位前端,它被用于从原始的视觉和惯性数据构建地图,并且还在线地相对于现有地图进行定位。它建立在视觉-惯性里程计框架ROVIO基础上,并且使用定位和建图功能对其扩展。它具有如下两种操作模式:(i)VIO模式(视觉惯性里程计),其中地图是基于VIO估计构建的;(ii)LOC模式,其中额外的定位约束被处理用于跟踪相对于给定地图的(无漂移的)全局位姿估计。定位地图被直接在先前的(单段)ROVIOLI中创建,或者从maplab控制台导出。控制台内定位地图的准备允许构建复杂的处理流程(例如,多段地图、数据选择和数据压缩)。


ROVIOLI内(主要)数据流和模块的概况如图4所示。

多传感器融合SLAM|maplab:一个研究视觉-惯性建图和定位的开源框架(上) -汽车开发者社区

多传感器融合SLAM|maplab:一个研究视觉-惯性建图和定位的开源框架(上) -汽车开发者社区

处理过程内部的发布者-订阅者数据交换层管理了ROVIOLI内所有模块之间的数据流。这种架构使得使用新算法(例如在线多机器人建图、语义SLAM或者定位研究)能够容易地扩展当前在线流程。


文章转载自公众号:自动驾驶专栏

分类
收藏
回复
举报
回复
相关推荐