Maplab:一个用于视觉惯性建图和定位研究的开源框架

news/2024/11/29 2:28:37/

摘要

鲁棒且精确的视觉惯性估计是当今机器人领域的重要挑战。能够用先验地图(prior map)进行定位(localize)并获得准确且无漂移的姿态估计,可以推动该系统的适应性。然而,目前大多数可用的解决方案都集中在单次使用,缺乏定位能力或端到端流水线。我们相信,只有一个完整的系统,结合最先进的算法、可扩展的多次建图工具以及灵活的用户界面,才能成为一个有效的研究平台。

因此,我们提出了maplab,一个开放的,面向研究的(research-oriented)视觉-惯性建图框架,用于处理和操作多次建图,用C++编写。一方面,maplab可以被视为一个现成的(ready-to-use)视觉惯性建图和定位系统。另一方面,maplab为研究界提供了一个包含地图合并、视觉-惯性批处理优化和闭环检测的多场景建图工具的集合。此外,它还包括一个在线前端,可以创建视觉惯性地图(visual-inertial maps),还可以在局部化地图内做全局无漂移姿态跟踪。在本文中,我们提出了一个系统架构,五个用例,和公共数据集系统的系统评估。 maplab的源代码免费提供给机器人学术圈(robotics research community)进行研究。

1. 引言

图1:maplab框架可以从多次数据采集中构建一致的视觉-惯性地图。在这里,4次独立采集的数据被合并,然后联合优化。全局地图可以供里程计和定位前端使用,以纠正当重新访问该区域时发生的任何漂移。平面图覆盖了所有楼层的地标,显示了地图校准的准确性和一致性

同歩定位和建图(SLAM)系统的不断发展给机器人界带来了新的挑战。无论在户外还是在室内,精确可用性、无漂移的姿态估计已经成为许多机器人应用领域(例如导航或操纵)的重要需求。视觉-惯性估计系统的日益普及对视角 (viewpoint)和外观变化(日光,天气,季节等)或快速运动的稳健性提供了强有力的动力。目前的研究工作致力于通过使用多样的工具(heterogeneous agents)收集数据,建立更大规模的地图,覆盖各种视觉外观条件,以及在更长的时间范围内维护地图(maintain maps)。研究这些和许多相关的挑战,需要一个多场景(multi-session)的端到端建图系统,可以很容易地部署在各种机器人平台上,并提供具有最先进性能的随时可用的算法。同时需要提供用于进行研究所需的高度灵活性。

大多数公开可用的视觉和视觉惯性SLAM的框架,或者专注于单一场景情况[1]([1]文指OKVIS框架, 2013),或者只提供大规模批量优化却没有在线前端的系统(online frontend)[2]( 2006)。通常,它们是针对特定的流水线(specific pipeline)制作的,在地图结构和算法之间没有分离。他们往往缺乏完整性,不会提供完整的工作流程,比如一个地图能被生成、操作、和先前的地图融合,并在单个框架内的前端重新使用。这些系统损害了灵活性,这是快速开发(development)和研究的关键。

这项工作通过引入maplab来解决这个问题,这是一个用C++编写的开源视觉-惯性建图框架。与现有的视觉惯性SLAM系统相比,maplab不仅提供了从视觉惯性地图中生成地图和定位的工具,还提供了地图维护(map maintenance)和处理功能。这些功能是作为一套便利的控制台访问的工具提供的,可以通过插件系统轻松扩展。这些工具解决了多场景(multi-session merging),稀疏化(sparsification),闭环,稠密重建(dense reconstruction)和地图的可视化等问题。此外,maplab还包括基于ROVIOLI(ROVIO with Localization Integration),一个基于ROVIO的建图和定位前端[3],一个基于批处理(patch-based)的视觉惯性里程计系统。

Maplab已经过广泛的实地测试,并被部署在各种机器人平台上,包括微型飞行器[4],无人机[5,6],无人车[7],无人水下机器人[8]和步行机器人[9 ]。它还作为一个搜索平台用于地图概述(map summarization)[10-13],地图质量评估[14],多场景三维重建[15],拓扑建图[16],视觉定位[17-19]和分散建图[20]。

