Gmapping、Hector SLAM、Cartographer三种2D SLAM算法简单对比
Gmapping
Gmapping是应用最为广泛的2D slam方法,主要是基于2D激光雷达使用RBPF(Rao-Blackwellized Particle Filters)粒子滤波算法完成二维栅格地图构建,每个粒子都携带一张地图,将定位和建图过程分离,先进行定位再进行建图。
Gmapping可以实时构建室内环境地图,在构建小场景地图所需的计算量较小且地图精度较高。相比于Hector SLAM,对激光雷达扫描频率要求较低、鲁棒性高(Hector在机器人快速转向时很容易发生错误匹配,构建的地图发生错位,原因主要是优化算法容易陷入局部最小值);而相比于Cartographer,在构建小场景地图时Gmapping不需要太多的粒子并且没有回环检测,因此计算量小于Cartographer而精度并没有差太多。Gmapping有效利用了里程计信息,这也是Gmapping对激光雷达频率要求低的原因:里程计可以提供机器人的位姿先验。而Hector和Cartographer的设计初衷不是为了解决平面移动机器人定位和建图,Hector主要用于救灾等地面不平坦的情况,因此无法使用里程计。而Cartographer是用于手持激光雷达完成SLAM过程,也就没有里程计可以用。
回环检测:有效地检测出机器人经过同一个地方,消除机器人整个运动过程中的累计误差,构建出全局一致的轨迹和地图。
里程计:机器人在当前时刻的坐标和朝向。
随着场景增大所需的粒子增加,因为每个粒子都携带一幅地图,因此在构建大地图时所需内存和计算量都会增加。因此不适合构建大场景地图。并且没有回环检测,因此在回环闭合时可能会造成地图错位,虽然增加粒子数目可以使地图闭合但是以增加计算量和内存为代价。所以不能像Cartographer那样构建大的地图,虽然论文生成几万平米的地图,但实际我们使用中建的地图没达到几千平方米时就会发生错误。Gmapping是基于滤波框架的SLAM,Cartographer是基于优化框架的SLAM,两种算法都涉及到时间复杂度和空间复杂度的权衡。Gmapping牺牲空间复杂度保证时间复杂度,这就造成Gmapping不适合构建大场景地图。试想一下你要构建200m×200m的环境地图,栅格地图分辨率选择5cm,每个栅格占用一字节内存,那么一个粒子携带的地图就需要16M内存,如果是100个粒子就需要1.6G内存。如果地图变成500m×500m,粒子数为200个,可能电脑就要崩溃了。Cartographer算法,优化相当于地图中只用一个粒子,因此存储空间比较Gmapping会小很多倍,但计算量大,一般的笔记本很难跑出来好的地图,甚至根本就跑不动。
算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,即算法的运行时间。而空间效率被称作空间复杂度,即算法在运行过程中临时占用存储空间的大小。
优点:在长廊及低特征场景中建图效果好;
缺点:严重依赖里程计;无法适应无人机及地面不平坦的区域;算法没有回环检测模块;大的场景,粒子较多的情况下,特别消耗资源。
Hector SLAM
HectorSLAM是一种只需要激光雷达数据而不需要里程计数据的情况下,鲁棒性较好的2D SLAM方法和使用惯性传感系统的导航技术。Hector整体算法很直接,就是将激光点与已有的地图“对齐”,即扫描匹配。
Hector采用泰勒展开近似优化激光雷达数据的匹配过程,因此两次激光雷达采集数据时位姿变化不能太大,否则余项误差过大,造成建图失败——这也是为什么在hector论文中需要使用到扫描频率高达40Hz的激光雷达,如果使用10Hz的激光雷达,很容易建图失败(尤其在转向速度较大的时候)。因为它仅用到激光雷达信息,这样建图与定位的依据就不如多传感器结合的效果好。但Hector适合手持移动或者本身就没有里程计的机器人使用。
在大地图,低特征(distinctive landmarks)场景中,hector的建图误差高于gmapping,特别是在长廊问题中,误差更加明显。
优点:不需要使用里程计,所以使得空中无人机及地面小车在不平坦区域建图存在运用的可行性;使用多分辨率地图能避免局部最小值;3D空间的导航加入惯性测量系统(IMU),利用EKF滤波进行状态估计;
缺点:需要激光雷达的更新频率较高且测量噪声小,所以在构建地图过程中需要robot速度控制在比较低的情况下,建图效果才会比较理想,这也是它没有回环检测模块的一个后遗症;且在里程计数据比较精确的时候,无法有效利用里程计信息。
Cartographer
cartographer是Google的实时室内建图项目,传感器安装在背包上面,可以生成分辨率为5cm的2D栅格地图,是一种基于图优化的激光slam算法。它同时支持2D和3D激光SLAM,可以跨平台使用,支持Lidar、IMU、Odemetry、GPS、Landmark等多种传感器配置。 Cartographer广泛应用于服务机器人、扫地机器人、仓储机器人、自动驾驶等领域,是目前落地应用最广泛的激光SLAM算法之一。
算法包含cartographer和cartographer_ros两部分,cartographer_ros可以理解为算法的一层外壳。Cartographer主要负责处理来自雷达、IMU和里程计的数据并基于这些数据进行地图的构建。cartographer_ros则基于ROS的通信机制获取传感器的数据并将它们转换成cartographer中定义的格式传递给cartographer处理,与此同时也将cartographer处理结果发布用于显示或保存。
优点:累计误差较前两种算法低,能天然的输出协方差矩阵,后端优化的输入项。成本较低的雷达也能跑出不错的效果。无需imu和里程计,只有激光雷达也可以建图,还可以手持雷达建图。
缺点:内存占用较大,算法体量较大,需要花上很久的时间才能稍微看得懂。