卡尔曼滤波Q、R如何调节?

news/2024/11/24 7:48:37/

转载:作者:小心假设

链接:https://www.zhihu.com/question/30481204/answer/50092960
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

跑题一个,说几个准则吧。只是准则,只能提供某个角度的参考,可能需要搭配试错来用。

其实是模型误差与测量误差的大小,是模型预测值与测量值的加权。举例而言,R固定,Q越大,代表越信任侧量值,Q无穷代表只用测量值;反之,Q越小代表越信任模型预测值,Q为零则是只用模型预测。

再往背后挖,Q和R是历史测量值与当前测量值的加权。

稳态时,可以分析系统的频域特性的,跟Q和R有关。

从涉及反馈那一步入手,看成个反馈系统,然后可分析各个参数跟比如收敛速度等的关系。就是State estimate (a posteriori) 那一步。从反馈的角度来看,其实卡尔曼滤波等价于线性时变的“反馈控制”系统,且逐渐趋近于一个线性时不变的系统。因此,有些性质可以用控制系统相关的来分析。甚至可以直接用稳态解来当成LTI系统来分析,不过,当然会有误差了~

其实上面说的模型误差,不光包括系统模型误差,还有信号模型误差。什么意思呢?虽然假设某个噪声是零均值的,但实际可能有个常值偏差,这时候可以考虑类似前馈的做法,以图消掉。其实有的些自适应滤波就是解决这个问题的。当然也有其他方法来做的,比如先做个最小二乘,把非零偏差估计出来减去。

---

补充一些跑题的。

虽然卡尔曼滤波核心代码就那么几行,中间用到无非矩阵运算,最复杂可能也就算是矩阵求逆,但调参的区别可以非常之大,更不用说有很多小trick了。这点,电机控制的PID,也是如此。

卡尔曼滤波,不过是实现动态系统的迭代最小二乘,或是用在数据融合。电机的控制,可能也不过是串级PID。两者貌似简单,但真正能做好的,全世界也不多。电机控制比如就有三菱、现代等公司,有专门的老师傅专门负责调大功率电机的参数,算是绝活,可以吃一辈子。为什么本科生就能做的事,还要专门养一个老师傅来做呢?到卡尔曼滤波的话,一直到现在,火星车上也需要有人人专门负责IMU。原因很简单,同样是Kalman,同样是PID,调的水平可以差很多。再比如,现在的过程控制,很多中国企业花大价钱买最先进的硬件、软件,知道壳牌、美孚用的是比如系统辨识,MPC,PID等方法,但就是各种参数不会调,有的甚至用default的,那控制效率怎么可能跟壳牌、美孚等比呢?要知道,一个大的过控项目,光系统辨识可能就要花几个月。还有,某射电望远镜,原来是用的PID,参数是大概调的,总是不满意,也是后来专门请人用一些现代的调参方法,花几个月优化的参数。

以卡尔曼滤波而言,初值怎么选?Q,R怎么设?噪声不是高斯的怎么办?不是白噪声怎么办?弱非线性怎么办?非线性强了怎么办?有干扰怎么办?干扰是能建模的的只怎么办?不能建模的怎么办?怎么容错(比如万一数据接口接触不良)?等等吧。最后还得保证在一个控制周期内完成整个运算。

回到电机控制,PID怎么调,什么时候只用P,只用I,只用D,只用PI,只用PD?如果以上几种组合都不行怎么办?怎么防止过饱和?怎么提高响应速度(带宽)?带宽和精度、功率怎么trade-off?Disturbance attenuation怎么分析?鲁棒性怎么分析?怎么容错?等等吧。

而且这些所要求的不仅仅是理论,而是实打实的在工程中能用的算法。不是理论上的分析,而是实际中的调参方法。

类似的算法有很多?EKF?UKF?SRUKF?PF?还是非闭环、非反馈的滤波?还是频域滤波?动态系统的状态估计和信息融合,不论是导弹,航天飞船,火星车,卫星,GPS,潜艇,飞机,乃至到无人机、四旋翼,身边的机器人,乃至平衡车,自动驾驶,等等吧,现在几乎是卡尔曼滤波一统天下。看看他获得过的奖吧,Kyoto,Draper。。。对了,香农的理论也是很“浅”啊,虽得过Kyoto奖,但也没得过啥数学奖。

