卡尔曼滤波系列1——卡尔曼滤波

简介: 卡尔曼滤波系列1——卡尔曼滤波

🥂原创不易,转载请附上原文链接🥂

🥗卡尔曼滤波系列1——卡尔曼滤波

🍦写在前面

终于开始写卡尔曼滤波系列了,有点小激动呢🍭🍭🍭其实在之前的文章中我也简单介绍过卡尔曼滤波,enmmm🧅🧅🧅是的,只是简单的介绍了一下,主要是帮大家直观理解卡尔曼滤波,并没有对卡尔曼滤波的公式进行讲解和推导,那么这一系列呢,我将着重于一些公式的推导来和大家唠唠卡尔曼滤波🍒🍒🍒


谈到公式推导大家可能多少有点抗拒,从我之前写的文章我也发现,实战的文章似乎总是比理论文章的阅读量高很多,但是理论也确实是我们不可缺少的,我们应坦然的面对🌼🌼🌼这篇文章呢,我打算介绍一些理论上的问题,但也会通过一些例子来带入,卡尔曼的核心推导我将给出推导的视频链接,这样可能比文字描述更加有效。【这样其实就意味着这篇文章其实推导的过程也并不多,但会介绍一些重要的概念,对推导过程感兴趣的可以观看视频进行了解🍳🍳🍳】


🍦卡尔曼滤波宏观理解

首先先来对卡尔曼滤波做一个宏观上的理解,即我们使用卡尔曼滤波能干什么?卡尔曼滤波是用来对事物的状态进行估计的,为什么要对事物的状态进行估计呢?那肯定是我们无法准确的知道事物的当前状态,这时候我们就要进行估计了【但是我们不可能是随便的估计,往往是根据一些经验来进行估计,所以估计的结果是相对准确的】;另一方面,为了估计一个事物的状态,我们还可以借助一些仪器来进行测量,但是用仪器进行测量就会存在一定的测量误差。这时候就会产生一个问题,我们应该相信我们的估计结果还是相信测量结果呢?我想大概率人们都会这么想:如果我们使用的测量仪器是从某个小厂家手里花五毛钱买的劣质仪器,那么我们会更相信估计结果;如果买的仪器价值千金,那我们则有理由相信测量结果。其实呢,我们往往都会给这两种结果分配不同的比例,表示我们更信任哪种结果。那么卡尔曼滤波就是结合事先的估计和仪器的测量这两种手段来估计事物状态的方法。


我们举个例子来说明上文所要表达的含义。如下图所示,我们用炉子给水壶烧水,现在水沸腾了,我们结合初中知识,估计水的温度是95.4°C【受大气压影响,没有100度🎈】,即Xk=95.4°C。这时候我们用一个温度计测量水的温度,发现其值为yk=94.1°C。发现xk和yk不一致,该相信谁呢?我们假设温度计的可信度为0.6,估计的为0.4,则最终的的水温=0.6*94.1+0.4*95.4=94.62。b62d0cac534396544fa7e5a255ee5074.png


🍦卡尔曼滤波引导小例

通过上文你可能对卡尔曼滤波有了一个大概的了解,即它是用来对一些不确定的物体的状态进行估计的。下面举一个生活中的小例子来引入卡尔曼滤波:现有一枚硬币、一把尺子,目的是尽可能准确的得出硬币的尺寸,共测量k次,每次的测量结果记为Z1,Z2,… Zk 。我们如何估计硬币的尺寸呢?很自然的一个想法是取平均值,计算过程如下图:d3e8290f799dfa38431c1d414fb75015.png

通过这个例子我想表达什么观点呢,我们可以聚焦到上例的最终结果:image.png可以发现进行k次测量后的估计值image.png不知道大家有没有嗅到一些函数递归的味道,即估计某次测量的结果是和估计上次的结果有关系的,其实卡尔曼滤波就含有这种递归的思想🍉🍉🍉再来分析一下上式,若随着测量的次数k增大image.png即随着k的增大,第k次的估计值只和第(k-1)次的估计值有关,而和第k次的测量值无关,也即随着k增大,测量结果不在重要。其实这也非常好理解,当我们测量了很多次,前面的估计值其实已经非常接近真实值了,所以再多测一次的意义就变得不大了;相反的,若k非常小,即k=1(k表示测量次数,k=0无意义)时,image.png即此时的估计值完全由测量值决定。其实上式类似于卡尔曼滤波中的一个公式,当然这是后话了,这里我们加以注意即可。进一步的,我们可以将image.png

  