据我们所知,maplab是第一个在单个系统中集成了多种用例的可视化建图框架。Maplab是免费的,开源的,已经被证明对各种研究和工业项目有很大的用处。我们坚信,机器人社区将会利用它作为一个现成的(off-the-shelf)建图和定位解决方案,以及一个建图研究测试平台。这项工作的贡献可以概括如下:

1) 它介绍了一个通用的视觉惯性建图框架,使用基于特征地图和多场景支持;

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

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

4) 它强调了系统的可扩展性,使其非常适合于研究;

5) 它提供了框架中组件(components)选定的评估。

2. 相关工作

有几个公开可用的视觉SLAM和视觉惯性SLAM系统。最早的例子之一就是PTAM [21],它是一种用于局部地图(local map)并行建图和跟踪(tracking)的轻量级方法。它最初是为增强现实应用开发的,因此它既不提供大规模定位,也不提供任何离线处理工具。最近的例子包括OKVIS [1],一种基于视觉惯性关键帧的估计器。这种方法从最近获取的关键帧中构建局部地图,其将局部漂移最小化。类似地,半稠密[22]和稠密[23]里程计框架通过使用光度误差公式(photometric error formulations)代替基于特征的匹配来实现高质量的姿态估计。但是,这些方法都不支持过往记录的地图全局定位(global localization)。

ORB-SLAM[24]和ORB-SLAM2[25]是基于视觉的框架,可以创建环境地图,然后在连续的场景中重复使用,这与我们在此提出的工作流程近似相关。与这些系统相比,maplab提供了一个以控制台用户界面为中心的离线处理工具包,该工具包保证了高度的灵活性,允许用户添加自己的扩展或修改处理线程。我们考虑将多个建图场景合并成一个单一的一致的地图,并使用视觉惯性最小二乘法优化来完善maplab的核心能力,以将其与ORB-SLAM区分开来。另一个值得强调的区别是maplab的在线前端ROVIOLI。即使在存在运动模糊的情况下,使用批处理中图像强度而不是点特征就可以保证高水平的鲁棒性[3]

合并处理多个地图的能力已经在SLAM研究界中引起了相当大的关注,它[26](2004)是最早将多个地图以混合度量-拓扑方法(hybrid metric-topological approach)结合到多场景建图中的作品之一。在[27]中提出了使用锚节点(anchor nodes)将多个建图场景(multiple mapping sessions)拼合成一个位姿图。试图建立地图之间的拓扑关联也在[28]中提出,其中地图被存储为一组经验 (experiences)。相反,maplab存储一个统一的局部地图,允许使用仔细选择的特征子集,例如,基于目前的外观条件[7]。

系统的目标是从大量无序图像集合重构3D结构 [2,29,30](29,SfM),也包含类似于maplab的功能。它们通常提供大规模集束调整优化(large-scale bundle adjustment optimization)和高级图像和特征匹配技术的高效实现。然而,他们缺乏处理惯性数据的算法,为了在线提供姿态估计,无法直接在机器人平台上运行。

3. MAPLAB框架

从使用者的角度来看,框架由两个主要部分组成:

I. 在线的(online)VIO和定位前端,ROVIOLI,采用原始的视觉惯性传感器数据。它输出(全局)位姿估计值,并且可以用来建立视觉惯性地图。

II.离线的(offline)maplab控制台(maplab-console),可让用户以离线批处理方式在地图上应用各种算法。它也可以作为一个研究测试平台在视觉惯性数据上运行新算法。

maplab框架遵循可扩展和模块化设计。所有的软件组件都是以软件包的形式组织起来的,这些软件包使用ROS作为正式构建的系统并使用catkin构建的[31]。整个框架都使用C ++ 11标准,第三方依赖仅限于常用和维护良好的库(well-maintained libraries),其中包括用于线性代数的Eigen [32]和用于非线性优化的Ceres [33]。此外,该框架还提供了ROS接口,可以方便地输入原始传感器数据并输出结果,例如在机器人系统上轻松部署的位姿估计。该框架使用RViz作为三维可视化工具,以便可视化在线建图算法的状态以及从maplab控制台离线处理的结果。

A. 符号