而对于上面说的,导弹,航天飞船,火星车,卫星,GPS,潜艇,飞机,乃至到无人机、四旋翼,身边的机器人,乃至平衡车,自动驾驶,导航和控制两个环节都是性命攸关的,当然还有建模。这点上,很多人有错觉,以为硬件和软件弄好了,算法也在那了,就行了。其实,这只是完成了百分之三四十。算法的调参那是相当重要。而且不是纯01的东西,因为要控制硬件,是物理的,还有有采样,有保持器,所以要结合物理来做。而且很多时候bug不在软件中,甚至有时找不到bug,踢一脚就好了。

可悲的是,虽然绝大多数自动化的学生都“会”卡尔曼和PID,但能理解,能调好的,实在是寥寥无几。因为都是记住公式,会套用,会所谓的实现(就些矩阵运算,还不简单),但根本就不理解。所以也就不会调参。就卡尔曼的那几行公式,怎么从最大似然估计方面来分析,怎么从反馈系统方面来分析,怎么从残差的innovation方面来分析?怎么从动态规划,马尔可夫链方面来分析?怎么从测量值与预测值的加权方面来分析?怎么从历史测量值的加权方面来分析?如果有非线性,EKF、UKF、PF等的优缺点是什么?怎么结合起来用?需要分析动态性能时怎么办?最小方差求不出来解析式,如何估计?PID更简单,乘法加法而已,但一个简单的问题,针对某个对象,PID最优能调到什么程度(比如快速性,比如控制精度)?还有别的控制器能做的更好么?

工程(导航、控制)方面很多人就停留在“知道”上面,没什么深的理解,没有在理论、算法、工程之间来回几次。

理论深刻与否,不是看数学上的艰深,而是看理论enable的东西。香农的信息论,爱因斯坦狭义相对论和质能方程,卡尔曼滤波(不过用到了里卡提方程),乃至动态规划,都是很浅的数学,那比现在IEEE Transactions的东西数学简单多了。但是大家都明白,现在发的所谓艰深论文,其实并不深刻,因为不是enabling的。在这一点上,卡尔曼滤波在维纳动态系统频域滤波的基础上,开创了动态系统时域滤波这个方向,那就是极其深刻的,虽然数学上并不艰深。

实现卡尔曼滤波当然不是神级操作,分分钟的事情,几行代码。但用得好就是神级操作,一辈子能成为专家也不错。就是现在,能在火星车包括着落等这一级别的工程中,把卡尔曼滤波用好的,全世界有几人?把特别考虑到登月是第一次,那就是神级操作。可参看这段历史 Appendix A: Historical Perspectives

工程方面的调参,断不是“麻烦”这么简单。说得高大上一点,很多时候,算法的实现被称为science,而调参是art。所谓art,就是要看人,看传承的。就如同日本搞精密控制,为什么咱就搞不出来?电机的理论就那么些,不艰深,实现起来也不难,达不到神级操作。原因除了制造工艺之外,就是真正对物理熟悉的基础上的调参,当然这里调参是广义的。日本的电机控制,有非常多的小trick,你说是理论吧,谈不上;你说是经验吧,但却可以在一定程度上系统化。这样的东西累积起来,就产生了巨大差别,产生了神级的超精密电机。机床方面也是如此。为什么只有日本人行?然后就是登陆火星,只有美国的三次。查表的话,就是现在,也有用的。比如闭环有某个环节,有一定的非线性,最简单的方式就是做个表。再往上,则有专家系统,模糊,都是专业的“查表”。但用的好了,就是神级的效果。就像梅西的过人,没有花哨的动作,不如某某神级,也不如某某艰深,用最简单的动作,最有效地达到了目的。跑题了。。。

理论很“浅”,不艰深,但深刻,极其有深度。如同狭义相对论和信息论一样。

很多算法都是实现不难,就几行,现在都有库,自己写也不难。但难的是用好,是调参。最典型的例子,FIR和IIR的滤波器,实现起来,几分钟的事。但如何设计,却是非常困难的。什么都弄好了,实现的话,就几行代码,当然容易了,不要说本科生了,会编程的即可。其实PID更是简单,但从实现来说,刚学编程也许都能实现。但为什么很多世界顶尖公司都会养一些专家负责调参什么的呢。。。

