引用知乎中的一段话:“PID和卡尔曼滤波乃是控制工程师的两大法宝。几十年过去了卡尔曼滤波在理论研究上仍然保持着活跃,研究方向包括各种非线性的,噪声统计参数未知的自适应和鲁棒滤波。更重要的是现在计算机的发展将其推向了实用化,包括各种位姿估计,多传感器信息融合,车辆导航等。”

这足以看出卡尔曼滤波在控制领域中的重要性,而本篇博客就来简要地分析一下卡尔曼滤波器的基本原理。

卡尔曼滤波器

首先,我们可以用如下这种简单的描述来简要介绍KALMAN滤波器的基本原理:

假如要对某一状态量进行估计,你有一个线性函数模型,模型的过程噪声方差阵为QQQ;同时你还有一个传感器,传感器的测量噪声方差阵为RRR;要得到对状态的准确估计该怎么做呢?很简单,对模型输出和传感器输出做一个简单的加权和即可,即Vt=(1−K)Vq+KVrV_t=(1-K)V_q+KV_rVt​=(1−K)Vq​+KVr​;当模型的噪声较大时KKK取大一点,当传感器的噪声较大时KKK取小一点,即KKK的大小决定了你应该更相信模型还是传感器;而卡尔曼滤波器的作用就是通过不断地迭代,最终得到了最优的KKK值:KalmanKalmanKalman增益即为两者的最优权值。

实际上,随着卡尔曼滤波器的不断迭代,协方差矩阵PPP最终将会收敛,此时卡尔曼增益固定,状态更新方程变成了与一阶低通滤波相同的形式;但是,卡尔曼滤波器的性能是优于低通滤波器的,因为其在迭代过程中找到了最优滤波常数

卡尔曼滤波器又叫做最佳线性滤波器,只能描述状态与状态之间的线性关系;

优点
1.实现简单;
2.是一种时域的滤波方式;
3.不需要进行频域变换;
4.可以用来用作状态估计

下面使用过一个简单的速度估计的例子来简要分析卡尔曼滤波器的原理:

状态转移

首先确定小车系统的状态如下:

xt=[ptvt]x_{t}=\left[\begin{array}{c}{p_{t}} \\ {v_{t}}\end{array}\right] xt​=[pt​vt​​]

进一步得到系统状态量的更新形式(基本的运动学方程,其中utu_tut​为加速度):

pt=pt−1+vt−1×Δt+ut×Δt22vt=vt−1+ut×Δt\begin{array}{l}{p_{t}=p_{t-1}+v_{t-1} \times \Delta t+u_{t} \times \frac{\Delta t^{2}}{2}} \\ {v_{t}=v_{t-1}+u_{t} \times \Delta t}\end{array} pt​=pt−1​+vt−1​×Δt+ut​×2Δt2​vt​=vt−1​+ut​×Δt​

写成矩阵形式:

[ptvt]=[1Δt01][pt−1vt−1]+[Δt22Δt]ut\left[\begin{array}{c}{p_{t}} \\ {v_{t}}\end{array}\right]=\left[\begin{array}{cc}{1} & {\Delta t} \\ {0} & {1}\end{array}\right]\left[\begin{array}{c}{p_{t-1}} \\ {v_{t-1}}\end{array}\right]+\left[\begin{array}{c}{\frac{\Delta t^{2}}{2}} \\ {\Delta t}\end{array}\right] u_{t} [pt​vt​​]=[10​Δt1​][pt−1​vt−1​​]+[2Δt2​Δt​]ut​

即:

x^t−=Ftx^t−1+Btut\hat{x}_{t}^{-}=F_{t} \hat{x}_{t-1}+B_{t} u_{t} x^t−​=Ft​x^t−1​+Bt​ut​

其中:

Ft=[1Δt01],Bt=[Δt22Δ]F_{t}=\left[\begin{array}{cc}{1} & {\Delta t} \\ {0} & {1}\end{array}\right], B_{t}=\left[\begin{array}{c}{\frac{\Delta t^{2}}{2}} \\ {\Delta}\end{array}\right] Ft​=[10​Δt1​],Bt​=[2Δt2​Δ​]

至此便得出了系统的状态转移方程。

有了状态转移公式就可以用来推测当前的状态,但是所有的推测都是包含噪声的,噪声越大,不确定越大,可以用协方差矩阵来表示这次推测带来的不确定性。

协方差矩阵

假设我们有一个一维的包含噪声的数据,这个数据每次测量都不同,单都是围绕在一个中心值的周围,那么我们可以用均值和方差来表示该数据集,这实际上是假设了改数据服从高斯分布;我们将该一维数据集投影到坐标轴上,如下图:

接下来看二维的情况,将二维的测量数据投影到坐标轴上,可以看出在两个轴上数据都服从高斯分布:

其中:

图1:两个维度的噪声独立;

图2:两个维度的噪声相关,且一个维度的噪声增大,另一个维度的噪声也增大;

图3:两个维度的噪声相关,且一个维度的噪声增大,另一个维度的噪声减小;

