前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SLAM:卡尔曼滤波推导

SLAM:卡尔曼滤波推导

作者头像
猫叔Rex
发布2022-01-24 13:53:07
6240
发布2022-01-24 13:53:07
举报
文章被收录于专栏:科学计算科学计算

卡尔曼滤波推导

 我们先给出离散时间现行系统的状态、观测方程:

\begin{array}{l} x_{k}=A * x_{k-1}+B * u_{k}+w_{k-1} \\ z_{k}=H * x_{k}+v_{k} \end{array}

 其中,x_k 表示状态矩阵,z_k 表示状态矩阵的观测量,A 表示状态转移矩阵,B 表示输入矩阵,其具体影响状态矩阵,H 表示观测矩阵,\omega_{k-1} 表示过程噪声,v_k表示测量噪声。

 测量噪声很容易理解,数据采集中都包含噪声,这个噪声就是测量噪声。对于过程噪声,大部分线性时变系统并不严格,具有一定不确定性,会导致状态矩阵有一定偏差,因而存在\omega_{k+1} 。两种噪声均建模为高斯白噪声,服从p(\omega) \in N(0, Q),p(v) \in N(0, R) ,为对应的协方差矩阵。Q,R 在此,定义三种状态矩阵的表示方式:

  1. x_k 表示第k次状态真实值;$
  2. \hat{x}_{k \mid k-1} 表示第k-1次测量后对第k次的估计值,即先验状态估计值;
  3. \hat{x}_{k \mid k} 表示第k次测量后对第k次的估计值,即后验状态估计值;

 先验状态估计值由状态预测方程得到:\hat{x}_{k \mid k-1}=A*\hat{x}_{k-1 \mid k-1}+B*u_k  后验状态估计值由状态更新方程得到(第二种加法表达式):\hat{x}_{k \mid k}=\hat{x}_{k \mid k-1}+K(z_k-H*\hat{x}_{k \mid k-1})  误差e_{k \mid k-1}

\begin{aligned} e_{k \mid k-1} &=x_{k}-\hat{x}_{k \mid k-1} \\ &=\left(A x_{k-1}+B u_{k-1}+\omega_{k-1}\right)-\left(A \hat{x}_{k-1 \mid k-1}+B u_{k-1}\right) \\ &=A\left(x_{k-1}-\hat{x}_{k-1 \mid k-1}\right)+\omega_{k-1} \end{aligned}

 误差e_{k \mid k}

\begin{aligned} e_{k \mid k} &=x_{k}-\hat{x}_{k \mid k} \\ &=x_{k}-\left(\hat{x}_{k \mid k-1}+K\left(z_{k}-H \hat{x}_{k \mid k-1}\right)\right) \\ &=x_{k}-\left[\hat{x}_{k \mid k-1}+K\left(H x_{k}+v_{k}-H \hat{x}_{k \mid k-1}\right)\right] \\ &=x_{k}-\hat{x}_{k \mid k-1}-K H\left(x_{k}-\hat{x}_{k \mid k-1}\right)-K v_{k} \\ &=\left(I-K H\right) e_{k \mid k-1}-K v_{k} \end{aligned}

 先验协方差:

\begin{aligned} P_{k \mid k-1}=E\left(e_{k \mid k-1} e_{k \mid k-1}^{T}\right) &=E\left[\left(x_{k}-\hat{x}_{k \mid k-1}\right)\left(x_{k}-\hat{x}_{k \mid k-1}\right)^{T}\right] \\ &=E\left\{\left[A\left(x_{k-1}-\hat{x}_{k-1 \mid k-1}\right)+\omega_{k-1}\right]\left[A\left(x_{k-1}-\hat{x}_{k-1 \mid k-1}\right)+\omega_{k-1}\right]^{T}\right\} \\ &=A E\left[\left(x_{k-1}-\hat{x}_{k-1 \mid k-1}\right)\left(x_{k-1}-\hat{x}_{k-1 \mid k-1}\right)^{T}\right] A^{T}+E\left[\omega_{k-1} \omega_{k-1}^{T}\right] \\ &=A P_{k-1 \mid k-1} A^{T}+Q \end{aligned}

 后验协方差:

\begin{aligned} P_{k \mid k} &=E\left[e_{k \mid k} e_{k \mid k}^{T}\right] \\ &=E\left\{\left[\left(I-KH\right) e_{k \mid k-1}-K v_{k}\right]\left[\left(I-K H\right) e_{k \mid k-1}-K v_{k}\right]^{T}\right\} \\ &=E\left\{\left[\left(I-KH\right) e_{k \mid k-1}-K v_{k}\right]\left[e_{k \mid k-1}^{T}\left(I-K H\right)^{T}-v_{k}^{T} K^{T}\right]\right\} \\ &=E\left[\left(I-K H\right) e_{k \mid k-1} e_{k \mid k-1}^{T}\left(I-KH\right)^{T}+K v_{k} v_{k}^{T} K^{T}\right] \\ &=\left(I-K H\right) P_{k \mid k-1}\left(I-KH\right)^{T}+KR K^{T} \\ &=P_{k \mid k-1}-K H P_{k \mid k-1}-P_{k \mid k-1} H^{T} K^{T}+K H P_{k \mid k-1} H^{T} K^{T}+K R K^{T} \end{aligned}

卡尔曼代价函数为P_{k \mid k} ,即:J=\sum_{\min } P_{k} ,对K 求导:\frac{\partial P_{k \mid k}}{\partial K}=-2\left(P_{k \mid k-1} H^{T}\right)+2 K\left(H P_{k \mid k-1} H^{T}+R\right) 令导数为0,可以得卡尔曼增益K 为:K=P_{k \mid k-1}H^T(HP_{k \mid k-1}H^T+R)^{-1} 将其代入公式7中,可得:P_{k \mid k}=\left(I-K H\right) P_{k \mid k-1} 至此,完成所有公式的推导,预测即先验,更新即后验。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 傅里叶的猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 卡尔曼滤波推导
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档