Gmapping、hector、Cartographer三种激光SLAM算法简单对比

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jeff_Lee_/article/details/77869987

一、Gmapping是基于粒子滤波的算法。

缺点:严重依赖里程计,无法适应无人机及地面不平坦的区域,无回环(激光SLAM很难做回环检测),大的场景,粒子较多的情况下,特别消耗资源。


源码的核心函数:processScan()

算法框架:

①  drawFromMotion()运动模型(因为有这步,所以特别依赖里程计信息)



②  scanMatch()扫描匹配

这里面有很多模型常用的


坐标变换之后,雷达数据映射到地图上,计算其距离最近障碍物的距离。

③  updateTreeWeights()权值更新

④  resample()重采样,为了降低退化现象,权重大的粒子多生成一些,很像遗传算法。

⑤  地图更新updateMap()得到最优的粒子,按照他的扫描数据,利用占据栅格地图算法,更新地图。

 

 

二、Hector SLAM

    基于优化的算法(解最小二乘问题),优缺点:不需要里程计,但对于雷达帧率要求很高40Hz,估计6自由度位姿,可以适应空中或者地面不平坦的情况。初值的选择对结果影响很大,所以要求雷达帧率较高。

核心函数:update()

①  Matchdate()利用上一帧位置和此帧雷达扫描,运用构造的最小二乘问题,估计此帧位姿。

②  UpdateByScan根据此帧位姿,雷达数据,利用占据栅格地图算法,更新地图。

扫描匹配算法:利用g2o解公式7,泰勒展开,运用双线性插值计算微分,雅克比矩阵。

函数M()该点是障碍物的概率。


 

三、Cartographer

累计误差较前两种算法低,能天然的输出协方差矩阵,后端优化的输入项。成本较低的雷达也能跑出不错的效果。

先有一定数量的laser scan构建submap,由submap拼接成地图,所谓的回环检测,就是间隔一定数量的扫描进行一次所有submap的图优化(SPA,运用了分支定界原理进行加速),但这种用有误差的估计量去作为约束去优化估计量,总有种自己估计优化自己的嫌疑,跟喜欢视觉SLAM运用词袋模型检测是否回到之前来过的地方的算法。


位姿估计:先用相关性扫描匹配(CSM)给一个初值,然后构造一个最小二乘问题(与Hector超不多),求解精确的位置。

CSM:简单来说大概是:用激光末端点匹配取到占据栅格地图中的值,获得得分,取得分最高的作为初值。加上多分辨率计算可以加速,并且获得分辨率意义下的最优解。

 

用分支定界原理加速求解过程(相对于暴力求解),进行深度有限优先搜索,CSM计算得到初始最高分数,确定深度,分支就是进行拓展,定界就是剪枝。提高运算效率。



                                                         如有错误请指出

展开阅读全文

没有更多推荐了,返回首页