几种常见建图算法简介
一、gmapping
gmaping主要是采用一个粒子滤波的方式来实现。主要框架如下:
(1) 数据输入
在ROS GMapping包中,获取激光和里程计数据传入openslam GMapping包中,为新一时刻的建图做准备。
(2)运动模型
根据t-1时刻的粒子位姿以及里程计数据,预测t时刻的粒子位姿,在初始值的基础上增加高斯采样的noisypoint。
(3)扫描匹配
对每个粒子执行扫描匹配算法,GMapping默认采用30个采样粒子。扫描匹配的作用是找到每个粒子在t时刻位姿的最佳坐标。为后面每个粒子权重更新做准备。如果此处扫描匹配失败,则粒子权重更新则采用默认的似然估计。
(4)建议分布
混合了运动模型和观测模型的建议分布,根据上一步扫描匹配获得的最佳坐标,围绕该坐标取若干位置样本(距离差值小于某阈值)计算均值与方差,使得当前粒子位置满足该均值方差的高斯分布。
(5)权重计算
对各个粒子的权重进行更新,更新之后还需进行归一化操作。注意:重采样前更新过一次,重采样后又更新过一次。
(6)重采样
使用Neff判断是否进行重采样(重采样频率越高,粒子退化越严重,即粒子多样性降低,导致建图精确度降低,有必要设定一个判定值改善粒子退化问题)。
(7)粒子维护地图
每个粒子都维护了属于自己的地图,即运动轨迹。该步骤执行的操作是更新每个粒子维护的地图。
(8)地图更新
在ros中进行地图更新。先得到最优的粒子(使用权重和 weightSum判断 ),得到机器人最优轨迹,地图膨胀更新。
参考:http://blog.csdn.net/lqygame/article/details/71158558
优点:依赖里程计(odometry),无法适用无人机及地面小车不平坦区域;无回环;
缺点:在长廊及低特征场景中建图效果好;
二、cartographer
整个建图系统框架如下所示:
主要的流程从框架图可以看出来,输入主要是:里程计、imu、雷达(或者点云、超声波等),输出为submap
Cartographer主要理论是通过闭环检测来消除构图过程中产生的累积误差[1]。用于闭环检测的基本单元是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策略的实现。
参考:http://blog.csdn.net/u012700322/article/details/53513527
posted on 2018-03-02 18:13 kuangxionghui 阅读(8663) 评论(0) 编辑 收藏 举报