gmapping vs cartographer
1. gmapping建图
2. cartographer建图
3. 两种算法建图结果分析
-
首先从直观上对比两张地图可以看得出来cartographer构建的地图比较的规范和清晰,(gmapping是在xbot机器人上建的图,当时行走到电梯玻璃门附近时没有继续对方形的回环进行建图)gmapping构建的地图虽然也可以把周围的墙壁、柱子以及障碍物准确的在地图上显示出来,但是整体的效果不如cartographer建的图,地图的边界线明显不如cartographer构建的平直顺滑。
-
gmapping的建图思想是基于PBRF粒子滤波算法,每个粒子都携带一张地图。gmapping可以很好的利用里程计的信息来降低对使用的激光雷达频率的要求。机器人可以通过里程计把编码器的数据根据机器人当前的位姿计算求解出下一个时刻的位姿,然后再将每个粒子的激光传感器数据与建好的地图特征进行对比,选出与地图特征最好的的粒子的位姿作为当前的的位姿,如此反复构建地图。之前在利用xbot机器人对十二层的走廊进行建图时遇到过地图发生旋转错位的情况,即随着建图的进行,之前构建完成的地图会相对正在构建的地图发生旋转偏移。针对出现的这种情况,分析可能造成的原因:
1、可能是由于里程计计算有误差或者更新频率太低造成的,毕竟gmapping算法对里程计的依赖会很大,构建地图时如果快速移动移动了很可能出现这种偏移错位的情况;
2、还有就是gmapping本身不具有回环检测的功能,仅依靠粒子的多样性在回环发生后根据正确粒子与错误粒子的权重差距来修正里程计累积的误差,回环越大,粒子耗尽的可能性就越高,地图越难在回环时修正回来。所以规划建图路径时,应先走一个小回环,当回环成功后,可以再多走几圈,消除粒子在这个回环的多样性。自己当时用xbot进行gmapping建图时走的回环较少而且走的回环还大,这也是出现上述问题的一个原因。
-
cartographer是一种基于图优化的slam算法,建图思想是GraphSLAM。使用图优化计算在高建图精度的前提下效率还快,处理数据的方式和滤波的方法不同,它不是在线的纠正位姿,而是把所有数据记下来,最后一次性计算。自己在使用firefly机器人构建地图的时候就观察到这一个过程,构建后的地图会在一段时间后优化的更加清晰,道路边界很明显,这一个过程就相当于先堆积的传感器信息,然后再调整机器人位姿顶点去满足边的约束。cartographer带有闭环检测,可以看到地图右端大的回环可以很准确地检测到,构成的方形回环很规则。cartographer算法相比gmapping,随着地图构建的扩大,内存消耗和计算量都很大,但是建图的效果相当好。