理论深刻与否,不是看艰深晦涩难懂,而是看enable的东西。这一点上,信息论,动态规划,卡尔曼滤波,都不艰深,但极其深刻。很多人坚持理论一定要艰深晦涩难道才深刻。恰恰相反,深刻的理论往往是“浅”的,是简单的。Nothing is more practical than a good theory,而good的theory往往都是小而美的。现在的推导繁杂的理论多了去了,反而多不深刻。

直到现在,大概也没有内行敢说,卡尔曼滤波和导航只是一个项目里的子项目里的子项目里的子项目里的一个。而且当时被理论证明可行的滤波方法一大堆,当然当时多是频域的。掌握相关算法当然是应届生都懂,但调的话呢?现在的新算法也是一大堆,理论可行,但为什么大家还在用Kalman呢?调参难度确实可以大到不可估计,如JPL火星车。就是如今,能在火星车包括其着陆中这样级别的工程中调好的,也是寥寥无几。

深刻的数学。如信息论,如质能方程,如动态规划,既简单,又深刻,不是偶然的。因为触及到本质,所以深刻,而世界的本质往往(甚至可能全部)是简单的。卡尔曼滤波也是如此。由此观之,艰深繁杂的理论,几乎是意味着还未到本质,还没到最底层。就不举例子了。,

而且即使从工程方面讲,无论是卡尔曼,还是PID,这几行代码里面的参数,物理意义要涉及到整个系统,比如整个登月车,整个火星车。并不是说这几行程序就像比如求矩阵特征值程序似的,其本身只具有数学或数值运算的性质,物理意义(如果有的话)是外界赋予的,因此可以作为一个模块,用的时候调用即可。可以说卡尔曼和PID的参数本身就代表了整个系统的物理意义。

要等下一个大神,能做出,比如,真正的能用的自适应自学习容错的控制算法(现在大多数控制系统都是物理变了要人来重新调参的),或是真正的适用于复杂系统的算法,或是真正能用的某些非线性系统的控制,等等吧。在工程上,如机器人,无人机,等吧,辨识、控制、估计等都还有很多问题解决地不够透彻,或者说根本就不知道一个算法的界限和极限在哪里,还有在原算法不满足要求的时候有没有更优的,还有调参系统性不够,等等吧~

一方面很多人说仿真离工程太远,一方面波音还有雷纳等基于仿真做了很多实际中在用的东西。区别就在于这仿真够不够真,也就是模型与实际的区别。理论也是如此。

说到H2,其实本质上卡尔曼滤波就是H2估计。也因此对噪声不够鲁棒。的卡尔曼有很多本质,比如是动态系统的最小二乘(最小方差),最大似然估计,逐次测量值的最优加权,最优残差innovation榨取,等等吧。。。

最近一个比较惊艳的,也是实打实的,是信息论学者用控制这一套,解决了一个可以说是自香农提出信息论以来就悬而未决的问题,带反馈信道的capacity,UC San Diego Professor Wins Top Information Theory Award

就如同FIR、IIR滤波器,实现起来简直就是分分钟的事,加乘而已。但如果问下做过FIR、IIR设计,即调参(其实上面所有评论中的调参换成设计,可能更好了),的话,会发现真是老大难,这么多信号处理的书,这么多各种变换,loosely speaking,本质都是这个问题。而且发展这么多年,连一些很基本的问题也还是只能靠经验,比如滚降和阶数之间的tradeoff。

而卡尔曼滤波的设计可能更有过之。在整个登月系统设计好后,卡尔曼滤波设计者要获得整个系统在登月各个时候段的模型,这点还好说,关键是还要获得系统各个阶段噪声的协方差Q,R,但获得这个Q、R要有登月系统从起飞到月球着落运行的真实数据,然后再建模和辨识,但第一次时,没有试验,怎么获得?只能靠分析(不知道还有别的可能吗?)。即使在现在,在导弹,航天飞船,火星车,卫星,GPS,潜艇,飞机,乃至到无人机、四旋翼,身边的机器人,乃至平衡车,自动驾驶等等中,如果能不靠实验、而只靠分析设计好Q、R的(别说还有其它的参数了),相信行业绝对会称之为大神,因为大部分人都是反反复复地试才调好的。如果谁知道登月中的这些参数怎么设计的,或是更牛的话,自己会设计,请私信,请他/她吃饭,哈哈哈~

