概率机器人笔记(3):卡尔曼滤波的理解与简单推导

1.前言

卡尔曼滤波(Kalman Filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。上面是来自百度百科对卡尔曼滤波的定义,指明了卡尔曼滤波的两大主要功能:过滤噪声和参数估计

2.卡尔曼滤波的理解和推导

(1)对象模型(Dynamic Model)
对象模型就是卡尔曼滤波适应的问题对象,包括状态转移模型和测量模型,由于引入了高斯噪声,在一定程度上可以模拟现实中的很多问题
{ x t = A x t − 1 + B u t + ω t , ω t ∼ N ( 0 , Q t ) z t = H x t + υ t , υ t ∼ N ( 0 , R t ) \begin{cases} x_t=Ax_{t-1}+Bu_t+\omega_t, & \text {$\omega_t\sim N(0,Q_t)$} \\ z_t=Hx_t+\upsilon_t, & \text{$\upsilon_t\sim N(0,R_t)$} \end{cases} {xt=Axt1+But+ωt,zt=Hxt+υt,ωtN(0,Qt)υtN(0,Rt)其中, x t x_t xt是系统的状态, z t z_t zt是测量结果向量, A A A是状态转移矩阵, B B B是控制矩阵, H H H是变换矩阵,作用是状态变换到测量值的维度上,统一单位。 ω t \omega_t ωt υ t \upsilon_t υt都服从零均值的高斯分布。
在这里插入图片描述
也就是说,在实际模型中,无论是状态(火车速度或者位置)还是传感器的测量(位置传感器)都是存在噪声的,符合我们的认知。
(2)预测模型(Prediction Model)
上述模型由于存在噪声, x t x_t xt不能直接被观测,而模型中的不确定性通过协方差矩阵 P P P来表示。在预测模型中,用 x ^ t − \hat{x}_t^- x^t表示 t t t时刻由预测模型得到的状态。 P P P是状态中变量的协方差矩阵,根据对象模型,我们可以得到预测模型。
{ x ^ t − = A x ^ t − 1 − + B u t , 预 测 的 均 值 P t − = A P t − 1 − A T + Q t , , 预 测 的 协 方 差 \begin{cases} \hat{x}_t^-=A \hat{x}_{t-1}^-+Bu_t,{预测的均值}\\ P_t^-=AP_{t-1}^-A^T+Q_t,,{预测的协方差}\end{cases} {x^t=Ax^t1+But,Pt=APt1AT+Qt,,根据文献1的推导,:
P t − = E [ ( x t − x ^ t − ) ( x t − x ^ t − ) T ] P_t^-=E[(x_t-\hat{x}_t^-)(x_t-\hat{x}_t^-)^T] Pt=E[(xtx^t)(xtx^t)T] P t − = E [ ( A ( x t − 1 − x ^ t − 1 − ) + ω t ) ( A ( x t − 1 − x ^ t − 1 − ) + ω t ) T ] P_t^-=E[(A(x_{t-1}-\hat{x}_{t-1}^-)+\omega_t)(A(x_{t-1}-\hat{x}_{t-1}^-)+\omega_t)^T] Pt=E[(A(xt1x^t1)+ωt)(A(xt1x^t1)+ωt)T] = A E [ ( x t − 1 − x ^ t − 1 − ) ( x t − 1 − x ^ t − 1 − ) T ] A T + E ( ω t ω t T ) =AE[(x_{t-1}-\hat{x}_{t-1}^-)(x_{t-1}-\hat{x}_{t-1}^-)^T]A^T+E(\omega_t\omega_t^T) =AE[(xt1x^t1)(xt1x^t1)T]AT+E(ωtωtT) = A P t − 1 − A T + Q t =AP_{t-1}^-A^T+Q_t =APt1AT+Qt根据对象模型,由于 ω t \omega_t ωt是零均值的高斯分布,当给定状态转移矩阵时,下一时刻分布的均值也就很容易得到了,就是上式的 x ^ t − 1 − \hat{x}_{t-1}^- x^t1。比较复杂的是求下一时刻不确定因素的传递,由于我们预测了下一时刻的均值 x ^ t − 1 − \hat{x}_{t-1}^- x^t1,预测下一时刻的协方差矩阵自然也是以预测的均值为均值, P t − = E [ ( x t − x ^ t − ) ( x t − x ^ t − ) T ] P_t^-=E[(x_t-\hat{x}_t^-)(x_t-\hat{x}_t^-)^T] Pt=E[(xtx^t)(xtx^t)T],由于每一次预测都加上 Q t Q_t Qt,加上运动带来的不确定性m如果不加以修正,预测的不确定性会越来越大,预测函数也会趋于扁平。如下图所示:初始状态预测状态
(3)测量模型
测量模型由对象模型给出,一般来说,测量数据都是由传感器获得的。
z t = H x t + υ t , υ t ∼ N ( 0 , R t ) z_t=Hx_t+\upsilon_t,\upsilon_t\sim N(0,R_t) zt=Hxt+υt,υtN(0,Rt)
预测模型和测量模型
(4)更新模型(Update Model)
卡尔曼滤波之所以说是最佳的估计,是因为它结合了预测和测量,而实现这一效果就是把预测和测量的概率密度函数相乘。
下面研究一下两个概率密度函数相乘的情况,具体参考文献2。
y 1 = 1 2 π σ 1 e − ( x − μ 1 ) 2 2 σ 1 2 , y 2 = 1 2 π σ 2 e − ( x − μ 2 ) 2 2 σ 2 2 y_1=\frac{1}{\sqrt{2\pi}\sigma_1}e^{-\frac{(x-\mu_1)^2}{2\sigma_1^2}},y_2=\frac{1}{\sqrt{2\pi}\sigma_2}e^{-\frac{(x-\mu_2)^2}{2\sigma_2^2}} y1=2π σ11e2σ12(xμ1)2,y2=2π σ21e2σ22(xμ2)2 y 1 y 2 = 1 2 π σ 1 σ 2 e − ( x − μ 1 ) 2 2 σ 1 2 − ( x − μ 2 ) 2 2 σ 2 2 y_1y_2=\frac{1}{2\pi\sigma_1\sigma_2}e^{{-\frac{(x-\mu_1)^2}{2\sigma_1^2}}-\frac{(x-\mu_2)^2}{2\sigma_2^2}} y1y2=2πσ1σ21e2σ12(xμ1)22σ22(xμ2)2需要进一步化简成下面的形式 y 1 y 2 = 1 2 π σ f u s e d e − ( x − μ f u s e d ) 2 2 σ f u s e d 2 y_1y_2=\frac{1}{\sqrt{2\pi}\sigma_{fused}}e^{-\frac{(x-\mu_{fused})^2}{2\sigma_{fused}^2}} y1y2=2π σfused1e2σfused2(xμfused)2
具体的推导比较复杂,尤其在归一化部分,但是得到下面的结论还是比较简单的
μ f u s e d = μ 1 σ 2 2 + μ 2 σ 1 2 σ 1 2 + σ 2 2 = μ 1 + σ 1 2 ( μ 2 − μ 1 ) σ 1 2 + σ 2 2 = μ 1 + K ( μ 2 − μ 1 ) \mu_{fused}=\frac{\mu_1\sigma_2^2+\mu_2\sigma_1^2}{\sigma_1^2+\sigma_2^2}=\mu_1+\frac{\sigma_1^2(\mu_2-\mu_1)}{\sigma_1^2+\sigma_2^2}=\mu_1+K(\mu_2-\mu_1) μfused=σ12+σ22μ1σ22+μ2σ12=μ1+σ12+σ22σ12(μ2μ1)=μ1+K(μ2μ1) σ f u s e d 2 = σ 1 2 σ 2 2 σ 1 2 + σ 2 2 = σ 1 2 − σ 1 4 σ 1 2 + σ 2 2 = σ 1 2 − K σ 1 2 \sigma_{fused}^2=\frac{\sigma_1^2\sigma_2^2}{\sigma_1^2+\sigma_2^2}=\sigma_1^2-\frac{\sigma_1^4}{\sigma_1^2+\sigma_2^2}=\sigma_1^2-K\sigma_1^2 σfused2=σ12+σ22σ12σ22=σ12σ12+σ22σ14=σ12Kσ12 K = σ 1 2 σ 1 2 + σ 2 2 K=\frac{\sigma_1^2}{\sigma_1^2+\sigma_2^2} K=σ12+σ22σ12当预测和测量的单位不一致时,需要将预测的单位转变为测量的单位,然后进行融合: μ f u s e d = μ 1 + K ( μ 2 − H μ 1 ) \mu_{fused}=\mu_1+K(\mu_2-H\mu_1) μfused=μ1+K(μ2Hμ1) σ f u s e d 2 = σ 1 2 − K H σ 1 2 \sigma_{fused}^2=\sigma_1^2-KH\sigma_1^2 σfused2=σ12KHσ12 K = H σ 1 2 H 2 σ 1 2 + σ 2 2 K=\frac{H\sigma_1^2}{H^2\sigma_1^2+\sigma_2^2} K=H2σ12+σ22Hσ12 y 1 y_1 y1为预测模型, y 2 y_2 y2为测量模型
y 1 ∼ N ( x ^ t − , P t − ) , ( μ 1 = x ^ t − , σ 1 2 = P t − ) y_1\sim N(\hat{x}_t^-,P_t^-),(\mu_1=\hat{x}_t^-,\sigma_1^2=P_t^-) y1N(x^t,Pt),(μ1=x^t,σ12=Pt) y 2 ∼ N ( z t , R t ) , ( μ 2 = z t , σ 2 2 = R t ) y_2\sim N(z_t,R_t),(\mu_2=z_t,\sigma_2^2=R_t) y2N(zt,Rt),(μ2=zt,σ22=Rt) μ f u s e d = x ^ t , σ f u s e d 2 = P t \mu_{fused}=\hat{x}_t,\sigma_{fused}^2=P_t μfused=x^t,σfused2=Pt带入上式: K = H σ 1 2 H 2 σ 1 2 + σ 2 2 = P t − H T H P t − H T + R K=\frac{H\sigma_1^2}{H^2\sigma_1^2+\sigma_2^2}=\frac{P_t^-H^T}{HP_t^-H^T+R} K=H2σ12+σ22Hσ12=HPtHT+RPtHT x ^ t = x ^ t − + K ( z t − H x ^ t − ) \hat{x}_t=\hat{x}_t^-+K(z_t-H\hat{x}_t^-) x^t=x^t+K(ztHx^t) P t = ( I − K H ) P k − P_t=(I-KH)P_k^- Pt=(IKH)Pk
综上所述,卡尔曼算法已经全部推导出来。
在这里插入图片描述
完整的卡尔曼滤波公式:
预测模型:
x ^ t − = A x ^ t − 1 − + B u t \hat{x}_t^-=A \hat{x}_{t-1}^-+Bu_t x^t=Ax^t1+But P t − = A P t − 1 − A T + Q t P_t^-=AP_{t-1}^-A^T+Q_t Pt=APt1AT+Qt更新模型: K = P t − H T H P t − H T + R K=\frac{P_t^-H^T}{HP_t^-H^T+R} K=HPtHT+RPtHT x ^ t = x ^ t − + K ( z t − H x ^ t − ) \hat{x}_t=\hat{x}_t^-+K(z_t-H\hat{x}_t^-) x^t=x^t+K(ztHx^t) P t = ( I − K H ) P k − P_t=(I-KH)P_k^- Pt=(IKH)Pk
实例:
对上面火车的例子进行matlab仿真。
对象模型: [ p t v t ] = [ 1 Δ t 0 1 ] + [ p t − 1 v t − 1 ] + [ Δ t 2 2 Δ t ] + Q t , Q t ∼ N ( 0 , [ 0.0001 0 0 0.0001 ] ) \begin{bmatrix}p_t\\v_t\end{bmatrix}=\begin{bmatrix}1&\Delta t\\0&1\end{bmatrix}+\begin{bmatrix}p_{t-1}\\v_{t-1}\end{bmatrix}+\begin{bmatrix}\frac{\Delta t^2}{2}\\\Delta t\end{bmatrix}+Q_t,Q_t\sim N(0,\begin{bmatrix}0.0001&0\\0&0.0001\end{bmatrix}) [ptvt]=[10Δt1]+[pt1vt1]+[2Δt2Δt]+Qt,QtN(0,[0.0001000.0001])
matlab仿真代码:

clc
clear
%*****准备观测值*******%
z=zeros(1,50);
r=zeros(1,50);
figure
for i=1:50
z(i)=0.2*i*i+i*randn();
r(i)=0.2*i*i;
end
t=1:1:50;
plot(t,z,"s")
hold on
plot(t,r,"b-")

x=[0;0];% 初始状态
A=[1 1;0 1];% 状态转移矩阵
P=[1 0;0 1];%状态协方差矩阵
Q=[0.0001,0;0,0.0001];%状态转移的协方差矩阵
H=[1 0];%观测矩阵
R=1;%噪声方差
u=0.01;%加速度1
B=[1/2;1];
xp=zeros(1,50);
xv=zeros(1,50);

xp_=zeros(1,50);
xv_=zeros(1,50);
for i=1:50
    x_=A*x+B*u;
    P_=A*P*A'+Q;
    K=(P_*H')/(H*P_*H'+R);
    x=x_+K*(z(i)-H*x_);
    P=(eye(2)-K*H)*P_;
    xp(i)=x(1);
    xv(i)=x(2);
    xp_(i)=x_(1);
    xv_(i)=x_(2);
end
plot(t,xp,"*-")
plot(t,xp_,"<-")
hold off

仿真结果:
在这里插入图片描述

3.概率机器人中的卡尔曼滤波

在概率机器人中作为贝叶斯滤波的一个分支,卡尔曼滤波除了需要遵循马尔可夫假设之外,还要遵循以下三个假设:
(1)状态转移概率 P ( x t ∣ u t , x t − 1 ) P(x_t|u_t,x_{t-1}) P(xtut,xt1)必须是带有随机高斯噪声的连续的线性函数。
x t = A t x t − 1 + B t u t + ε t , ε ∼ N ( 0 , R t ) x_t=A_tx_{t-1}+B_tu_t+\varepsilon_t,\varepsilon\sim N(0,R_t) xt=Atxt1+Btut+εt,εN(0,Rt)
(2)测量概率 P ( z t ∣ x t ) P(z_t|x_t) P(ztxt)也是带有高斯噪声的线性函数
z t = C t x t + δ t , δ ∼ N ( 0 , Q t ) z_t=C_tx_t+\delta_t,\delta\sim N(0,Q_t) zt=Ctxt+δt,δN(0,Qt)
(2)初始状态也服从正态分布
P ( x 0 ) ∼ N ( μ 0 , Σ 0 ) P(x_0)\sim N(\mu_0,\Sigma_0) P(x0)N(μ0,Σ0)

从贝叶斯公式角度理解卡尔曼滤波
也可以说从卡尔曼滤波的角度理解贝叶斯滤波,在前上一篇中我们了解了贝叶斯滤波,利用贝叶斯公式推导下面的公式:
P ( x t ∣ z 1 , z 2 , ⋅ ⋅ ⋅ , z t ) = η P ( z t ∣ x t ) P ( x t ∣ z 1 , z 2 , ⋅ ⋅ ⋅ , z t − 1 ) P(x_t|z_1,z_2,···,z_t)=\eta P(z_t|x_t)P(x_t|z_1,z_2,···,z_{t-1}) P(xtz1,z2,,zt)=ηP(ztxt)P(xtz1,z2,,zt1)其实在这里, P ( z t ∣ x t ) P(z_t|x_t) P(ztxt)就是测量模型, P ( x t ∣ z 1 , z 2 , ⋅ ⋅ ⋅ , z t − 1 ) P(x_t|z_1,z_2,···,z_{t-1}) P(xtz1,z2,,zt1)就是预测模型。为了产生递归,同样地将 x t − 1 x_{t-1} xt1引入预测模型: P ( x t ∣ z 1 , z 2 , ⋅ ⋅ ⋅ , z t ) = η P ( z t ∣ x t ) ∫ x t − 1 P ( x t , x t − 1 ∣ z 1 , z 2 , ⋅ ⋅ ⋅ , z t − 1 ) d x t − 1 P(x_t|z_1,z_2,···,z_t)=\eta P(z_t|x_t)\int_{x_{t-1}}{P(x_t,x_{t-1}|z_1,z_2,···,z_{t-1})}dx_{t-1} P(xtz1,z2,,zt)=ηP(ztxt)xt1P(xt,xt1z1,z2,,zt1)dxt1 = η P ( z t ∣ x t ) ∫ x t − 1 P ( x t ∣ x t − 1 , z 1 , z 2 , ⋅ ⋅ ⋅ , z t − 1 ) P ( x t − 1 ∣ z 1 , z 2 , ⋅ ⋅ ⋅ , z t − 1 ) d x t − 1 =\eta P(z_t|x_t)\int_{x_{t-1}}{P(x_t|x_{t-1},z_1,z_2,···,z_{t-1})}P(x_{t-1}|z_1,z_2,···,z_{t-1})dx_{t-1} =ηP(ztxt)xt1P(xtxt1,z1,z2,,zt1)P(xt1z1,z2,,zt1)dxt1 = η P ( z t ∣ x t ) ∫ x t − 1 P ( x t ∣ x t − 1 ) P ( x t − 1 ∣ z 1 , z 2 , ⋅ ⋅ ⋅ , z t − 1 ) d x t − 1 =\eta P(z_t|x_t)\int_{x_{t-1}}{P(x_t|x_{t-1})}P(x_{t-1}|z_1,z_2,···,z_{t-1})dx_{t-1} =ηP(ztxt)xt1P(xtxt1)P(xt1z1,z2,,zt1)dxt1 本 时 刻 的 最 佳 估 计 = η ∗ 测 量 模 型 ∗ 预 测 模 型 ( 状 态 转 移 ∗ 上 一 时 刻 的 最 佳 估 计 ) 本时刻的最佳估计=\eta*测量模型*预测模型(状态转移*上一时刻的最佳估计) =η()

参考文献:
1.Faragher, Ramsey. Understanding the Basis of the Kalman Filter Via a Simple and Intuitive Derivation [Lecture Notes][J]. IEEE Signal Processing Magazine, 2012, 29(5):128-132.
2.P.A. Bromiley. Products and Convolutions of Gaussian Probability Density
Functions

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值