RTAB-Map作为一个开放源代码的激光雷达和视觉SLAM库大规模和长期的在线操作

摘要:

RTAB-Map从2013年开始作为开源库发布,最初是一种基于外观的闭环检测方法,带有内存管理,用于处理大规模、长期的在线操作。然后,它发展到在各种机器人和移动平台上实现同步定位和映射(SLAM)。由于每个应用程序在传感器、处理能力和移动方面都有自己的局限性,因此就成本、准确性、计算能力和集成的方便性而言,它提出了采用哪种SLAM方法最合适的问题。由于大多数SLAM方法要么是可视化的,要么是基于lidar的,因此很难进行比较。因此,我们决定扩展RTAB-Map,以支持视觉和激光雷达SLAM,在一个包中提供一个工具,允许用户实现和比较各种3D和2D解决方案,这些解决方案适用于具有不同机器人和传感器的广泛应用领域。介绍RTAB-Map及其使用这个扩展的版本比较,定量和定性,一个大的选择受欢迎的真实数据集(如KITTI, EuRoC,TUM RGB-D,麻省理工学院的PR2机器人数据),从自主导航应用的实际角度概述了视觉和激光雷达SLAM配置的优势和局限性。

1、引言:

用于基于外观的实时映射的RTAB-Map是我们的开源库,它使用内存管理方法实现了循环关闭检测,限制地图的大小,使圈闭检测始终在固定的时间限制下进行,满足长期大规模环境地图在线需求。RTAB-Map于2009年启动,2013年作为开放源码库发布,此后扩展为完整的基于图的SLAM方法[Stachniss等人,2016],用于各种设置和应用[Laniel等人,2017,Foresti等人,2016,Chen等人,2015,Goebel, 2014]。因此,受诸如此类的实际需求的驱动,RTAB-Map已经发展成为一个跨平台的独立c++库和ROS package。

  • 在线处理:接收到传感器数据后,SLAM模块的输出应限制到最大延迟。特别是对于基于图的SLAM,随着映射的增长,需要更多的处理时间来检测循环闭包、优化图和组装映射。此外,与其他处理模块的集成,如控制、导航、避障、用户交互、对象识别等,也可能限制SLAM可用的CPU时间。因此,有可能限制计算负载有助于避免与其他模块的滞后问题,甚至可能是必要的,以防止不安全的情况。
  • 鲁棒性和低漂移里程数:虽然闭环检测可以纠正大多数里程数漂移,但在现实场景中,机器人往往不能正确地在地图上定位自己,要么是因为它正在探索新的领域,要么是因为在环境中缺乏识别特征。在此期间,应尽量减少测程偏移,以便在进行定位之前仍可进行准确的自主导航,以避免错误地覆盖地图区域(例如,在房间的入口错误地添加障碍,使其成为封闭区域)。当环境中有足够多的特征时,使用相机和lidars等外部传感器来估计里程可以非常准确,但是仅使用一种传感方式可能会有问题,如果在环境中跟踪的特征不再可见,那么很容易发生定位失败。使用混合的本体感受(例如,车轮编码器,惯性测量单元(IMU))和外部感受传感器将增加对里程数估计的鲁棒性。
  • 健壮的定位:SLAM方法必须能够识别它什么时候重新访问过去的位置(用于循环闭合检测)来修正地图。动态环境、光照变化、几何形状变化甚至重复环境都可能导致不正确的定位或定位失败,因此该方法应该对误报具有鲁棒性。
  • 实用的地图生成和开发:大多数流行的导航方法都基于占用网格,因此开发能够提供3D或2D占用网格即开即用的SLAM方法有助于轻松集成。此外,当环境大部分是静态的时候,更实际的做法是进行映射会话,然后切换到本地化,设置内存使用量,并节省映射管理时间。
  • 多会话映射(也称为绑架机器人问题或初始状态问题):当打开时,机器人不知道自己与先前创建的地图的相对位置,因此无法规划到以前访问过的位置的路径。避免机器人重启过程映射到零个或本地化本身在启动前之前构建地图映射,多会话映射允许SLAM方法在启动时使用自己的引用初始化新映射,当遇到以前访问过的位置时,可以计算两个映射之间的转换。这带来了避免重新映射整个环境的优点,当只需要重新映射一小部分或添加一个新区域时。