控制、导航系统的bug,不指单纯在软件中,硬件中也有,还跟环境有关。因此,类似的如机器人debug,就是一遍遍试验,然后再看bug出在哪里,是软件、硬件、还是借口,等等吧。但登月的,总不能一遍遍发射导弹,一遍遍着陆,一遍遍返回地球吧。登月是到了阿波罗11号,已经很不容易了。其实更广义的debug,也就包括调参,就是某些参数理论、仿真或模拟中效果好,但实际中肯定有差别,怎么办?类似的如机器人,是一遍遍试验,很多时候trial and error,但也有非常多的trick,很多经验。但登月也是无法如此。当然,登月不止导航和控制。扯的远一点,登月所用的那些理论、算法,几乎肯定不会失传,但设计、调参,因为有很多的trick和经验,其实是有“失传”的危险的。有可能某个关键人物没了就做不出来了。

其实直到今天,工程和实际中的问题一样多,工程中能做出登月、火星车式的工程,理论上能提出下一个卡尔曼滤波式的结果,都是大神。两者应该都指日可待,毕竟前者都提上日程了,后者的话,PID才100来年的历史,卡尔曼滤波才50来年,不大可能控制就到此为止了吧~

个人看来,怎么夸卡尔曼都不为过,他是和维纳、香农一个级别的。甚至说他对系统科学的贡献,argubaly,已经超过了维纳。系统科学,简单的说是人造系统的物理学,卡尔曼(当然也包括维纳、香农)的公式,揭示了系统科学的本质和极限。做个可能不恰当的对比,就如同热力学熵不减定律,绝对零度等,有人会说后者看起来“浅白简单”而因此不深刻吗?


http://www.ppmy.cn/news/661385.html

相关文章

string类学习

本篇将深入学习string类,通过各个测试函数玩遍cstring类,学到就是赚到!!! 文章目录 1.头文件和源文件1.1源文件1.2头文件 2.构造函数3.赋值重载函数4.元素访问运算符5.迭代器5.1正向迭代器5.2反向迭代器 6.添加字符串…

模糊 (一)运动模糊失焦模糊 去卷积盲去卷积

(一)去空间不变的模糊核 1)维纳滤波 一个理想点经过相机后成的像由点扩散函数PSF(Point Spread Function)来描述。 线性移不变的PSF导致的图像模糊:bc*xn n是噪声 例如衍射极限PSF 相机抖动模糊 直接去卷积会放大系统中高频部…

模糊集介绍

https://wenku.baidu.com/view/acb754583d1ec5da50e2524de518964bcf84d29a.html

汉语拼音的模糊音扩展(用于搜索纠错)

由于现在使用拼音输入法较多,很可能输入同音字而无法搜索到结果,或者由于普通话不标准(前后鼻音不分)输入了错误的拼音。例如用户想搜索”牛奶“却输入了刘来(liulai),那我们可以对liulai进行模…

Vue-cli3 ,js根据汉字或拼音模糊搜索功能,汉字支持同音字、多音字,支持首字母

输入汉字模糊查询同音字,多音字,支持首字母, 目标用户为视障人士,需求是: 匹配字段:“行为” 。 可以使用 “兴魏”,“性未”,“xw”,“xingwei” ,“航为”…

jquery easyui实现汉字拼音首字母模糊查询

本片文章并非原创,而是将网上的方法整理了一下;网上给出的代码不一定完全适合自己的项目,具体的要更加自己的情况修改; 不要直接复制粘贴代码,这样是行不通的;自己要理解前人这样实现的目的和原理 在实现…

vue pinyin-match下拉框设置拼音模糊搜索

<el-form-item label"姓名&#xff1a;" prop"substation"><el-selectv-model"formInline.substation"placeholder"全部"filterablevalue-key"id":filter-method"pinyingSub"clearableclear"clearS…

什么是模糊查询?

什么是模糊查询 介绍 &#xff08;1&#xff09;当想查询学生姓名中包含字符a&#xff0c;就需要使用到模糊查询&#xff0c;模糊查询的话使用关键字是like&#xff08;像&#xff09; &#xff08;2&#xff09;通配符 &#xff1a;任意一个字符 张_&#xff1a;张三&#x…