这里我还想给出Kk的计算公式,如下图所示:8f1710474b607baed9f79613e4304385.png

  当然,这里不需要理解为什么,有一个大概的印象就好。我们从宏观上来理解这个公式:image.png


🍦卡尔曼滤波数据融合小例

大家既然看了卡尔曼滤波,那么肯定是知道卡尔曼滤波有数据融合的作用了,实际上,卡尔曼滤波就起到了一个数据融合的作用,从这篇文章的写在前面可以看出,卡尔曼滤波不就是把估计值和测量值进行了融合而得到了一个新的结果嘛🍓🍓🍓读到这里不知道读者有没有疑惑,我们不是还没介绍卡尔曼滤波的过程嘛,怎么就直接跳到卡尔曼滤波的应用了。确实是这样的,但我想的是通过一些例子来过渡到卡尔曼公式的推导,当然这些例子都是非常简单的样例,所以就让我们一起来看看这个例子吧🥝🥝🥝

现有一个电子秤和一个普通秤,同时测一个物体,电子秤测得的重量结果为Z1=30,标准差为σ 1 = 2;普通秤测得的重量结果为Z2=32,标准差为σ1=4现希望通过这两个结果来得到一个最优的估计值🍐🍐🍐

首先我们可以先画出两种秤测得物体重量的分布图,如下:【假设它们是满足正态分布】54378017a32377eedbd4f137f96e8e69.png

上图Z1表示电子秤测量结果分布情况,Z2表示普通秤测量结果分布情况。在没进行计算之前,我觉得我们可以先猜一下真实值。由上可知,电子秤的标准差只有2,而普通秤的标准差为4,这表示电子秤测量结果更加稳定,这样测量结果可能更加准确,最终我们融合的结果可能就更加偏向于电子秤测得的结果,即更接近于30。当然这些仅是我的猜测结果,现我们通过计算看看最优的估计值是否和我们的猜测一致。

image.pnga51f46eca8c946d9823a8cdb8dae42ab.png

image.png

c6e4a57d97d098741effb10cd30367f2.png

至此我们得到了最终的估计测量值和标准差,可以看到这个结果和我们之前猜测的一样更加的接近30,而且可以发现这个结果的标准差比之前的两次测量的标准差都要小。这里我画出三次结果的分布图供大家直观感受一下【after_merge表示融合后的结果,可以看出融合后的结果分布更高更瘦了,其实就是效果更加好了】ac1a77f1f5ef68cda56b323799f636ba.png

🍦卡尔曼滤波公式

  这一小节将为大家带来卡尔曼公式🍺🍺🍺还是通过一个小例子来进行讲解。如下图所示,有一辆小车在马路上行驶,其速度为s,加速度为a,当前时刻的位置用P表示。

e671ef7736723e5af9f1e1d16b799e38.png

  根据初中物理匀加速直线运动的知识,可以得到公式:

image.png


  大家注意,我们上述所述的所有公式都是在理想状态下成立的,但是我们知道理想状态在现实中是不可能存在的,因此我们需要在上述的公式中都加入噪声,则变换之后的公式如下:【注意这里我们认为噪声都是满足正态分布的】41b3bc8e831f42b2abc024ceec2a5657.png

image.png

6e14dec25bebd5458b94252523dc9daf.png

这样我们就得到了一个我们估计的数学模型了:image.png


  上文已经得到了我们的估计模型,还是之前那辆小车,现天上有个小卫星可以测量小车的速度,如下图所示:

d2e82d9e8e77be0e192893207e9f64d4.png

  因为卫星可以直接获取小车的位置和速度【哈哈哈不知道卫星能不能直接获取速度哈,这个影响不大不用在意】,所以有以下方程:

image.png

  改写成向量形式,如下:

image.png

  同样的,测量也是存在误差的,也认为其满足正态分布,在上述公式中加入误差,结果如下:

43939fc23a2242349c32a310d0b4cef4.png

image.png

6510c694b77b4c29916fc23ed16f1322.png

  这样我们就得到了我们测量的数学模型了:image.png


  至此,我们得到了一个估计模型,一个观测模型,这时候我们就可以使用上文引导小例和融合小例中的结论,将估计值和观测值进行融合,其结果如下:dc4276121f1e3a5548f09ac7f208648b.png

