Kalman滤波

文章目录

    • Kalman滤波的感性认识
    • 相关高斯分布公式总结
    • 线性卡尔曼滤波
      • 理论推导
      • Kalman的过程
      • 应用代码
    • 扩展卡尔曼滤波(EKF)
      • 理论推导
      • 应用代码
    • 无迹卡尔曼滤波(UKF)
      • 理论推导
      • 应用代码

Kalman滤波的感性认识

更简单明了的感性认识

对于线性系统一般状态方程涉及到两个,由这两个方程估计状态量:

  1. 运动方程: x k = f ( x k − 1 , u k ) + ω k x_k = f(x_{k-1},u_k)+\omega_k xk=f(xk1,uk)+ωk (由上一时刻状态怎么得到当前时刻的状态)
  2. 观测方程: z k = h ( x k ) + v k z_k = h(x_k) +v_k zk=h(xk)+vk(在当前时刻的状态下产生了怎样的观测)

假设所有分布都是高斯分布,从上时刻 x k − 1 x_{k-1} xk1根据运动方程得到的 x k x_k xk 服从一个高斯分布 G 1 G_1 G1;我们得到的观测(传感器直接测量) z k z_{k} zk也是高斯分布,从它根据观测方程推出的 x k x_k xk是另一个高斯分布 G 2 G_2 G2;最后我们由两个状态方程得到关于 x k x_{k} xk的两个高斯分布 G 1 和 G 2 G_1和G_2 G1G2,卡尔曼滤波结果就是把 G 1 和 G 2 G_1和G_2 G1G2相乘得到更确定的估计。
Kalman滤波_第1张图片

