SLAM问题的处理方法主要分为滤波和图优化两类。
一、滤波方法(定位)
从贝叶斯理论的观点看,机器人定位问题就是要求已知历史的动作uk,感知zk,利用其两者确定机器人当前的状态xk。
据此定义贝叶斯模型:
bel(xt)=p(xt∣z1:t,u1:t)
利用贝叶斯法则可得:
=ηp(zt∣xt,z1:t−1,u1:t)p(xt∣z1:t−1,u1:t)
其中η=p(zt∣z1:t−1,u1:t)1为归一化常数。
根据Markov假设和全概率公式有:
=ηp(zt∣xt)∫p(xt∣xt−1,z1:t−1,u1:t)p(xt−1∣z1:t−1,u1:t)dxt−1=ηp(zt∣xt)∫p(xt∣xt−1,ut)p(xt−1∣z1:t−1,u1:t−1)dxt−1=ηp(zt∣xt)∫p(xt∣xt−1,ut)bel(xt−1)dxt−1
据此可得出运动模型与观测模型如下:
运动模型
运动模型解决的问题是:
如何在当前位置xt−1作出动作ut时,给出机器人所处位置的概率分布。
belˉ(xt)=η∫p(xt∣xt−1,ut)bel(xt−1)dxt−1
观测模型
观测模型解决的问题是:
如何在感知到z信息的情况下,更新当前的状态x。
bel(xt)=p(zt∣xt)belˉ(xt)
为求解以上的机器人定位问题,有两种主要的方法:
(1)粒子滤波(离散) (2)卡尔曼滤波(连续)
1、粒子滤波(Monte Carlo Localization)
bel(xt)=η∫p(zt∣xt)p(xt∣xt−1,ut)bel(xt−1)dxt−1
上面的推导过程中需要用到积分,对于一般的非线性,非高斯系统,很难得到后验概率的解析解。为了解决这个问题,需要引进蒙特卡洛采样,此方法也称为粒子滤波。
知识点:
- 因为bel(xt−1)难以采样,故引入重要性采样的方法去估计bel(xt)。
bel(xt)=η∫p(zt∣xt)p(xt∣xt−1,ut)q(xt−1)q(xt−1)bel(xt−1)dxt−1=ηEq[p(zt∣xt)p(xt∣xt−1,ut)q(xt−1)bel(xt−1)]参考:Particle Filter Tutorial 粒子滤波:从推导到应用(二)
2、卡尔曼滤波(连续)
假设
Move:
p(xk∣xk−1,uk) ~ N(Akxk−1+Bkuk,Rt),
p(xk−1) ~ N(μk−1,Σk−1)
Sense:
p(yk∣xk) ~ N(Ckxk,Qk)
p(xk) ~ N(μˉk,Σˉk)
据此可推导μk和Σk,推导的知识点包括:
-
p(xk∣xk−1,uk)与p(xk−1)的乘积仍然为高斯分布。
- 为了对xk−1部分进行积分,可先分离出关于xk−1的高斯分布。
- 高斯分布一阶导的零点为均值,二阶导的零点为协方差的逆。
参考:卡尔曼滤波器(THE KALMAN FILTER)的数学原理
二、图优化方法(定位与建图)
Graph SLAM
GraphSLAM背后的思想主要是把机器人或Landmarks的位姿抽象为点,把机器人在不同位姿运动和观测的约束抽象为边。从而构成信息矩阵Ω和信息向量ξ,并满足Ωμ=ξ,故地图所有点的位姿μ可由以下式子求得:μ=Ω−1ξ
参考资料
Particle Filter Tutorial 粒子滤波:从推导到应用(一)
卡尔曼滤波器(THE KALMAN FILTER)的数学原理
SLAM笔记三——贝叶斯滤波器
Particle Filter Tutorial 粒子滤波:从推导到应用(二)
【SLAM】(二)Cartographer的原理探究——GraphSLAM理论基础