概念

Gmapping是基于滤波SLAM框架的常用开源SLAM算法。 Gmapping基于RBpf粒子滤波算法,即将定位和建图过程分离,先进行定位再进行建图。 Gmapping在RBpf算法上做了两个主要的改进:改进提议分布和选择性重采样。

优缺点

优点

Gmapping可以实时构建室内地图,在构建小场景地图所需的计算量较小且精度较高。相比Hector SLAM对激光雷达频率要求低、鲁棒性高(Hector 在机器人快速转向时很容易发生错误匹配,建出的地图发生错位,原因主要是优化算法容易陷入局部最小值);而相比Cartographer在构建小场景地图时,Gmapping不需要太多的粒子并且没有回环检测因此计算量小于Cartographer而精度并没有差太多。Gmapping有效利用了车轮里程计信息,这也是Gmapping对激光雷达频率要求低的原因:里程计可以提供机器人的位姿先验。而Hector和Cartographer的设计初衷不是为了解决平面移动机器人定位和建图,Hector主要用于救灾等地面不平坦的情况,因此无法使用里程计。而Cartographer是用于手持激光雷达完成SLAM过程,也就没有里程计可以用。

缺点

随着场景增大所需的粒子增加,因为每个粒子都携带一幅地图,因此在构建大地图时所需内存和计算量都会增加。因此不适合构建大场景地图。并且没有回环检测,因此在回环闭合时可能会造成地图错位,虽然增加粒子数目可以使地图闭合但是以增加计算量和内存为代价。所以不能像Cartographer那样构建大的地图,虽然论文生成几万平米的地图,但实际我们使用中建的地图没有几千平米时就会发生错误。Gmapping和Cartographer一个是基于滤波框架SLAM另一个是基于优化框架的SLAM,两种算法都涉及到时间复杂度和空间复杂度的权衡。Gmapping牺牲空间复杂度保证时间复杂度,这就造成Gmapping不适合构建大场景地图,试想一下你要构建200乘200米的环境地图,栅格分辨率选择5厘米,每个栅格占用一字节内存,那么一个粒子携带的地图就需要16M内存,如果是100个粒子就需要1.6G内存。如果地图变成500乘500米,粒子数为200个,可能电脑就要崩溃了。翻看Cartographer算法,优化相当于地图中只用一个粒子,因此存储空间比较Gmapping会小很多倍,但计算量大,一般的笔记本很难跑出来好的地图,甚至根本就跑不动。优化图需要复杂的矩阵运算,这也是谷歌为什么还有弄个ceres库出来的原因。

参考:GMapping原理分析

最后修改:2023 年 11 月 10 日
如果觉得我的文章对你有用,请随意赞赏