卡尔曼滤波详细推导

简介: 卡尔曼滤波详细推导

前言

虽然卡尔曼滤波作为一种经典的算法在多源数据融合、slam后端优化等很多方面都取得了较好的应用,但是我们经常都会有一个疑问,卡尔曼滤波到底是什么呢?

简要的说:“卡尔曼滤波是一种优化估算算法”


卡尔曼滤波可以适用于线性高斯系统,如果我们考虑非线性系统则可以考虑扩展卡尔曼滤波


其可以解决两个问题:


状态如何在无法被直接测量的情况下,进行估算系统的状态。

如何在数据源存在噪声的情况下,通过卡尔曼滤波估计系统的状态。(比如说惯导、轮式里程计、GNSS三种传感器数据均存在误差,且频率不一,如何融合三种数据源进行精确的估计汽车的位置)

我们先来看一个简单的例子:

一辆行驶在路上的小车,其状态包括位置、速度两个信息,用 x表示小车的状态,其中 p表示位置, v表示速度。则可以写成下述形式:

                                       image.png

假设式中的位置变量 p 与 速度变量 v,都为随机变量且符合正态分布,则进而可以通过均值 描述可能的估计 和 对应的方差 衡量变量的不确定性。

匀速行驶

在一个比较理想的状态下,我们假设小车在路上匀速行驶,则可以对小车行驶由 t − 1时刻到 t时刻之间的过程描述成下式中的数学模型:

                                    image.png

针对 t时刻与 t − 1 时刻的状态的估计量,image.png

写成矩阵形式如下:

                                 image.png


令上式中:

                                  image.png


则可以写成:

                                     image.png

称上式中的 F t 为预测矩阵,其描述了从上一时刻状态估计到下一时刻状态估计之间的关系。


但是,上述例子中的位置变量 p与 速度变量 v都不是确定的,两者之间的关系也不是确定的,但是二者之间却有一定的相关性,我们通过协方差矩阵 P 描述两者之间的相关程度:


(注意这里的协方差矩阵 P与位置变量 p符号之间的区别)

                               image.png


同时,考虑到两者之间的预测矩阵F_{t},则给定上一时刻的协方差矩阵 P t − 1,则下一时刻的协方差矩阵 P t1,则下一时刻的协方差矩阵 P t 可以写成:

                                    image.png

非匀速行驶

上述的例子种过于理想,实际情况中小车不可能都是在匀速行驶。因此,我们考虑加入一个加速度 a,即小车的行驶速度会随着时间而发生改变。

重新定义小车的状态量如下所示:

                               image.png

令 u ^ t作为加速度 a在 t时刻的估计(又称之为输入)。

则上式又可以写为:

                               image.png

整理image.png得:

                              image.png

同时,使用 Q t

表示引入的输入变量 u t的方差,则对两者之间协方差的影响又可以写成如下形式:

                                         image.png

总结一下,引入新的输入之后,对估计 x ^ t和不确定性 P t都产生了影响。

卡尔曼滤波公式推导

到此为止,我们对上述的一个小车行驶过程进行了很好的数学建模,但是我们还没有进行一个较好的公式推导。

下面我们就进行这个推导的过程:

上述推导过程我们得到了关于小车在 t时刻预测值 x ^ t

满足一个高斯分布 N p ( μ p , σ p )

同时,基于小车携带的传感器又可以获得一个状态的观测值,这个观测值也会受到环境和传感器自身的影响产生众多噪声,我们仍假设观测值服从一个高斯分布,记为: N o b ( μ o b , σ o b )


因此,对于当前时刻 t t t,我们有了两组参考值,一组是预测值 x ^ t,一组是测量值 x t。那么那组值是正确的呢?怎么样才能得到最终较好的结果呢?

卡尔曼滤波器做的一个工作就是把预测值的高斯分布 N p ( μ p , σ p ) 与测量值的高斯分布 N o b ( μ o b , σ o b ) 进行相乘,得到一个新的分布。(注:这两个高斯分布的乘积不再是一个正态分布,因为其概率密度求和之后不为1)


这个新的分布会正比于一个高斯分布,因此,我们可以通过指数相等来进行计算,即我们可以得到如下关系:

                image.png

上式中, μ p σp

分别为预测的均值和方差, μ o b, σ o b 分别为观测的均值和方差。而 μ c o m b, σ c o m b分别为融合之后的分布所对应均值和方差,且 为一个常数(即正比于一个高斯分布)。

我们把上式展开

image.png

为了使得上式的关系成立,需满足一个必要条件为左右两侧 x的二次项系数与一次项系数均相等。则由此可以得到下述关系:

                                   image.png


首先,对于第一个式子,可以变换为下述形式:

                               image.png

同时,代入并变换第二个式子(右侧):

                            image.png