在整个这篇文档和源代码中,我们使用本节中定义的符号。变换矩阵T_{AB} \in SE(3)采用一个矢量_B \textbf{p} \in R^3从参考帧\mathcal{F}_B到参考帧\mathcal{F}_A。它可以被分割成旋转矩阵R_{AB} \in SO(3)和平移矢量_A \textbf{p}_{AB} \in R^3,如下所示:

根据方程(1),操作符T_{AB}(\cdot)定义为在R^3空间中平移一个矢量,从\mathcal{F}_B\mathcal{F}_A,表示为_A \textbf{p} = T_{AB}(_B \textbf{p}) \in R^3

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

对于在maplab系统中一个建图和定位的场景的典型工作流程如图2所示。通常,从多个建图场景构建单个定位地图是有许多优点的,以确保在该区域有一个好的空间和时间覆盖。首先,在VIO模式下使用ROVIOLI在每个场景中建立一个开环地图(open loop map)并存储到磁盘。 然后,地图可以使用各种(离线)工具(如环路闭合检测,视觉惯性优化或多个场景共同生成(co-registration)(地图合并))对地图进行细化(refined)。 使用大量不同的可视化,统计和查询,可以对地图进行详细检查。更高级的模块允许例如使用来自深度传感器或来自立体传感器的数据来创建环境的密集特征(dense representation)(TSDF,占用(occupancy)等)(TSDF,“截断有符号距离函数”(truncated signed distance function),KinectFusion使用的一种方法,译者注)。

图2:maplab中的典型工作流程:(a)在VIO模式下,ROVIOLI估计的一个关于(w.r.t. , with respect to, 关于)局部漂移帧的节点位姿; 另外根据这些估计建立地图。(b)可以将所得的地图加载到能应用的所有可用的算法的maplab控制台中,例如,地图校准(alignment)和融合,VI优化,闭环。(c)在LOC模式下,ROVIOLI可以加载更新的地图以在线追踪全局(无漂移)位姿。

然后,可以将生成的(多场景)地图导出为一个紧凑的局部地图,并在第二次访问同一地点时通过ROVIOLI(LOC模式)用于在线定位。持续的在线定位可以精确地跟踪一个全局位姿(关于一个已知的三维结构),从而补偿(compensate)视觉惯性状态估计的漂移。

C. Maplab 控制台:离线用户接口

maplab框架使用控制台用户界面进行离线地图操作。maplab可以同时将多个地图加载到控制台中,便于进行多场景建图实验。所有算法都可以通过控制台命令获得,并且可以应用于加载的地图。每个算法的具体参数由控制台标准(console flags)或标准文件(flag file)设置,并且可以在运行时修改。结合在RViz中地图的实时可视化,这极大地方便了算法的原型设计和参数调整。可以将多个算法结合起来并对整个处理线程进行实验。通过从磁盘保存和重新加载地图的中间状态,可以轻松地恢复更改。

控制台使用插件体系结构,并在运行时自动检测构建工作区内的所有可用插件。因此,可以在不改变核心包的情况下集成新的算法或功能是可能的。对于在标准的视觉惯性地图的数据类型上运行的算法(参见第III-D节),不需要接口工作。

D. 地图结构

该框架使用一个名为VI-map的数据结构,用于视觉惯性地图数据。VI图包含所有传感器的原始测量结果和已被覆盖环境的稀疏重建结构。每个地图可能包含多个任务(missions),每个任务都基于一个已记录的场景(session)。任务的核心结构是由顶点(vertices)和边(edges)组成的图形。一个顶点(vertex)对应于在某个时间点捕获的状态。它包含从(多)相机系统的状态估计(位姿T_{MI_k},IMU偏差,速度)和视觉信息,包括关键点,描述子(BRISK [34]或FREAK [35]),跟踪信息和图像。一条边连接两个相邻的顶点。虽然在maplab中有几种不同类型的边,但最常见的类型是IMU边。它包含记录在边连接的顶点之间的惯性测量值。由多个顶点跟踪的视觉观察值被三角化为三维地标(3d landmarks)。地标本身存储在首先观察到的顶点内。环路闭合可能将一个任务的观测值与另一个任务中存储的地标联系起来。

