卡尔曼滤波原理详解(一)

前言

本文是对卡尔曼滤波学习的记录,主要参照了DR_CAN老师的视频进行学习。视频专栏链接:DR_CAN卡尔曼滤波视频专栏。虽然网上有很多卡尔曼滤波原理介绍的相关博客,但像DR_CAN老师讲解的如此详细的却不多,我也将自己跟随老师学习的记录下来。
本篇文章为卡尔曼滤波原理详解的第一篇,第二篇链接在此:卡尔曼滤波原理详解(二)

卡尔曼滤波是一种滤波技术,或者说状态估计方法(state estimation)/Linear Least-Mean-Squares Estimator(线性最小均方差估计)/Linear Quadratic Estimator(线性二次型估计)。
利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。
由于观测数据中包含噪声和干扰,因此最优估计也可以看作是滤波过程。
它具有占用内存空间小(除了前一个状态量外,无需保留其他历史数据)的特点,并且速度很快,适合用于实时问题和嵌入式系统。

数据融合的思想

在我们拥有多个数据来源下,我们应该如何融合多方面的数据,从而对数据进行更优的选择那?
假设我们要测量一个硬币的宽度,测量结果如下:

测量数据标准差
z 1 z_1 z1=6.5 mm σ 1 \sigma1 σ1=0.2mm
z 2 z_2 z2=7.3mm σ 2 \sigma2 σ2=0.4mm

如何求出硬币的最佳估计宽度 z ^ \hat z z^(其中测量的数据均符合高斯分布)。
显然由于 σ 1 < σ 2 \sigma1<\sigma2 σ1<σ2,所求的最优估计应当更靠近 z 1 z_1 z1
令:
z ^ = z 1 + k ( z 2 − z 1 ) (1) \hat z = z_1+k(z_2-z_1) \tag{1} z^=z1+k(z2z1)(1)
(显然,当 k k k=1时, z ^ = z 2 \hat z=z_2 z^=z2;当 k = 0 k=0 k=0时, z ^ = z 1 \hat z = z_1 z^=z1)
更简单的说,即是 z 1 z1 z1 z 2 z2 z2谁的权重占比更大。我们的任务是选取合适的 k k k值,使得 z ^ \hat z z^的方差最小。
σ z 2 = v a r ( z 1 + k ( z 2 − z 1 ) ) = v a r ( ( 1 − k ) z 1 + k z 2 ) = ( 1 − k ) 2 σ z 1 2 + k 2 σ z 2 2 (2) \begin{aligned} {\sigma^2_z}&=var(z_1+k(z_2-z_1))\\ &=var((1-k)z_1+kz_2)\\ &=(1-k)^2\sigma^2_{z1}+k^2\sigma^2_{z2} \end{aligned} \tag{2} σz2=var(z1+k(z2z1))=var((1k)z1+kz2)=(1k)2σz12+k2σz22(2)
欲使其方差最小,对上式(2)进行求导,得:
d σ z 2 d k = − 2 ( 1 − k ) σ z 1 2 + 2 k σ z 2 2 = 0 \frac{d\sigma^2_z}{dk}=-2(1-k)\sigma^2_{z1}+2k\sigma^2_{z2}=0 dkdσz2=2(1k)σz12+2kσz22=0
得:
k = σ z 1 2 σ z 1 2 + σ z 2 2 = 0. 2 2 0. 2 2 + 0. 4 2 = 0.2 k=\frac{\sigma^2_{z1}}{\sigma^2_{z1}+\sigma^2_{z2}}=\frac{0.2^2}{0.2^2+0.4^2}=0.2 k=σz12+σz22σz12=0.22+0.420.22=0.2
则所求的最优估计 z ^ = z 1 + 0.2 ( z 2 − z 1 ) = 6.66 m m \hat z=z_1+0.2(z_2-z_1)=6.66mm z^=z1+0.2(z2z1)=6.66mm
可以看到所求的最优估计 z ^ \hat z z^也确实更靠近 z 1 z_1 z1。.