如果说两个维度的噪声独立,那么使用方差便可以描述这两个维度之间的关系;但是在两个维度相关情况下,方差不足以描述这种相关性,此时便要引入协方差来描述两个维度之间的相关程度;写成矩阵的形式如下:

cov⁡(x,x)=[σ11σ12σ12σ22]\operatorname{cov}(x, x)=\left[\begin{array}{cc}{\sigma_{11}} & {\sigma_{12}} \\ {\sigma_{12}} & {\sigma_{22}}\end{array}\right] cov(x,x)=[σ11​σ12​​σ12​σ22​​]

对角线上的两个元素表示两个维度的方差,反对角线上的元素表示协方差;

噪声协方差矩阵的传递

如何描述协方差在状态转移中的传递呢?答案是乘以状态转移矩阵:

Pt−=FPt−1FTP_{t}^{-}=F P_{t-1} F^{T} Pt−​=FPt−1​FT

即从上一时刻的协方差来推测当前时刻的协方差,这里使用到了协方差矩阵的性质:

cov⁡(Ax,Bx)=Acov⁡(x,x)BT\operatorname{cov}(A x, B x)=A \operatorname{cov}(x, x) B^{T} cov(Ax,Bx)=Acov(x,x)BT

此时我们还需要考虑一件事情,我们的预测模型并不是一定准确的,其本身也包含了过程噪声。

因此,上式写成如下形式:

Pt−=FPt−1FT+QP_{t}^{-}=F P_{t-1} F^{T}+Q Pt−​=FPt−1​FT+Q

其中协方差矩阵QQQ表示预测系统带来的噪声。这个公式表示了不确定性在各个时刻之间的传递关系

观测矩阵

H=[10]H=\left[\begin{array}{ll}{1} & {0}\end{array}\right] H=[1​0​]

zt=Hxt+vz_{t}=H x_{t}+v zt​=Hxt​+v

由于观测值也不是百分百可靠,所以引入vvv来表示观测值的噪声;同时观测噪声的协方差矩阵用RRR来表示。

注意

这一步中,我们可以通过多个传感器对系统状态的不完全表述中,推断出系统的真实状态;卡尔曼滤波器的数据融合功能正是在这个测量矩阵中体现出来的

状态更新

x^t=x^t−+Kt(zt−Hx^t−)\hat{x}_{t}=\hat{x}_{t}^{-}+K_{t}\left(z_{t}-H \hat{x}_{t}^{-}\right) x^t​=x^t−​+Kt​(zt​−Hx^t−​)

可以看出,状态更新方程与一阶低通滤波器一致;其中,KtK_tKt​为卡尔曼增益:

Kt=Pt−HT(HPt−HT+R)−1K_{t}=P_{t}^{-} H^{T}\left(H P_{t}^{-} H^{T}+R\right)^{-1} Kt​=Pt−​HT(HPt−​HT+R)−1

卡尔曼增益的推导比较复杂,此处只做定性的分析:

首先,卡尔曼增益权衡预测状态协方差P和观测协方差矩阵R的大小,来决定是相信预测模型多一点还是相信观测量多一点;相信预测模型的话,残差的权重小,相信观测量的话,残差权重大;

同时,卡尔曼增益将残差的表现形式从观察域转换到状态域(因为多数情况下,观测值的维数是要小于状态值的);即用观测值的残差来更新状态值。

扩展

根据卡尔曼增益的形式,可以看出其包含了协方差矩阵PPP的信息;本文例子中我们实际得到的观测值是汽车的位置,卡尔曼增益利用速度和位置这两个维度之间的相关性,从位置的残差里推算出了速度的残差,从而可以使用位置信息对位置和速度均进行估计;卡尔曼滤波器实际上也可以作为一种状态观测器

噪声协方差矩阵的更新

Pt=(I−KtH)Pt−P_{t}=\left(I-K_{t} H\right) P_{t}^{-} Pt​=(I−Kt​H)Pt−​

这一步计算出在状态更新过程中协方差矩阵的变化。

以上就是卡尔曼滤波算法的原理和整个迭代流程,卡尔曼滤波器的五条公式总结如下:

博主使用KalmanKalmanKalman进行了姿态估计的工作并进行了嵌入式的代码实现,我强烈建议大家使用MATLABCoderMATLAB \ CoderMATLAB Coder工具箱将MatlabMatlabMatlab环境下的KalmanKalmanKalman滤波器代码转成CCC代码,该工具箱非常强大且简单实用,转换后的代码包含了矩阵求逆,矩阵转置和矩阵乘法等基本运算,避免了手写代码可能出现的错误,而且只需要少许改动就能加入到你的工程代码中去。

参考文献:

卡尔曼滤波器的原理以及在MATLAB中的实现

