卡爾曼濾波Q、R如何調節?

轉載:作者:小心假設

鏈接: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,已經超過了維納。系統科學,簡單的說是人造系統的物理學,卡爾曼(當然也包括維納、香農)的公式,揭示了系統科學的本質和極限。做個可能不恰當的對比,就如同熱力學熵不減定律,絕對零度等,有人會說後者看起來“淺白簡單”而因此不深刻嗎?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章