图3:maplab和ROVIOLI中使用的坐标系::全局重力对齐地图坐标系; 所有的任务都固定在这个框架中。:重力对齐框架,代表任务k的起始点(origin),相当于VIO的起始点。:时间戳记为k(body frame,载体坐标系)的IMU坐标系。

图3说明了地图结构并介绍了相关的坐标系。使用一个变换T_{GM_i},将每个任务固定在全局坐标系中。任务i的位姿T_{M_i I_j}表示为关于任务帧\mathcal{F}_{M_i}。因此,它能够操作变换将多个任务固定在单个全局坐标系中,而不需要更新任何顶点位姿或地标位置。

地图结构可以序列化为Google Protobuf格式,实现便携式文件序列化和网络传输。此外,可以使用资源管理系统将数据密集型对象(data-intensive objects)(如图像,密集重建等)附加到地图上。资源链接到一个顶点或一组任务或简单的时间戳,并存储在与主要建图数据分开的文件系统上。该体系结构允许(缓存)按需加载这些(可能较大的)对象,从而有效地减少峰值内存使用量。这有助于在密集重建和基于图像/增强定位等领域的大范围地图研究,否则可能会耗尽某些平台上的可用内存。

E. Maplab核心包

maplab框架补充结合了几种最先进的算法。所有这些都可以从maplab控制台方便地访问。我们只简单地强调几个在我们看来能给机器人界带来特别价值的部分:

VIWLS:代价项类似于文章[1]的视觉惯性加权最小二乘优化(visual-inertial weighted least-squares )。该框架的主要批量优化算法被用于改进地图,例如,在用ROVIOLI初始化之后或者在闭环建立之后。默认情况下,优化问题是使用视觉和惯性数据构建的,但也可以包括轮测距(wheel odometry),GPS测量或其他类型的位姿先验方法。

闭环回路/定位(Posegraph relaxation):一个基于二进制描述子的完整闭环回路和定位系统。搜索后端使用反向多索引(inverted multi-index)在投影二进制描述子上进行有效的近邻检索。该算法是[36]的(部分)实现。

ROVIOLI:在线视觉-惯性建图和定位前端,详见第III-F部分。

姿态松弛(Posegraph relaxation):使用闭环系统引入的边进行姿态图优化。该算法类似于[37]。可选地,可以使用Cauchy损失(Cauchy)来增加针对假环闭合的鲁棒性。

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

地图稀疏化(Map sparsification):选择用于定位的最佳地标的算法[10,11]和关键帧选择来稀疏姿态图。用于处理大规模地图或长时间建图。

密集重建(Dense reconstruction):密集重建,深度融合和表面重建[38]算法的集合。还包括一个CMVS/PMVS2接口[39]。详情请参阅第IV-E部分。

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

ROVIOLI(ROVIO with Localization Integration,集成定位的ROVIO),是maplab的映射和本地化前端,用于从原始视觉和惯性数据构建地图并且本地化w.r.t.现有的在线地图。它建立在视觉惯性里程计框架ROVIO的基础上[3],并扩展增加了定位和建图能力。它可以使用以下两种操作模式:(i)VIO模式(视觉惯性里程计),即地图是基于VIO估计构建的;(ii)LOC模式,额外增加定位约束用于在给定的地图中处理追踪(无漂移)全局位姿估计。定位地图可以直接在先前的ROVIOLI的(单一场景)中创建,也可以从maplab控制台中导出。控制台内的局部地图的准备允许构建复杂的处理线程(例如,多场景地图,数据选择和压缩(compression))。

图4:ROVIOLI中的模块和数据流(带本地化集成的ROVIO [3])。

图4显示了ROVIOLI中(主要)数据流和模块的概况。特征跟踪模块(Feature Tracking)检测并跟踪BRISK [34]或FREAK [35]关键点。通过帧与帧之间的匹配描述子建立帧之间的特征对应关系。基于集成的陀螺仪测量来预测预期的匹配窗口,以提高效率和鲁棒性。在LOC模式下,帧定位模块(Frame Localization)处理包含特征点和描述子的关键帧,以与所提供的局部图建立2d-3d匹配。这些2d-3d匹配被用于获得全局位姿估计,w.r.t. 地图的参考帧使用一个在RANSAC方案内的3P算法(见图3)。原始的全局姿态估计用于ROVIO,它们与里程计约束进行融合以估计除了本地里程计位姿之外的变换。所有模块的输出在地图构建器(Map Builder)内同步地构建视觉惯性地图(visual-inertial map)(VI-地图)。生成的地图可以在随后的场景中用作局部地图,也可以加载到maplab控制台处进行进一步处理。

流程内部(process-internal)的发布者-使用者(publisher-subscriber)数据交换层管理着ROVIOLI内所有模块之间的数据流。这种结构使得在用新的算法去扩展当前的在线线程很容易,例如用在线的多节点建图(online multiagent mapping),语义SLAM(online multiagent mapping)或定位(localization)研究。

4. 使用案例

本节概述了maplab的五个常见用例(common use cases):在线建图和定位,多场景建图,地图维护,大规模建图和稠密重建(online mapping and localization, multi-session mapping, map maintenance, large-scale mapping and dense reconstruction)。虽然maplab提供的远不仅仅是这些,但我们相信这些例子能突出了系统的功能,预期的性能和可扩展性。

此外,我们提供相关的控制台命令来重现每一个例子。这样做的目的是为了表明仅仅依靠用户界面就可以获得以下结果,而不需要额外的开发代码。有关更多文档,更新的命令,数据集和教程,请访问我们的wiki页面:www.github.com/ethz-asl/maplab/wiki

A. 使用ROVIOLI进行在线测绘和定位

对于许多机器人应用来说,获得(无漂移)全局位姿估计是非常重要的。这样的能力使得例如教导和重复场景,机器人操纵和精确导航成为可能。在maplab中,作为第一步,我们使用ROVIOLI来创建所需操作区域的初始VI图。传感器数据可以在Rosbag中离线提供,也可以使用ROS主题在线使用。完成后,VI图自动闭环,优化和可选关键帧,以及总结,以获得一个紧凑的本地化地图。在第二个场景中,可以将定位图传递给ROVIOLI以在建图区域中获得无漂移全局位姿估计。

图5:在EuRoC机械大厅数据集(the EuRoC machine hall dataset)上评估ROVIOLI [40]。顶部:用ROVIOLI位置估计的地面实况位置。底部:ROVIO视觉惯性里程计线程位姿误差[3],ROVIOLI和优化的VI-地图(VIWLS)与地面实况相比的位置误差。

我们评估了ROVIOLI与普通ROVIO [3]结果对比,在EuRoC数据集全批优化的估算[40]。 为此,第一步,我们使用其中一个数据集创建了一个定位地图。然后在第二步中,我们使用ROVIOLI(使用先前构建的地图)和ROVIO处理第二个EuRoC数据集。结果如图5和表1所示,我们比较了ROVIO,ROVIOLI和全批量优化轨迹(full-batch optimized trajectory)的地面误差。这些实验证明了系统的无漂移性能和对常规(regular)VIO估算的改进。 另外,表II显示了ROVIO和ROVIOLI与ORB-SLAM2相比的耗时(timing)信息[25]。

表1:EuRoC数据集[40]上的全局位置和方向RMSEs的ROVIO(仅VIO)),ROVIOLI使用其中一个数据集作为定位地图,以及ROVIO + VIWLS对应于全批视觉惯性最小二乘优化。 此外,比较了ORB-SLAM2 [25](批量和实时)的结果。ROVIO和ROVIOLI使用单目摄像头和IMU数据,而ORB-SLAM2使用立体摄像头。ORB-SLAM2的定位图已经建立在SLAM模式下,而定位评估已经在定位模式下进行。对于V2-medium,我们无法用如估计器分叉(estimator diverged)(用X标记)一样以ORB-SLAM2的实时模式构建地图。
表II:(a)在20Hz处理的EuRoC MH1数据集上的ROVIO,ROVIOLI和ORB-SLAM2的时序和CPU负载。在ROVIOLI和ORB-SLAM2的情况下(用*标记),估计器被设置为根据由EuRoC MH2构建的地图进行定位。所有报告的值都是在Intel Xeon E3-1505M@2.8Ghz上测得的。800%的CPU负载对应于充分利用CPU的全部8个(逻辑)内核。(b)ROVIOLI独立块的单帧处理时间。由于他们并行运行,总时间并不对应于各个块的总和。相反,这个时间是完全处理单个帧所花费的时间。

