卡尔曼滤波的理解

看了B站up主DR_CAN讲的卡尔曼滤波(链接)。up讲的非常好,强烈推荐,看完终于明白了卡尔曼滤波的奥秘。下面是我对其中内容的注解,或者说自己的理解。大部分推导省略了,但保留了算法的思想脉络。

引入

首先看算法是干什么的。

我们假设一种场景,雷达跟踪飞机的运动。我们在各个离散的时间点测量飞机的位置。我们假设知道了飞机在k-1时刻的位置x_{k-1},要预测它在k时刻的位置x_k。为什么要预测呢,因为方便我们对它进行跟踪。我们有两种办法得到位置x_k

  • 我们通过某种经验假设认为飞机符合某种运动规律,比如匀加速运动,也就是说,我们可以建立某种运动模型。这样,假设模型是完美的,那么根据x_{k-1},我们就可以算出k时刻的位置x_k。然而,模型里面存在一定的不确定性,里面存在随机的因素,这样,我们就不能准确得到位置x_k,而是得到一个位置的估计\hat{x}_k^-
  • 我们可以直接测量k时刻的位置,记为\hat{x}_{kmea}。然而,测量也存在随机的因素,不能准确测量,因此,\hat{x}_{kmea}也是真实位置的一个估计。

可以看到,我们可以得到真实位置的两个估计,一个是通过运动模型计算出来,一个是测量出来的。而二者都不等于真实位置,而是存在一定的误差。我们接下来的任务是,根据这两个估计来进行某种运算,得到一个最终的、更准确的估计值

一个最直接的思路是对二者取平均。但是,假设我们知道,我们测量的准确度高于模型的准确度,那么,我们更应该相信测量的值,反之同理。也就是说,我们需要一个加权平均,如下:

\hat{x}_k = (1-G)\hat{x}_k^-+G\hat{x}_{kmea}

转换一下得到:

\hat{x}_k = \hat{x}_k^-+G(\hat{x}_{kmea}-\hat{x}_k^-)                                                      (1)

那么问题就成了如何选择G,使得我们的估计效果最好,或者说在某种意义下最优。这正是卡尔曼滤波所要完成的任务。

状态空间方程

(一)假设k时刻的状态x_k与k-1时刻的状态x_{k-1}、k-1时刻的控制量u_{k-1}存在如下关系:

x_k=Ax_{k-1}+Bu_{k-1}+w_{k-1}                                                (2)

其中,状态就是我们关注的变量,如上面的飞机位置。由于存在多个状态变量,因此它一般是一个向量。控制量则是外界施加的某种作用量,是一个确定的量。A和B都是矩阵。而w_{k-1}过程噪声,用于刻画模型的不确定性。它是一个随机过程,或者说对某个确定的k,它是一个随机变量。

(二)假设k时刻的测量值与k时刻的状态的关系如下:

z_k=Hx_k+v_k                                                                         (3)

其中,v_k测量噪声,用于刻画测量的不确定性。

估计过程

(一)我们先根据式(2)求出x_k的一个估计:

\hat{x}_k^-=A\hat{x}_{k-1}+Bu_{k-1}

我们省去了过程噪声w_{k-1},因为它是个随机变量,我们没办法知道它的准确值,所以不考虑它。\hat{x}_k^-称为先验估计,可以理解为一种初步的估计。需要注意的是,\hat{x}_{k-1}上面也有一个尖尖,它也是一个估计值,因为真实值是永远不知道的。

(二)根据式(3)求出x_k的另一个估计:

\hat{x}_{kmea}=H^{-1}z_k

这里也省去了测量噪声v_k

(三)接下来根据式(1),做加权平均:

\hat{x}_k = \hat{x}_k^-+G(\hat{x}_{kmea}-\hat{x}_k^-)=\hat{x}_k^-+G(H^{-1}z_k-\hat{x}_k^-)

通常,我们会做个变量代换,令G=K_kH,得到:

\hat{x}_k =\hat{x}_k^-+K_k(z_k-H\hat{x}_k^-)

其中,K_k称为卡尔曼增益,其实它就是一个权重,用于控制我们对于模型估计量和测量估计量之间的倾向程度。\hat{x}_k称为后验估计,也就是我们依据测量值做的进一步估计,是最终的估计值。

卡尔曼增益

接下来,就是要找到一个合适的K_k。我们自然希望K_k使得估计误差最小,即\hat{x}_k最接近于x_k估计误差为:

e_k=x_k-\hat{x}_k

注意,e_k是一个零均值的随机变量,它的方差越小,它就越接近0,\hat{x}_k就越接近于x_k。由于e_k实际上是一个向量,所以我们的目标就是使得e_k协方差矩阵的迹最小,也就是各个方差之和最小。

接下来,先求出e_k的协方差矩阵P_k,这个过程就不写了,DR_CAN的视频里给出了详细的推导。P_k的公式看着很复杂,其实涉及到的无非是线性代数和概率论的一些基本知识。P_k如下:

P_k=P_k^--K_kHP_k^--P_k^-H^TK_k^T+K_kHP_k^-H^TK_k^T+K_kRK_k^T     (4)

其中,P_k^-先验估计误差e_k^-=x_k-\hat{x}_k^-的协方差矩阵,后面会推导;R是测量噪声v_k的协方差矩阵,是已知的。

接下来求P_k的迹,并对K_k求导,令导数=0,就得到最优的K_k

K_k=P_k^-H^T(HP_k^-H^T+R)^{-1}                                       (5)

误差的协方差矩阵

式(5)中,P_k^-目前还不知道。可以求出,

P_k^-=AP_{k-1}A^T+Q

其中,Q是过程噪声w_{k-1}的协方差矩阵,也是已知的。

可见,我们还需要求出P_k,用于下一次计算P_{k+1}^-。我们把式(5)带入到式(4)中,就可以求出:

P_k=(I-K_kH)P_k^-

总体算法流程

于是,我们得到了总的算法流程。

(1)计算先验估计

\hat{x}_k^-=A\hat{x}_{k-1}+Bu_{k-1}

(2)计算先验误差的协方差矩阵

P_k^-=AP_{k-1}A^T+Q

(3)计算卡尔曼增益

K_k=P_k^-H^T(HP_k^-H^T+R)^{-1}

(4)计算后验估计

\hat{x}_k =\hat{x}_k^-+K_k(z_k-H\hat{x}_k^-)

(5)更新误差协方差矩阵

P_k=(I-K_kH)P_k^-

以上5步不断进行迭代,就是我们根据先验估计和测量值计算后验估计值,来逼近真实值的过程。

在迭代刚开始,需要初始的状态\hat{x}_0和误差协方差矩阵P_0。可以以0时刻的测量值作为初始状态。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值