卡尔曼滤波算法--核心公式推导导论 - ZZ
卡尔曼滤波算法--核心公式推导导论
写在最前面:这是我第一篇专栏文章,感谢知乎提供这么一个平台,让自己能和大家分享知识。本人会不定期的开始更新文章,文章的内容应该集中在汽车动力学控制,整车软件架构,控制器等方面。作为一名在校硕士,很多理解都可能不全面,不正确,大家有不同意见欢迎讨论。 谢谢!
---------------------------------------------------------------------------------------------------------------------------
卡尔曼滤波算法的应用很广泛,省略很多字。
卡尔曼滤波算法的优点很多,省略很多字。
卡尔曼滤波算法很牛逼,因为有一堆公式,有一堆符号,看起来就很牛逼啊,乍一看不懂的都很牛逼啊!
本文针对卡尔曼滤波算法的核心公式进行推导,不让大家被它华丽的外表吓到。(之后计划写关于针对非线性情况的EKF和UKF,对卡尔曼滤波算法做一个全面一点的应用介绍。感兴趣的可以关注专栏。)
--------------------------------------------------------------------------------------------------------------------------
Okay,进入正题。这篇文章假设读者已经对卡尔曼滤波算法有初步的了解,知道它能做什么,知道它的优点,知道它很牛逼,并且你已经对它产生兴趣,但不知道如何下手。
首先给出一个控制理论中公式,别急着翻控制理论的书,没那么复杂:
两个基本问题:
1.卡尔曼滤波算法要做什么?
对状态进行估计。
2. 卡尔曼滤波算法怎么对状态进行估计?
利用状态过程噪声和测量噪声对状态进行估计。
一个状态在一个时刻点k的状态进入下一个时刻点k+1状态,会有很多外界因素的干扰,我们把干扰就叫做过程噪声,(这个词一看就是硬翻译过来的,别在意为什么叫噪声)用w表示。任何一个测量仪器,都会有误差,我们把这个误差叫做量测噪声,用v表示。
回到上面那个公式,状态方程表示状态在不断的更新,从一个时刻点进入下一个时刻点,这个很好理解。关键是量测方程,它表示,我们不断更新的状态有几个能用测量仪器测出来,比如,汽车运动状态参数有很多,比如速度,轮速,滑移率等,但是我们只能测量出轮速,因此量测方程要做的就是把状态参数中能量测的状态拿出来。
我们始终要记得我们要做的事:我们要得到的是优化的状态量Xk。
理解了上面之后就可以开始推导公式了。
1.首先不考虑过程噪声对状态进行更新,很简单:
举个例子,v(k)=v(k-1)+at,匀加速运动咯。
2.不考虑测量噪声取出能测量的状态,也很简单:
3.用测量仪器测量出来的状态值(大家可以考虑到:测量的值就是被各种噪声干扰后的真实值)减去上面不考虑噪声得到的测量值:
这个值在数学上是一个定义值,叫做新息,有很多有趣的性质,感兴趣的可以自己谷歌。
我们对步骤暂且停一停。这个叫新息的值有什么用?由上面的过程我们可以明显看到,它反映了过程噪声和测量噪声综合对测量状态值的影响,也就是它包含了w和v的情况。
回到数学层面,(不要害怕,很简单的数学应用和思考啦!)一个数值c由两部分内容a和b组成,那么怎样用数学表达式来表达?
一般有两种做法:
I.直接相加:c=a+b;
II. 用比例的方法:a=n*c,b=(1-n)*c
卡尔曼采用了方法II,用比例的方法来做(其实这也是为什么叫做滤波的原因,因为滤波就是给权值之类的操作)。也就是说,过程噪声w=新息*一个比例。这样得到的过程噪声加上原来(第一步)不考虑过程噪声的状态值不就是优化值了吗? 也就是:
Okay,都写到这里了,有必要做一下前提假设:
a. 什么高斯噪声,均值为零一堆;
b.Ak,Ck,wk的协方差Q,vk的协方差R,系统协方差初始值P0,状态初始值X0,都已知。为什么已知,你实际做项目就知道了。不过不懂的可以留言或者私信。
那么到目前为止我们的思路就是清楚了,找到一个合适的Hk值(卡尔曼增益),那么我们就能得到状态的最优值。(卡尔曼说的,不是我说的,所以你问为什么,你要问他,这么深层次的理论留给博士和学者们去做就好,我们就现学现用就行,哈哈哈,站在巨人的肩膀!)
问题来了:怎么得到合适的Hk?似乎不是随便一个参数。
这是误差协方差矩阵。
思路:使得误差协方差矩阵Pk最小的Hk。
为什么?这里我从感观的角度说明自己的理解,欢迎讨论。
协方差表示什么,协方差表示两者之间的联系或者关系,关系越大,协方差越大。误差协方差越小说明过程噪声和量测噪声的关系越小。关系越小能做什么,这要回到我们第3步讨论的我们用比例的方法分开了w和v。用比例分开,到底多少属于w,多少是v,如果关系越小,分开的越精确,比如一堆白砂糖和盐,如果两种混合的很均匀,我们说它关系很大,也就越难用比例的方法将其分开。
4.求的误差协方差矩阵Pk
自然是把里面的Xk先得到,然后公式运算,通过上面的步骤我们也容易得到:
然后复杂的数学计算,和之前假设的高斯噪声,新息的性质之类(至于过程,个人觉得你如果只做应用,不研究算法,就没必要深入去看了),就能得到下面的卡尔曼滤波递推公式:
通过上面的解释,我们也就不难知道这些公式都在干嘛,知道干嘛就可以了。在知道A,C,P0,Q,R的情况下,整个公式的运算流程也都很清晰了。
————————————————————————————————————————
欢迎评论!转载请注明出处!谢谢大家!
卡尔曼滤波算法--核心公式推导导论 - ZZ的更多相关文章
- 基于Hdl Coder实现卡尔曼滤波算法
总所周知,FPGA极其不擅长复杂算法的运算,但是如果项目中又涉及一些高级算法的实现,在没有可封装IP核调用的形式下,我们应该如何进行程序开发呢?今夕已经是2020年,我们一味依赖于用verilog写代 ...
- Floyd算法核心代码证明
Flody 大家都知道这个最终模版: for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dis[i ...
- 卡尔曼滤波(Kalman Filter) ZZ
一.引言 以下我们引用文献[1]中的一段话作为本文的開始: 想象你在黄昏时分看着一仅仅小鸟飞行穿过浓密的丛林.你仅仅能隐隐约约.断断续续地瞥见小鸟运动的闪现.你试图努力地猜測小鸟在哪里以及下一时刻它会 ...
- 数据挖掘算法以及其实现zz
实验一 分类技术及其应用 实习要求: 基于线性回归模型拟合一个班学生的学习成绩,建立预测模型.数据可由自己建立100个学生的学习成绩. 1) 算法思想: 最小二乘法 设经验方程是y=F(x ...
- 数据挖掘分类算法之决策树(zz)
决策树(Decision tree) 决策树是以实例为基础的归纳学习算法. 它从一组无次序.无规则的元组中推理出决策树表示形式的分类规则.它采用自顶向下的递归方式,在决策树的内部结点进行属性值 ...
- js随手笔记-------理解JavaScript碰撞检测算法核心简单实现原理
碰撞检测在前端游戏,设计拖拽的实用业务等领域的应用场景非常广泛,今天我们就在这里对于前端JavaScript如何实现碰撞检测算法进行一个原理上的探讨,让大家能够明白如何实现碰撞以及碰撞的理念是什么:1 ...
- Node.js的核心与红利(zz)
唯有明晰历史,才能了然当下,预知未来.作者从历史角度解读Node.js,帮助读者透过猜忌和谣言,看清真实的Node.js,了解Node.js的核心与红利. 令人惴惴不安的Node.js 我们越来越频繁 ...
- 什么才是程序员的核心竞争力?zz
原文出处: 知乎 姚冬的观点 学习能力,尤其是自学能力,你啥时看到那些有名的程序高手在论坛上问“学习 XX 该看什么书,如何快速学习 XXX,学习 XXX 有什么代码推荐”之类的问题,他们想学什么很快 ...
- Coursera_程序设计与算法_计算导论与C语言基础_数组应用练习
您也可以在我的个人博客中阅读此文章:跳转 编程题#1:求字母的个数 描述 在一个字符串中找出元音字母a,e,i,o,u出现的次数. 输入 输入一行字符串(字符串中可能有空格,请用gets(s)方法把一 ...
随机推荐
- BZOJ.2007.[NOI2010]海拔(最小割 对偶图最短路)
题目链接 想一下能猜出,最优解中海拔只有0和1,且海拔相同的点都在且只在1个连通块中. 这就是个平面图最小割.也可以转必须转对偶图最短路,不然只能T到90分了..边的方向看着定就行. 不能忽略回去的边 ...
- 10分钟上手python pandas
目录 Environment 开始 对象创建 查看数据 选择 直接选择 按标签选择 按位置选择 布尔索引 设置 缺失数据 操作 统计 应用(apply) 直方图化(Histogramming) 字符串 ...
- Redis主从同步分析(转)
一.Redis主从同步原理 1.1 Redis主从同步的过程 配置好slave服务器连接的master后,slave会建立和master的连接,然后发送sync命令.无论是第一次同步建立的连接还是连接 ...
- wap2.0开发
前言 移动通信和互联网的迅速发展,使得互联网从固定向移动转移(即移动互联网)成为一种必然的趋势.由于手机终端本身的限制条件和无线链路的特点,现有无线传送技术的效率和可靠性会越来越难以令用户满意.如何让 ...
- 利用webBrowser获取页面iframe中的内容
1.获取frame的document HtmlDocument htmlDoc = webBrowser1.Document; htmlDoc = webBrowser1.Document.Wind ...
- Auto Layout on iOS Versions prior to 6.0
使用XCODE5.0,出现这个小错误... 解决办法: 选中你的XIB或storyboard,如下图 再查看右边属性栏 去掉最下边的Use Autolayout ,完成. 转:http://blog. ...
- 查询 EBS 系统物料净重、毛重
/* Formatted on 2018/3/14 23:40:47 (QP5 v5.256.13226.35538) */ SELECT DISTINCT MSI.SEGMENT1 || ',' 物 ...
- 【docker】【Gitlab】gitlab中clone项目时,IP地址是一串数字(内网Gitlab的IP地址不正确)的问题解决
首次在内网搭建Gitlab环境,在成功后在Gitlab上新建了一个项目. 然而在IDEA上clone项目时发现,项目地址如下: git@0096ce63c43f:root/jump.git 或者这样 ...
- java.lang.IllegalArgumentException: No converter found for return value of type: class XXX.XXXX
最近项目中用到fastjson做接口数据的转换,发现报这个错误了,环境是springMVC4,看到阿里的官网说是“ 如果是使用 XML 的方式配置 Spring MVC 的话,只需在 Spring M ...
- MySql和相关驱动的安装方式
下载mySql for java驱动的地址:http://www.mysql.com/products/connector/ (可下可不下,因为安装mySql的时候就会包含了各种驱动) MySQL下载 ...