B. 多场景建图

在许多建图应用中,单次建图不可能覆盖整个环境。除此之外,可能需要在尽可能多的不同的视觉外观条件下捕捉环境[7]。因此,maplab提供了把多次建图结果配准到一起的工具,并共同完善它们以获得一致的地图。

因此,该用例演示了从4个独立的轨迹创建大学建筑地图的过程。每条轨迹都穿过建筑物的地面,楼梯和另一层楼。它们结合在一起超过1000米,包含约463,000个地标。在这样大的地图上,许多常见的操作(例如优化或循环关闭)很快就变得棘手,无法仔细选择数据。为此,我们采用了基于顶点距离,方向和界标隐形(landmark covisibility)的启发式关键帧方案。Maplab的闭环算法正确识别了所有场景之间的几何变换,非线性优化精调了其几何结构。结果是一个8.2MB的紧凑的,几何一致的定位图,可以被ROVIOLI用于整个建筑物的定位,如图1所示。

这个用例可以在maplab控制台中使用以下命令进行重现:

C. 地图维护

基于特征的大型模型,可能在构建多个场景中,很容易包含数千个路标并达到相当大的存储空间。然而,并不完全需要的保留所有的路标以保证ROVIOLI的良好的定位质量。Maplab提供了基于[11]的地图汇总功能,该功能使用基于整数(integer-based)的优化来执行路标选择。该算法试图去除最不常见的地标,但与此同时保持对环境的均衡覆盖(balanced coverage)。Maplab还包括一个关键帧算法,用于去除多余的顶点,只保留一个有效而准确的状态估计所需的顶点算法。通过去除顶点,我们也消除了许多顶点路标相关联的含有一定尺寸的描述子。汇总(summarization)和关键帧都可以显著降低模型尺寸,而不会在位姿估计质量方面造成大的损失。

地图维护是在第IV-B节介绍的建筑楼层记录演示的4个建图场景建立的数据库地图。每个地图覆盖约90米,包含约20,000个地标,其中约5,000个被认为是可靠的。将第五个数据集用作查询——我们试图针对数据库定位每个顶点,由4个数据集构建,并验证位置误差是否小于50厘米。我们比较了以不同方式预处理的定位地图的召回率(recall),要么汇总(summarized),要么关键帧,或者两者兼而有之。

图6展示了地标汇总(landmark summarization)和关键帧在定位地图大小的影响,并演示了这些方法如何影响定位。结果证实,关键帧大大降低了定位地图的大小,而且定位质量的损失相当小。 同样,总结(summarization)可以减少90%的路标总量,而不会造成严重的后果(without grave consequences)。当这些方法结合使用时,我们可以将地图大小缩小13倍,并将召回水平保持在51%,而完整地图为60%(compared to 60% for the full map)。

D. Large-scale mapping 大尺度建图

在这个用例中,我们想展示maplab的大尺度建图能力以及除VI传感器以外的传感器的适用性[41]。为此,我们使用公开的Google Tango平板电脑,并记录了苏黎世老城的大尺度多场景地图。我们导出了原始视觉惯性数据,并使用ROVIOLI进行处理,以获得初始开环图。然后,我们将这些地图加载到maplab控制台中进行对齐和优化(alignment and optimization),并使用第IV-B节中所述的相同工具。在32GB RAM的台式计算机上通宵(overnight)进行集束调整(overnight)和位姿图松弛(pose-graph relaxation)。优化的VI地图正交投影(orthographic projection)在苏黎世地图上,关于地图的进一步的细节可以在图7中找到。该图显示结果地图与大部分地图上的建筑物和街道一致,在覆盖率较低的领域略有一些不一致(minor inconsistencies)。