由于现有的SLAM方法多种多样,因此确定针对特定平台和应用程序使用哪一种方法是一项困难的任务,这主要是因为它们之间缺乏比较分析。SLAM方法通常是基于视觉的[Fuentes-Pacheco et al., 2015]或仅基于lidar的[Thrun, 2002],并且通常在只有摄像机或激光雷达的数据集上进行基准测试,但并非两者都有,因此很难对它们进行有意义的比较。当它们的实现不可用、只能离线运行或缺少robot平台上所需的输入格式时,情况就更严重了。2008年引入的机器人操作系统(ROS) [Quigley et al., 2009]极大地促进了传感器数据格式的标准化,从而提高了机器人平台之间的互操作性,使比较SLAM方法成为可能。但是,集成ROS中的视觉SLAM方法并不经常在自主机器人上测试:只有通过远程操作或人类移动传感器进行SLAM[Mur-Artal and Tard´os 2017, Engel et al.,2015,Dai et al., 2017]。这避免了正确的tf (Transform Library) [Foote, 2013]处理根据机器人基础帧转换输出,以满足ROS坐标系约定。它还避免了需要地图输出(例如,2D或3D占用网格)兼容的导航算法来规划路径和避免障碍。此外,上面概述的一些实际需求并不总是由SLAM方法解决,因此限制了比较。

因此,由于RTAB-Map的发展是为了处理这些实际需求,我们决定进一步扩展RTAB-Map的功能,以比较用于自主机器人导航的视觉和激光雷达SLAM配置。RTAB-Map是一种以内存管理为核心的闭环方法,它不依赖于使用的里程计方法,这意味着它可以使用视觉里程计、激光雷达里程计甚至仅仅是车轮里程计。这意味着,RTAB-Map可以用于实现视觉SLAM方法、激光雷达SLAM方法或两者的混合,这使得在真实机器人上比较不同的传感器配置成为可能。本文描述了扩展版本的RTAB-Map库,并演示了它用于比较最先进的视觉和激光雷达SLAM方法,从而概述了自治导航的两种范例之间的实际限制。

论文组织如下。第2节简要介绍了目前流行的SLAM方法,它们与ROS兼容,可用于机器人的比较评估。第3节介绍了扩展版RTAB-Map的主要组件。第4节使用RTAB-Map比较其视觉和激光雷达SLAM配置在使用标准离线和在线数据集的轨迹性能方面的差异:KITTI数据集用于自动驾驶汽车的户外立体和三维激光雷达测绘;用于手持RGB-D映射的TUM RGB-D数据集;用于无人机立体映射的EuRoC数据集;MIT Stata中心的数据集比较了PR2机器人的室内立体声、RGB-D和2D激光雷达SLAM配置。第5节根据所使用的传感器,评估了地图质量和计算性能的变化,并展示了内存管理对在线地图的影响。最后,第6节根据观察到的结果,提出了通过使用RTAB-Map获得的关于自主机器人SLAM应用中传感器选择的指导方针。

2、在ROS上可获得流行的SLAM方法

有很多开源的SLAM方法可以通过ROS获得。在这一节中,我们回顾了最流行的一些方法,以概述它们的特点,并根据输入和输出来定位RTAB-Map所涵盖的内容,以处理SLAM方法的比较研究。

