对于卡尔曼滤波的一点理解

前言

   这篇博客主要讲的是我个人对于卡尔曼滤波的一点理解,所以并不会细致地讲解卡尔曼滤波的原理及公式推导。

   关于详细的卡尔曼讲解的博客,可以移步《卡尔曼滤波–从推导到应用》。这篇博客我觉得讲得很细致,公式推导也很详细,适合系统的学习。

   以下将是我的个人理解。

卡尔曼滤波到底解决什么问题

   想要搞清楚这个问题,我们就不得不提两个方程了:

xk=Axk1+Buk1+wk1(1)zk=Hxk+vk(2)wk1N(0,Q)vkN(0,R) 状 态 转 换 方 程 : x k = A x k − 1 + B u k − 1 + w k − 1 ( 1 ) 测 量 方 程 : z k = H x k + v k ( 2 ) w k − 1 ∼ N ( 0 , Q ) v k ∼ N ( 0 , R )

   我在学习卡尔曼滤波的时候,花了很多时间在理解这两个方程上,并且由于一些资料不够明确,导致走了很多弯路,所以想在这里完整地讲述一下我对这两个方程的理解:

  • 假设 wk,vk w k , v k 服从多元高斯分布,并且两者相互独立。

   对于状态转换方程(1):

  • 这个方程其实是一个系统的状态模型,它表示了一个系统在 k k 时刻的状态 xk k1 k − 1 时刻的状态 xk1 x k − 1 以及 k1 k − 1 时刻的输入 uk1 u k − 1 所决定。

  • A,B通常都是常数矩阵,并且 ARn×n,BRn×m A ∈ R n × n , B ∈ R n × m

  • xkRn x k ∈ R n 代表着这个状态通过 n n 个属性来表示。比如要描述一个行驶小车的状态,我们可能需要 xkT={} , 此时 n=3 n = 3 , 也就是说我们用三行列向量来表示该系统的状态。

  • uk1Rm u k − 1 ∈ R m 代表着我们的输入量,在刚才那个描述小车的例子里,很可能 uTk1={} u k − 1 T = { 加 速 度 , 偏 移 角 度 }

  • wk1 w k − 1 则代表了 k1 k − 1 时刻的系统噪声。为什么需要这个量呢,回想一下高中物理中,平常我们分析物体运动的时候,总会假设受恒力作用或者是匀加速运动,一切都是在理想条件下发生的。假如没有 wk1 w k − 1 ,我们的模型可能仅仅适用于理想情况下,而引入 wk1 w k − 1 ,我们的模型就能适用于实际情况中。还是刚才的小车例子, wk1 w k − 1 就代表着在 k1 k − 1 时刻到 k k 时刻系统内部发生了细微的变化,导致xkAxk1+Buk1

   通过对状态转换方程的分析,其实我们也就知道了,假使给我们一个确切的 xk1 x k − 1 ,由于噪声的存在,并且我们不知道 k1 k − 1 时刻的系统噪声值 wk1 w k − 1 ,所以我们并不能根据这个模型以及这个给定的 xk1 x k − 1 计算出 xk x k , 我们仅仅只能计算出根据模型得到的预测值 x^=Axk1+Buk1 x ^ − = A x k − 1 + B u k − 1

  那为什么我们不以这个预测量作为 k k 时刻的状态呢?假如我们这么做的话,也就是说之后 k+1 时刻的状态也将是这样预测出来,可能一开始预测值相较于真实值而言还比较接近。但随着递推的增多,初始的 wk1 w k − 1 经过不断的放大(与A相乘),最后的误差将变得非常大。这也就是我们需要另一个测量方程的原因。

   对于测量方程(2):

  • HRn×n H ∈ R n × n ,类似于状态转换方程中的A和B,通常也是常数矩阵。

  • 测量噪声 vk v k 的存在也很好理解,在测量中由于仪器失误或者偏差,总会造成误差。

  • 有一点需要注意的是: zk z k 是我们能够得到的值,即我们的测量值,但其本身就不准确,因为受到了测量噪声的影响。

   我们介绍完了两个方程,就可以真正地说到卡尔曼滤波的作用了。其本质作用用一句话概括就是:用测量值不断修正预测值,使得通过两者结合得到的状态的估计值接近系统状态的真实值

   那么这个估计值 x^k x ^ k 又是什么呢?

x^k=x^k+Kk(zkz^k)=x^k+Kk(zkHx^k)(3) x ^ k = x ^ k − + K k ( z k − z ^ k ) = x ^ k − + K k ( z k − H x ^ k − ) ( 3 )

   从(3)式 可以看出, x^k x ^ k − 预测值, 可以通过我们的模型预测得到, H H 已知,是常数矩阵,zk 是实际的测量值,可通过测量得到,所以只需要求得 Kk K k 我们就可以得到 k k 时刻的估计值 x^k

  先介绍几个概念:

  估计值和真实值的协方差矩阵 Pk P k :

Pk={ekeTk}={(xkx^k)(xkx^k)T} P k = { e k e k T } = { ( x k − x ^ k ) ( x k − x ^ k ) T }

   预测值和真实值的协方差矩阵 Pk P k −

Pk={ekelT}={(xkx^k)(xkx^k)T} P k − = { e k − e l − T } = { ( x k − x ^ k − ) ( x k − x ^ k − ) T }

  接下来我们来看几个公式,关于公式的推导,可以看上文我推荐的博客,这里仅仅写出结果:

Pk+1=APkAT+Q(4)Kk=PkHT(HPkHT+R)1(5)Pk=(IKkH)PkI(6) P k + 1 − = A P k A T + Q ( 4 ) K k = P k − H T ( H P k − H T + R ) − 1 ( 5 ) P k = ( I − K k H ) P k − I 为 单 位 矩 阵 ( 6 )

卡尔曼滤波具体过程

  1. 首先建立最开始的状态变换方程和测量方程,并确定 A,B,H,Q,R A , B , H , Q , R 矩阵。

  2. 然后假设0时刻的状态估计值为 x^0 x ^ 0 ,并且确定此时的 P0 P 0 ,这两个初值都可以人工设定。我们的首要任务是计算出1时刻的状态估计值 x^1 x ^ 1

  3. 根据状态方程,可计算1时刻的预测值 x^1=Ax^0+Bu0 x ^ 1 − = A x ^ 0 + B u 0 ,并且根据测量直接得到1时刻的测量值 z1 z 1

  4. 根据(4), P1=AP0AT+Q P 1 − = A P 0 A T + Q

  5. 根据(5), K1=P1HT(HP1HT+R)1 K 1 = P 1 − H T ( H P 1 − H T + R ) − 1 ,计算出1时刻的卡尔曼增益 K1 K 1

  6. 根据(3), x^1=x^1+K1(z1Hx^1) x ^ 1 = x ^ 1 − + K 1 ( z 1 − H x ^ 1 − ) 计算得到1时刻的估计值 x^1 x ^ 1

  7. 根据(6), P1=(IK1H)P1 P 1 = ( I − K 1 H ) P 1 − 为下一次迭代做准备。

  8. 重复2-7步,可以迭代递推出之后的所有估计值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值