图6:在ILP地标总结和关键帧+总结(landmark summarization and keyframing + summarization)(括号内)后的定位性能和地图大小。关键帧删除包括顶点-路标关联的顶点,有效地使地图更小。原始的地图有6,258个顶点,而关键帧图则包含760个关键帧。关键帧一致地减少了少量百分比的召回,总的来说只有删除的路标点超过85%才会影响到质量。 为了比较,我们提供了一个随机选择要删除的路标点的召回曲线。
图7:苏黎世老城的大尺度多时段VI地图。使用Google Tango平板电脑在两个不同的日期(晴天和阴天)录制45个场景的原始视觉惯性数据。记录的总时间是231分钟。最终地图包含总长度为16.48公里的轨迹,435 K的地标,7.3 M的观测数据,大小为480 MB。 该地图可在maplab wiki页面上下载。

E. Dense reconstruction 稠密重建

机器人领域的许多应用,如路径规划,检查和物体检测,都需要更高密度的三维环境表示。 Maplab提供了多种密集的重建工具,它们使用稀疏地图的优化顶点姿态来计算基于附加在VI地图上的相机图像的稠密深度信息。

1)立体密集重建:为了计算来自多摄像机系统的深度图,该工具首先识别适合于二维平面校正(planar rectification)的立体相机。然后,它利用(半全局)块匹配器为轨迹上的每个立体对(stereo pair)计算深度图。 生成的深度图(或点云)附加到VI地图并存储在资源系统中。 以下命令假设地图已经对齐,闭环和优化,如第IV-B部分所述

2)基于TSDF的深度融合:一旦VI图包含深度信息,例如,通过使用上述命令或者RGB-D传感器获得的,全局一致的VI映射相机姿态可以用于创建同样一致的全局三维重建结构。 为此(To that end),maplab采用voxblox [38],一个容积建图库(volumetric mapping library),用于基于TSDF的深度融合和表面重建。以下命令会将深度图或点云数据插入voxblox网格,并将表面网格(surface mesh)存储到文件系统。图8的第一行显示了3个合并的EuRoC机房数据集的重建结果[40]

3)导出到CMVS / PMVS2:为了更精确的重建重建,maplab提供了一个导出命令来将稀疏的VI地图和图像转换为开源多视图立体线程(open-source multi-view-stereo pipeline), CMVS / PMVS2[39]的输入数据格式。 虽然支持灰度图像输出,但可以使用RGB图像获得最佳效果。 VI图和最终的3D重建可以在图8的底部看到。

5. 使用MAPLAB用于研究

第四节用例中所需的所有算法和控制台命令在maplab中都是可用的,并构成了大多数视觉惯性建图和定位所需的基本工具。此外,还提供了一套丰富的帮助函数(helper functions),查询和操作工具来简化新算法的快速原型研究。控制台的插件体系结构允许将新算法简单整合进入系统中。 项目的wiki页面提供了如何扩展框架示例演示。我们想邀请学术界利用这个研究进行友好的设计。

图8:maplab提供了两种不同的稠密重建工具。顶部:立体稠密重建用于基于灰度图像和优化的摄像机姿态来计算深度图。然后,他们融合在voxblox [38]创建一个表面网格进行融合。3个EuRoC数据集[4](MH1-3)相结合,创建一个对齐和优化的VI图。底部:CMVS / PMVS2 [39]重建结果基于一个单一的记录场景,使用一个RGB相机和多相机系统。

6. CONCLUSIONS 总结

这项工作提出了maplab,一个开放的视觉惯性建图和定位框架,通过提供一个基本的算法集合,让研究人员可以专注于实际的任务,使这个领域的研究更有效率的目标。maplab中的所有组件都以灵活和可扩展的方式编写,因此可以轻松集成和测试依赖视觉-惯性状态估计或本地化的新算法。为此,该框架提供了映射和本地化相关研究所需的最重要工具的实现,例如视觉-惯性优化,闭环/定位后端,多地图融合,位姿图松弛和宽泛自检以及可视化工具(visual-inertial optimization, a loop-closure/localization backend, multi-session map merging, pose-graph relaxation and extensive introspection and visualization tools)。所有这些算法都可以从基于控制台的用户界面进行访问,可以将其应用于单个或多个场景的建图。在原型设计新算法或调整参数时,这样的工作流程已被证明是非常有效的。