卡尔曼滤波器原理简介相关推荐

  1. 【Matlab】扩展卡尔曼滤波器原理及仿真(初学者入门专用)

    文章目录 0.引言及友情链接 1.场景预设 2.扩展卡尔曼滤波器 3.仿真及效果 0.引言及友情链接 \qquad卡尔曼滤波器(Kalman Filter, KF)是传感器融合(Sensor Fusi ...

  2. 卡尔曼滤波器原理讲解及其matlab实现

    目录 一:卡尔曼滤波器的信号模型[1-2] 二:其他方程及变量介绍 三:卡尔曼滤波器递推公式 四:matlab仿真[3] 参考文献: 引言:在进行一些信号处理的过程中,我们通常会采集到一些数据,但是实 ...

  3. 卡尔曼滤波器(Kalman Filter) 理解

    卡尔曼滤波器 1 简介(Brief Introduction) 在学习卡尔曼滤波器之前,首先看看为什么叫"卡尔曼".跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是 ...

  4. 卡尔曼滤波器(THE KALMAN FILTER)的数学原理

    0.内容提要 这篇博客想试图证明卡尔曼滤波器(KALMAN FILTER),即就是说明KF(KALMAN FILTER)和EKF(EXTENDED KALMAN FILTER)算法中的步奏是怎么来的, ...

  5. kalman filter卡尔曼滤波器- 数学推导和原理理解-----网上讲的比较好的kalman filter和整理、将预测值和观测值融和...

    = 参考/转自: 1 ---https://blog.csdn.net/u010720661/article/details/63253509 2----http://www.bzarg.com/p/ ...

  6. 【Kalman】卡尔曼滤波器工作原理(Link)

    How a Kalman filter works, in pictures   原文阐述了卡尔曼滤波器的工作原理,生动有趣,通俗易懂.一些数学公式需要推敲,但不会过于公式化.转载附上原文链接,以供日 ...

  7. 卡尔曼滤波器简介——多维卡尔曼滤波

    原文:多维卡尔曼滤波 (kalmanfilter.net) 目录 前言 基本背景 状态外推方程 示例 - 飞机 - 无控制输入 示例 - 带控制输入的飞机 示例 – 坠落物体 状态外推方程维度 线性时 ...

  8. 【MATLAB】卡尔曼滤波器的原理及仿真(初学者专用)

    文章目录 0.引言 1.场景预设 2.卡尔曼滤波器 3.仿真及效果 0.引言 \qquad 本文参考了Matlab对卡尔曼滤波器的官方教程及帮助文档(Kalman Filter).官方教程的B站链接如 ...

  9. 卡尔曼滤波与组合导航原理_图解卡尔曼滤波器,无需深厚的数学知识也易懂(第五部分:多维卡尔曼滤波器)...

    译者前言:因第1-4部分(基础)已经学习完毕,接下来需要学习多维卡尔曼滤波器与扩展的卡尔曼滤波器(EKF),但是1-4部分的作者对接下来要学习的内容还没有更新,因此我们将从华盛顿大学教授的教材开始学习 ...

  10. ad 卡尔曼_对Kalman(卡尔曼)滤波器的理解

    1.简介(Brief Introduction) 在学习卡尔曼滤波器之前,首先看看为什么叫"卡尔曼".跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字, ...

最新文章

  1. 简单介绍python迭代器和生成器
  2. 2021天津高考成绩查询时间26号几点,2021年天津高考成绩查询时间安排 什么时候出分...
  3. clion 查看内容窗口_CLion精华笔记
  4. 用户自定义的数据库备份(选自csdn\blog)
  5. dubbo项目引用另一个项目的接口
  6. 如何使用Vectorworks Vision 2020将场景另存为图像
  7. 为flash游戏终极实用提速
  8. linux下upupw搭建教程,UPUPW全能空间搭建----easypanel面板
  9. TAGE预测器 “A case for (partially) TAgged GEometric history length branch prediction”
  10. 有效破解行业难点 专家称区块链+医疗发展还需找准应用场景
  11. Serenity框架官方文档翻译前言(什么是Serenity平台)
  12. UnityShader基础案例(三)——外发光(泛光)和内发光
  13. NiFi分享第一期-安全认证(证书认证)
  14. .NET MVC 后台接受base64的上传图片
  15. ChinaSkills-网络系统管理(无线地勘部分评分标准)
  16. 博通Broadcom SDK源码学习与开发11——Cable Modem DHCP管理
  17. 电脑桌面点任何文件都打开计算机,电脑打开文件夹总是新窗口打开如何解决?...
  18. 计算机软件的著作权登记证书在哪些地方可以申请?有什么注意事项?
  19. 二开苹果CMS视频网站双端源码
  20. 计算机7D,本是同根生 佳能EOS 7D/EOS 50D对比评测

热门文章

  1. MapReduce 基础案例 之 平均值 计算
  2. ensp 华为路由器配置远程登陆(telnet,ssh)
  3. Jinja2 入门教程、基本概念、简单使用及使用 Jinja2 生成 H3C 交换机配置举例
  4. Ubuntu联网安装GCC
  5. 1.1 2022 IT行业前景分析 | IT行业是什么工作 做什么的,互联网行业未来前景,发展趋势、职业规划,计算机专业主要学什么?就业前景如何?
  6. 中兴新支点操作系统上的文件小贴士
  7. 微信分享第三方网页链接自定义标题、描述、图片
  8. 《心经》-翻译、中英梵对照
  9. 软件开发:关于园林绿化工中级理论知识题题库的软件内容
  10. 主成分分析与因子分析