Loading [MathJax]/jax/output/CommonHTML/jax.js

Kalman Filter

Posted by YuCong on May 16, 2021

Bayesian Filter


Created 2021.05.16 by William Yu; Last modified: 2022.07.12-V1.2.2

Contact: windmillyucong@163.com

Copyleft! 2022 William Yu. Some rights reserved.


Kalman Filter

卡尔曼滤波(Kalman filter)1960.

refitem:

  • paper https://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf
  • blog https://zhuanlan.zhihu.com/p/39912633
  • blog https://longaspire.github.io/blog/%E5%8D%A1%E5%B0%94%E6%9B%BC%E6%BB%A4%E6%B3%A2/
  • blog https://zhuanlan.zhihu.com/p/48876718
  • blog 关于协方差矩阵 https://zhuanlan.zhihu.com/p/338335181

Basic Concepts

  • (ˇ.) 表示先验
  • (ˆ.) 表示后验(即最佳估计值)

  • 高斯白噪声
    • 符合高斯分布
  • 基本模型
    • 马尔科夫链
  • 基本过程,包括两个阶段:
    • 预测阶段
      • 使用上一状态的估计,做出对当前状态的估计
    • 更新阶段
      • 使用对当前状态的观测值优化之前在预测阶段获得的预测值,获得更精确的估计值
  • 特点
    • 适合不断变化的系统,时变系统
    • 内存占用较小(只需保留前一个状态)
    • 速度快

状态方程

xk(p,v)
  • 状态 x 由两部分组成
  • x 的实际值并不知
  • 卡尔曼滤波假设每个变量(在我们的例子里是位置和速度)都应该是随机的,而且符合高斯分布。每个变量都有一个均值 μ ,它是随机分布的中心;有一个方差σ2
  • 这些输入信息可能是相关的,也可能不是相关的

img

  • 协方差矩阵

Model

1.1 运动方程(状态转移方程)

系统的状态转移方程(运动方程),线性方程 xk=Axk1+Buk+wk

  • where:
    • xk : k时刻的运动模型预估的系统状态
    • uk :k时刻对系统的控制量
    • A :转移矩阵,运动模型
    • B:系统参数
    • wk:过程激励噪声

1.2 观测方程

zk=Hxk+vk
  • where:

    • zk:k时刻的观测值
    • H:观测系统的参数
    • vk:观测过程的噪声

1.3 噪声

p(w)N(0,Q)p(v)N(0,R)
  • 随机信号 w(k) 和 v(k) 分别表示运动噪声和观测噪声
  • 假设它们为相互独立,正态分布的白色噪声
  • 实际系统中,这QR可能会随着每次迭代计算而发生变化,但此处假设他们是常量

Process

img

1. Init

2. Predict

状态转移:由运动方程做先验估计 xk=Axk1+Buk 协方差转移 Pk=APk1AT+Q

3. Update

计算卡尔曼增益(中间量) Kk=PkHT(HPkHT+R)1 状态更新 xk:=xk+Kk(zkHxkmeasureerror) 协方差更新 Pk:=(IKkH)Pk

Process

img

红色分布为预测,蓝色分布为观测,绿色分布为二者的相乘

Tips

  1. Kalman filter defines every state with Guissian (η,σ2).

    Kalman filter predicts and updates not only η, but also σ.

    While Bayesian filter only offer a η

  2. What is K for? 卡尔曼增益是干啥用的?

    // todo(congyu)

EKF

Extended Kalman filter(扩展卡尔曼滤波,EKF)

refitem:

  • introductory paper https://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf

Model

1. Similarities with KF

  1. 状态量服从正态分布

[公式]

  1. 观测量服从正态分布

[公式]

  1. 过程噪声服从均值为 0 的正态分布

[公式]

  1. 观测噪声服从均值为 0 的正态分布

[公式]

2. Difference between KF

  1. EKF中 状态转移函数和(或)观测函数为非线性函数
    • 在卡尔曼滤波的前提假设中,认为状态方程中的状态转移函数 [公式] 以及观测方程中的测函数 [公式] 均为线性函数。
    • 基于这种线性假设,存在常数或常矩阵 [公式],使得 [公式] 可以写成卡尔曼滤波中的线性形式,存在常数或常矩阵 [公式],使得 [公式] 也可以写成卡尔曼滤波中的线性形式。
    • 不同于标准卡尔曼滤波,扩展卡尔曼滤波处理的是非线性系统,假设系统的状态转移函数和(或)观测函数为非线性函数。

扩展卡尔曼滤波的处理方法非常简单:将非线性方程一阶泰勒展开成线性方程:

1.1 运动方程

xk=f(xk1,uk)+wk

非线性方程线性化 xk=f(xk1,uk,0)Fk1=f(xk1,uk,wk)xk1|xk1,uk,0

1.2 观测方程

zk=h(xk)+vk

非线性方程线性化 zk=h(xk,0)Hk=h(xk,vk)xk|xk,0

Process

img

Notice: 图中箭头所指的非线性函数!是与卡尔曼滤波的区别,图中的g即本文档中的f.

1. Init

2. Predict

xk=f(xk1,uk1,0) Pk=FkPk1FTk+Q

3. Update

Kk=PkHTk(HkPkHTk+R)1 xk:=xk+Kk(zkh(xk,0)) Pk:=(IKkHk)Pk