通过这个例子我们能够深刻地体会数据融合的思想,而卡尔曼滤波也应用到了这个思想,在后续的讲解中会体现出来。

例子引入

假设一个在森林中随意奔跑的机器人,我们需要对其速度和位置有清晰的认识,但很不幸,传感器和定位系统只能帮助我们锁定该机器人的大致位置。这显然是不够的。如下表所示,定义其位置和速度

P k P_k Pk V k V_k Vk
k k k时刻的位置 k k k时刻的速度

那么在未受到外界的任何干扰的时候,其运动模型可以用式(3)来表示
P k = P k − 1 + Δ t V k − 1 V k = V k − 1 (3) \begin{aligned} P_k&=P_{k-1}+\Delta tV_{k-1}\\ V_{k}&=V_{k-1} \tag{3} \end{aligned} PkVk=Pk1+ΔtVk1=Vk1(3)
假如存在外部的控制输入 u k u_k uk,表现为加速度 α \alpha α
则式(3)可以写为式(4)
P k = P k − 1 + Δ t V k − 1 + 1 2 α Δ t 2 V k = V k − 1 + α Δ t (4) \begin{aligned} P_k&=P_{k-1}+\Delta tV_{k-1}+\frac{1}{2}\alpha\Delta t^2\\ V_{k}&=V_{k-1}+\alpha \Delta t \tag{4} \end{aligned} PkVk=Pk1+ΔtVk1+21αΔt2=Vk1+αΔt(4)

进一步地,我们将其写成状态空间表达式的形式
X k = [ 1 Δ t 0 1 ] [ P k − 1 V k − 1 ] + [ 1 2 Δ t 2 Δ t ] α (5) X_k =\begin{bmatrix} 1& \Delta t \\ 0&1 \end{bmatrix} \begin{bmatrix} P_{k-1}\\ V_{k-1} \end{bmatrix}+\begin{bmatrix} \frac{1}{2}\Delta t^2\\ \Delta t \end{bmatrix}\alpha \tag{5} Xk=[10Δt1][Pk1Vk1]+[21Δt2Δt]α(5)
也即:
X k = [ 1 Δ t 0 1 ] X k − 1 + [ 1 2 Δ t 2 Δ t ] u k − 1 (6) X_k =\begin{bmatrix} 1& \Delta t \\ 0&1 \end{bmatrix} X_{k-1}+\begin{bmatrix} \frac{1}{2}\Delta t^2\\ \Delta t \end{bmatrix}u_{k-1} \tag{6} Xk=[10Δt1]Xk1+[21Δt2Δt]uk1(6)
当然,外部环境同样存在着各种各样的干扰 w k − 1 w_{k-1} wk1,假设其符合高斯分布 P ( w ) ∼ ( 0 , Q ) P(w)\sim(0,Q) P(w)(0,Q)
进一步地,
X k = [ 1 Δ t 0 1 ] X k − 1 + [ 1 2 Δ t 2 Δ t ] u k − 1 + w k − 1 (7) X_k =\begin{bmatrix} 1& \Delta t \\ 0&1 \end{bmatrix} X_{k-1}+\begin{bmatrix} \frac{1}{2}\Delta t^2\\ \Delta t \end{bmatrix}u_{k-1}+w_{k-1} \tag{7} Xk=[10Δt1]Xk1+[21Δt2Δt]uk1+wk1(7)

式(7)显然能帮助我们从上一时刻 k − 1 k-1 k1的状态预测下一时刻 k k k的状态。
前文中也提到过,我们也可以通过GPS、外部传感器等诸多手段得到测量出来的数据 Z k Z_k Zk

