#本篇文章创作灵感来自B站up主DR_CAN博士的卡尔曼滤波教程
卡尔曼滤波器本质上是一种, Optimal Recursive Data Processing Algorithm.(最优化递归数字处理算法)。
卡尔曼滤波器的应用非常广泛,常常应用在导航当中。其广泛应用往往是由于我们的生活中存在着大量的不确定性,主要体现在三个方面:
1. 是不存在完美的数学模型
2. 是系统的扰动往往是不可控的,也很难建模
3. 测量传感器存在着误差
为了便于说明,我们举一个例子,(在视频中DR_CAN恰恰也是这么做的):
比如我们来测量一枚硬币的直径,可以用来表示第k次的测量结果,由于每个人的测量是主观的,而且尺子也有误差,所以测量的结果可能也不尽相同,这个时候在一组数字中,我们想要取得一个较为精确的结果,很容易想到的就是取平均值。
这个时候我们把估计得到的数据称为,其中
等于:
对此公式分析,得到随着k的而增加,测量结果逐渐收敛,k-1测量得到的和k次测量得到的值可以认为相等了,那么测量值Z其实并不是那么重要。
相反的,如果测量次数k比较小,那么测量值比较重要。
在这里,令为
,得到
进一步分析这个式子:
当前的估计值=上一次的估计值+系数x(当前的测量值-上一次的估计值)
这里的系数就是卡尔曼增益/系数,这里同样也可以分析得出,当前的估计值和上一次的估计值有关,上一次的估计值和上上次的估计值有关,这就是递归思想。
关于卡尔曼增益,这里做一点简要的介绍:
首先引入两个参数:
:估计误差,估计值和真实值之间的差距
:测量误差,测量值和真实值之间的差距
这个公式是卡尔曼滤波的核心公式,下一节我会具体说明👆。我们先来做一个具体的分析:
在k时刻:
>>
时,卡尔曼因数趋近于1,带入到上面
式子中可以得到,
,当k-1时刻的估计误差远大于k时的测量误差,那么第k时候的估计值就很接近测量值了(这个很好理解,测量更准确,估计的相当不准确了)
<<
时,卡尔曼因数趋近于0,带入到上面
式子中可以得到,
,当k-1时刻的估计误差远小于k时的测量误差,那么第k时候的估计值就很接近上一时刻的估计了(这个也很好理解,测量误差很大,我们选择相信估计)
下次会给出一个例子,便于大家理解,但是解决一个问题的思路我先列出来,各位可以先记住:
- 首先计算
- 计算
- 更新估计误差
(这个公式下一篇文章讲)