image.pngdd74884bb0d04e56e01d76577cf242c4.png

  至此,卡尔曼公式就介绍完啦,希望大家都有所收获🌾🌾🌾

🍦卡尔曼公式应用举例

  这一部分其实网上的资料特别多,我之前的文章中也做过一个小例子,这里还没想好再补充什么例子,后续有时间再更新应用部分叭🥫🥫🥫


🌷🌷🌷2022.04.08更新🌷🌷🌷

  在网络上看到了一个非常有意思物体轨迹预测的小实验,当然是利用卡尔曼滤波实现的🍹🍹🍹详情点击传送门进行了解。


🍦结语

  这篇文章的确花费了很多时间,公式什么的太多了,但也收获很大,希望可以让大家对卡尔曼滤波有一个较为清晰的认识,当然文中确实有一些表述不是特别清晰的地方,深感抱歉👐👐👐可以结合其它文章进行了解。

  初步计划后续会更新扩展卡尔曼滤波和无际卡尔曼滤波,冲冲冲🌻🌻🌻

🍦参考链接


DR_CAN:https://www.bilibili.com/video/BV1hC4y1b7K7/?spm_id_from=333.788


421施公队:https://www.bilibili.com/video/BV1Rh41117MT?spm_id_from=333.337.search-card.all.click



相关文章
|
机器学习/深度学习 传感器 算法
【状态估计】基于卡尔曼滤波估计室内温度附matlab代码
【状态估计】基于卡尔曼滤波估计室内温度附matlab代码
|
算法 计算机视觉
基于卡尔曼滤波的二维目标跟踪(Matlab代码实现)
基于卡尔曼滤波的二维目标跟踪(Matlab代码实现)
164 0
|
算法 定位技术
【信号处理】卡尔曼滤波(Matlab代码实现)
【信号处理】卡尔曼滤波(Matlab代码实现)
165 0
|
数据采集 编解码 监控
改进粒子滤波的无人机三维航迹预测方法(基于Matlab代码实现)
改进粒子滤波的无人机三维航迹预测方法(基于Matlab代码实现)
179 0
|
传感器 算法 vr&ar
【状态估计】卡尔曼滤波器、扩展卡尔曼滤波器、双卡尔曼滤波器和平方根卡尔曼滤波器研究(Matlab代码实现)
【状态估计】卡尔曼滤波器、扩展卡尔曼滤波器、双卡尔曼滤波器和平方根卡尔曼滤波器研究(Matlab代码实现)
134 0
【状态估计】无迹卡尔曼滤波(UKF)应用于FitzHugh-Nagumo神经元动力学研究(Matlab代码实现)
【状态估计】无迹卡尔曼滤波(UKF)应用于FitzHugh-Nagumo神经元动力学研究(Matlab代码实现)
|
传感器 机器学习/深度学习 算法
【滤波跟踪】基于变分贝叶斯自适应卡尔曼滤波器VPAKF实现无人机状态估计附matlab代码
【滤波跟踪】基于变分贝叶斯自适应卡尔曼滤波器VPAKF实现无人机状态估计附matlab代码
|
传感器 机器学习/深度学习 算法
【目标跟踪】基于Taylor结合卡尔曼滤波实现UWB数据滤波跟踪附Matlab代码
【目标跟踪】基于Taylor结合卡尔曼滤波实现UWB数据滤波跟踪附Matlab代码
|
机器学习/深度学习 算法 计算机视觉
对卡尔曼滤波的理解
最近一直在准备学习目标跟踪,也了解了一些传统的跟踪算法,然后再继续深入学习的时候,碰到了卡尔曼滤波这个东西,这是一种非常经典的算法,即便现在的深度学习中,也常常与之相结合。最早接触卡尔曼滤波应该是我大二的时候了,这么多年已经忘了,而且那时候也不是那么的理解,现在准备进一步理解,这篇文章将尽可能的用通俗的话来说一下个人的理解。
171 0
对卡尔曼滤波的理解
|
机器学习/深度学习 传感器 资源调度
【信号去噪】基于变分贝叶斯卡尔曼滤波器实现信号去噪附matlab代码
【信号去噪】基于变分贝叶斯卡尔曼滤波器实现信号去噪附matlab代码