极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7818|回复: 10

我对卡尔曼滤波的认识

[复制链接]
发表于 2015-6-10 10:18:40 | 显示全部楼层 |阅读模式
本帖最后由 xxxrc4 于 2015-6-10 10:18 编辑

kalman filter
kf是一种时域滤波器,在使用陀螺仪、加速度计的很多场合都需要用到(四轴、自平衡等,还有什么阿波罗飞船,导弹之类的,是不是貌似很高端啊,别怕其实就那么回事),资料介绍的比较多,但是复杂的数学令人生畏,用图表的方式总结下来龙去脉,利人利己吧!(其实是某某准备让本人去他们那讲讲,自己说不清楚不好吧,所以下了点功夫,^_^)
1、问题描述:针对线性动态系统,参见矩阵A,明显典型的一阶Markov Chain(这个不懂自己去查资料)
u:控制量;z:观测量;x:状态量;方框:矩阵,作用是左乘;圆:变量;星形:高斯白噪声,右下角为其方差;
1.jpg
状态转移过程:
2.png
观测计算过程:
3.png
另一种图描述得更好一些,蓝色是已知量,需要获得状态量或者它的好的估计,中间的lz-1表示一个延时: 4.png
2、解决方案:
2.1 构建一个同结构的模型,粉红色表示估计量
5.png
虽然结构相同,但是无噪声,问题:1、缺初值x0的准确值的话无法工作;2、无噪声,计算有误差
2.2将上述结构改进,将观测量利用起来,(^_^废话,不用就靠猜了),设计一个反馈参与到估计过程中去,设法使得后验误差的协方差最小。带-的粉红变量表示先验估计(priori estimate),指根据以往经验和分析得到,常表示为x(k|k-1);不带的表示后验估计(posteriori estimate),指利用观测量修正后的估计,常表示为x(k|k);
6.png
关键在于K(卡尔曼增益,kalman gain)应该如何设置。详细推导过程见参考文献[1](无非是求导,然后一堆简单的概率计算)。
因此,kf算法的详细过程包括两部分,也即是它的5个公式:
预测阶段:计算先验估计(P(k|k-1)是X(k|k-1)对应的covariance)
X(k|k-1)=A X(k-1|k-1)+B U(k) ……….. (1)
P(k|k-1)=A P(k-1|k-1) A’+Q ……… (2)
修正阶段:计算后验估计并更新先验估计的协方差
X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1)) ……… (3)
Kg(k)= P(k|k-1) H’ / (H P(k|k-1) H’ + R) ……… (4)
P(k|k)=(I-Kg(k) H)P(k|k-1) ……… (5)
其实,(3)和(4)本来应该倒过来的,没有Kg怎么计算(3)?大家都这么写就约定俗成了!
就这么简单,别想复杂了!
明显,算法过程中需要R和Q,观测噪声协方差R可以通过离线统计获得,而过程激励噪声协方差Q没有好办法获得(原因是无法之间观测到过程量xk)
参考文献:
1. 标量卡尔曼滤波  http://www.swarthmore.edu/NatSci/echeeve1/Ref/Kalman/ScalarKalman.html#Alternate
里面有详细的推导过程
2. http://www.cs.unc.edu/~welch/kalman/
2. Xuchen Yao, Ph.D. Johns Hopkins University "An Introduction to the Kalman Filter" 翻译成中文了的,强烈推荐

评分

参与人数 1 +1 收起 理由
幻生幻灭 + 1 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2015-6-10 12:58:38 | 显示全部楼层
mark{:soso_e179:}
回复 支持 反对

使用道具 举报

发表于 2015-6-10 13:00:55 | 显示全部楼层
先支持下,慢慢再研读
回复 支持 反对

使用道具 举报

发表于 2015-6-10 15:07:46 | 显示全部楼层
不错 需要好好学习一下
回复 支持 反对

使用道具 举报

发表于 2015-7-24 17:53:47 | 显示全部楼层
赞赞赞!!!楼主讲得简单易懂,清晰明了,学习了!!!
回复 支持 反对

使用道具 举报

发表于 2015-9-2 15:18:28 | 显示全部楼层
mark一下,待到以后了解了解再回来看
回复 支持 反对

使用道具 举报

发表于 2015-11-3 15:55:46 | 显示全部楼层
不错,学习了
回复 支持 反对

使用道具 举报

发表于 2016-1-28 21:49:07 | 显示全部楼层
学习了学习了学习了
回复 支持 反对

使用道具 举报

发表于 2016-4-30 21:12:04 | 显示全部楼层
刚才浏览了其他篇关于卡尔曼算法的,也认真拜读了楼主的文章,(虽然也没懂),不过第一图很直观,很好,不过通过对比发现了一个问题,关于状态转移的:楼主的是X(k)=A  X(K-1)+B U(k-1)+W(k-1),但是从一张图和我刚从别的文章看的理解有点不一样。X(k)是k时刻的系统状态,U(k)是k时刻对系统的控制量。A和B是系统参数、W(k)为过程的噪音。
现在的问题是:假设为单一系统
按楼主的意思是:
k时刻的系统状态=(k-1)时刻系统状态+(k-1)时刻对系统的控制量+(k-1)过程噪音
而我理解第一张图的意思是:
k时刻的系统状态=(k-1)时刻系统状态+(k)时刻对系统的控制量+(k)过程噪音
所以我理解的是:X(k)=A X(k-1)+B U(k)+W(k)
求解答,不懂!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-18 17:28:07 | 显示全部楼层
killsaler 发表于 2016-4-30 21:12
刚才浏览了其他篇关于卡尔曼算法的,也认真拜读了楼主的文章,(虽然也没懂),不过第一图很直观,很好,不 ...

请分清时刻的概念,k时刻的状态由k-1时刻决定,就是这么简单,这就叫状态转移,否则的话,自己决定自己,就没法计算了,谢谢!
回复 支持 反对

使用道具 举报

发表于 2018-7-20 09:13:04 | 显示全部楼层
你好,最近刚开始在工作中使用卡尔曼滤波。我的研究方向是对天空飞行物体的轨迹预测。目前遇到的问题是,天空中的飞行物有自己的动力系统,可以随时改变航迹,也就是我没办法确定它的运动方程(例如:匀速、匀加速等),那么在这种情况下,我该如何使用卡尔曼滤波来解决问题呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2019-3-20 07:43 , Processed in 0.054651 second(s), 32 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表