ROS(机器人操作系统)是一个广泛使用的开源框架,提供了多种建图算法的实现,以满足不同应用场景的需求。本文将对多种建图算法进行比较和分析,探讨它们的优势和劣势,以帮助决策者选择适合其特定应用的最佳建图算法(包括Gmapping、Hector、Karto、Cartographer)。
01.
Gmapping
Gmapping是应用最为广泛的2D slam方法,主要是利用RBPF(Rao-Blackwellized Particle Filters)方法,所以需要了解粒子滤波的方法(利用统计特性描述物理表达式下的结果)。
Gmapping在RBPF算法上做了两个主要的改进:改进提议分布和选择性重采样。
随着场景增大所需的粒子增加,因为每个粒子都携带一幅地图,因此在构建大地图时所需内存和计算量都会增加。因此不适合构建超大型场景地图。
并且没有回环检测,因此在回环闭合时可能会造成地图错位,虽然增加粒子数目可以使地图闭合但是以增加计算量和内存为代价。
Gmapping可以实时构建室内与室外中小场景地图,在构建中小场景地图所需的计算量较小且导航方案精度较高。
建图效果较为良好。
相比Hector SLAM对采集传感器频率要求低、鲁棒性高(Hector 在机器人快速转向时很容易发生错误匹配,建出的地图发生错位,原因主要是优化算法容易陷入局部最小值);
而相比Cartographer在构建小场景地图时,Gmapping不需要太多的粒子并且没有回环检测因此计算量小于Cartographer而精度并没有差太多。
所以Gmapping不能像cartographer那样构建大的地图,虽然无法一次性生成几万平米的地图,但实际我们使用i5 8代芯片作为处理核心,建的地图可以使用拼接方案达到使用效果,在上万㎡使用也并未出现问题 。
Hector
Hector slam 利用高斯牛顿方法解决 scan-matching 问题,对传感器要求较高。
其无需使用里程计,所以在不平坦区域实现建图的空中无人机及地面小车具有运用的可行性,利用已经获得的地图对激光束点阵进行优化,估计激光点在地图的表示和占据网络的概率,获得激光点集映射到已有地图的刚体变换,为避免局部最小而非全局最优出现,地图使用多分辨率。
需具备高更新频率且测量噪音小的激光扫描仪,所以,在制图过程中,robot的速度要控制在较低的情况下才会有比较理想的建图效果,这也是它没有回环的一个后遗症。另外在里程计数据比较精确的情况下无法有效利用里程计信息。
优点:
不需要使用里程计,所以使得空中无人机及地面小车在不平坦区域建图存在运用的可行性;利用已经获得的地图对激光束点阵进行优化, 估计激光点在地图的表示,和占据网格的概率;
利用高斯牛顿方法解决scan-matching 问题,获得激光点集映射到已有地图的刚体变换;为避免局部最小而非全局最优,使用多分辨率地图;导航中的状态估计加入惯性测量系统(IMU),利用EKF滤波;
缺点:
成本高 ,需要扫描传感器或雷达(LRS)的更新频率较高满足测量噪点小,但是在制图过程中需要机器人速度控制在比较低的情况下,建图效果才会比较理想,
这也是它没有回环(loop close)的一个后遗症;且在里程计数据比较精确的时候,无法有效利用里程计信息,造成数据的浪费 。
建图效果标准,必须要机器人速度控制在比较低的情况下建图效果才能好一点儿,以上建图由于速度过快导致地图发生偏移。在大地图,低特征(distinctive landmarks)场景中,
hector的建图误差高于gmapping。这是由于hector过分依赖scan-match。特别是在长廊问题中,误差更加明显。hector_slam通过最小二乘法匹配扫描点,
且依赖高精度的激光雷达数据,因此扫描角度很小且噪点较大的外围是不行的,匹配时会陷入局部点,地图比较混乱。
Karto
KartoSLAM是基于图优化的方法,用高度优化和非迭代 cholesky矩阵进行稀疏系统解耦作为解,图优化方法利用图的均值表示地图,
每个节点表示机器人轨迹的一个位置点和传感器测量数据集,箭头指向的连接表示连续机器人位置点的运动,每个新节点加入,地图就会依据空间中的节点箭头的约束进行计算更新。
ROS版本的KartoSLAM,其中采用的稀疏点调整(the Spare Pose Adjustment(SPA))与扫描匹配和闭环检测相关。landmark越多,内存需求越大,然而图优化方式相比其他方法在大环境下制图优势更大,在某些情况下KartoSLAM更有效,
因为他仅包含点的图(robot pose),求得位置后再求map。Karto最重要的点就是引入了后端优化与回环检测。在Karto之前诞生的激光SLAM如GMapping,Hector,都是没有后端优化与回环检测的。
建图效果较为良好。Karto的出现在激光SLAM的历史上是个里程碑的事件。在Karto之前的激光SLAM中,如GMapping,Hector 都只有前端部分,也就是使用雷达数据进行扫描匹配以及建图2个功能。
Karto将后端优化与回环检测引入到激光SLAM中,通过位姿图结构的优化,来减小累计误差。
Cartographer
Cartographer是基于图优化的方法建图算法,其主要通过闭环检测来消除构图过程中产生的累积误差。用于闭环检测的基本单元是submap。一个submap是由一定数量的laser scan构成。将一个laser scan插入其对应的submap时,会基于submap已有的laser scan及其它传感器数据估计其在该submap中的最佳位置。
submap的创建在短时间内的误差累积被认为是足够小的。然而随着时间推移,越来越多的submap被创建后,submap间的误差累积则会越来越大。
因此需要通过闭环检测适当的优化这些submap的位姿进而消除这些累积误差,这就将问题转化成一个位姿优化问题。当一个submap的构建完成时,也就是不会再有新的laser scan插入到该submap时,该submap就会加入到闭环检测中。
闭环检测会考虑所有的已完成创建的submap。当一个新的laser scan加入到地图中时,如果该laser scan的估计位姿与地图中某个submap的某个laser scan的位姿比较接近的话,那么通过某种 scan match策略就会找到该闭环。
Cartographer中的scan match策略通过在新加入地图的laser scan的估计位姿附近取一个窗口,进而在该窗口内寻找该laser scan的一个可能的匹配,如果找到了一个足够好的匹配,则会将该匹配的闭环约束加入到位姿优化问题中。
Cartographer的重点内容就是融合多传感器数据的局部submap创建以及用于闭环检测的scan match策略的实现。
Cartographer整体可以分为两个部分:Local SLAM和Global SLAM。
Local SLAM
·利用里程计(Odometry)和IMU数据进行轨迹推算,给出小车位姿估计值
·将位姿估计值作为初值,对雷达数据进行匹配,并更新位姿估计器的值
·雷达一帧帧数据经过运动滤波后,进行叠加,形成子图(submap)
Global SLAM
回环检测后端优化,全部子图形成一张完整可用的地图
优点:
累计误差低,能天然的输出协方差矩阵,后端优化的输入项。成本较低的雷达也能跑出不错的效果。没有imu和odom,只有雷达也可以建图,还可以手持建图。
缺点:
内存占用较大,算法体量较大,需要花上很久的时间才能稍微看得懂。
建图效果优异。它与Karto都是图优化框架,但有诸多不同,例如Karto采取的是spa图优化方法,而Cartographer采用的是google的ceres构建problem优化,Karto的前后端是单线程进行,而Cartographer采取的是多线程后端优化。
而Cartographer也支持多传感器融合建图,可以处理来自激光雷达、IMU、里程计等传感器的数据并给予这些数据进行地图的构建。
Cartographer在建图的过程中可以随意移动机器人,由于它的后端优化,回环检测的能力比较强,所以地图一直保持很好的状态。在建大图的时候更能体现出来鲁棒性良好。
独特的算法们
总之,ROS机器人操作系统为机器人开发者提供了丰富的建图算法选择,每种算法都有其独特的优点和适用场景。在选择建图算法时,开发者应根据机器人的任务需求、硬件配置和环境特点来权衡各种算法的优劣。
无论是使用激光雷达、摄像头还是其他传感器,ROS都为不同的应用提供了多种选择,从SLAM到视觉SLAM,再到深度学习方法,都可以在ROS中找到相应的解决方案。随着机器人技术的进一步发展,我们可以期待更多创新的建图算法出现,为机器人的自主导航和环境感知能力带来更大的提升。
希望本文的比较和分析能够帮助开发者在选择合适的建图算法时做出明智的决策,从而推动机器人技术的不断进步。
OS-NANO具有多重导航算法功能开发和研究能力,欢迎大家使用学习。