所谓的高斯滤波共享了一个基本思想,那就是置信度用多元正态分布表示。在这里我们再重申一下多元正态分布的定义:
1. 卡尔曼滤波(Kalman Filter:KF)
实现贝叶斯滤波的最好的技术就是卡尔曼滤波(Kalman Filter)。卡尔曼滤波是由Swerling和Kalman作为线性高斯系统中的预测和滤波技术而发明的,用矩来定义。卡尔曼滤波实现了对连续状态的置信度计算。
我们回顾一下贝叶斯滤波,贝叶斯滤波的目标是求解状态变量
![]()
的置信度
![]()
,求解的方式是递归,有两个步骤:
- 预测:根据
![]()
计算
![]()
,
- 测量更新:利用测量值
![]()
和
![]()
计算
![]()
,
卡尔曼滤波则是通过合理的假设是以上的计算更容易实现,通过假设
![]()
符合高斯分布,这样我们就可以用均值
![]()
和方差
![]()
来表示置信度。
除了满足贝叶斯分布的马尔可夫假设之外,卡尔曼滤波还需满足以下三个条件:
(1)状态转移概率
必须是带有随机高斯噪声的线性函数,可由下式表示:
其中,
![]()
和
![]()
为状态向量,
![]()
为
![]()
时刻的控制向量,
![]()
为高斯随机噪声,均值为0,方差为
![]()
。
![]()
为
![]()
的方针,
![]()
为
![]()
的矩阵。
那么状态转移概率 :
(2)测量概率
![]()
也与带有高斯噪声的自变量呈线性关系:
其中,
![]()
为
![]()
的矩阵,
![]()
为测量向量
![]()
的维数,
![]()
为测量噪声,是均值为0,方差为
![]()
的高斯分布。
那么测量概率:
(3)初始置信度
![]()
必须是正态分布,均值为
![]()
,方差为
![]()
。
这三个假设保证了
![]()
在任何时刻
![]()
总符合高斯分布。
卡尔曼滤波的算法表示如下:
算法第2、3行计算预测的置信度,4、5、6行为测量更新,其中第4行的变量矩阵
![]()
被称为卡尔曼增益矩阵,它明确了测量综合到新的状态估计的程度。
由于篇幅原因,这里我们就不进行卡尔曼滤波的数学推导了,如果真的有人看这篇文章然后强烈想看推导的话可以留言,我专门写一篇来证明,不过思路比较清晰,很容易就可以推导出来了。
我们来看一个例子:
a)实线为初始置信度
b)实线为存在不确定性的测量值
c)实线为应用过卡尔曼滤波后的置信度
d)实线为运动后存在不确定性的估计量,即控制系统得到的状态量
e)实线为存在不确定性的测量值
f)实线为应用过卡尔曼滤波之后的置信度
2. 扩展卡尔曼滤波(Extended kalman Filter:EKF)
尽管卡尔曼滤波效率很高,可是他也有局限性,就是他仅适用于线性高斯系统假设,然而实际情况下很多机器人系统不是线性系统,卡尔曼滤波并不适用。于是扩展卡尔曼滤(Extended kalman Filter:EKF)便发展出来。
EKF是KF在非线性情况下的推广,具体来说就是我们放宽了对于状态转移概率和测量概率的假设,我们假设状态转移概率和测量概率分别由非线性函数
![]()
和
![]()
表示。在EKF下,我们假设:
但是直接食用非线性函数在数学推导中会存在问题,所以为了方便推导,我们利用一阶泰勒展开来将非线性函数线性化:
其中,
那么EKF的算法可以表示如下:
我们可以看到,基本思路和KF是一致的,区别在于:
- 我们在计算
![]()
和
![]()
的时候直接用了非线性函数
![]()
和
![]()
来计算;
- 在其余部分将
![]()
和
![]()
分别用
![]()
和
![]()
来替换。
3. 无痕迹卡尔曼滤波(Unscented Kalman Filter:UKF)
无痕迹卡尔曼滤波是另一种线性化方法,他通过使用加权统计线性回归过程实线随机线性化。
UKF明确地从高斯中提取
![]()
点
![]()
,其中
![]()
,
![]()
和
![]()
为确定
![]()
点分布在均值多元的范围内的比例参数,并将这些
![]()
点经过函数
![]()
进行变换。
每个
![]()
点
![]()
有两个与之相关的权值,一个权值
![]()
计算均值时使用,另一个权值
![]()
计算高斯的协方差时使用:
![]()
对高斯表示的附加的分布信息进行编码,如果分布式精确的高斯分布,则
![]()
是最佳选择。
剩下的思路也和KF、EKF相类似,就不赘述了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)