论文:RTAB-Map as an open-source lidar and visual simultaneous localization and mapping library for large-scale and long-term online operation
作者:Mathieu Labbé | François Michaud
翻译:YC
——————————————————————————————————————————————————
自2013年以来,实时的、基于外观的建图(RTAB-Map)为一个开放源代码库被发布,作为一种基于外观的闭环检测检测方法,它与内存管理一起处理大规模和长期的在线操作。然后,它开始在各种机器人和移动平台上实现同步定位和建图(SLAM)。由于每个应用场景对传感器、处理能力和运动都有自己的限制,因此需要考虑一个问题,即在成本、准确性、计算能力和易集成性方面,哪种SLAM方法最适合某种应用。由于大多数SLAM方法都是基于视觉或激光雷达的,因此很难进行比较。因此,我们决定扩展RTAB-MAP以支持视觉和激光雷达SLAM,在一个包中提供一个工具,允许用户使用不同的机器人和传感器来实现和比较用于各种场景的3D和2D解决方案。本文介绍了RTAB-MAP的扩展版本在大量流行的现实世界数据集(如Kitti、Euroc、Tum rgb-d、MIT Stata Center on Pr2 Robot)中的应用方面的定性的、定量的性能比较,从实践的角度概述了视觉和激光雷达SLAM在自动导航应用场景中的优势和局限性。
K E Y W O R D S
感知、位置估计、SLAM
实时基于外观的建图(rtab-map)(labb_&michaud,2013年、2017年)是我们的开源库,它使用内存管理方法实现循环关闭检测,限制了地图的大小,以便循环关闭检测始终在固定的时间限制下处理,从而满足长期和大规模环境测绘。RTAB-MAP于2009年启动,并于2013年作为开放源代码库发布,此后扩展为一种完整的基于图形的同步局部化和建图(SLAM)方法(Stachness、Leonard和Thrun,2016年),用于各种设置和应用(Chen等人,2015年;Foresti等人,2016年;Goebel,2014年;Laniel等人,2017年)。因此,RTAB-MAP已经发展成一个跨平台的独立C++库和一个机器人操作系统(ROS)PACKAGE 2,由实际需求驱动,如:
•在线处理:SLAM模块的输出在接收到传感器数据后应限制为最大延迟。尤其是对于基于图的SLAM,随着图的增长,需要更多的处理时间来检测循环关闭、优化图和组装图。此外,与控制、导航、避障、用户交互、对象识别等其他处理模块集成也可能限制中央处理单元(CPU)可用于SLAM的时间。因此,有可能限制计算负载有助于避免其他模块出现滞后问题,甚至有必要防止出现不安全情况。
•稳健和低漂移里程表:虽然环路闭合检测可以纠正大部分里程表漂移,但在现实场景中,机器人通常无法在地图上正确定位自身,这可能是因为它正在探索新的领域,或者是因为环境中缺乏识别性特征。在此期间,应尽量减小里程计的漂移,以便在定位之前仍然可以进行精确的自主导航,以避免错误地覆盖地图区域(例如,在房间入口错误地添加障碍物,使其成为封闭区域)。当环境中有足够的特征时,用摄像机和激光雷达等外部感知传感器估计里程计可能非常准确,但如果环境中的跟踪特征不再可见,仅使用一种传感方式可能会有问题,并且容易出现定位故障。使用本体感知(例如,车轮编码器、惯性测量单元[IMU])和外部感知传感器的组合将增强对里程测量估计的鲁棒性。
•鲁棒的定位:SLAM方法必须能够识别何时重新访问过去的位置(用于环路闭合检测)以更正地图。动态环境、光照变化、几何变化,甚至是重复的环境都可能导致不正确的定位或定位失败,因此,该方法应该对误报具有鲁棒性。
•实际地图生成和开发:大多数流行的导航方法都基于占用网格,因此,开发能够提供3D或2D占用网格的SLAM方法是有益的,以便于集成。此外,当环境主要是静态的时,执行建图会话,然后切换到局部化、设置内存使用和节省建图管理时间更为实际。
•多次建图(又称绑架机器人问题或初始状态问题):打开时,机器人不知道其与先前创建的建图的相对位置,因此无法规划到先前访问的位置的路径。为了避免机器人从0开始重新启动建图过程 或 在启动建图之前在先前构建的地图中对自身进行定位,多次建图允许SLAM方法在启动时使用自身的参考来初始化一次新建图,并且当遇到以前访问的位置时,可以计算两个建图之间的转换。这就带来了这样的好处:当只需要重新建图一小部分或添加一个新区域时,避免重新建图整个环境。由于可用SLAM方法的多样性,确定针对特定平台和应用程序使用哪种方法是一项困难的任务,主要是因为它们之间缺乏比较分析。SLAM方法通常是基于视觉的(Fuentes‐Pacheco、Ruiz‐Ascecio和Rend‐N‐Mancha,2015)或仅基于激光雷达的(Thrun,2002),并且通常以只有照相机或激光雷达的数据集为基准进行基准测试,但不同时使用两者,因此很难对它们进行有意义的比较。更重要的是,当它们的实现不可用、只离线运行或缺少机器人平台上所需的输入格式时。ROS(Quigley等人,2009年)于2008年推出,极大地促进了传感器数据格式的标准化,从而提高了机器人平台之间的互操作性,并使比较SLAM方法成为可能。但是,集成在ROS中的视觉SLAM方法通常不会在自主机器人上进行测试:仅通过远程操作或人类移动传感器进行SLAM(Dai、Nie_ner、Zoll_fer、Izadi和Theobalt,2017年;Engel、St_ckler和Cremers,2015年;Mur-Artal和Tard_s,2017年)。这避免了一些tf(transform library;foote,2013)处理,这种处理需要根据机器人基架转换输出以满足ROS坐标框架转换。它还避免了需要与导航算法兼容的地图输出(例如,二维或三维占用网格)来规划路径和避免障碍。此外,上面概述的一些实际要求并不总是通过SLAM方法来解决,因此限制了比较。
因此,由于rtab-map的发展是为了满足这些实际需求,我们决定进一步扩展rtab-map的功能,以比较自主机器人导航的视觉和激光雷达SLAM配置。RTAB-MAP是一种以内存管理为核心的闭环方法,它独立于所使用的里程计方法,这意味着它可以通过视觉里程计、激光雷达里程计甚至车轮里程计进行反馈。这意味着RTAB-MAP可用于实现视觉SLAM法、激光雷达SLAM法或两者的混合,从而可以比较真实机器人上的不同传感器配置。本文描述了RTAB地图库的扩展版本,并演示了其用于比较最先进的视觉和激光雷达SLAM方法的用途,从而概述了两种自主导航模式之间的实际局限性。论文的组织结构如下。
第2节简要介绍了目前流行的SLAM方法,与ROS兼容,可用于机器人进行比较评估。
第3节介绍了RTAB-MAP扩展版本的主要组成部分。
第4节使用RTAB‐Map通过使用标准离线和在线数据集比较其视觉和激光雷达SLAM配置的轨迹性能:Kitti数据集用于户外立体声和3D激光雷达自动建图;Tum红绿蓝深度(rgb-d)数据集用于手持RGB-D建图;用于无人机上立体建图的欧洲数据集;以及比较PR2机器人上室内立体、RGB-D和二维激光雷达SLAM配置的麻省理工学院斯塔塔中心数据集。
第5节根据使用的传感器评估地图质量和计算性能变化,并显示在线地图的内存管理效果。
最后,第6节根据观察到的结果,提出了通过使用RTAB-MAP获得的关于自主机器人SLAM应用传感器选择的指南。
通过ROS有多种开源SLAM方法可供选择。在本节中,我们将回顾最流行的几种方法,以概述它们的特点,并根据输入和输出来定位RTAB‐Map所涵盖的内容,以处理SLAM方法的比较研究。
让我们从以下基于激光雷达的方法开始:
•gmapping(grisetti,stachness,&burgard,2007)和tinyslam(steux&el hamzaoui,2010)是两种使用粒子过滤器估算机器人轨迹的方法。只要有足够的估计粒子,且实际位置误差与输入里程计的协方差相对应,粒子滤波器就会收敛到一个能很好地表示环境的解,特别是对于存在环路闭合的GMAPping。GMAPping是ROS的默认SLAM方法,已被广泛用于从二维激光扫描中导出环境的二维占用网格图。创建地图后,它可以与自适应蒙特卡罗定位(Fox、Burgard、Dellaert和Thrun,1999)一起用于定位和自主导航。
•Hector Slam(Kohlbrecher、Meyer、Vonstryk和Klingauf,2011年)可以利用低计算资源的二维激光雷达创建快速的二维占用网格图。事实证明,在真实的自主导航场景中,如RoboCup救援机器人联盟竞赛(Kohlbrecher等人,2016年),它可以生成非常低的漂移定位。它还可以使用外部传感器(如IMU)来估计机器人在3D中的位置。但是,Hector Slam并不完全是一种全Slam方法,因为它不检测到回路闭合,因此在访问以前的定位时,地图无法更正。Hector Slam不需要外部里程计,这在机器人没有外部里程计的情况下是一个优势,但在没有很多几何约束的环境中操作时可能是一个劣势,限制了激光扫描匹配性能。
•基于libpointmatcher库(Pomerleau、Colas、Siegwart和Magnenat,2013年),ETH苏黎世自治系统实验室(Ethzasl)ICP-Mapper4可用于创建二维激光雷达的二维占用网格图,以及二维或三维激光雷达的组装点云。但与Hector Slam类似,该方法不检测循环关闭,因此随着时间的推移地图错误无法纠正。
•Karto Slam(Vincent、Limketkai和Eriksen,2010年)、Lago Slam 5(Carlone、Aragues、Castellanos和Boanna,2012年)和Google制图师(Hess、Kohler、Rapp和Andor,2016年)是基于激光雷达图的Slam方法。它们可以从图形表示中生成二维占用网格。谷歌地图绘制器也可以作为背包地图平台,因为它支持3d激光雷达,从而提供3d点云输出。在建图时,它们创建由图中的约束链接的子对象。当检测到环路闭合时,重新优化子脉冲的位置,以纠正传感器噪声和扫描匹配精度带来的误差。与Hector Slam不同,外部里程计可以在几何复杂度较低的环境中获得更强大的扫描匹配。
•Berkeley局部化和建图(Blam)6是一个基于激光雷达图的SLAM,仅支持3D激光雷达用于环境的3D点云生成。从在线文档(这是唯一可用的文档)中,当机器人访问以前的位置时,通过扫描匹配在局部检测到环路闭合,然后使用Georgia Tech平滑和建图(GTSAM)优化地图(Dellaert,2012)。这意味着blam无法关闭大型循环,对于这些循环,局部扫描匹配将无法正确注册。
•Segmatch(Dub_et al.,2016)是一种基于3d激光雷达的环路闭合检测方法,也可用作基于3d激光雷达图的SLAM。通过匹配从激光点云创建的3D段(例如车辆、建筑物或树木的部分)来检测环路闭合。
在这些基于激光雷达的SLAM方法中,只有Segmatch可用于多次或多机器人建图(Dub_et al.,2017)。
关于视觉SLAM,存在许多开源方法,但在机器人上使用的方法不多(请咨询Zollh_fer等人。(2018年)审查以三维重建为重点的方法)。对于导航,为了避免处理尺度模糊,我们将审查限制在能够在绘制地图时估计环境真实尺度的方法(例如,使用立体和RGB-D相机或视觉-惯性里程表),从而将结构排除在运动或单目撞击方法之外,如平行跟踪和测绘(PTAM)(Klein)&Murray,2000年),半直接视觉里程测量(SVO)(Forster,Pizzoli,&Scaramuzza,2014年),规范化单目深度估计(Remode)(Pizzoli,Forster,&Scaramuzza,2014年),dt-slam(Herrera,Kim,Kannala,Pulli,&Heikkil_,2014年),大规模直接单目slam(LSD-slam)(Engel,Sch_ps,&Cremers,2014年)或定向快速旋转b里夫(Orb)Slam(Mur-Artal、Montiel和Tardos,2015年)。以下视觉SLAM方法不会随着时间的推移而受到这种尺度漂移的影响。
•Maplab(Schneider等人,2018年)和Vins‐Mono(Yi等人,2017年)最近作为基于视觉-惯性图的SLAM系统发布。仅使用IMU和摄像头,它们就可以提供用于定位的可视地图。maplab工作流程分两步完成:在开环阶段仅使用视觉-惯性里程测量法记录数据;然后离线完成地图管理(即环路闭合检测、图形优化、多次和密集地图重建)。然后可以在局部化模式下使用生成的视觉地图。相反,VIN-Mono的地图管理过程是在线完成的。对于导航,可以提供在图形处理单元(GPU)上计算的局部截断有符号距离场(TSDF)体积图,用于避障和路径规划。为了在大规模环境中保持处理时间限制,vins‐mono限制了图的大小,首先删除没有循环关闭的节点,然后根据图的密度删除其他节点。
•Orb-Slam 2(Mur-Artal&Tard_s,2017)和Stereo Parallel Tracking and Mapping(S-PTAM)(Pire等人,2017)是目前最先进的基于功能的视觉Slam方法中的两种,可用于立体摄像机。最近,Proslam(Schlegel、Coloi和Griesti,2017)发布(目前仅提供基准工具),使用著名的视觉SLAM技术提供全面的开源软件包。对于ORB-SLAM2,它也可以与RGB-D相机一起使用。它们都是基于图形的SLAM方法。对于ORB-SLAM2和S-PTAM,当使用dbow2(g_lvez-l_pez&tard_s,2012)检测到环路闭合时,使用束调整优化地图。为了避免影响相机跟踪帧速率性能,在一个单独的线程中对环路闭合后的图像进行了优化。对于Proslam,通过直接比较地图中的描述符来检测循环闭包,而不是使用一种包字方法。对于所有这些方法,环闭合检测和图形优化处理时间都随着地图的增长而增加,这使得环闭合校正在被检测到后有明显的延迟。这些方法保持稀疏的特征图。如果没有占用网格或密集点云输出,那么就很难在真正的机器人上使用。
•密集视觉里程计(DVO)-Slam(Kerl、Sturm和Cremers,2013年)、Reg Green Blue逆向深度(Rgbid)-Slam(Gutierrez-Gomez、Mayol-Cuevas和Guerrero,2016年)和多线索光度注册(MPR)(Della Corte、Bogoslavskyi、Stachness和Grisetti,2017年),而不是使用局部视觉特征来估计运动,而是使用光度计和所有RGB-D图像像素的深度误差。它们能产生密集的点云环境。MPR也可以与激光雷达一起使用,但它只是一种里程测量方法。dvo-slam缺乏独立于姿态估计的环路闭合检测方法,这使得它不适合大规模建图。
•ElasticFusion(Whelan、Salas-Moreno、Glocker、Davison和Leutenegger,2016年)、Kintinuous(Whelan等,2015年)、BundleFusion(Dai等,2017年)和Infinitam(K_hler、Prisacariu和Murray,2016年)基于RGB-D相机的TSDF音量。他们可以重建网上非常吸引人的基于苏尔费尔的地图,但一个强大的计算机与最近的英伟达GPU是必需的。对于ElasticFusion,在能够实时处理小环境中的相机帧的同时,每帧的处理时间根据地图中的苏菲尔数而增加。对于bundlefusion,全局稠密优化环闭合检测时间随环境的大小而增加。英菲尼坦似乎更快地关闭循环,尽管处理时间的循环关闭检测和纠正仍然增加与环境的大小。虽然这些算法是开源的,但不支持ROS,因为它们依赖于GPU上建图和跟踪之间的极快和紧密耦合。
所有这些以前的视觉SLAM方法都假定相机从未被阻挡,或者图像总是有足够的视觉特征来跟踪。这种假设在自动机器人上是无法满足的,尤其在以下这些情况下,在导航过程中,摄像机被过路的人完全阻挡,或者当机器人面对一个没有视觉特征的表面时(例如,白墙)。以下视觉SLAM方法被设计为对这些事件更为有力:
•多摄像头并行跟踪和建图(MCPTAM)(Harmat、Trentini和Sharf,2015年)使用多个摄像头来增加系统的视野。如果通过至少一个摄像头可以看到视觉特征,则MCPTAM能够跟踪位置。
•红-绿-蓝深度同步定位和绘图(rgbdslamv2)(Endres、Hess、Sturm、Cremers和Burgard,2014年)可使用外部里程计作为运动估计。ROS软件包如Robot_局部化(Moore&Stouch,2014年)可用于多个里程测量源的传感器融合(使用扩展的卡尔曼滤波器),以实现更强大的里程测量。rgbdslamv2可以生成一个三维占用网格(Octomap;Hornung、Wurm、Bennewitz、Stachness和Burgard,2013)和环境的密集点云。
表1总结了开源的与ROS兼容的SLAM方法的输入和输出。LiDAR 3D类别包括所有点云类型,包括源自RGB-D相机深度图像的类型。ODOM是指可以用来帮助SLAM方法计算运动估计的里程计输入。三维占用网格图指Octomap(Hornung等人,2013年)。
·请注意,orb-slam2和rgbid-slam没有任何在线输出:它们确实有一个可视化工具来查看姿态和点云,但它们不提供它们作为其他模块的ROS主题。
·VINS‐MONO提供当前里程计点云,但不提供地图,且TSDF地图输出无法通过当前项目页面提供。
·表1中的最后一个条目确定了可以使用的输入和本文中RTAB-MAP扩展版本中提供的输出。
·除了rtab-map和rgbdslamv2之外,没有可视化的slam方法提供自动导航所需的开箱即用的占用网格输出。rgbdslamv2(endres等人,2014)可能是视觉SLAM法,与rtab-map最为相似,因为两者都可以使用外部里程计作为运动估计。虽然他们不结合IMU和相机,他们仍然可以使用视觉-惯性里程表方法与他们的外部里程表输入。它们还可以生成一个3D占用网格(Octomap;Hornung等人,2013年)和一个密集的点云,用于不同的模块。然而,RTAB-MAP也可以提供二维占用网格,如基于激光雷达的SLAM方法。
RTAB-Map是一种基于图形的SLAM方法,自2013年以来已作为rtabmap_ros7软件包集成在ROS中。图1显示了其主要的ROS节点,称为rtabmap。 odometry是RTAB-Map的外部输入,这意味着SLAM也可以使用任何类型的odometry来完成,只要该odometry适合机器人的应用场景。地图的结构是带有节点和链接的图形。在传感器同步之后,短期记忆(STM)模块创建一个节点,记忆里程表姿势,传感器的原始数据以及对下一个模块有用的附加信息(例如,用于环路闭合和接近检测的视觉词,以及用于全局的局部占用网格)地图装配)。根据从节点创建的数据应该相互重叠的数量,以固定速率“Rtabmap / DetectionRate”创建节点,以毫秒为单位。例如,如果机器人快速移动且传感器范围很小,则应增加检测率以确保连续节点的数据重叠,但将其设置得太高将不必要地增加存储器使用和计算时间。链接包含两个节点之间的严格转换。有三种链接:邻居,循环闭包和邻近链接。通过里程计变换在STM中在连续节点之间添加邻居链路。分别通过闭环检测或接近检测添加循环闭合和接近链接。所有链接都用作图优化的约束。当图形中添加了新的循环闭合或接近链接时,图形优化会将计算出的误差传播到整个图形,以减少里程计漂移。通过优化图形,可以组装OctoMap,Point Cloud和2D Occupancy Grid输出并发布到外部模块。通过tf(Foote,2013)/ map→/ odom也可以获得用于在地图框架中导出机器人定位的里程计校正。
图1 rtabmap ROS节点的框图。 所需的输入是:TF,用于定义传感器相对于机器人底座的位置; 来自任何来源的odometry(可以是3DoF或6DoF); 其中一个摄像机输入(一个或多个RGB-D图像,或立体图像),带有相应的校准消息。 可选输入是来自2D激光雷达的激光扫描或来自3D激光雷达的点云。 然后,来自这些输入的所有消息被同步并传递给图形SLAM算法。 输出为:包含带有压缩传感器数据和图形的最新添加节点的地图数据; 没有任何数据的Map Map; 在TF上公布的里程计校正; 可选的OctoMap(3D占用网格); 可选的密集点云; 可选的2D占用网格。 DoF:自由度; LTM:长期记忆; ROS:机器人操作系统; STM:短期记忆; TF:变换图书馆; WM:工作记忆[颜色图可以在wileyonlinelibrary.com上查看]
RTAB-Map的内存管理方法(Labbé&Michaud,2013)运行在图形管理模块之上。它用于限制图形的大小,以便在大型环境中实现长期在线SLAM。在没有内存管理的情况下,随着图形的增长,诸如循环闭包和接近检测,图形优化和全局建图组装之类的模块的处理时间最终可能超过实时约束,即处理时间可能变得大于节点获取周期时间。基本上,RTAB-Map的内存分为工作内存(WM)和长期内存(LTM)。当节点传输到LTM时,它不再可用于WM内的模块。当RTAB-Map的更新时间超过固定时间阈值“Rtabmap / TimeThr”时,WM中的某些节点将传输到LTM以限制WM的大小并减少更新时间。与固定时间阈值类似,还有一个内存阈值“Rtabmap / MemoryThr”,可用于设置WM可以容纳的最大节点数。为了确定要传输到LTM的节点,加权机制识别比其他节点更重要的位置,使用启发法,例如观察到的位置越长,它就越重要,因此应留在WM中。为此,在创建新节点时,STM将节点的权重初始化为0并将其可视化(导出相应视觉词的百分比)与图中的最后一个节点进行比较。如果它们相似(相应视觉词的百分比超过相似性阈值“Mem / RehearsalSimilarity”),则新节点的权重增加一加上最后一个节点的权重。最后一个节点的权重重置为0,如果机器人没有移动以避免无用地增加图形大小,则丢弃最后一个节点。当达到时间或存储器阈值时,最旧的最小加权节点首先被传送到LTM。当WM中的位置发生循环闭合时,该位置的邻居节点可以从LTM返回到WM,以进行更多的循环闭合和接近检测。当机器人在先前访问的区域中移动时,它可以逐渐记住过去的位置以扩展当前组装的地图并使用过去的位置进行局部化(Labbé&Michaud,2017)。
接下来的部分将更详细地解释RTAB-Map的管道,从Odometry Node到Global Map Assembling。提供了用于配置和使用RTAB-Map的关键参数的定义。
Odometry Node可以实现任何类型的里程计方法,从轮式编码器和IMU衍生的更简单的方法到使用相机和激光雷达的更复杂的里程计方法。独立于所使用的传感器,它应该向RTAB-Map提供至少迄今为止以Odometry message形式估计的机器人的姿势以及相应的tf's transform(例如,/ odom→/ base_link)。当机器人上尚未提供本体感应测定法或不够准确时,必须使用视觉或基于激光雷达的里程计法。对于视觉里程计,RTAB-Map实现了两种标准里程计方法(Scaramuzza和Fraun-dorfer,2011),称为帧到地图(F2M)和帧到帧(F2F)。这些方法之间的主要区别在于F2F针对最后一个关键帧注册新帧,而F2M将新帧注册到从过去关键帧创建的局部特征建图。这两种方法也用于激光雷达,被称为扫描到地图(S2M)和扫描到扫描(S2S),遵循与F2M和F2F相同的想法,但使用点云而不是3D视觉特征。以下部分显示了当选择其中一种视觉或激光雷达里程计法时,如何实施Odometry Node。
3.1.1 |视觉里程计
图2 rgbd_odometry和stereo_odometry ROS节点的框图。 TF定义摄像机相对于机器人基座的位置,并作为输出来发布机器人基座的里程计变换。 对于RGB-D相机或立体相机,管道是相同的,除了计算立体对应以便稍后确定检测到的特征的深度。 可以使用两种里程计方法:绿色的帧到帧方法和橙色的帧到地图的方法。 GFTT:GoodFeaturesToTrack; NNDR:最近邻距离比; ROS:机器人操作系统; TF:转换库[彩色图可以在wileyonlinelibrary.com上查看]
图2显示了RTAB‐Map的视觉里程表,使用两种颜色区分F2F(绿色)和F2M(红色)。它可以使用RGB‐D或立体声摄像机作为输入。tf需要知道相机放在机器人的哪个位置,这样输出里程表就可以转换成机器人的基础帧(例如/base_link)。如果摄像头在机器人头部,并且机器人头部转动,只要更新机器人身体和头部之间的tf,就不会影响机器人底座的里程数。过程如下:
◆特征检测:捕获帧时,检测到GoodFeaturesTo-Track(GFTT; Shi,1994)特征,其最大数量由“Vis / MaxFeatures”参数确定。 RTAB-Map支持OpenCV9中可用的所有特征类型,但已选择GFTT以简化参数调整并在不同图像大小和光强度下获得均匀检测的特征。对于立体图像,使用迭代LucasKanade方法(Lucas&Kanade,1981)通过光流计算立体对应,以导出左图像和右图像之间的每个特征的视差。对于RGB-D图像,深度图像用作GFTT的掩模,以避免提取具有无效深度的特征。
◆特征匹配:对于F2M,匹配是通过最近邻搜索(Muja&Lowe,2009)与最近邻距离比(NNDR)测试(Lowe,2004),使用二元鲁棒独立基本特征(简要)描述符(Calonder,Lepetit, Stre-cha,&Fua,2010)提取的特征与特征图中的特征相对应。要素图包含具有来自最后关键帧的描述符的3D要素。 NNDR由参数“Vis / CorNNDR”定义。对于F2F,光流直接在GFTT特征上完成,无需提取描述符,从而提供与关键帧更快的特征对应关系。
◆运动预测:运动模型用于基于先前的运动变换来预测关键帧(F2F)或特征建图(F2M)的特征应当在当前帧中的何处。这限制了特征匹配的搜索窗口以提供更好的匹配,特别是在具有动态对象和重复纹理的环境中。搜索窗口半径由参数“Vis / CorGuessWinSize”定义,并使用恒定速度运动模型。
◆运动估计:当计算对应关系时,OpenCV的Perspective-n-Point RANSAC实现(Bradski&Kaehler,2008)用于计算当前帧相应于关键帧(F2F)或特征建图(F2M)中的特征的变换。接受转换需要最少的内部“Vis / MinInliers”。
◆局部捆绑调整:使用局部捆绑调整(Kummerle,Grisetti,Strasdat,Konolige,&Burgard,2011)对特征建图(F2M)中所有关键帧的特征或仅最后一个关键帧(F2F)的特征进行细化。 )。
◆姿势更新:使用估计的变换,然后更新输出里程计以及tf / odom→/ base_link变换。使用3D特征对应之间的中值绝对偏差(MAD)方法(Rusu&Cousins,2011)计算协方差。
◆关键帧和特征建图更新:如果在运动估计期间计算的内点数低于固定阈值“Odom / KeyFrameThr”,则更新关键帧或特征建图。对于F2F,关键帧简单地由当前帧替换。对于F2M,通过添加新帧的不匹配功能并更新由局部捆绑调整模块细化的匹配要素的位置来更新要素图。要素图具有固定的最大特征保持临时(因此最多关键帧)。当特征图的大小超过固定阈值“OdomF2M / MaxSize”时,将删除与当前帧不匹配的最旧特征。如果关键帧不再具有要素图中的要素,则将其丢弃。
如果由于某些原因相机的当前运动与预测的运动非常不同,则可能找不到有效的变换(在运动估计或局部束调整框之后),因此特征再次匹配但没有运动预测。对于F2M,将当前帧中的要素与要素图中的所有要素进行比较,然后计算另一个变换。对于F2F,为了对无效对应更稳健,与NNDR进行特征匹配而不是光流,因此必须提取简要描述符。如果仍然无法计算变换,则认为里程计丢失并且在没有运动预测的情况下比较下一帧。输出里程计数姿势设置为空,具有非常高的方差(即9999)。订阅该视觉里程计节点的模块可以知道何时不能计算里程计。
请注意,由于RTAB-Map中的里程计odometry和建图过程无关,因此RTAB-Map中集成了其他视觉里程计方法,以方便比较。选择的方法是开源的或提供应用程序编程接口,并且可以仅用作里程计。由于RTAB-Map负责建图过程,因此无法集成完整的可视化SLAM方法,其中难以将里程计与建图过程分开。在RTAB-Map中集成了七种方法:快速视觉里程计法(FOVIS)(Huang等,2011),Viso2(Geiger,Ziegler,&Stiller,2011),DVO(Kerl等,2013),开放式关键帧 - 基于视觉惯性SLAM(OKVIS)(Leutenegger,Lynen,Bosse,Siegwart,&Furgale,2015),ORB-SLAM2(Mur-Artal&Tardós,2017),多状态约束卡尔曼滤波器(MSCKF)(Sunetal。,2018) )和Google Project Tango。 FOVIS,Viso2,DVO,OKVIS和MSCKF是视觉或视觉惯性测定方法,通过将其里程计输出连接到RTAB-Map,可以直接进行集成。ORB-SLAM2是一种完整的SLAM方法,因此,为了集成在RTAB-Map中,ORB-SLAM2内的循环闭包检测被禁用。 ORB-SLAM2的局部捆绑调整仍然有效,这使得修改后的模块类似于F2M。最大的区别是提取的特征类型(ORB;Rublee, Rabaud, Konolige, & Bradski, 2011)以及它们如何匹配在一起(直接描述符比较而不是NNDR)。与F2M类似,feature map的大小是有限的,因此可以实现恒定的时间可视里程测量(在不限制feature map大小的情况下,ORB‐SLAM2的计算时间会随着时间的推移而增加)。由于ORB‐SLAM2的设计初衷(至少在撰写本文时可用的代码中)不是为了删除或忘记其建图中的特性,因此在删除特性时内存不会被释放,从而导致内存使用量随着时间的推移而增加(又名,内存泄漏)。要在RTAB-Map库中集成Google Project Tango,将禁用区域学习功能,并直接使用其视觉惯性里程计法。
3.1.2 |激光雷达里程计
图3 icp_odometry ROS节点的框图。 TF定义激光雷达相对于机器人基座的位置,并作为输出以发布机器人基座的里程计变换。可以使用两种里程计方法:绿色的扫描到扫描方法和橙色的扫描到地图方法。这些方法还可以选择使用恒速模型(粉红色)或其他里程计法(蓝色)进行运动预测。对于后者,输入里程计的校正发布在TF上。 P2P:点对点; P2N:指向飞机; ROS:机器人操作系统; TF:转换库[彩色图可以在wileyonlinelibrary.com上查看]
图3提供了激光雷达里程计仪的方框图,也使用两种颜色来区分S2S(绿色)和S2M(红色)。使用类似于视觉里程计的术语,关键帧指的是点云或激光扫描。激光扫描输入是2D,点云输入可以是2D或3D。当机器人在扫描过程中移动时,激光扫描会产生运动变形。这里假定在将扫描提供给RTAB‐Map之前纠正了这种失真。注意,如果激光扫描仪的旋转频率相对于机器人速度较高,则激光扫描将具有非常低的运动失真,因此可以忽略校正而不会显着降低配准精度。该过程描述如下:
◆点云过滤:输入点云被下采样并计算法线。 tf用于将点云变换为机器人基础帧,从而相应地计算里程计(例如,/ base_link)。
◆ICP注册:要将新点云注册到点云图(S2M)或最后一个关键帧(S2S),迭代最近点(ICP; Besl&McKay,1992)是使用libpointmatcher的实现完成的(Pomerleau等,2013) )。点云图是由过去的关键帧组装的云。可以使用点对点(P2P)或点对面(P2N)对应来完成注册。 P2N在具有大量平面的人造环境中是优选的。
◆运动预测:由于ICP正在处理未知对应,因此该模块在估计变换之前需要有效的运动预测,无论是从先前的登记还是从外部里程计方法(例如,车轮里程计)到tf(以蓝色和紫色显示,分别)。只有在初始化处理前两帧时,才将身份变换作为运动预测提供。如果不使用外部里程计作为初始猜测,则根据前面转换的恒速模型进行运动预测。这种技术的一个问题是,如果环境不够复杂(如在走廊中),如果对机器人的方向没有限制,里程计可能会漂移很多。在这种情况下,使用外部的初始猜测可以帮助估计环境缺少特征的方向上的运动。例如,具有在没有门的长走廊中移动的短程激光雷达的机器人(即,不可区分的几何形状)将仅看到两条平行线。如果机器人在走廊的方向上加速或减速,icp将能够纠正方向,但它无法检测到走廊方向上速度的任何变化。在这种情况下,使用外部里程计法可以帮助估计ICP不能估计的方向上的速度。如果当前点云的结构复杂度低于固定阈值“Icp / PointToPla-neMinComplexity”,则仅使用ICP估计方向,并且从外部里程计中获得位置(沿着有问题的方向)。 2D点云的结构复杂性被定义为点云法线的主成分分析的第二特征值,乘以2。对于3D点云,使用第三个特征值乘以3。
◆姿势更新:成功注册后,会更新里程计姿势。当使用外部里程计时,tf输出是外部里程计tf的校正,使得两个变换可以在相同的tf树中(即,/ odom_icp→/ odom→/ base_link)。与视觉里程计一样,协方差是使用MAD方法(Rusu&Cousins,2011)在3D点对应之间计算的。
◆关键帧和点云建图更新:如果对应比率低于固定阈值“Odom / ScanKeyFrameThr”,则新帧将成为S2S的关键帧。对于S2M,在将新点云集成到点云建图之前,需要执行额外的步骤。从新的点云中减去地图(使用最大半径“OdomF2M / ScanSubtractRadius”),然后将剩余的点添加到点云图中。当点云建图达到固定的最大阈值“OdomF2M / ScanMaxSize”时,将删除最旧的点。
如果ICP无法找到转换,则失去了里程计。与视觉里程计相比,当运动预测为空时,激光雷达里程计不能从丢失中恢复,以避免大的里程计误差。然后必须重置激光雷达里程计。然而,只要激光雷达能够感知环境结构,机器人就很少会迷失方向。请注意,如果使用外部里程计,运动预测仍然会给出有效估计,因此如果机器人返回丢失跟踪的位置,ICP注册可以从丢失中恢复。最后,类似于集成的第三方视觉里程计方法,激光里程计和测绘(LOAM)(Zhang&Singh,2017)的激光雷达里程计方法的开源版本10已经集成到RTAB-Map中用于比较。
◆关键帧和点云建图更新:如果对应比率低于固定阈值“Odom / ScanKeyFrameThr”,则新帧将成为S2S的关键帧。对于S2M,在将新点云集成到点云建图之前,需要执行额外的步骤。从新的点云中减去地图(使用最大半径“OdomF2M / ScanSubtractRadius”),然后将剩余的点添加到点云图中。当点云建图达到固定的最大阈值“OdomF2M / ScanMaxSize”时,将删除最旧的点。
如果ICP无法找到转换,则里程计跟踪丢失。与视觉里程计相比,当运动预测为空时,激光雷达里程计不能从丢失中恢复,以避免大的里程计误差。然后必须重置激光雷达里程计。然而,只要激光雷达能够感知环境结构,机器人就很少会迷失方向。请注意,如果使用外部里程计,运动预测仍然会给出有效估计,因此如果机器人返回丢失跟踪的位置,ICP注册可以从丢失中恢复。最后,类似于集成的第三方视觉里程计方法,激光里程计和测绘(LOAM)(Zhang&Singh,2017)的激光雷达里程计方法的开源版本10已经集成到RTAB-Map中用于比较。
fgure 4带有RGB‐D摄像头的视觉冲击,就像Xbox 360的Kinect。rgbd_odometry ROS节点用于计算rtabmap ROS节点的odometry。右边是这个传感器配置的标准生成TF树(用虚线将转换链接到相应的发布ROS节点)。RTAB‐地图:slam:基于实时外观的地图;ROS:机器人操作系统;SLAM:同步定位和建图;TF 转换库[颜色图可在wileyonlinelibrary.com]
RTAB‐Map有多种输入主题(如RGB‐D图像、立体图像、里程计、2D激光扫描、3D点云和用户数据),可以根据可用的传感器使用。要使rtab-map ROS节点正常工作,至少需要注册RGB‐D或使用里程计校准的立体图像,通过使用的主题或or提供这些主题(例如/base_link→/camera_link)。图4和图5用相应的tf树演示了两个可视化SLAM示例。RTAB‐Map的视觉里程表节点可以被任何其他里程表方法(即,车轮里程表,其他视觉里程表包,激光雷达里程表等)替代。虚线链接显示哪个节点正在发布相应的tf。对于其他描述机器人上传感器位置的tf帧,通常由摄像机驱动程序、某个static_transform_publisher11或使用机器人的统一机器人描述格式的robot_-state_publisher12发布。
一旦订阅了基本传感器,还可以选择同步另外两个主题:2D激光扫描(如Hokuyo和SICK lidars)或3D点云(如Velodyne lidar),分别生成2D和3D占用网格。它们还可以用于使用ICP细化图表中的链接。
由于传感器并不总是以相同的速率和准确的时间发布数据,因此良好的同步对于避免数据的错误注册非常重要。ROS提供两种同步:精确同步和近似同步。精确同步要求输入主题具有完全相同的时间戳,也就是说,对于来自相同传感器的主题(例如,立体声摄像机的左、右图像) 要求有完全相同的时间戳。近似同步比较传入主题的时间戳,并尝试以最小延迟错误同步所有主题。它用于来自不同传感器的主题。如果输入主题的一个子集(即摄像机主题)必须与精确的时间策略同步,同时与其他传感器近似同步,则同步可能会变得有点棘手。为此,可以使用rtabmap ros/rgbd_sync ros nodelet将摄像机主题同步到rtabmap_ros/RGBDImage13类型的单个主题,然后再到rtabmap节点。图6给出了一个使用RGB‐D摄像机和激光雷达的同步示例。对于RGB‐D相机,ROS包并不总是为RGB和深度图像提供完全相同的时间戳,rgbd_sync也可以与近似同步一起使用,以相机帧速率(例如,30赫兹)同步图像,独立于其他输入速率(例如,激光扫描、里程测量)。
图5使用像大黄蜂2这样的立体摄像机进行视觉SLAM。使用stereo_odometry ROS节点计算rtabmap ROS节点的odometry。RTAB‐Map的ROS节点需要经过校正的立体图像;因此,使用标准的stereo_image_proc ROS节点对其进行校正。右边是这个传感器配置的标准生成TF树(用虚线将转换链接到相应的发布ROS节点)。ROS:机器人操作系统;SLAM:同步定位和建图;转换库[颜色图可在wileyonlinelibrary.com]
图6 RGB‐D摄像机(Xbox One的Kinect)与激光扫描(URG‐04LX)和里程表同步示例。在这种情况下,里程表是通过车轮编码器计算的。在将生成的RGB‐D图像消息与其他传感器(它们的发布速率可能不同)同步之前,使用rgbd_sync ROS节点将摄像机消息同步在一起。右边是这个传感器配置的结果TF树的一个示例(使用虚线链接到相应的发布ROS节点的转换)。ROS:机器人操作系统;转换库[颜色图可在wileyonlinelibrary.com]
图7短期内存的局部占用网格创建。根据参数(以椭圆表示)和可选激光扫描和点云输入的可用性(以菱形表示),局部占用网格可以是2D或3D(彩色图可在wileyonlinelibrary.com上查看)。
在STM中创建新节点时,为了补充Labbe和Michaud(2017)中描述的信息,现在从深度图像、激光扫描或点云计算局部占用网格。对于立体图像,使用块匹配算法(Konolige, 1998)计算密集视差图像,并将其转换为点云。在机器人框架中引用一个局部占用网格,它包含在固定网格大小“网格/单元大小”下的空单元、地面单元和障碍物单元。“一个局部占用网格的总大小由用于创建它的传感器的范围和视野来定义。这些局部占用网格用于生成一个全局占用网格,方法是使用地图图的位置将它们转换为地图引用网格。在对局部占用网格进行预计算时,每个节点需要占用更多的内存,但在对图进行优化后,大大缩短了全局占用网格的更新时间。例如,在之前的工作中(Labbe & Michaud, 2014),当必须生成全局占用网格时,所有的激光扫描都必须重新进行射线追踪。
根据参数“Grid/FromDepth”、“Grid/3D”和输入主题集,将以不同的方式生成局部占用网格,结果是2D或3D,如图7所示。例如,如果参数“Grid/FromDepth”为false,并且rtabmap节点订阅了一个激光扫描主题,则创建一个局部2D占用网格。一个二维的局部占用网格比三维占用网格需要更少的内存,因为可以保存的维度更少(例如z),并且叠加的障碍物可以减少到只有一个障碍物单元。然而,不能使用局部2D占用网格生成3D全局占用网格,而可以使用局部3D占用网格生成2D和3D全局占用网格。选择取决于应用程序需要什么样的全局建图以及可用的处理能力。注意,如果“Grid/FromDepth”为false,并且没有订阅激光扫描和点云主题,则不计算网格。图7中的矩形框描述如下:
◆二维光线追踪:对激光里程计仪的每一束光线,在栅格上描出一条线,以填充传感器和被光线击中的障碍物之间的空单元。假定光线平行于地面。这种方法可以非常快速地生成2D局部占用网格,并且在基于2D激光雷达的建图中是默认的。
◆深度图像点云:输入深度图像(或差异图像的立体影像)预计在3 d空间根据传感器坐标系和摄像机标定。然后在机器人基础框架中对云进行转换。
◆过滤和地面分割:点云是由体素down-sampled网格过滤器(Rusu &表亲,2011)与体素的大小等于固定网格单元尺寸。然后从点云中分割地面,计算点云的法线;然后,在固定的最大角度“Grid/MaxGroundAngle”内,所有法线平行于z轴(向上)的点都被libeled为地面,其他点为障碍物。
◆投影:如果“网格/ 3 d”是假的,三维点云是投射在地面和障碍地平面(例如,x y平面)应承担的。体素网格过滤器再次应用于在相同单元格中投影的合并点。二维光线追踪可以用来填补障碍物和相机之间的空白。如果不使用二维光线跟踪,如果点云没有分割成地面的点,则在传感器与障碍物之间的占用网格中不设置空单元。
◆3d射线追踪:创建一个OctoMap从单一机器人引用地方占用网格。OctoMap进行三维射线跟踪,并检测相机和已占用单元之间的空单元。OctoMap被转换回带有空单元格、地面单元格和障碍物单元格的局部占用网格格式。
环路闭合检测是使用Labbe和Michaud(2013)中描述的bag‐of‐words方法完成的。基本上,当创建一个新节点时,STM从RGB图像中提取视觉特性,并将其量化为一个增量的视觉词汇表。特性可以是OpenCV中包含的任何类型,比如加速健壮特性(SURF) (Bay, Ess, Tuytelaars, & Gool, 2008)、尺度不变特性转换(SIFT) (Lowe, 2004)、ORB (Rublee et al., 2011)或BRIEF (Calonder et al., 2010)。当使用目视里程计F2F或F2M时,可以重用已经提取的用于里程计的特征来检测环路闭合。这消除了提取相同特征的两次。由于环路闭合检测不需要像里程计那么多的特征来检测环路闭合并减少计算量,因此只有响应最高的里程计特征的子集(“Kp/MaxFeatures”的最大值)对视觉词汇表进行量化。当必须计算循环闭包转换时,其他特性仍然保留在节点中。然后将创建的节点与WM中的节点进行比较,以检测循环闭包。STM包含添加到map中的最后一个节点,因此这些节点不用于循环关闭检测。STM中的位置将非常类似于最后一个位置,并且会对它们进行偏置环路闭合假设。在移动节点WM之前,可以将STM视为一个固定大小的缓冲区“Mem/STMSize”。为了计算所创建节点与WM中所有节点之间的可能性,使用Tf‐IDF方法(Sivic & Zisserman, 2003)更新了估计环路闭合假设的贝叶斯滤波器。过滤器估计新节点是否来自以前访问过的位置或新位置。当环路闭合假设达到固定阈值“Rtabmap/LoopThr”时,检测环路闭合并计算转换。转换是使用与视觉里程计法相同的运动估计方法计算的(第3.1.1节),如果接受,则将新链接添加到图中。当激光扫描或点云可用时,使用与激光雷达里程计法相同的ICP配准方法对link的转换进行细化(见3.1.2节)。
在Labbe和Michaud(2017)中引入了接近检测,使用激光扫描(如果可用)来定位接近当前位置的节点。例如,使用接近度检测,当从不同的方向返回同一条走廊时,可以进行定位,而在此过程中,摄像机无法找到环路闭合点。相对于复杂度依赖于WM大小的闭环闭合检测,接近检测的复杂度被限制在接近机器人的节点上。这些节点在图中必须是关闭的,即它们与最新节点之间的链接数应小于固定阈值“RGBD/ProximityMax-GraphDepth”。“当里程计在较大距离上漂移时,机器人可能会移动到与当前实际位置不同的先前建图的区域,因此使用这个阈值,邻近检测不与先前建图区域的节点进行比较,以避免无效的邻近检测。”如果里程表漂移不太大或地图更新速度较高,则可以将阈值设置得更高,否则应降低阈值。
当由于内存管理而检测到环路闭合或接近检测,或检索或传输某些节点时,使用图优化方法来最小化地图中的错误。RTAB‐Map集成了三种图优化方法:基于树的网络优化器(TORO) (Grisetti, Kummerle, Stachniss, & Burgard, 2010)、图优化通用框架(g2o)(Kummerle等,2011)和GTSAM (Dellaert, 2012)。g2o和GTSAM的收敛速度快于TORO,但是当多个独立的图必须合并在一起时,它们对多进动建图的鲁棒性较差。TORO对里程表协方差估计较差的敏感性也较低。然而,基于经验数据,对于单幅地图,g2o和GTSAM的优化质量优于TORO,特别是对于六自由度地图。GTSAM对多会话的健壮性略高于g2o,因此RTAB‐Map中默认使用的策略与我们之前使用TORO的策略相反。
视觉环路闭合检测不是没有误差的,非常相似的地方会触发无效的环路闭合检测,这将给地图增加更多的错误,而不是减少错误。为了检测无效的环路闭合或邻近检测,RTAB‐Map现在使用一个新参数。如果优化后一个链路在图中的变换变化大于其平移方差的因子“RGBD/OptimizeMaxError”,则拒绝新节点添加的所有闭环和邻近链路,保持优化后的图的原样,就好像不曾发生过闭环。
图8全局地图拼接。根据在建图图中创建的局部地图的类型(图7),可用的输出全局建图将有所不同。只有三维局部占用网格才能生成三维占用网格(OctoMap)及其二维投影(彩色图可在wileyonlinelibrary.com上查看)。
图8显示了可以从图7的局部占用网格组装的全局地图输出。在节点中保存3D局部占用网格可以提供最大的灵活性,因为它们可以用来生成所有类型的地图。但是,如果只需要一个2D全局占用网格建图,那么在组装局部建图时,在节点中保存已经投影的局部网格可以节省内存(每个点两个数字而不是三个)和时间(点已经被投影到2D)。利用地图的图形,将每个局部占用网格转换为相应的位姿。当向map添加新节点时,新的局部占用网格将与全局占用网格相结合,从而清除和添加障碍。当发生循环闭合时,应根据图中所有节点的所有新优化姿态重新组装全局图。此过程是必需的,以便在重新包含环路关闭之前已被错误清除的障碍。点云输出集合局部建图的所有点,并以标准的sensor_msgs/PointCloud214 ROS格式发布它们。体素网格滤波用于合并重叠的表面。生成的点云是一种便于可视化和调试的格式,并且易于与第三方应用程序集成。
RTAB‐Map的性能已经在四个数据集上进行了评估,这些数据集都有一个地面真实环境:KITTI (Geiger, Lenz, & Urtasun, 2012)、TUM RGB‐D (Sturm, Engelhard, Endres, Burgard, & Cremers, 2012)、EuRoC (Burri等,2016)和PR2麻省理工学院斯塔中心(Fallon, Johannsson, Kaess, & Leonard, 2013)。这些数据集有各种各样的传感器(即,立体声和RGB‐D摄像机,2D和3D激光雷达,组合车轮和IMU里程表)。使用RTAB‐Map作为通用评估框架,可以概述所有传感器和里程表配置之间的性能差异。用于轨道精度的指标是绝对轨道(ATE)根‐均方误差,由TUM RGB‐D基准得出(Sturm等,2012)。所有的误差都是使用建图的图计算的,包括循环闭包。
实验在一台台式机上进行,使用英特尔酷睿i7‐3770处理器(四核)、6gb RAM和512 GB固态硬盘(SSD)运行Ubuntu 16.04。为了独立于计算能力比较不同SLAM构型的轨迹精度,KITTI、TUM和EuRoC数据集都是离线处理的,即使在某些情况下里程计处理时间高于相机帧速,但每帧都是里程计处理的。为了比较总体计算负荷与计算时间的关系,离线实验采用单核。对于PR2 MIT Stata中心的数据集,实验是在ROS中进行的,并不局限于计算机的特定核心。表2显示了用于所有数据集的默认参数(除非显式指定)。为了公平比较RTAB‐Map和其他SLAM方法的结果,在这些实验中,RTAB‐Map的内存管理已被禁用(“Rtabmap/TimeTheshold”和“Rtabmap/MemThreshold”均设置为0)。
对于离线数据集,不同的立体里程计方法使用各自的立体对应方法进行测试,可以生成略有不同的视差值。我们也注意到相机校准并不总是准确的:校正后的图像仍然包含一些可见的失真。这些问题会影响所创建地图的比例尺,因此在与地面真实值(我们假设没有比例尺误差)进行比较时,会产生偏差轨迹精度。在Mur‐Artal和Tardos(2017)中观察到,一些TUM RGB‐D序列的深度图像值可能略有偏差,也会造成缩放问题。为了对所有视觉里程测量方法进行公平的比较,由于我们无法知道比例尺问题是由摄像机标定和/或视差计算方法引起的,因此我们将结果与比例尺地图一起给出,以使对地面真实值的误差最小化。当ORB‐SLAM2被用作RTAB‐Map的里程表输入时,它被称为ORB2‐RTAB,以区别于ORB‐SLAM2完整SLAM版本的结果。类似地,当LOAM被用作RTAB‐Map的里程表输入时,它被称为LOAM‐RTAB。
请注意,本文的重点是位姿估计评估,以比较SLAM方法。定位鲁棒性没有被明确地处理,但是在所有给出的结果中,没有错误的循环闭包被接受。对于相似的位置,要么由于没有足够的视觉inliers(参见3.1.1节的运动估计)而被拒绝,要么由于图优化误差较大(参见3.5节),使得评估对测试数据集的无效定位具有鲁棒性。
图9使用RTAB‐Map与立体里程计F2M (a,b,c)和激光雷达里程计S2S (d,e,f)对KITTI序列00 (a,d)、01 (b,e)和08 (c,f)的地面真实环境的轨迹。RTAB‐Map(蓝色)估计的姿态与地面真实环境(黑色)之间的误差显示为红色。F2M: frame-to-map;RTAB‐地图:基于实时外观的地图;S2S: Scan‐To‐Scan(彩色图可在wileyonlinelibrary.com查看)
在KITTI的数据集中,立体图像是由安装在汽车顶部的两个同步单色点灰相机记录下来的。数据集提供尺寸为1,241×376像素的经校正的立体图像,基线为0.54 m,频率为10 Hz。数据集还包含来自安装在车顶的Velodyne 64E的3D点云。点云与10赫兹的立体图像同步。对于使用激光雷达的S2M和S2S方法,为了减少计算负载和内存使用,在点云滤波步骤中,使用50cm的体素滤波器对原始点云进行降采样。基于初步测试,选择了点对点ICP配准,因为在该数据集上,点对点ICP配准的结果略好于点对点ICP配准,尤其是在树木众多、飞机不多的序列中。对于S2M,“OdomF2M/ScanSubtractRadius”设置为50 cm以匹配体素滤波器。调速发电机数据360∘远范围,”奥多姆/ ScanKeyFrameThr”设置为0.8,而不是0.9触发新的关键帧较少。与其他数据集相比,KITTI拥有更大的图像。因此,参数修改图像大小的影响:“GFTT / MinDistance”设置为7,“GFTT / QualityLevel”设置为0.01,“活力/ MaxFeatures”设置为1500,因此“Kp / MaxFeatures”设置为“活力/ MaxFeatures”在750的一半,和“OdomF2M /最大容量”设置为3000。
图9显示了使用RTAB‐Map与立体里程计(F2M)和激光里程计(S2S)得到的视觉和激光雷达轨迹的比较,与KITTI数据集中三个序列的地面真实环境有关:序列00具有环路闭合;序列01已在高速公路上以90公里/小时以上的速度拍摄;序列08没有loop closure(例如,当遍历相同的片段时,相机的方向是不同的)。当在这个尺度上比较轨迹时,视觉和激光雷达的方法并没有太大的区别,两者都很好地遵循了地面的真实情况(轨迹真值))。表3总结了RTAB-MAP中可用的所有里程计配置的轨迹精度,以及ORB-SLAM 2(Mur-Artal&Tard_s,2017)、LSD-SLAM(Engel等人,2015)和基于特征跟踪(Soft)SLAM的立体里程计算法(CVI_i_,_esi_,Markovi_&Petrovi_,2018)报告的性能。oavg是将方法限制到单个CPU内核时,所有序列的平均里程测量时间。对于三个序列(06、07和09),与基于视觉的方法相比,使用Velodyne提供了更好的性能。然而,对于不是几何复杂的高速公路序列序列01,基于激光雷达的每一种方法都是非常糟糕的:许多沿着y轴的错误(在基蒂坐标中)是由糟糕的节距估计造成的。相比之下,基于视觉‐的方法可以使用距离激光雷达更远的特征来更好地估计音高方向。S2M和S2S给出的误差相对相同,所以两者之间的选择可以基于oavg的计算时间,S2S总是最快的。与其他基于激光雷达的方法相比,LOAM‐RTAB仅适用于第四个序列。仅比较基于视觉的方法, ORB2‐RTAB在11个序列中的9个序列中表现最佳,F2M在6个序列中表现最佳(4个序列并列)。然而,ORB2‐RTAB不能满足实时要求(oavg总是超过100毫秒)。在ORB‐SLAM2论文中(Mur‐Artal & Tardos, 2017),使用多个核可以在100毫秒内处理序列,而这里仅使用一个核。在使用立体声摄像机的功能不太强大的计算机上,F2M里程表似乎是更好的选择。Fovis是最快的配置,但它很容易丢失:没有足够的视觉内围层计算转换,和里程计是自动复位内库,导致一些失踪的运动建图或非常糟糕的转换(“×”意味着一个非常高的漂移)。
为了便于与其他使用KITTI数据集的论文进行比较,表4给出了使用KITTI数据集报告的平均平移误差度量(Geiger et al., 2012)。还展示了基于激光雷达的LOAM方法(Zhang & Singh, 2017)的结果。计算了所有可能的长度子序列的平移误差(以百分比为单位)(100,…,然后把它们平均在一起。ORB2‐RTAB方法在11个序列中的10个序列中表现最佳。ORB2‐RTAB和ORB‐SLAM2之间的差异可以通过环路闭合检测和图优化方法之间的差异来解释,也可以通过第4节开头解释的地图缩放过程来解释。使用更复杂的扫描匹配方法的LOAM在11个序列中有7个序列的得分比仅使用激光雷达里程计方法要好。这说明从点云中提取几何特征比单纯使用ICP方法可以得到更好的运动估计。在比较LOAM‐RTAB和LOAM时,使用的开源版本(对这类Velodyne使用默认参数)似乎不能完美地再现原始算法,或者需要进行一些参数调优,因为我们预计结果会更相似。最后,用F2M里程计方法测量RTAB‐Map的结果已提交给KITTI’sodometry benchmark15,用于测试序列11-21。表5给出了表3中其他方法的当前排名快照。
与常用的ORB‐SLAM2和LSD‐SLAM方法相比,RTAB‐Map的平移误差非常接近,甚至在旋转性能方面略好一些。请注意,LOAM、SOFT‐SLAM和LSD‐SLAM(立体声版本)目前没有作为c++库或ROS提供,这使得它们难以在真实的机器人上使用。
TUM RGB‐D数据集是在小型办公环境中使用手持Kinect v1记录的。RGB和深度图像在30赫兹的频率记录,并使用数据集提供的工具同步。
图10 RTAB‐Map与RGB‐D odometry F2M(蓝色)对三个TUM序列fr1-room (a)、fr2-xyz (b)和fr3-office (c)的轨迹对比(黑色)。RTAB‐Map估计的姿态与地面真实值之间的误差用红色表示。F2M:地理框架~地图;RTAB‐地图:基于实时外观的地图。F2M:地理框架~地图;RTAB‐地图:实时外观‐基于地图[颜色图可在wileyonlinelibrary.com查看]
图10显示了F2M与三个TUM序列的地面真实环境的比较轨迹。在fr1序列中,相机的移动和旋转速度比其他序列快,导致估计的轨迹偏离地面真相更多。当使用这种相机快速移动时,RGB和深度图像之间的同步效果很差(即RGB和深度图像之间的同步效果很差)。, RGB像素并不总是与正确的深度像素匹配),导致错误的运动估计。表6给出了其他方法的ATE结果,如ElasticFusion (Whelan et al., 2016)、kintin - (Whelan et al., 2015)、DVO‐SLAM (Kerl et al., 2013)、RGBDSLAMv2 (Endres et al., 2014)、RGBiD‐SLAM (Gutierrez‐Gomez et al., 2016)和BundleFusion (Dai et al., 2017),用于比较。综合比较RTAB‐Map方法,ORB2‐RTAB在7个TUM序列中有6个序列得分最高,其次是F2M。相比较高的错误观察ORB2 RTAB应承担的原始ORB SLAM2应承担因为在ORB SLAM2应承担的方法一个全局束调整完成后关闭一个循环:有很多的视觉特性在许多关键帧之间共享,全局束调整确实可以提供更多的计算时间,比只有更好的优化优化之间的联系图'snodesas inRTAB地图。与RTAB‐Map的F2F和F2M里程计方法相比,使用这种传感器,ORB2‐RTAB对大于4米的大深度误差以及RGB和深度相机之间的不良同步似乎不那么敏感。换句话说,ORB‐SLAM2在新帧到达时改进了特征图中特征的3D位置,即使从深度图像中获取的初始深度是错误的,也能提供更好的特征三角测量。这可以解释为什么ORB2‐RTAB的性能优于F2F和F2M。与其他视觉SLAM方法相比,F2M仍然表现良好。此外,由于fr1序列的快速旋转运动,与F2M使用的特征匹配相比,F2F存在光流跟踪特征的问题。最后,Fovis是最快和唯一的实时里程测量方法(低于33毫秒),其次是F2F和DVO。
图11三个EuRoC序列的RTAB‐Map与立体声里程计F2M (a,b,c)和视惯性里程计OKVIS (d,e,f)对地面的真实轨迹,分别为V1-02-medium (a,d)、V2-03-difficult (b,e)和MH-04-difficult (c,f)。RTAB‐Map(蓝色)估计的姿态与地面真实环境(黑色)之间的误差显示为红色。F2M:地理框架~地图;RTAB‐地图:实时外观‐基于地图[颜色图可在wileyonlinelibrary.com查看]
EuRoC数据集在小型室内房间(V1和V2)和机房(MH)用无人机拍摄11幅20赫兹的立体图像序列。同步IMU数据与相机也可用。虽然图像是时间同步的,但相机之间的曝光水平是不同步的(例如,右图像可以比左图像暗,对比度低)。这增加了在计算视差时,在左右图像之间找到良好的立体对应的难度。为了缓解这一问题,曝光补偿(Xu & Mulligan, 2010)在使用里程表方法处理左、右图像之前,先对它们进行补偿。对于OKVIS里程计,IMU是沿着立体图像使用。
图11显示了使用OKVIS的立体里程计方法(F2M)和视觉惯性里程计方法计算的三个EuRoC序列的路径,并与地面真实环境进行了比较。除了V2‐03‐困难序列中F2M无法估计整个轨迹外,立体视觉里程计和视觉惯性里程计的结果相似。表7给出了所有序列的ATE结果。总的来说,与其他RTAB‐Map的里程计ap-proaches相比,ORB2‐RTAB在11个序列中的6个序列上表现得更好,但它是计算成本第二高的方法。OKVIS和MSCKF是唯一能够跟踪整个V2‐03‐困难序列的方法。其他方法在快速运动和大量运动模糊的情况下会失败,从而难以跟踪特征:视觉惯性里程计方法对这类事件的鲁棒性更强。Fovis, F2F和MSCKF是唯一的实时方法(低于50毫秒)。对于OKVIS和MSCKF,处理时间(在单个CPU内核上)是图像更新的平均时间,不包括在1毫秒内完成的IMU更新。对于V1和V2序列,ORB2‐RTAB的性能比ORB‐SLAM2论文(Mur‐Artal & Tardos, 2017)中报道的结果差:ORB‐SLAM2对环路关闭执行的全局束调整将比仅使用RTAB‐Map对这些序列执行的图优化提供更好的优化。而MH序列则相反。LSD‐SLAM仅在V1序列上测试过,三个序列中有两个的结果略优于F2M。
麻省理工学院Stata中心的数据集是一个在办公环境中远程操作的PR2机器人上记录的ROS包的集合。我们使用的两个序列是2012‐01‐25‐12‐14‐25和2012‐01‐25‐12‐33‐29。之所以选择这些序列,是因为它们有许多传感器:2D激光雷达数据、立体图像、RGB‐D图像,以及轮毂和IMU里程表的组合,使它们能够完美地比较RTAB‐Map的不同配置。当回放ROS包时,传感器数据以与机器人相同的速度发布,从而可以测试SLAM算法的在线性能。此外,这两个序列重叠,允许测试多进制SLAM。在这些袋子中记录的激光扫描来自一个30米(UTM30)、40赫兹的二维远程激光雷达。为了使用短程激光雷达进行测试,使用ROS laser_filters package16对扫描信号进行最大距离5.6米的滤波,以模拟成本更低的短程激光雷达(如URG‐04LX)。对于使用激光雷达的S2M和S2S方法,使用5 cm的体素滤波器对激光扫描进行降采样,然后在点云滤波步骤中计算法线。点到平面的ICP配准是在“ICP /点到平面的复杂度”设置为0.02的情况下完成的。
为了使使用MIT Stata中心数据集进行比较成为可能,必须解决以下问题:
由于这些ROS包很大(30 - 50gb),需要实时传输大量数据,因此计算机上的硬盘很难正确回放这些包,有时会导致延迟和消息丢失。这对于视觉里程测量方法来说尤其恼人,因为这种方法需要接收连续不断的图像流,以避免丢失;激光雷达的方法受影响较小,因为激光扫描的大视场使它们几乎可以从任何方向恢复。由于这个原因,每个序列都有一个立体声和一个RGB‐D包,图像的频率由30赫兹提高到15赫兹,这样计算机就可以不延迟地传输图像。视觉里程计方法使用这15赫兹的袋子进行测试,激光雷达方法测试原始袋子。对于能够在目标计算机上处理速度超过15赫兹的图像的visualodometryapproach来说,与使用30赫兹的图像相比,这确实会对它们的性能产生负面影响。然而,根据我们的实验,15赫兹是一个很好的权衡,既能在线处理所有图像,又不会丢失(以PR2的速度),因此可以更好地独立于帧速率比较它们的性能。
我们观察到,与激光雷达数据相比,立体声或RGB‐D数据的比例略有偏差:立体声相机设置的立体声基线使用了1.091664,RGB‐D相机设置的深度图像使用了1.043。
激光雷达位于基地和机器人的摄像头的头,直接向前。包中包含的地面真相是指/laser_link帧。因此,我们创建了一个特殊的节点来将其转换回/base_footprint帧中,这样所有的方法(例如,基于激光雷达或基于视觉的)都会在机器人上引用amebase帧。
我们也观察到有一个偏移量与地面实况帧之间的时间戳和主题,这可能是一个技术错误造成rosbag地面实况记录时。因此,在/ base_footprint帧中重新发布ground truth的偏移量为82.2 s,以便与其他主题同步。
ATE值在每一帧计算,以查看它们随时间的演变。ATEmax为实验过程中的最大误差,ATEend为实验结束时的误差。ATEmax表示哪种方法更适合于自主导航,从而最小化里程漂移,ATEend表示最终的地图在多大程度上代表了环境。由于机器人移动速度相对较慢,序列较长,因此将“Rtabmap/DetectionRate”设置为1hz,以减少内存占用,将“Mem/STMSize”设置为大小的一半(15)。WheelIMU是一种新的里程计法介绍了与实验相比与其他数据集:WheelIMU里程计法估计相结合的里程计法计算了车轮编码器和乌兹别克斯坦伊斯兰运动使用扩展卡尔曼滤波(马德尔检测o艾普斯坦,伯杰,富特、Gerkey & Konolige, 2010),已在袋。当设WheelIMU为S2M前缀,S2S接近时,表示将WheelIMU作为外部里程计估计提供给S2M或S2S。wheelimurefine表示,当建图模块中向STM添加新节点时,使用激光扫描对邻居链接进行细化(“RGB‐D/ neighborlinkrefine”为真)。对于基于激光雷达的里程计方法,RGB‐dcamera用于RTAB‐Map中的环路闭合检测。立体摄像机也可用于环路闭合,但用RGB‐D图像计算运动估计比用立体图像略快(避免了立体对应计算)。
图12分别使用RTAB‐Map(蓝色)和ground truth(黑色)对2012‐01‐25‐14‐25 (a,c)和2012‐01‐25‐12‐33‐29 (b,d) Stata中心序列使用立体声摄像机(a,b)或远程激光雷达(c,d)绘制的轨迹图(蓝色)。RTAB‐Map估计的姿态与地面事实之间的误差用红色表示。F2F: ~检测帧;F2M:地理框架~地图;惯性测量单元;RTAB‐地图:基于实时外观的地图;S2M:扫描~地理地图;S2S: scan‐to‐scan(颜色图可在wileyonlinelibrary.com查看)
图12显示了基于立体声的方法(F2M)和基于远程激光雷达的方法(WheelIMU→S2M)之间的轨迹比较。虽然最终的结果大致相似,但基于激光雷达的方法几乎完全符合地面的真实情况。表8给出了每个序列的最终ATE性能。长射程激光雷达的配置是最精确的(最低ATEend和ATEmax),使用与否,S2M和S2S方法之间没有太大差别。对于短程激光雷达,最好使用惠里姆→S2M超过惠里姆→S2S。穷人的结果S2M和s2短量范围激光雷达是由序列的走廊:正如3.4节中解释的一样,当进入一个走廊以一个恒定的速度和一个短的激光雷达,机器人不知道它正在加速或减速,而只看到两条平行线,所以匀速运动的假设,它沿着走廊方向漂移,直到到达走廊的尽头;对于WheelIMU→S2M和WheelIMU→S2S的接近,这并没有发生,因为外部里程计(结合使用车轮和IMU)可以显示机器人停在走廊中间。
在计算时间上,激光雷达里程计方法比视觉里程计方法(oavg最低)快,所有激光雷达实验均采用S2S里程计方法。请注意,WheelIMU方法没有任何计算成本(oavg),因为这是保存在ROS包中的里程表,直接用作RTAB‐Map的输入。由于精度是相似的,一个可能会选择WheelIMUrefined而WheelIMU→S2M最小化计算成本,但后来是导航的优点:可以使用激光雷达里程计的里程计法输入其他ROS模块应该建图模块的独立运行在更高的帧率(例如,move_base当地costmap可以更准确地更新使用里程计法从WheelIMU→比WheelIMU S2M)。
因此,在这种环境下,激光雷达SLAM的性能优于视觉SLAM。只比较视觉方法,立体声输入比RGB‐D输入给出更好的结果。这可以解释为RGB‐D传感器在大于4米的范围内深度精度较差。相比之下,对于立体相机,更远的特征具有更好的深度估计,这有助于改进运动估计。ORB2‐RTAB和F2M分别在第一和第二序列上表现得更好。在输入图像为15赫兹时,所有的视觉里程计方法都能够实时处理帧(低于66毫秒)。由于在3.1.1节中解释了它的内存泄漏,ORB2‐RTAB需要更多的RAM,容量为1,600 MB,而其他方法需要230 MB。由于FOVIS经常迷路,它无法完成轨迹。如果只考虑地图的最终误差,WheelIMU的性能优于视觉里程测量方法。这主要是由于一些区域缺乏视觉特征,视觉里程测量比惠里姆漂移大得多,导致运动估计不一致,影响了图优化的质量。然而,在建图过程中,WheelIMU会产生较大的误差,这使得它不太适合导航。
4.4.1 | 基于激光雷达的SLAM比较
图13 RTAB‐Map的WheelIMU→S2M与其他基于激光雷达的SLAM方法的比较。使用短程激光雷达(a,b)或远程激光雷达(c,d)在序列2012-01-25-12-14-15 (a,c)和2012-01-25-12-33-29 (b,d)上。RTAB‐地图:基于实时外观的地图;SLAM:同步定位和建图;S2M: scan‐to‐map(彩色图可在wileyonlinelibrary.com查看)
进一步说明的功能的扩展版本RTAB应承担的地图,我们进行了实验比较RTAB地图基于激光雷达检测大SLAM使用WheelIMU→S2M配置与其他流行的开放源码应承担的激光雷达检测基于SLAM方法,也就是说,谷歌地图制作者(Hess et al ., 2016), Karto大SLAM(Vincent et al ., 2010),赫克托耳大SLAM(Kohlbrecher et al ., 2011),和GMapping (Grisetti et al ., 2007)。他们的ROS实现已经用于长范围和短范围激光雷达数据的默认参数。对于谷歌制图师,GMapping和Karto SLAM,也使用组合的WheelIMU里程表作为输入。图13和表9总结了ATE的结果。对于GMapping,由于它使用粒子过滤器估计多个路径,ATE值是根据当前发布的最佳路径计算的。ATE为1 m意味着如果此时机器人必须返回到地图上的某个特定位置,则至少有1 m的误差(如果没有定位,则不考虑后续累积的误差)才能到达该位置。因此,对于自主导航,ATE应该尽可能的低,当ATE增加时,表示机器人估计的位置在漂移。如果这个值漂移得太多,自动导航可能无法返回到已知区域。为了减少误差,机器人必须在地图上进行定位,这可以通过闭环检测来实现。当ATE降低时,可以观察到环路闭合检测的发生。例如,在图13b中,一个大的循环闭包在500 ms左右(在第二个垂直虚线上)。对于长距离激光雷达,RTAB‐Map的WheelIMU→S2M是漂移较小的方法,在第二个序列上与Hector SLAM的ATEmax值相等。对于短程激光雷达,RTAB‐Map的WheelIMU→S2M是两个序列的最佳选择。当使用短程激光雷达时,其他方法在走廊部分漂移了很多。特别是,Hector SLAM是唯一一种不使用外部里程测量来帮助扫描匹配的方法,它在穿越走廊时发散得更大(每个序列中分别在600秒和400秒后由竖线标识)。
如第3.3节所示,根据所选择的传感器和配置,可以使用一些方法来创建局部占用网格和组装第3.6节中描述的全局占用网格。这些选择会影响计算时间、内存使用和建图质量。表10给出了所有可能的配置。对于局部占用网格,图7提供的可能性包括网格/FromDepth、网格/3D和网格/光线跟踪。图8所示的全局入住率网格包括2D (2D全局入住率网格)、OctoMap 2D (OctoMap投影中的2D全局入住率网格)和OctoMap 3D (3D全局入住率网格)。结果给出了使用2012 01应承担的量25量12量14还是25麻省理工学院占据中心的序列数据集,与“网格/ CellSize”设置为5厘米和“网格/ MaxGroundAngle”设置为45∘。局部占用网格的时间是指STM创建局部占用网格所需的时间。全局入住率网格的时间为更新全局入住率网格所需的时间:更新时间为将新的局部入住率网格组装到全局入住率网格所需的时间;Pub时间是序列化全局占用网格并将其作为ROS主题发布所需的时间;With循环时间是在循环结束后优化图时重新组装整个全局占用网格所需的额外时间。正如预期的那样,从2D激光雷达数据生成2D局部占用网格比从深度或视差图像生成网格要快,因为需要处理的点更少。当使用立体输入时,与RGB‐D相比,需要额外的10毫秒来计算视差图像,而RGB‐D可以直接使用深度图像。对于相机输入,二维光线跟踪增加1ms(例如,RGB‐Dcamera是14ms,而RGB‐Dcamera是13ms)。
图14带有远程激光雷达(a,b)、RGB-D (c-g)和立体声(h-l)摄像机的局部占用网格示例。对于相机,分割实例(d,i)对应于没有光线跟踪的三维局部占用网格,其他的是没有(e,j)或有(e,f,g,j,k,l)二维光线跟踪的二维局部占用网格。障碍细胞用红色表示。空单元格和地面单元格显示为绿色。黑色网格只是一个视觉参考,单元格大小为1 m(颜色图可在wileyonlinelibrary.com查看)。
图14给出了根据传感器和使用方法生成局部2D占用网格的示例。基于激光雷达的栅格提供了更大的视野,但只有在激光雷达高度的障碍物才能被探测到。相比之下,基于RGB‐D的网格可以探测到激光雷达无法探测到的一些障碍物,比如黄色的椅子,使导航在这种环境下更加安全。然而,如图14(g)左所示,RGB‐D相机在5米后检测到的障碍物精度较低。立体摄像机可以探测到大部分障碍物,只要它们是有纹理的。它的视野比RGB‐D摄像机更大,可以探测机器人前方的桌子,而RGB‐D摄像机无法看到它。注意,这个二维射线追踪方法,因为摄像机不接近地面,如果机器人接近表从前面摄像头看不到了,障碍之前添加到全局占用网格地图,因为表将不正确。若要使用2D光线追踪,最好将相机置于环境中最小障碍物的高度。如果由于机器人的一些物理限制而无法降低相机的高度,那么使用不带光线追踪的2D局部占用网格将会更加安全,并且只有当相机能够看到障碍物所在的地面时才会清除动态障碍物(如图14d所示)。注意,立体摄像机无法看到地面(见图14i),因此没有光线跟踪就无法清除动态障碍物。另一种解决安全清障问题的方法是使用带有光线追踪和八坐标图的三维局部占用网格,以显著提高所需的处理能力为代价。图15展示了使用RGB‐D和立体声摄像机进行三维光线跟踪的示例。由于深度图像比视差图像更密集,使用RGB‐D相机进行光线跟踪需要更多时间。然而,由于立体摄像机有更大的视野,更多的空间将被填满,创建更大的局部占用网格。这就解释了为什么从立体摄像机更新3D全局局部占用网格比从RGB‐dcamera花费更多的时间。Ifa3D占用网格是必需的,环境是静态的(没有需要清除的动态障碍),避免光线跟踪可以帮助节省大量的计算资源。
图15‐带有RGB-D (a-d)和立体声(e-h)摄像机光线跟踪示例的三维局部占用网格图[彩色图可在wileyonlinelibrary.com查看]
图16带有短程激光雷达(a)、远程激光雷达(e)、RGB-D (b-d)和立体声(f-h)摄像机的二维占用网格图示例[彩色图可在wileyonlinelibrary.com]
图16显示了为表10中不同传感器和局部占用网格方法创建的相应2D全局占用网格。基于激光雷达的地图提供了最精确的环境几何形状(在激光雷达的高度),其次是由RGB‐D相机创建的地图。没有光线跟踪,基于立体的地图几乎不包含空单元,因为视差方法无法看到没有纹理的地面。一些墙壁也没有检测到或非常嘈杂。使用光线跟踪,可以填充空白。当比较二维光线追踪和三维光线追踪时,可能会发现使用二维光线追踪有些障碍物被错误地清除了:在门的旁边,环境被认为是静态的,所以不应该清除障碍物。对于三维光线追踪,当打开门时,如果相机的视场无法看到整个打开的门(例如,相机无法看到门的底部),那么它只能清除它能看到的门的体积,而将底部作为障碍物。图17显示了使用RGB‐Dcamera在树深16和14处的OctoMap的三维占用网格。Treedepth16对应的细胞大小为5厘米,用RGB颜色表示。在树深较低的地方生成OctoMap会增加单元格大小(分辨率较低),这对于更快的路径规划非常有用。
图1 7八层图a) 16和b) 14使用RGB‐D相机(彩色图可在wileyonlinelibrary.com查看)
对于图中不断添加新节点的大型和长期SLAM,上述基于占用网格类型调整计算负载的解决方案可能还不够。在之前描述的所有实验中,RTAB‐Map的内存管理机制都被禁用,以便始终能够访问全局地图,进行轨迹精度和占用网格比较。为了概述图1中RTAB‐Map的WM的每个模块在大型环境中所需的时间,对麻省理工学院Stata中心的两个序列进行了背对背的播放,创建了一个包含两个连接在一起的建图会话的长建图实验。两个序列的开始和结束位置都相同,因此在播放第二个包时可以检测到第一个序列的结束和第二个序列的开始之间的循环闭合,从而自动合并两个建图。由于两个袋子之间的ground truth坐标略有偏差,第二个袋子的ground truth与第一个袋子的ground truth在相同的坐标下变换。为此,我们组装每个序列的扫描分别使用各自的地面真理,然后使用pcl_icp tool17,两个点云是注册和由此产生的转换(xy,θ)(0.006236 m =−0.351500米,0.017832−rad)可以ap-plied地面真理的第二包。RTAB‐Map的更新速率“Rtabmap/DetectionRate”也增加到2hz,将节点数增加一倍,将“Mem/STMSize”设置为30,使节点在STM中的时间与在1hz时相同。WM被限制为300个节点的最大“Rtabmap/MemoryThr”大小,以便更好地观察在WM中保留少量节点时内存管理的效果。RTAB‐Map使用的里程表配置为带有短程激光雷达的WheelIMU→S2M。从表8可以看出,虽然精度结果略低于长射程版本,但使用短射程激光雷达需要更少的时间来重新生成全局占用网格,如表10所示,具有类似的质量(图16a与图16e)。
图18在没有(a)和有(b)内存管理的情况下,使用MIT Stata Center序列的组合会话,map更新速率为2hz, rtabmap ROS节点内的每个模块所需的处理时间。ROS:机器人操作系统(彩色图片可在wileyonlinelibrary.com查看)
图18给出了没有(a)和(b)内存管理的RTAB‐Map WM模块的计时结果,如图1所示。水平线是实时时间限制,也就是说,在2hz时允许添加新节点。在这种情况下,没有内存管理的RTAB‐Map的WheelIMU→S2M不能满足实时限制,因为一些更新需要超过500毫秒。在节点3000和3500之间,机器人正在重新访问一个已经访问过多次的区域(例如,每个序列的开始和结束区域),用之前建图的路径触发更多的闭环关闭和接近检测。随着地图大小的增加,更新时间也会增加,如果在机器人移动的几秒钟内没有添加新节点,就会在地图上创建大洞。通过内存管理,RTAB‐Map的WheelIMU→S2M能够满足整个实验的实时限制。在WM和LTM之间移动节点时,内存管理增加了少量开销(平均为52 ms),但是它大大减少了其他模块所需的处理时间,具体取决于图的大小。然而,全局入住率网格地图并不总是代表所访问的完整环境。图19a显示了在使用内存管理的实验中不同时间的五个全局占用网格示例。蓝色三角形表示机器人在参考时间的姿态。在t = 225 s、t = 1170 s和t = 1400 s时,机器人正在移动到一个新的区域。在t = 460 s和t = 930 s时,机器人正在重新访问之前建图的区域,解释为什么在机器人前面有一个地图区域。当重新访问以前访问过的区域时,内存管理从LTM检索节点到WM,以使用旧位置展开当前建图。虽然在线的全局占用网格地图仅限于机器人当前的姿态,但通过使用其内存管理机制,RTAB‐map仍然能够检测到大多数闭环关闭,以正确地合并两个会话。在没有内存管理的情况下,有2048个循环关闭链接和1129个邻近链接,而有内存管理的情况下,有1256个循环关闭链接和774个邻近链接。例如,图19b,c分别是由有和没有内存管理的实验创建的全局占用网格建图。(b)中的建图是使用保存在LTM中的所有链接在线建图后生成的。两个实验的最终结果都是12厘米。
图19使用(a,b)和不使用(c)内存管理(使用MIT Stata Center序列的组合会话创建的全局建图。在(a)中,给出了5个使用工作内存中可用节点在指定时间在线创建的最大地图的例子,其中黑色三角形为机器人当时的姿态。每个会话期间的全局轨迹分别用紫色和橙色表示。邻居、循环闭合和邻近链接分别用蓝色、红色和黄色表示。绿色的路径是地面的真相,在(b)和(c)中几乎不可见,因为蓝色的线是叠加的(颜色图可以在wileyonlinelibrary.com上查看)。
第4节中提出的轨迹性能评估,即在我们的RTAB-MAP扩展版本中集成里程计方法,可以得出与最先进的基于视觉和基于激光雷达的SLAM方法相当的结果,使其成为一个强大的库,用于设计和原型化具有不同传感器的SLAM。据我们所知,使用我们的扩展版RTAB‐Map,本文首次报道了在同一系统上激光雷达与基于视觉‐的SLAM配置的实验比较。同时,ROS也为2D和3D在线自主导航做好了准备,这使得该方法很容易集成到定制的机器人中,以比较实时的视觉和激光雷达SLAM配置之间的差异。当这些SLAM配置在数据集上进行测试时,通常很难对它们进行比较,这些数据集只适用于它们的传感器类型,并且仅仅通过远程操作机器人或让人对传感器进行定位就可以得到。一些配置还要求传感器以特定的方式移动,以补偿它们的限制。这些实时比较可以帮助揭示与ROS的导航堆栈等标准导航方法相结合时所选择的传感器固有的缺陷和限制(Marder‐Eppstein et al., 2010)。
因此,RTAB‐Map可用于不同传感器的试验,并在一开始的时候识别传感器是否适合目标应用。根据本文给出的结果,可以推导出在室内环境中使用SLAM(不需要外部全局定位)的指导原则。除非使用远程激光雷达,否则从本体感觉传感器(如IMU、车轮编码器)获得里程测量输入是鲁棒自主导航的必要条件。当仅依靠短程传感器时,机器人很可能会在传感器无法看到足够特征的区域结束,从而无法在地图上定位自己。对于相机来说,看到一堵白色的墙,无纹理的或黑暗的区域将导致失去定位。对于短程激光雷达,一个大的空间或一个低几何复杂度的长走廊也可能存在问题。这两种传感器都有各自的问题,这取决于环境。
在RTAB‐Map中,定位或环路闭合检测过程中的运动估计主要以视觉方式完成,如果有激光雷达可用,则可根据几何形状进行选择性的细化。这意味着如果视觉运动估计失败,激光雷达就无法进行运动估计。在未来的工作中,可以评估视觉和几何估计的更紧密耦合,这样,如果一个失败,另一个仍然可以用来获得位置的估计。这也适用于里程测量,当环境没有纹理或缺少几何形状时,视觉+激光雷达的方法可能更可靠。对于环路闭合检测,当前的bag‐of‐words方法依赖于相机,这意味着即使完成了激光雷达SLAM,也始终需要相机。作为一种解决方案,如果机器人没有摄像头,它可以向RTAB‐Map提供一个假的空图像,仅依靠邻近检测来纠正地图。只要机器人的漂移量不太大,环境相对较小(比如一栋建筑),接近(近似)检测就可以检测出大部分闭环闭合,而不需要摄像头。对于不能鲁棒地使用姿态估计的大型环路闭合检测,可以集成基于激光雷达的环路闭合检测(类似于Bosse & Zlot, 2008; Hess et al., 2016)以使得机器人能只使用激光雷达(即使在完全黑暗的环境中)来检测非常大的环路闭合。
在此基础上,可以对室内导航传感器的选择进行一般性的观察。虽然立体摄像机的定位精度稍好一些,但RGB‐D摄像机是首选,因为可以检测到无纹理的表面用于避障。对于所有基于光线的外部感受传感器来说,在充满玻璃和反光物体的环境中导航都是不安全的,因为障碍物无法被探测到,或者虚假的障碍物会被添加到地图上。在成本方面,使用RGB‐D相机可以比使用激光雷达更有益。然而,在低漂移导航方面,激光雷达的额外视场比单个RGB‐D相机具有巨大的优势,如4.4节中使用较低的ATEmax。也可以通过添加更多的RGB-D相机以获得和激光雷达类似的视野,但是多相机标定对复杂性的增加和计算负荷的增加不能证明2 D导航的鲁棒性——除非3D障碍物能被检测,因为一个低成本激光雷达可以使用更少的计算资源完成这项工作。然而,对于3D导航(如无人机),与昂贵的3D激光雷达(如Velodyne)相比,多摄像机设置有利于获得更大的视野。在实际机器人上使用RTAB‐Map时,根据项目和目标成本的不同,我们必须处理使用的传感器的上述限制。一个例子是一个巡逻机器人在环境中自主导航的同时不断地进行SLAM (Labbe & Michaud, 2017)。该机器人配备了RGB‐D摄像机、短程激光雷达和车轮里程表。这里的环境大多是长长的没有纹理的走廊,这使得在视觉上和几何上都很难定位。视觉回路的关闭只能在走廊的尽头或房间里找到。此时就需要强制要求使用车轮里程表。距离检测采用几何学的方法辅助机器人在几乎任何方向都顺着走廊的方向(激光雷达有超过180∘视野)。激光雷达的大视场也有助于机器人在导航过程中避开障碍物,即使在绘制地图时机器人的方向不同,激光雷达也能帮助机器人进行定位。另一个例子是它在一个低成本的自动轮椅上的使用,只使用RGB‐D摄像机进行SLAM和导航(Burhanpurkar, Labbe, Guan, Michaud, & Kelly, 2017)。在处理无纹理走廊环境时,为了避免在进入走廊时迷路,使用了轮测里程表代替视觉里程表(或视觉惯性里程表)。前向RGB-D摄像机的有限视野也是导航过程中的一个问题。如果机器人在绘制环境图时没有遵循与之前非常相似的路径(例如,为了避免有人经过),机器人可能会迷失方向,因为随后无法检测到回路闭合或定位。改进后的车轮里程表在这个平台上的漂移比以前的机器人要多(特别是如果规划人员发送了许多命令,使机器人经常原地转弯),增加了在机器人避开障碍物后重新定位的问题。这就证明了本文给出的ATEmax度量对于导航的重要性:里程数漂移越低,当机器人由于某种原因改变航向,不得不返回原计划路径时,定位恢复速度越快。在这些使用短程传感器的应用示例中,采用当前的光线跟踪方法,在障碍物移动走之后去清除它并不总是可行的——如果传感器的光线不能“击中”障碍物清除空间后面的某个物体,从而在地图上保留一些可能影响后续规划的假障碍物。与Barsan、Liu、Pollefeys和Geiger(2018)类似,可以实现对图像或激光扫描的更智能理解,以便从静态环境中分割动态对象。
本文介绍了扩展版RTAB‐Map,它提供了与ROS的全面集成,以处理机器人的tf、同步RGB‐D、立体声、激光扫描和点云主题,以及为所有传感器生成占用网格的能力。因此,RTAB‐Map现在是一种基于图的多用途SLAM方法,可用于SLAM新手用户的直接上手使用以及在具有不同传感器配置和处理能力的机器人平台上进行原型设计。它可以用来基于数据集比较性能,并进行在线评估。SLAM所需的传感器,无论是低成本还是昂贵的,都有影响定位精度、地图质量和计算资源的限制。本文通过对基于视觉和激光雷达的SLAM配置进行有意义的比较,展示了RTAB‐Map的灵活性,从而分析哪种机器人传感器配置最适合于室内自主导航。RTAB‐Map作为一个开源库发布,已经向社区开放。RTAB‐Map目前是社区积极使用的顶级ROS包之一(在其forum18、github知识库、19和ROS答案20中有超过1600个问题)——用于使用RGB‐d和立体声摄像机的低成本SLAM。我们RTAB‐Map的目标是继续集成缺乏适当ROS集成的新的里程测量方法,以方便比较用于移动机器人平台自主导航的SLAM配置。