相关高斯分布公式总结

  • 一维高斯分布 N ( μ , σ 2 ) = 1 2 π σ e x p ( − 1 2 ( x − μ ) 2 σ 2 ) N(\mu ,\sigma^2 )=\frac{1}{\sqrt{2\pi}\sigma}exp\left ( -\frac{1}{2} \frac{(x-\mu)^{2}}{\sigma^{2} }\right ) N(μ,σ2)=2π σ1exp(21σ2(xμ)2)

  • 多维高斯分布 N ( μ , Σ ) = 1 ( 2 π ) N d e t ( Σ ) e x p ( − 1 2 ( x − μ ) ⊤ Σ − 1 ( x − μ ) ) N(\bm{ \mu }, \Sigma)=\frac{1}{\sqrt{(2\pi)^{N}det(\Sigma)}}exp\left ( -\frac{1}{2} (\bm{x}-\bm{\mu})^\top \Sigma^{-1} (\bm{x}-\bm{\mu})\right ) N(μ,Σ)=(2π)Ndet(Σ) 1exp(21(xμ)Σ1(xμ))


  • 两个独立的高斯分布 x ∼ N ( μ x , Σ x x ) \bm{x}\sim N(\bm{\mu_{x}}, \bm{\Sigma_{xx}}) xN(μx,Σxx) y ∼ N ( μ y , Σ y y ) \bm{y}\sim N(\bm{\mu_{y}}, \bm{\Sigma_{yy}}) yN(μy,Σyy)相加的结果依然是高斯分布: x + y ∼ N ( μ x + μ y , Σ x x + Σ y y ) \bm{x}+\bm{y} \sim N(\bm{\mu_{x}}+\bm{\mu_{y}},\bm{\Sigma_{xx}}+\bm{\Sigma_{yy}}) x+yN(μx+μy,Σxx+Σyy)

  • 如果一个常数 a a a乘以高斯分布 x ∼ N ( μ x , Σ x x ) \bm{x}\sim N(\bm{\mu_{x}}, \bm{\Sigma_{xx}}) xN(μx,Σxx),那么 a x a\bm{x} ax服从: a x ∼ N ( a μ x , a 2 Σ x x ) a\bm{x}\sim N(a\bm{\mu_{x}}, a^2\bm{\Sigma_{xx}}) axN(aμx,a2Σxx)

  • 如果 y = A x \bm{y}=\bm{Ax} y=Ax x ∼ N ( μ x , Σ x x ) \bm{x}\sim N(\bm{\mu_{x}}, \bm{\Sigma_{xx}}) xN(μx,Σxx),则 y \bm{y} y满足: y ∼ N ( A μ x , A Σ x x A T ) \bm{y}\sim N(\bm{A\mu_{x}}, \bm{A\Sigma_{xx}A^T}) yN(Aμx,AΣxxAT)

  • 两个高斯分布相乘,如果是一维: x ∼ N ( μ x , σ x 2 ) y ∼ N ( μ y , σ y 2 ) x\sim N(\mu_x, \sigma_x^2) \qquad y\sim N(\mu_y,\sigma_y^2) xN(μx,σx2)yN(μy,σy2),那么 x ⋅ y ∼ N ( μ , σ 2 ) x\cdot y\sim N(\mu, \sigma^2) xyN(μ,σ2)
    μ = μ x + σ x 2 ( μ y − μ x ) σ x 2 + σ y 2 σ 2 = σ x 2 − σ x 4 σ x 2 + σ y 2 \mu = \mu_x +\frac{\sigma_x^2(\mu_y - \mu_x)}{\sigma_x^2+\sigma_y^2} \\ \quad \\ \sigma^2 = \sigma_x^2-\frac{\sigma_x^4}{\sigma_x^2+\sigma_y^2} μ=μx+σx2+σy2σx2(μyμx)σ2=σx2σx2+σy2σx4
    如果令 k = σ x 2 σ x 2 + σ y 2 k=\frac{\sigma_x^2}{\sigma_x^2+\sigma_y^2} k=σx2+σy2σx2,那么:
    μ = μ x + k ( μ y − μ x ) σ 2 = σ x 2 − k σ x 2 \mu = \mu_x + k(\mu_y-\mu_x) \\ \quad \\ \sigma^2= \sigma_x^2-k\sigma_x^2 μ=μx+k(μyμx)σ2=σx2kσx2
    扩展到多维 x ∼ N ( μ x , Σ x x ) y ∼ N ( μ y , Σ y y ) \bm{x}\sim N(\bm{\mu_x}, \Sigma_{xx}) \qquad \bm{y}\sim N(\bm{\mu_y},\Sigma_{yy}) xN(μx,Σxx)yN(μy,Σyy),那么 x ⋅ y ∼ N ( μ , Σ ) \bm{x\cdot y} \sim N(\bm{\mu}, \Sigma) xyN(μ,Σ) K = Σ x x ( Σ x x + Σ y y ) − 1 μ = μ x + K ( μ y − μ x ) Σ = Σ x x − K Σ x x K=\Sigma_{xx}(\Sigma_{xx}+\Sigma_{yy})^{-1} \\ \quad \\ \bm{\mu}= \bm{\mu_x} + K(\bm{\mu_y-\mu_x}) \\ \quad \\ \Sigma =\Sigma_{xx} -K \Sigma_{xx} K=Σxx(Σxx+Σyy)1μ=μx+K(μyμx)Σ=ΣxxKΣxx

线性卡尔曼滤波

好理解Kalman参考

理论推导