其次,该框架包含一个名为ROVIOLI的在线视觉-惯性建图和定位前端。它可以从原始的视觉和惯性传感器数据建立新的地图,并且如果提供定位图则追踪实时的全局(无漂移)姿态。以前的工作在不同的机器人平台上使用了这种能力,并展示了它能够准确跟踪包括导航和轨迹跟踪在内的多种应用的全局位姿。

7. ACKNOWLEDGEMENT 致谢

我们要感谢maplab的其他贡献者,最重要的是:Titus Cieslewski,Mathias Burki,Timo Hinzmann,Mathias Gehrig和Nicolas Degen。此外,我们还要感谢ROVIO的作者Michael Blosch。导致这些结果的研究得到了Google Tango和欧盟H2020项目UP-Drive的资金拨款项目编号no.688652.

参考文献

【泡泡读者来稿】Maplab:一个用于视觉惯性建图和定位研究的开源框架(一) - 专知

【泡泡读者来稿】Maplab:一个用于视觉惯性建图和定位研究的开源框架(二)_maplab

 maplab: An Open Framework for Research in Visual-inertial Mapping and Localization


http://www.ppmy.cn/news/18990.html

相关文章

偷偷理解Java和Scala中==和equals()的区别

君霸王,社稷定,君不霸王,社稷不定🥽 目录 Java总结 Scala总结 Java中和equals() ---------------------------------------------------------------------------------------------------------------------------------------…

Redis内部的阻塞式操作以及应对方法

Redis之所以被广泛应用,很重要的一个原因就是它支持高性能访问,也正因为这样,我们必须要重视所有可能影响Redis性能的因素,不仅要知道具体的机制,尽可能避免异常的情况出现,还要提前准备好应对异常的方案。…

eBPF 入门开发实践指南一:介绍 eBPF 的基本概念、常见的开发工具

eBPF 入门开发实践指南一:介绍 eBPF 的基本概念、常见的开发工具 1. 为什么会有 eBPF 技术? 1.1. 起源1.2. 执行逻辑1.3. 架构 1.3.1. 寄存器设计1.3.2. 指令编码格式 1.4. 本节参考文章 2. 如何使用eBPF编程编写 eBPF 程序 2.1. BCC2.2. libbpf-bootstr…

线段树学习

线段树是用来维护区间信息的数据结构 洛谷P3372 区间加区间查询 #include<cstdio>typedef long long LL; const int N 100005; LL tree[N * 4], lazy[N * 4];void push_down(int rt, int l, int r) {if (lazy[rt]) {int mid l ((r - l) >> 1);tree[rt <&l…

计算机视觉OpenCv学习系列:第八部分、图像操作-4

第八部分、图像操作-4第一节、图像卷积操作1.图像卷积定义2.卷积函数3.代码练习与测试第二节、高斯模糊1.高斯模糊2.函数解释3.代码练习与测试第三节、像素重映射1.像素重映射定义2.重映射函数3.代码练习与测试学习参考第一节、图像卷积操作 1.图像卷积定义 卷积的基本原理&am…

cmake 04 使用 python 管理 cmake 工程

本文目标 使用 python 写一个管理 cmake 工程的 cli 程序 参考 Python CLI python Click 官网 Click 中文文档 python多文件打包.exe执行文件 argparse 文档 使用说明 详细说明 思路 使用 click 制作单独的命令, 比如 mcmake_inti,mcmake_built , 每一个命令都打包为…

深入剖析JVM垃圾收集器

文章目录前言1、新生代垃圾收集器1.1、Serial1.2、ParNew1.3、Parallel Scavenge2、老年代垃圾收集器2.1、Serial Old2.2、Parallel Old2.3、CMS&#xff08;Concurrent Mark Sweep&#xff09;3、全堆垃圾收集器3.1、Garbage First&#xff08;G1&#xff09;前言 参考资料&am…

开发人员必备的 15 个备忘单

随着网络编程技术的快速发展&#xff0c;我们必须学习很多新东西。有些语言和框架非常复杂&#xff0c;您可能记不住所有的语法或方法。备忘单是易于访问的笔记。当有人在过去目睹任何有帮助或有价值的事情时&#xff0c;包括我自己&#xff0c;我们都会做笔记。但是&#xff0…