GMapping和AMCL都是基于粒子滤波实现的,前者是一个SLAM过程,后者是一个Pure Localization过程,导致二者在具体实现有很大不同。
1. 粒子属性
- AMCL粒子仅包含pose+weight,因此需要较多的粒子,才能比较好的表示机器人位姿的估计(比如,max_samples: 1000, min_samples: 100)
- GMapping粒子包含轨迹+地图+weight,粒子数不能太多,否则占用内存过多
2. 粒子初始化
- GMapping的粒子的pose在刚初始时刻都是相同的
GMapping中的粒子变得不同是通过运动模型上加的高斯噪声实现,gmaping是一个slam过程,不仅要定位还需要建图,所以将所有粒子的初始pose设置成同一个值,比如Identity - 而AMCL中粒子初始化时,对给定pose加了高斯噪声
AMCL的方法更符合初始撒粒子的逻辑
3. proposal分布
- AMCL使用里程计运动模型作为提议(proposal)分布
提议分布特点:又扁又宽 - GMapping使用的是激光雷达观测模型作为提议(proposal)分布
提议分布特点:proposal分布用scan match来表示,提议分布变成了一个比较小的尖峰区域
4. 粒子数
- GMapping的粒子数是固定的
- AMCL的粒子数根据KLD采样动态改变,初期粒子数逐渐增大到最大值,收敛之后,粒子数逐渐减少到最小值
5. 权重计算
- AMCL是通过似然域模型,计算给定pose的scan在似然域中的得分
- GMapping是通过scan to match计算
6. 输出
- AMCL输出的pose是所有粒子加权平均后的结果
- GMapping输出的是得分最高的粒子
@leatherwang
二零二一年三月二十五日