同时去除分母,得:

                                      image.png


则:

                                        image.png


令:

                                                        image.png


称 K为卡尔曼增益,则我们可以把变量 μ c o m b与变量 σ c o m b 2通过 K表示为:

                           image.png

对应于矩阵形式,则可以写为:

                              image.png

至此,我们就简要的说明了卡尔曼滤波中的均值、方差以及卡尔曼增益用于更新前两者的推导过程。

黄金五条公式总结

可以看出卡尔曼滤波整体包括两个部分:1)预测 2)更新

预测部分包括:

                             image.png

式中, x ^ t 为 t时刻的状态量预测值,通过上一时刻 t − 1计算的最优状态估计以及输入 u t进行计算。

σ ^ t 2为状态估计的不确定性,通过上一时刻的不确定性 σ ~ t − 1 2,预测矩阵 F t以及输入 u t的不确定性 Q t进行计算。


更新部分包括:

                                 image.png

上式中, K为卡尔曼增益,通过 t t t时刻的状态估计预测量的不确定性 σ ^ t 2与 t时刻观测值的不确定性进行计算。

x ~ t 为 t时刻结合预测和观测计算出的最优状态估计(即我们想要计算的状态量),通过 t t t时刻的预测值 x ^ t与观测值 x o b − t,以及卡尔曼增益 K进行计算。

σ ~ t 2

为在 t t t时刻结合预测和观测两方面进行计算的不确定性,通过预测的不确定性 σ ^ t 2 与卡尔曼增益 K进行计算。


上述五个公式即为“黄金五条”公式。

卡尔曼增益K值的讨论

最后我们再进行一些讨论,更加深入的去了解卡尔曼滤波的内在关系。

我们来假设两个极端情况:

1)如果存在一个情况,观测量特别精确,几乎不存在误差,其方差 σ o b − t 2 的值可以取0。此时,卡尔曼增益 K的值为1。则更新部分的最优估计和不确定性变为:

                                 image.png

即观测值作为了最优估计,且其不确定性为0。

2)针对另外一个情况,我们构建的小车行驶的数学模型毫无误差,预测量特别精确,几乎不存在误差,其方差 σ ^ 2 的值可以取0。此时,卡尔曼增益 K的值为0。则更新部分的最优估计和不确定性变为:

                                    image.png

即以预测值作为最优的估计。


因此,我们得到了一个重要的结论:


卡尔曼增益 K的值,决定了测量值和预测值对计算 t时刻状态量 x ~ t的影响程度。

这个知乎大佬放了matlab官方的学习视频,很不错,通俗易懂,感兴趣的可以去看一下:如何通俗并尽可能详细地解释卡尔曼滤波?

码字不易,若有转载还请注明出处!

目录
相关文章
|
6月前
|
并行计算 算法 计算机视觉
【MATLAB 】 EEMD 信号分解+模糊熵(近似熵)算法
【MATLAB 】 EEMD 信号分解+模糊熵(近似熵)算法
191 0
|
6月前
|
并行计算 算法 计算机视觉
【MATLAB 】 CEEMDAN 信号分解+模糊熵(近似熵)算法
【MATLAB 】 CEEMDAN 信号分解+模糊熵(近似熵)算法
315 0
|
6月前
|
编解码 并行计算 算法
【MATLAB 】 小波分解信号分解+模糊熵(近似熵)算法
【MATLAB 】 小波分解信号分解+模糊熵(近似熵)算法
92 0
|
6月前
|
并行计算 算法
【MATLAB 】 辛几何模态分解信号分解+模糊熵(近似熵)算法
【MATLAB 】 辛几何模态分解信号分解+模糊熵(近似熵)算法
164 0
|
决策智能
ortools求解非线性问题
ortools求解非线性问题
638 0
ortools求解非线性问题
21 高斯的推导(1809)
21 高斯的推导(1809)
41 0
|
机器学习/深度学习 传感器 算法
基于类帕累托贯序抽样算法求解单目标优化问题附matlab代码
基于类帕累托贯序抽样算法求解单目标优化问题附matlab代码
|
算法 定位技术 vr&ar
【状态估计】变分贝叶斯近似的递归噪声自适应卡尔曼滤波(Matlab代码实现)
【状态估计】变分贝叶斯近似的递归噪声自适应卡尔曼滤波(Matlab代码实现)
113 0
|
传感器 算法 vr&ar
【状态估计】卡尔曼滤波器、扩展卡尔曼滤波器、双卡尔曼滤波器和平方根卡尔曼滤波器研究(Matlab代码实现)
【状态估计】卡尔曼滤波器、扩展卡尔曼滤波器、双卡尔曼滤波器和平方根卡尔曼滤波器研究(Matlab代码实现)
130 0
“交叉熵”反向传播推导
“交叉熵”反向传播推导
133 0