• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

卡尔曼滤波理论讲解与实例(matlab和python)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

理论讲解

卡尔曼滤波属于线性滤波器,它可以在多元不确定信息下通过融合多个信息源来得到一种最优的状态估计。卡尔曼滤波在连续变化的线性系统中表现是非常出色的,因为它考虑了系统过程中存在的一些干扰,比如模型预测干扰QQ和测量过程干扰RR,因此,即使系统中伴随着一些干扰,卡尔曼滤波器也可以比较准确的计算出实际的状态,并且可以对系统未来的运动状态做出合理的预测。卡尔曼滤波器的前提条件是系统是线性高斯系统,线性高斯系统需要从两个方面的理解:

  1. 线性:运动方程、观测方程是线性的

  2. 高斯:系统噪声服从零均值的高斯分布

综合来说也就是说高斯分布的噪声在经过状态转移之后仍然保持高斯分布。如果不满足这个线性这个前提条件,就需要使用扩展卡尔曼滤波(extended kalman filter ,EKF)和无迹(损)卡尔曼滤波了(Unscented Kalman Filter ,UKF)来代替了。另外卡尔曼滤波器也假设状态是符合正态分布的。

如下图2.15所示,卡尔曼滤波器的信息源一方面来自传感器检测出的车辆状态信息 zk^\hat{z_k},另一方面来自数学模型预测出的车辆状态信息 xk^\hat{x_k},但这两方面信息源都只是间接的预测,并且伴随着一些不确定和不准确性,如果使用上所有可用的信息源,那么就能得到一个比单一的任何信息源估计更好的结果xk^\hat{x_k}'。卡尔曼滤波通过两个高斯分布相乘,就可以把多个不确定信息源融合在一起。传感器检测的车辆状态信息zk^\hat{z_k}在某种情况下符合一个高斯正太分布,预测模型计算出的车辆状态信息也xk^\hat{x_k}符合一个高斯正太分布,而后将这两个独立的高斯分布相乘就会得到一个新的高斯分布xk^\hat{x_k}'。新的高斯分布就是原来两个高斯分布重叠的区域,其均值就代表着最优的状态估计。

卡尔曼滤波的实质是预测的车辆状态和测量的车辆状态两个高斯分布相乘的到新的高斯分布,该过程最后可以凝练成五个核心公式:

预测公式:

x^k=Fkx^k1+BkukPk=FkPk1FkT+Qk \hat x_k=F_k \hat x_{k-1} + B_k \vec u_k\\ P_k=F_kP_{k-1}F^T_k+Q_k
更新公式:

K=PkHkT(HkPkHkT+Rk)1x^k=x^k+K(zkHkx^k)Pk=PkKHkPk K' = P_kH^T_k(H_kP_kH^T_k+R_k)^{-1}\\ \hat x'_k = \hat x_k+K'(\vec {z_k}-H_k\hat x_k)\\ P'_k=P_k-K'H_kP_k
其中 xk^\hat{x_k}kk时刻的状态向量,FkF_k为状态转移矩阵,表示将k1k-1时刻的状态向量转移至t时刻的状态向量, BkB_k是输入控制矩阵,代表着将控制向量 uk^\hat{u_k}映射到状态向量上,统一控制向量 uk^\hat{u_k}和状态向量之间 xk^\hat{x_k}的关系,uk^\hat{u_k}代表着控制向量,如加速度,角加速度等,PkP_k为状态向量的协方差矩阵,代表着状态向量每个元素之间的关系, QkQ_k表示预测状态的高斯噪声的协方差阵,它用来衡量模型的准确度,模型越准确其值越小, zk\vec {z_k}为传感器测量值的状态向量,也就是传感器的测量结果,HkH_k 为转换矩阵,他将状态向量 xk^\hat{x_k}映射到测量值所在的向量空间zk\vec {z_k}RkR_k为测量值的高斯噪声的协方差阵,代表着传感器测量的误差。


公式推导

那卡尔曼滤波公式的五个公式是如何推导的呢?

用均值和方差描述物体状态

怎么去描述某一时刻物体的状态呢? 状态xk^\hat{x_k}可以包含多个变量,代表任何你想表示的信息, 我们用均值和方差来表示某一时刻的状态,为啥是这两个呢? 均值就是我们定义要知道的一些变量状态,例如位置,速度,体积,温度等等。它表示随机分布的中心,即最可能的状态。方差表示一种偏离均值的程度,他可以告诉我们更多信息,利用其中一个变量值告诉我们其它变量可能的值。例如,位置和速度的关系。我们基于旧的位置来估计新位置。如果速度过高,我们可能已经移动很远了。如果缓慢移动,则距离不会很远。跟踪这种关系是非常重要的,因为它带我们更多的信息:其中一个测量值告诉了我们其它变量可能的值,这就是卡尔曼滤波的目的,尽可能地在包含不确定性的测量数据中提取更多信息!这种相关性用协方差矩阵来表示。矩阵中的每个元素 Σij\Sigma_{ij} 表示第 ii个和第 jj个状态变量之间的相关度。(协方差矩阵是一个对称矩阵,这意味着可以任意交换 iijj)。协方差矩阵通常用“Σ\Sigma”来表示,其中的元素则表示为“ Σij\Sigma_{ij} ”。

所以在时刻 kk 物体的状态为 :均值 xk^\hat{x_k}和协方差矩阵PkP_k
xk^=[positionvelocity]Pk=[ΣppΣpvΣvpΣvv] \hat{x_k}=\left[ \begin{matrix} position \\ velocity \\ \end{matrix} \right] \quad\quad\quad P_k=\left[ \begin{matrix} \Sigma_{pp}&\Sigma_{pv} \\ \Sigma_{vp}&\Sigma_{vv} \\ \end{matrix} \right]

状态转移矩阵FF表示预测

接下来,我们需要根据当前状态(k1k-1 时刻)来预测下一状态(kk 时刻),怎么去预测呢?


我们可以用矩阵 FkF_k来表示这个预测过程。这个 FkF_k就是根据运动学或者动力学等物理公式得到的内在关系或者规律。记住,我们并不知道对下一状态的所有预测中哪个是“真实”的,但我们的预测函数并不在乎。它对所有的可能性进行预测,并给出新的高斯分布。

它将我们原始估计中的每个点都移动到了一个新的预测位置,如果原始估计是正确的话,这个新的预测位置就是系统下一步会移动到的位置。那我们又如何用矩阵来预测下一个时刻的位置和速度呢?下面用一个基本的运动学公式来表示:矩阵表示
pk=pk1+Δtvk1vk=vk1 p_k=p_{k-1}+\Delta tv_{k-1}\\ v_k=\quad\quad \quad\quad v_{k-1}


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
matlab神经网络工具箱发布时间:2022-07-18
下一篇:
利用Matlab工具箱完成摄像头矫正发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap