Chapter5-基于滤波的激光SLAM方法
如有错误望不吝赐教!!!
贝叶斯滤波
估计的是概率分布,不是具体的数值
最大后验估计(找到概率值)/最大数值估计
迭代估计方式(计算量小)
- 贝叶斯滤波的推导
??? ?? 表示??的后延概率分布
???(??)表示??的预测(???)概率分布
知道xt-1时的概率分布、里程计测量、激光观测
根据里程计测量得到预测分布,预测位姿
在预测基础上用观测模型对预测模型进行校正,校正之后得到新的分布,即当前xt时刻的后验概率分布
(卡尔曼是贝叶斯在线性高斯的特例)
粒子滤波
(贝叶斯估计的一种实现方式,物体跟踪/机器人定位/SLAM)
-
特性
能处理非线性情况
能处理多峰分布的情况
用一系列的粒子(particle)近似概率分布
非参滤波器
-
粒子滤波全过程:
用粒子进行状态传播(运动学模型传播)
评估每一个粒子的权重(观测模型)
根据权重进行重采样 -
状态传播
-
权重评估
实际上是地图匹配程度
无法知道机器人位姿的实际分布
从机器人的预测分布进行采样,联合权重一起近似机器人的后延概率分布
权重用来评估实际人的预测分布和实际分布的差,差越大,权重越小。 -
重采样
作用:去除权重小的粒子(权重清零,更新,粒子的重新分布)
让粒子分布更符合实际(后延分布)
到目前为止,新的粒子群是根据 proposal分布进行采样的,并且用观测模型计算权重,而最终的目的是用粒子群来近似后延概率分布
对粒子群进行重采样,对于某一个粒 子?? 来说,以?? 的概率接受这个粒子。
生成一个随机数,根据其落在的区间决定接受的粒子,重复N次。 -
存在问题
粒子耗散
维数灾难
当proposal比较差的时候,需要用很多的粒子才能较好的表示机器人的后延概率分布
FastSLAM
(基于粒子滤波)
用粒子滤波来估计机器人的位姿,然后分别为每一个粒子计算地图即可。一个粒子包含机器人轨迹及对应环境地图
- 存在问题
①问题:
每个粒子都包含自己的栅格地图,内存占用多
如果里程计误差比较大,proposal分布和实际相差较大,需要更多粒子表示后延分布概率,内存爆炸
目的:要保持粒子的数量在一个比较小的数值
方法:
提升预测分布采样的位姿质量(加一个Scan-Matching)
②问题:
粒子耗散
目的:尽量缓解粒子耗散
方法:
减少重采样次数,Neff=1/[求和] (wi)2
当Neff较大时,差异性很小,不重采样
当Neff较小时,差异性很大,进行重采样
Gmapping-不是回环是粒子切换(当前不好的粒子不一定往后不好)
【Gmapping里没有】
③问题:
proposal分布不太ok
目的:首先从proposal分布进行采样,然后进行极大似然估计提升采样质量
方法:
考虑最近一帧的观测,限制proposal分布在一个狭小的有效区域,然后再正常的对proposal分布进行采样
proposal分布从里程计观测模型变换到了激光雷达观测模型
进一步优化proposal分布(高斯分布什么的…)
对每个粒子都要进行的操作:Scan-Match和采样
- 最终优化流程
Scan-match和采样
计算高斯分布
从高斯分布中采样并更新权重
已知位姿的情况下进行地图更新
Gmapping
- 特性
目前使用的最为广泛的2D激光SLAM算法
在较小的环境中能实现较好的建图效果
以FastSLAM为基本原理
在FastSLAM的基础上进行了优化1和优化2
Gmapping没有使用优化3