Z 1 = P k (测量的位置) Z 2 = V k (测量的速度) (8) \begin{aligned} Z_1&=P_k(测量的位置)\\ Z_2&=V_k(测量的速度) \tag{8} \end{aligned} Z1Z2=Pk(测量的位置)=Vk(测量的速度)(8)
显然,测量中也存在着各种干扰 v k v_k vk,同样假设其符合高斯分布 P ( v ) ∼ ( 0 , R ) P(v)\sim(0,R) P(v)(0,R)
那么式(8)我们可以写成:
Z k = [ 1 0 0 1 ] X k + v k (9) Z_k =\begin{bmatrix} 1& 0 \\ 0&1 \end{bmatrix} X_{k}+v_k\tag{9} Zk=[1001]Xk+vk(9)

将式(7)和式(9)写到一起,并用参数代替其中的矩阵,得到:
X k = A X k − 1 + B u k − 1 + w k − 1 Z k = H X k + v k (10) \begin{aligned} X_k &=AX_{k-1}+Bu_{k-1}+w_{k-1} \\ Z_k& =HX_{k}+v_k \end{aligned}\tag{10} XkZk=AXk1+Buk1+wk1=HXk+vk(10)
现在我们已经有了预测的(7)和测量的(9)两个分布,如何通过这两个分布,估算最优估计便是卡尔曼滤波需要完成的事情。

卡尔曼增益推导

一篇文章写完全部的好像有点长,为了便于读者学习,将该部分内容放到下一篇文章中。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
滤波是一种利用线性系统状态方程和观测方程,对系统状态进行最优估计的算法。其基本思想是通过利用系统的状态方程和观测方程,不断地对系统状态进行修正和预测,从而得到最优的状态估计。 滤波的主要步骤包括状态预测、状态更新和误差协方差更新三个部分。 1. 状态预测 状态预测是指根据系统的状态方程和上一时刻的状态估计值,预测当前时刻的状态估计值。在这一步中,需要用到系统的状态方程,即: x(k) = A(k) * x(k-1) + B(k) * u(k) + w(k) 其中,x(k)表示当前时刻的状态向量,A(k)表示状态转移矩阵,B(k)表示输入矩阵,u(k)表示当前时刻的外部输入,w(k)表示状态噪声。 在预测状态时,需要首先对上一时刻的状态估计值进行修正,即: x(k|k-1) = A(k) * x(k-1|k-1) + B(k) * u(k) 其中,x(k-1|k-1)表示上一时刻的状态估计值。 然后,根据状态转移矩阵和输入矩阵,预测当前时刻的状态估计值,即: x(k|k-1) = A(k) * x(k-1|k-1) + B(k) * u(k) 2. 状态更新 状态更新是指根据当前时刻的观测值和预测状态值,修正当前时刻的状态估计值。在这一步中,需要用到观测方程,即: z(k) = H(k) * x(k) + v(k) 其中,z(k)表示当前时刻的观测值,H(k)表示观测矩阵,x(k)表示当前时刻的状态估计值,v(k)表示观测噪声。 在状态更新时,首先需要计算预测观测值,即: z(k|k-1) = H(k) * x(k|k-1) 然后,根据观测值和预测观测值之间的误差,计算状态估计值的修正量,即: K(k) = P(k|k-1) * H(k)^T * [H(k) * P(k|k-1) * H(k)^T + R(k)]^-1 其中,K(k)表示增益,P(k|k-1)表示状态估计误差的协方差矩阵,R(k)表示观测噪声的协方差矩阵。 最后,根据增益和观测值的误差,修正当前时刻的状态估计值,即: x(k|k) = x(k|k-1) + K(k) * [z(k) - z(k|k-1)] 3. 误差协方差更新 误差协方差更新是指通过状态预测和状态更新的结果,更新系统状态估计误差的协方差矩阵。在这一步中,需要使用协方差更新方程,即: P(k|k) = [I - K(k) * H(k)] * P(k|k-1) 其中,I表示单位矩阵。 通过上述三个步骤,就可以完成一次滤波的计算过程。在实际应用中,需要不断地进行状态预测和状态更新,以得到最优的状态估计结果。 滤波最重要的特点是能够对估计误差进行优化,得到最优的估计结果。此外,滤波还具有适用性广、计算量小的优点,因此在实际应用中得到了广泛的应用,例如航空航天、导航、控制等领域。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值