摘要:
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方法通常是基于视觉的[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方法的比较研究。
让我们从以下激光雷达方法开始:
在这些基于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方法不会随时间发生这种尺度漂移。
所有这些先前的视觉冲击方法都假设摄像机从不被遮挡,或者图像总是有足够的视觉特征来跟踪。对于一个自主机器人来说,这样的假设在实际操作中是不可能实现的,因为它的摄像头可能会被经过的人完全挡住,或者当机器人在导航过程中面对的是一个没有视觉特征的表面(比如白色的墙壁)。下面的视觉SLAM方法被设计得对这些事件更加健壮:
表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方法及其支持的输入和在线输出
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来获得机器人在地图帧中的定位。
图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也更新,就不会影响机器人底座的里程数。过程如下。
图2:rgbd测程和立体测程ROS节点的方框图。TF定义摄像机相对于机器人基座的位置,并作为输出发布机器人基座的测程变换。对于RGB-D摄像机或立体声摄像机,管道是相同的,不同之处在于,立体声对应是计算出来的,以确定检测到的特征的深度。可以使用两种测程方法:绿色的框架到框架(F2F)方法和红色的框架到映射(F2M)方法。
如果由于某些原因,相机当前的运动与预测的运动有很大的不同,可能找不到有效的变换(在运动估计或局部束调整之后),因此再次匹配特征,但不进行运动预测。对于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之前纠正了这种失真。需要注意的是,如果激光扫描仪的旋转频率相对于机器人速度较高,那么激光扫描的运动畸变就会很小,因此可以忽略校正,而不会显著降低配准精度。过程描述如下:
图3:icp测程ROS节点的框图。TF定义了激光雷达相对于机器人基座的位置,并作为输出发布机器人基座的测程变换。可以使用两种里程测量方法:绿色表示扫描到扫描(S2S)方法,红色表示扫描到映射(S2M)方法。这些方法还可以选择使用恒速模型(粉红色)或另一种测程方法(蓝色)进行运动预测。对于后一种方法,输入测程的修正被发布在TF上。
万一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帧,它们通常由摄像机驱动程序、一些静态转换发布程序或使用机器人的统一机器人描述格式的机器人状态程序发布。
图4:带有RGB-D摄像头的视觉SLAM,比如Xbox 360的Kinect。使用rgbd测程ROS节点计算rtabmap ROS节点的测程。
右边是这个传感器配置的标准TF树(用虚线将转换链接到相应的发布ROS节点)。
图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)独立于其他输入的速度(例如,激光扫描,测程法)。
图6:RGB-D摄像机(Xbox One的Kinect)与激光扫描(URG-04LX)和里程测量的同步示例。在这种情况下,里程数是通过车轮编码器计算的。在将生成的RGB-D图像消息与其他传感器(具有不同的发布速率)同步之前,使用rgbd同步ROS节点将摄像机消息同步在一起。右边是这个传感器配置的TF树的结果示例(用虚线将转换链接到相应的发布ROS节点)
3.3 STM(短时记忆)
当在STM中创建一个新节点时,为了补充[Labbe and Michaud, 2017]中描述的信息,现在将从深度图像、激光扫描或点云计算本地占用网格。