让我们从以下激光雷达方法开始:

  • GMapping [Grisetti等人,2007]和TinySLAM [Steux和El Hamzaoui, 2010]是两种使用粒子滤波来估计机器人轨迹的方法。只要有足够的估计粒子,并且实际位置误差与输入测程的协方差相对应,粒子滤波就收敛到一个能很好地代表环境的解,特别是在有环路闭合时的GMapping。GMapping是ROS的默认SLAM方法,广泛用于从2D激光扫描中获得环境的2D占用网格图。一旦地图被创建,它可以与自适应蒙特卡罗定位(Monte Carlo Localization
    )[Fox et al., 1999]用于定位和自主导航。
  • Hector SLAM [Kohlbrecher et al., 2011]可以从2D激光雷达创建快速2D占用网格地图计算资源少。在真实世界的自主导航场景中,如RoboCup救援机器人联盟竞赛中,它已经被证明可以产生非常低漂移的定位。它也可以使用像IMU这样的外部传感器来估计机器人的三维位置。然而,Hector SLAM并不是一个完整的SLAM,因为它不是检测循环闭包,因此在访问以前的本地化时无法纠正映射。Hector SLAM不需要外部测程,这在机器人没有外部测程时可能是一个优势,但在没有很多几何约束的环境下操作时可能是一个劣势,限制了激光扫描匹配性能。
  • ETHZASL-ICP-Mapper,基于libpointmatcher库[Pomerleau et al., 2013],可以从2D激光雷达创建2D占用网格地图,从2D或3D lidars创建组装点云。但与Hector SLAM类似,该方法不检测循环闭包,因此无法纠正随时间变化的映射错误。
  • Karto SLAM [Vincent et al., 2010]、Lago SLAM [Carlone et al., 2012]和谷歌制图师[Hess et al., 2016]是基于激光雷达图形的SLAM方法。他们可以从自己的图形表示生成2D占用网格。谷歌制图器也可以作为背包映射平台,因为它支持3D lidars,从而提供3D点云输出。在映射时,它们创建由图中的约束链接的子映射。当检测到环路闭合时,对子地图的位置进行重新优化,以纠正传感器噪声带来的误差和扫描匹配精度。与Hector SLAM不同的是,外部测程可以在低几何复杂度的环境中获得更健壮的扫描匹配。
  • BLAM是一个基于激光雷达图形的SLAM,仅支持3D激光雷达用于环境的3D点云生成。从在线文档(这是唯一可用的文档)来看,当机器人访问以前的位置时,循环闭包似乎通过扫描匹配在本地检测到,然后使用GTSAM优化地图[Dellaert, 2012]。这意味着BLAM不能关闭大的循环,因此本地扫描匹配将不能适当地注册。
  • SegMatch [Dub ' e et al., 2016]是一种基于3D lidar的环路闭合检测方法,也可以作为基于3D lidar的SLAM使用。通过匹配激光点云生成的3D片段(例如车辆、建筑物或树木的部分)来检测环路闭合。

在这些基于lidar的SLAM方法中,只有SegMatch可以用于多会话或多机器人映射[Dub ' e et al., 2017]。

关于visual SLAM,目前有很多开源方法,但在机器人上使用的却不多(参考[Zollh ofer et al., 2018]对3D重建聚焦方法的综述)。导航,以避免歧义处理规模,我们限制我们的审查方法能够估计的真正规模环境而映射(例如,立体声和RGB-D相机或visual-inertial测程法),因此不包括结构与运动或单眼SLAM的方法加以改进([Klein and Murray,2007),SVO(Forster et al, 2014), REMODE [Pizzoli et al ., 2014), DT-SLAM [Herrera et al ., 2014), LSD-SLAM([Engel et al, 2014)或ORB-SLAM [Mur-Artal et al ., 2015)。以下视觉SLAM方法不会随时间发生这种尺度漂移。

  • maplab [Schneider et al., 2018]和VINS-Mono [Yi et al., 2017]最近发布了基于视觉惯性图的SLAM系统。仅使用IMU和摄像机,他们就可以为本地化提供可视化地图。maplab的工作流程分为两个步骤:数据记录在开环阶段仅使用视觉惯性测程;然后是地图管理、闭环检测、图形优化、多会话、密集地图重构)离线完成。生成的可视化地图随后可以在本地化模式中使用。相比之下,VINS-Mono的地图管理流程是在线完成的。在导航方面,可以提供GPU计算的本地TSDF体积图,用于避障和路径规划。为了在大型环境中保持有限的处理时间,VINS-Mono限制了图的大小,首先删除没有关闭循环的节点,然后根据图的密度删除其他节点。
  • ORB-SLAM2 [murr - artal和Tard os, 2017]和S-PTAM [Pire et al., 2017]是目前最先进的基于特征的视觉SLAM方法中的两种,它们可以与立体声摄像机一起使用。最近,ProSLAM [Schlegel et al., 2017]已经发布(目前仅提供基准测试工具),以提供一个全面的开源包,使用众所周知的可视化SLAM技术。对于ORB-SLAM2,它也可以与RGB-D摄像机一起使用。它们都是基于图的SLAM方法。对于ORB-SLAM2和S-PTAM,当使用DBoW2 [Galvez-Lopez and Tardos, 2012]检测到一个环路闭合时,将使用bundle调整对映射进行优化。在一个单独的线程中完成闭环后的图优化,以避免影响摄像机跟踪帧率性能。对于ProSLAM,通过直接比较map中的描述符来检测循环闭包,而不是使用bag-of-words的方法。在所有这些方法中,随着map的增长,环路闭合检测和图形优化处理时间随着映射的增长而增加,使得环路闭合检测在检测到之后会有显著的延迟。这些方法保持了一个稀疏的特征图。如果没有像激光雷达方法那样的占用网格或密集的点云输出,它们就很难在真正的机器人上使用。
  • DVO-SLAM [Kerl et al., 2013], rgbidi - slam [Gutierrez-Gomez et al., 2016]和MPR [Della Corte et al., 2017],不使用局部视觉特征来估计运动,而是使用RGB-D图像所有像素上的光度和深度误差。它们可以产生密集的点云环境。MPR也可以与激光雷达一起使用,但它只是一种测程方法。DVO-SLAM缺乏一种独立于姿态估计的闭环检测方法,这使得它不太适合大规模的映射。
  • ElasticFusion [Whelan et al., 2016]、Kintinuous [Whelan et al., 2015]、BundleFusion [Dai et al., 2017]和InfiniTAM [K ahler et al., 2016]都是基于RGB-D相机的截断符号距离场(truncated signed distance field, TSDF)体积。他们可以在线重建非常吸引人的基于surfeline的地图,但是需要一台强大的计算机和最新的Nvidia GPU。对于ElasticFusion,虽然能够实时处理小环境下的摄像机帧,但每帧的处理时间根据地图中surfels的数量增加。对于BundleFusion,闭环检测的全局密集优化时间随着环境的大小而增加。InfiniTAM闭环检测的速度似乎更快,尽管闭环检测和校正的处理时间仍然随着环境的大小而增加。虽然是开源的,但这些算法不支持ROS,因为它们依赖于GPU上的映射和跟踪之间极其快速和紧密的耦合。

所有这些先前的视觉冲击方法都假设摄像机从不被遮挡,或者图像总是有足够的视觉特征来跟踪。对于一个自主机器人来说,这样的假设在实际操作中是不可能实现的,因为它的摄像头可能会被经过的人完全挡住,或者当机器人在导航过程中面对的是一个没有视觉特征的表面(比如白色的墙壁)。下面的视觉SLAM方法被设计得对这些事件更加健壮:

  • MCPTAM [Harmat et al., 2015]使用多个摄像机来增加系统的视场。如果视觉特征可以通过至少一个摄像头感知到,MCPTAM就能够跟踪位置。
  • RGBDSLAMv2 [Endres et al., 2014]可以使用外部测程法进行运动估计。ROS包(如机器人定位[Moore和Stouch, 2014])可用于传感器融合(使用扩展的卡尔曼滤波)多个测程源,以获得更可靠的测程。RGBDSLAMv2可以生成3D占用网格(OctoMap [Hornung et al., 2013])和环境的密集点云。

表1总结了开源的、与ros兼容的SLAM方法的输入和输出。激光雷达3D类别包括所有点云类型,包括那些来自RGB-D相机的深度图像。Odom指的是可以用来帮助SLAM方法计算运动估计的里程数输入。三维入住率网格地图是指OctoMap [Hornung et al., 2013]。请注意,ORB-SLAM2和RGBiD-SLAM没有任何在线输出:它们确实有一个查看姿态和点云的可视化工具,但是它们没有将它们作为ROS主题提供给其他开箱即用的模块。VINS-Mono确实提供了当前点云的里程测量,但没有地图和TSDF地图输出无法通过当前项目页面。表1中的最后一项说明了在本文提供的扩展版本的RTAB-Map中可以使用哪些输入和输出。除了RTAB-Map和RGBDSLAMv2之外,没有任何可视化SLAM方法提供自主导航所需的开箱即用的网格输出。RGBDSLAMv2 [Endres et al., 2014]可能是与RTAB-Map最相似的视觉SLAM方法,因为两者都可以使用外部里程测量作为运动估计。虽然他们没有将IMU与相机相结合,但他们仍然可以使用视间测程方法和外部测程输入。它们还可以生成3D占用网格(OctoMap [Hornung et al,2013])和用于依赖模块的密集点云。然而,RTAB-Map也可以提供类似于基于lidar的2D占用网格的SLAM方法。

                               表1:流行的与ros兼容的激光雷达和视觉SLAM方法及其支持的输入和在线输出

RTAB-Map作为一个开放源代码的激光雷达和视觉SLAM库大规模和长期的在线操作_第1张图片

3、RTAB-Map描述

rtabmap是一种基于图的SLAM方法,自2013年起就作为rtabmap ros包集成到ROS中。图1显示了它的主要ROS节点rtabmap。里程计是RTABMap的外部输入,这意味着SLAM也可以使用任何一种里程计来使用适合给定应用程序和机器人的里程计。地图的结构是一个带有节点和链接的图。在传感器同步之后,短时记忆(STM)模块创建一个节点来记忆测程姿态、传感器的原始数据和对下一个模块有用的附加信息(例如,用于环路闭合和邻近检测的可视化表示,以及用于全球地图组装的局部占用网格)。根据从节点创建的数据的重叠程度,以毫秒为单位,以固定的速率(Rtabmap/DetectionRate)创建节点。例如,如果机器人移动速度快,传感器范围小,则需要增加检测率,以保证后续节点的数据重叠,但设置过高则会造成重叠不必要地增加内存使用和计算时间。一个链接包含两个节点之间的严格转换。有三种链路:相邻链路、环路闭合链路和邻近链路。在STM中,通过里程变换在相邻节点之间添加邻居链接。分别通过环路闭合度检测和接近度检测来增加环路闭合度和接近度链接。所有链接都用作图优化的约束。当图数据中添加了一个新的环路闭合度或接近度链接时,图数据优化将计算出的误差传播到整个图数据中,以减少测程偏移。通过优化图形,可以将OctoMap、点云和2D占用网格输出组装并发布到外部模块。还可以通过tf [Foote, 2013] /map /odom来获得机器人在地图帧中的定位。

RTAB-Map作为一个开放源代码的激光雷达和视觉SLAM库大规模和长期的在线操作_第2张图片

图1:RTAB-Map ROS节点的方框图。所需的输入是:TF来定义传感器相对于机器人基座的位置;从任何来源(可以是3DoF或6DoF)测程;带有相应校准信息的摄像机输入(一个或多个RGB-D图像或立体图像)之一。可选的输入要么是来自2D激光雷达的激光扫描,要么是来自3D激光雷达的点云。然后,来自这些输入的所有消息被同步并传递给图slam算法。输出为:包含最新添加节点的地图数据,包含压缩的传感器数据和图形;没有任何数据的地图图形;在TF上发布的里程表校正;一个可选的OctoMap (3D占用网格);可选的稠密点云;一个可选的2D占用网格。

RTAB-Map内存管理方法[Labb e and Michaud, 2013]运行在图形管理模块之上。它用于限制图形的大小,以便在大型环境中实现长期在线SLAM。如果没有内存管理,随着图形的增长,循环闭合和邻近检测、图形优化和全局地图装配等模块的处理时间最终会超过实时约束,即时,处理时间可以变得大于节点获取周期时间。基本上,RTAB-Map内存分为工作内存(WM)和长期内存(LTM)。当一个节点被转移到LTM时,WM中的模块将不再使用它。当Rtabmap的更新时间超过了固定的时间阈值“Rtabmap/TimeThr”时,WM中的一些节点被转移到LTM,以限制WM的大小并减少更新时间。与固定时间阈值类似,还有一个内存阈值“Rtabmap/MemoryThr”,可用于设置WM可以容纳的最大节点数。为了确定要将哪些节点转移到LTM,加权机制确定比其他节点更重要的位置,使用启发式方法,如位置观察的时间越长,它就越重要,因此应该留在WM中。为此,在创建新节点时,STM将节点的权重初始化为0,并将其与图中的最后一个节点进行可视比较(得出相应可视化表示的百分比)。如果它们是相似的(对应的可视化表示超过相似阈值“Mem RehearsalSimilarity"),则新节点的权重将增加1加上最后一个节点的权重。将最后一个节点的权值重置为0,如果机器人不移动,则丢弃最后一个节点,以避免不必要地增加图的大小。当达到时间或内存阈值时,首先将最老的最小加权节点转移到LTM。当WM中的某个位置发生环路闭合时,可以将该位置的相邻节点从LTM带回WM,以便进行更多的环路闭合和邻近检测。当机器人在之前访问过的区域移动时,它可以逐渐记住过去的位置,从而扩展当前组装的地图,并使用过去的位置进行本地化[Labb´e and Michaud, 2017]。

接下来的部分将更详细地解释RTAB-Map的管道,从里程表节点到全局映射组装。提供了配置和使用RTAB-Map的关键参数的定义。

3.1 测程法节点

测程节点可以实现任何一种测程方法,从简单的车轮(wheel)编码器和IMU衍生到更复杂的使用相机和激光雷达。独立于使用的传感器,它应该提供至少到目前为止以里程计信息形式估计的机器人姿态的RTAB-Map与相应的tf的变换(如/odom /base link)。当本体感受测程法在机器人上还不能使用时,或者当它不够精确时,必须使用视觉或基于lidar的测程法。对于视觉测程,RTAB-Map实现了两种标准的测程方法[Scaramuzza and Fraundorfer, 2011],称为帧到图(F2M)和帧到帧(F2F)。这些方法之间的主要区别是,F2F根据最后一个关键帧注册新帧,而F2M根据根据过去关键帧创建的局部特征来映射注册新帧。这两种方法也被用于lidars,被称为Scan-To-Map (S2M)和Scan-To-Scan (S2S),它们遵循与F2M和F2F相同的思想,但使用点云而不是3D视觉特征。下面几节将介绍如何在选择这些视觉或激光测距方法之一时实现测距节点。

3.1.1 视觉测程法

图2显示了使用两种颜色区分F2F(绿色)和F2M(红色)的RTAB-Map视觉测程。它可以使用RGB-D或立体声摄像机作为输入。
tf需要知道摄像机放置在机器人的哪个位置,以便将输出里程数转换到机器人的基础帧(例如/基础链接)。如果摄像头在机器人的头上,并且机器人头部转动,只要机器人身体和机器人头部之间的tf也更新,就不会影响机器人底座的里程数。过程如下。

  • 特征检测:当帧被捕获时,GoodFeaturesToTrack [Shi et al., 1994] (GFTT)特征被检测到,其最大数量“Vis/MaxFeatures"参数确定。RTAB-Map支持OpenCV中所有可用的特征类型,但是GFTT被用来简化参数调整,并在不同的图像大小和光线强度下得到一致的检测特征。对于立体图像,使用迭代Lucas-Kanade方法[Lucas and Kanade, 1981]通过光流计算立体对应,得到左右图像之间的每个特征的视差。对于RGB-D图像,使用深度图像作为GFTT的掩码,以避免提取深度无效的特征。
  • 特征匹配:对于F2M,采用最近邻搜索[Muja and Lowe, 2009]和最近邻距离比(NNDR)检验[Lowe, 2004],将提取的特征与特征图中的特征进行简要描述[Calonder et al., 2010]。特征图包含来自最后关键帧的描述符的3D特征。NNDR由参数“Vis/CorNNDR”定义。对于F2F,光流是直接在GFTT特征上完成的,而不需要提取描述符,从而根据关键帧提供更快的特征对应。
  • 运动预测:根据之前的运动变换,利用运动模型预测关键帧(F2F)或特征图(F2M)在当前帧中的位置。这限制了特性匹配的搜索窗口以提供更好的匹配,特别是在具有动态对象和重复纹理的环境中。搜索窗口半径由参数“Vis/CorGuessWinSize定义,并采用匀速运动模型。

RTAB-Map作为一个开放源代码的激光雷达和视觉SLAM库大规模和长期的在线操作_第3张图片

图2:rgbd测程和立体测程ROS节点的方框图。TF定义摄像机相对于机器人基座的位置,并作为输出发布机器人基座的测程变换。对于RGB-D摄像机或立体声摄像机,管道是相同的,不同之处在于,立体声对应是计算出来的,以确定检测到的特征的深度。可以使用两种测程方法:绿色的框架到框架(F2F)方法和红色的框架到映射(F2M)方法。

  • 运动估计:当计算出对应时,使用OpenCV [Bradski and Kaehler, 2008]的换位n点(PnP) RANSAC实现来计算当前帧对关键帧(F2F)或特征图(F2M)的相应变换。至少一个内部最小的“Vis/MinInliers”转换要被接受的。
  • 本地包调整:使用本地包调整细化结果转换[Kummerle et al., 2011]关于特征图中所有关键帧的特征(F2M)或仅针对最后一个关键帧的特征(F2F)
  • 位姿更新:使用估计的转换,然后更新输出里程表和tf的 /odom /基本链接转换。协方差是使用中位数绝对偏差(MAD)方法计算[Rusu and Cousins, 2011]之间的3D特征对应。
  • 关键帧和特征图更新:如果在运动估计期间计算的内层的数低于固定阈值“Odom/KeyFrameThr”,则更新关键帧或特征图。
    对于F2F,关键帧只是被当前帧替换。对于F2M,通过添加新帧的未匹配特征,并通过局部Bundle Adjustment module对匹配特征的位置进行更新来更新Feature Map。Feature Map有一个固定的保留临时特征的最大值(因此有一个关键帧的最大值)。当Feature Map的大小超过了固定的阈值“OdomF2M/MaxSize”时,与当前帧不匹配的最老的Feature将被删除。如果一个关键帧不再具有Feature Map中的特征,那么它将被丢弃。

如果由于某些原因,相机当前的运动与预测的运动有很大的不同,可能找不到有效的变换(在运动估计或局部束调整之后),因此再次匹配特征,但不进行运动预测。对于F2M,将当前帧中的特征与Feature Map中的所有特征进行比较,然后计算另一个变换。对于F2F,为了对无效的对应更加鲁棒,用NNDR代替光流进行特征匹配,因此需要提取简单的描述符。如果转换仍然无法计算,则认为里程计是丢失的,并在不进行运动预测的情况下比较下一帧。输出测程位姿设置为null,具有很高的方差(即
,9999)。订阅此可视化里程计节点的模块可以知道何时无法计算里程计。

需要注意的是,由于RTAB-Map中的里程测量是独立于映射过程的,为了方便和易于比较,其他视觉里程测量方法已经被集成到RTAB-Map中。所选择的方法是开源的或提供应用程序编程接口(API),并且只能作为odometri使用。完整的视觉SLAM方法很难将里程计从映射过程中分离出来,因此无法集成,因为映射过程由RTAB-Map负责。在RTAB-Map中已经整合了7种法:FOVIS [Huang et al., 2011]、Viso2 [Geiger et al., 2011]、DVO [Kerl et al., 2013]、OKVIS [Leutenegger et al., 2015]、ORB-SLAM2 [mu - artal and Tard os, 2017]、MSCKF [Sun et al., 2018]和谷歌Project Tango。FOVIS、Viso2、DVO、OKVIS和MSCKF是视觉或视觉惯性里程测量方法,通过将它们的里程测量输出连接到RTAB-Map,可以直接集成它们。ORB-SLAM2是一种完整的SLAM方法,因此为了集成到RTABMap中,在ORB-SLAM2中禁用循环关闭检测。ORB-SLAM2的局部捆绑调整仍在工作,这使得修改后的模块类似于F2M。最大的区别在于提取的特征的种类(ORB [Rublee et al., 2011])以及如何将它们匹配在一起(直接描述符比较而不是NNDR)。与F2M类似,对feature map的大小进行限制,以实现恒定时间的视觉里程测量(在不限制feature map大小的情况下,ORB-SLAM2计算时间随时间增加)。由于没有设计ORB-SLAM2(至少在撰写本文时可用的代码中)来删除或忘记其映射中的特性,所以在删除特性时不会释放内存,这将导致内存使用量随时间的增加而增加(也就是内存泄漏)。为了将谷歌Project Tango集成到RTAB-Map库中,取消了区域学习功能,直接使用视觉惯性测程。

3.1.2 激光雷达测程法

图3给出了激光雷达测程的方框图,还使用了两种颜色来区分S2S(绿色)和S2M(红色)。使用类似于视觉测程的术语,关键帧指的是点云或激光扫描。激光扫描输入为2D,点云输入可为2D或3D。当机器人在扫描过程中移动时,激光扫描会产生一些运动变形。这里假设在将扫描提供给RTAB-Map之前纠正了这种失真。需要注意的是,如果激光扫描仪的旋转频率相对于机器人速度较高,那么激光扫描的运动畸变就会很小,因此可以忽略校正,而不会显著降低配准精度。过程描述如下:

RTAB-Map作为一个开放源代码的激光雷达和视觉SLAM库大规模和长期的在线操作_第4张图片

图3:icp测程ROS节点的框图。TF定义了激光雷达相对于机器人基座的位置,并作为输出发布机器人基座的测程变换。可以使用两种里程测量方法:绿色表示扫描到扫描(S2S)方法,红色表示扫描到映射(S2M)方法。这些方法还可以选择使用恒速模型(粉红色)或另一种测程方法(蓝色)进行运动预测。对于后一种方法,输入测程的修正被发布在TF上。

  • 点云滤波:对输入点云进行下采样,计算法线。使用tf将点云转换为机器人的基础帧,从而计算出相应的里程数(例如/base link)。
  • ICP注册:为了注册新的点云到点云图(S2M)或最后一个关键帧(S2S),迭代最近邻点(ICP)[Besl and McKay, 1992]是使用点云匹配[Pomerleau et al., 2013]的实现来完成的。点云图是由过去的关键帧组成的云。可以使用点对点(P2P)或点对平面(P2N)通信进行注册。P2N在有很多平面的人造环境中更受欢迎。
  • 运动预测:由于ICP处理的是未知的对应关系,因此该模块在估计变换之前需要进行有效的运动预测,无论是从以前的配准还是从外部测程方法(例如,车轮测程),通过tf(分别显示为蓝色和紫色)。身份变换仅在初始化处理前两帧时作为运动预测提供。如果不使用外部测程法作为初始猜测,则根据基于前面转换的恒速模型进行运动预测。这种技术的一个问题是,如果环境不够复杂(比如在走廊里),如果对机器人的方向没有限制,里程表可能会漂移很多。在这种情况下,使用外部的初始猜测可以帮助估计环境缺少特性的方向上的运动。例如,一个机器人带着短程激光雷达在一条没有门的长走廊里移动。(无法分辨的几何图形)只会看到两条平行线。如果机器人在走廊方向上加速或减速,ICP将能够纠正方向,但它将无法检测到速度在走廊方向上的任何变化。在这种情况下,使用外部测程法可以帮助估计ICP不能估计的方向上的速度。如果当前点云的结构复杂性低于固定阈值(Icp/ pointtoplanemin复杂性),则仅使用Icp估计方向,而位置(沿有问题的方向)则来自外部测程。将二维点云的结构复杂性定义为点云s法线的主成分分析(PCA)的第二个特征值乘以2。对于三维点云,使用第三个特征值乘以3。
  • 位姿更新:注册成功后,测程仪会更新位姿。当使用外部测程法时,tf输出是外部测程法tf的修正,这样两个变换可以在同一个tf树中(即,/odom icp /odom /base link)。就像视觉测程法一样,使用MAD方法计算3D点之间的协方差[Rusu and Cousins, 2011]。
  • 关键帧和点云图更新:如果对应比低于固定阈值“Odom/ScanKeyFrameThr”,则新帧为S2S关键帧。对于S2M,在将新的点云集成到点云映射之前,需要执行一个额外的步骤。从新的点云中减去地图(使用“OdomF2M/ScanSubtractRadius”的最大半径),然后将其余的点添加到点云地图中。当点云图达到固定的最大阈值“OdomF2M/ScanMaxSize”时,删除最老的点。

万一ICP找不到变换,里程计就丢失了。与视觉测程不同,当运动预测为空时,激光雷达测程无法从丢失中恢复,以避免较大的测程误差。然后必须重新设置激光雷达的里程计。然而,只要激光雷达能够感知环境结构,机器人就很少会迷路。请注意,如果使用外部测程法,运动预测仍然会给出一个有效的估计,因此如果机器人返回丢失了跟踪的位置,ICP注册可以从丢失中恢复。最后,与集成的第三方视觉测程方法类似,一种称为LOAM (Zhang and Singh, 2017)的激光雷达测程方法的开源版本也被集成到RTAB-Map中进行比较。

3.2 同步

RTAB-Map有多种输入主题(例如,RGB-D图像、立体图像、里程计、2D激光扫描、3D点云和用户数据),可以根据可用的传感器使用这些主题。rtabmap ROS节点工作所需的最小主题是通过主题或tf(例如/odom /base link)提供的注册RGB-D或用里程计校准的立体图像。RTAB-Map还支持多个RGB-D相机,只要它们具有相同的图像大小。需要精确的传感器tf(例如,/基础链路/摄像机链路)。图4和图5展示了两个带有相应tf树的可视化SLAM示例。RTAB-Map的视觉测程节点可以被任何其他的测程方法所代替。(如,车轮测程、其他视觉测程套件、激光雷达测程等)。虚线链接显示哪个节点正在发布相应的tf。对于描述机器人上传感器位置的其他tf帧,它们通常由摄像机驱动程序、一些静态转换发布程序或使用机器人的统一机器人描述格式的机器人状态程序发布。

RTAB-Map作为一个开放源代码的激光雷达和视觉SLAM库大规模和长期的在线操作_第5张图片

图4:带有RGB-D摄像头的视觉SLAM,比如Xbox 360的Kinect。使用rgbd测程ROS节点计算rtabmap ROS节点的测程。
右边是这个传感器配置的标准TF树(用虚线将转换链接到相应的发布ROS节点)。

RTAB-Map作为一个开放源代码的激光雷达和视觉SLAM库大规模和长期的在线操作_第6张图片

图5:用像BumbleBee2这样的立体摄像机拍摄的视觉效果。使用立体测程ROS节点计算rtabmap ROS节点的测程。RTAB-Map的ROS节点需要对立体图像进行校正,因此使用标准的立体图像proc ROS节点对其进行校正。右边是这个传感器配置的标准TF树(用虚线将转换链接到相应的发布ROS节点)。

一旦订阅了基本传感器,还有两个其他主题可以选择同步:一个2D激光扫描(如Hokuyo andSICK lidars)或一个3D点云(如Velodyne lidar),分别以生成2D和3D网格占用。他们也可以使用ICP来精炼图表中的链接。

由于传感器并不总是以相同的速率在相同的时间发布数据,因此良好的同步对于避免数据的错误注册非常重要。ROS提供两种同步:精确同步和近似同步。精确同步要求输入主题具有完全相同的时间戳,即,以获取来自同一传感器的主题(例如,立体声摄像机的左、右图像)。近似同步比较传入主题的时间戳,并尝试以最小延迟错误同步所有主题。它用于来自不同传感器的主题。如果输入主题的子集(例如必须与准确的时间策略同步,同时与其他传感器大致同步。为此,可以使用rtabmap ros/rgbd同步ros nodelet将相机主题同步到rtabmap节点之前的类型为rtabmap ros/RGBDImage13的单一主题。图6展示了一个使用RGB-D摄像机和激光雷达的同步示例。RGB-D相机,ROS包并不总是为RGB和深度图像,提供相同的时间戳和rgbd同步也可以使用近似同步的同步图像在相机帧率(例如,30 Hz)独立于其他输入的速度(例如,激光扫描,测程法)。

RTAB-Map作为一个开放源代码的激光雷达和视觉SLAM库大规模和长期的在线操作_第7张图片

图6:RGB-D摄像机(Xbox One的Kinect)与激光扫描(URG-04LX)和里程测量的同步示例。在这种情况下,里程数是通过车轮编码器计算的。在将生成的RGB-D图像消息与其他传感器(具有不同的发布速率)同步之前,使用rgbd同步ROS节点将摄像机消息同步在一起。右边是这个传感器配置的TF树的结果示例(用虚线将转换链接到相应的发布ROS节点)

3.3 STM(短时记忆)

当在STM中创建一个新节点时,为了补充[Labbe and Michaud, 2017]中描述的信息,现在将从深度图像、激光扫描或点云计算本地占用网格。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(论文学习)