假设线性系统的状态方程 { x k = A x k − 1 + B u k + w k − 1 z k = H x k + v k \left\{\begin{aligned} \bm{x_k}&= A \bm{x_{k-1}}+B\bm{u_k}+\bm{w_{k-1}} \\ \bm{z_k}&= H\bm{x_k}+\bm{v_k} \end{aligned}\right. {xkzk=Axk1+Buk+wk1=Hxk+vk
x \bm{x} x:状态向量
A A A:状态转移矩阵
B B B:控制输入矩阵
u \bm{u} u:输入量
w \bm{w} w:过程噪声,服从均值为0,协方差为R的高斯分布 N ( 0 , R ) N(0,R) N(0,R)
z \bm{z} z:观测值
H H H:状态观测矩阵
v \bm{v} v:测量噪声,服从均值为0,协方差为Q的高斯分布 N ( 0 , Q ) N(0,Q) N(0,Q)

规定
x k \bm{x_k} xk: 真实值
x k ^ \hat\bm{ x_k} xk^: 状态向量最优估计均值(也是最后的要求的值)
P ^ k \hat P_k P^k: 最优估计状态向量的协方差
x k ˉ \bar \bm{x_k} xkˉ: 预测的状态向量均值
P ˉ k \bar P_k Pˉk: 预测的状态向量协方差

推导过程从贝叶斯公式的角度,求的最大后验概率: p ( x k ∣ z k ) ∝ p ( z k ∣ x k ) p ( x k ) p(x_k |z_k)\propto p(z_k|x_k)p(x_k) p(xkzk)p(zkxk)p(xk)


  1. 预测(从上一时刻 x k − 1 \bm{x_{k-1}} xk1根据运动方程得到 x k \bm{x_k} xk先验分布
    因为 x k − 1 \bm{x_{k-1}} xk1是上一时刻的最优估计,服从 N ( x k − 1 ^ , P ^ k − 1 ) N(\hat \bm{x_{k-1}},\hat P_{k-1}) N(xk1^,P^k1), 根据运动方程得到k时刻预测(先验):
    p ( x k ) = N ( A x k − 1 ^ + B u k , A P ^ k − 1 A T + R ) p(\bm{x_k})=N(A\hat \bm{x_{k-1}}+B\bm u_k,A\hat P_{k-1}A^T+R) p(xk)=N(Axk1^+Buk,AP^k1AT+R)即:
    { x k ˉ = A x k − 1 ^ + B u k P ˉ k = A P ^ k − 1 A T + R \left\{\begin{aligned} \bar \bm {x_k} &=A\hat \bm{x_{k-1}}+B\bm u_k \\ \bar P_k &= A\hat P_{k-1}A^T+R \end{aligned} \right. {xkˉPˉk=Axk1^+Buk=AP^k1AT+R

  1. 在先验下产生了怎样的观测似然部分
    由观测方程得到: p ( z k ∣ x k ) = N ( H x k , Q ) p(\bm{z_k}|\bm{x_k} )= N(H \bm{x_k},Q) p(zkxk)=N(Hxk,Q)
    x k \bm{x_k} xk(上一步预测的,不确定性已经体现在先验里面,所以这里是一个协方差为0的确定值)

  1. 由似然和先验求后验
    N ( x k ^ , P k ^ ) = N ( H x k , Q ) ⋅ N ( x k ˉ , P k ˉ ) N(\hat {x_k},\hat {P_k})= N(H \bm{x_k},Q) \cdot N(\bar{x_k},\bar{P_k}) N(xk^,Pk^)=N(Hxk,Q)N(xkˉ,Pkˉ)

根据多维高斯公式把左右两边展开,然后比较指数部分:
( x k − x ^ k ) T P ^ k − 1 ( x k − x ^ k ) = ( z k − H x k ) T Q − 1 ( z k − H x k ) + ( x k − x ˉ k ) T P ˉ k − 1 ( x k − x ˉ k ) (\bm {x_k-\hat x_k})^T\hat P_k^{-1}(\bm {x_k-\hat x_k})=(\bm {z_k}-H\bm{x_k})^T Q^{-1}(\bm {z_k}-H\bm{x_k})+(\bm {x_k-\bar x_k})^T\bar P_k^{-1}(\bm {x_k-\bar x_k}) (xkx^k)TP^k1(xkx^k)=(zkHxk)TQ1(zkHxk)+(xkxˉk)TPˉk1(xkxˉk)
把公式展开比较 x k \bm{x_k} xk的二次和一次项系数:

  • 对于二次项 P ^ k − 1 = H T Q − 1 H + P ˉ k − 1 \hat P_k^{-1}=H^TQ^{-1}H+\bar P_k^{-1} P^k1=HTQ1H+Pˉk1
    左右同乘 P ^ k \hat P_k P^k得: I = P ^ k H T Q − 1 H + P ^ k P ˉ k − 1 I=\hat P_kH^TQ^{-1}H+\hat P_k\bar P_k^{-1} I=P^kHTQ1H+P^kPˉk1
    定义中间变量 K = P ^ k H T Q − 1 K=\hat P_kH^TQ^{-1} K=P^kHTQ1可得(这里定义的K只是为了方便推导,实际操作不这么算K,因为里面有后验,这是我们需要求的):
    I = K H + P ^ k P ˉ k − 1 I=KH+\hat P_k\bar P_k^{-1} I=KH+P^kPˉk1
    P ^ k = ( I − K H ) P ˉ k \hat P_k = (I-KH)\bar P_k P^k=(IKH)Pˉk

  • 对于一次项 − 2 x ^ k T P ^ k − 1 = − 2 z k T Q − 1 H − 2 x ˉ k T P ˉ k − 1 -2\bm{\hat x_k}^T\hat P_k^{-1}=-2\bm{z_k}^TQ^{-1}H-2\bm{\bar x_k}^T\bar P_k^{-1} 2x^kTP^k1=2zkTQ1H2xˉkTPˉk1
    整理得: P ^ k − 1 x ^ k = H T Q − 1 z k + P ˉ k − 1 x k ˉ \hat P_k^{-1}\bm{\hat x_k}=H^TQ^{-1}\bm{z_k}+\bar P_k^{-1}\bar{\bm x_k} P^k1x^k=HTQ1zk+Pˉk1xkˉ
    两侧同时乘 P ^ k \hat P_k P^k得: { x ^ k = P ^ k H T Q − 1 z k + P ^ k P ˉ k − 1 x ˉ k = K z k + ( I − K H ) x ˉ k \left\{\begin{aligned} \hat \bm x_k&=\hat P_kH^TQ^{-1}\bm{z_k}+ \hat P_k\bar P_k^{-1} \bar \bm x_k\\ &=K\bm {z_k}+(I-KH)\bar \bm x_k \end{aligned} \right. {x^k=P^kHTQ1zk+P^kPˉk1xˉk=Kzk+(IKH)xˉk
    则: x ^ k = x ˉ k + K ( z k − H x ˉ k ) \hat \bm x_k=\bar \bm x_k +K(\bm{z_k}-H\bar \bm x_k) x^k=xˉk+K(zkHxˉk)

Kalman的过程

对于线性系统
{ x k = A x k − 1 + B u k + w k − 1 z k = H x k + v k \left\{\begin{aligned} \bm{x_k}&= A \bm{x_{k-1}}+B\bm{u_k}+\bm{w_{k-1}} \\ \bm{z_k}&= H\bm{x_k}+\bm{v_k} \end{aligned}\right. {xkzk=Axk1+Buk+wk1=Hxk+vk

  1. 预测
    { x k ˉ = A x k − 1 ^ + B u k P ˉ k = A P ^ k − 1 A T + R \left\{\begin{aligned} \bar \bm {x_k} &=A\hat \bm{x_{k-1}}+B\bm u_k \\ \bar P_k &= A\hat P_{k-1}A^T+R \end{aligned} \right. {xkˉPˉk=Axk1^+Buk=AP^k1AT+R
  2. 更新
    { K = P ˉ k H T ( H P ˉ k H T + Q ) − 1 x ^ k = x ˉ k + K ( z k − H x ˉ k ) P ^ k = ( I − K H ) P ˉ k \left\{\begin{aligned} K &= \bar P_kH^T(H\bar P_kH^T+Q)^{-1}\\ \hat \bm x_k&=\bar \bm x_k +K(\bm{z_k}-H\bar \bm x_k) \\ \hat P_k &= (I-KH)\bar P_k \end{aligned} \right. Kx^kP^k=PˉkHT(HPˉkHT+Q)1=xˉk+K(zkHxˉk)=(IKH)Pˉk

应用代码

扩展卡尔曼滤波(EKF)

对于线性系统,KF是对系统的最优估计,但是实际应用中往往都是非线性系统,这时候我们需要利用近似,将系统方程在每个时刻近似为线性系统。

理论推导

应用代码

无迹卡尔曼滤波(UKF)

理论推导

应用代码

你可能感兴趣的:(SLAM)