卡爾曼濾波器(1)

一般我們編程中,常用的數學模型都是離散的,首先看一下離散的狀態空間表達式:


上面這張表格來自百度百科“狀態空間”

下面看一個實際問題:《卡爾曼濾波器的原理以及在matlab中的實現》

https://www.bilibili.com/video/av10788247?from=search&seid=10382691491488446111

問題描述:一輛小車,我們可以任意控制它的加速度u(t),要求實時輸出它的路程p(t)。



上面圖中推導出的公式,就是卡爾曼狀態預測公式,式中的F矩陣稱爲狀態轉移矩陣,B矩陣叫做控制矩陣。另外,①變量上面戴帽子,指的是該變量是個預測值,不是真實值,②左側的x帽右上角還帶減號,減號的意義是,這個x帽還不是最終的預測值,待會我們還要繼續修正他。

下面再來看一下協方差矩陣的直觀解釋,我們從一維數據開始逐步理解他:


上圖中的圓點爲一些樣本數據,它們是帶有高斯噪聲的,於是這些樣本就表現爲:圍繞在中心值附近,離散程度用方差來表示。換句話說,一維數據的協方差就是方差。那麼二維數據的協方差從直觀上怎麼理解呢?看下圖:


一組二維樣本,例如(2,1)、(2.3, 4)、(3, 4.5)·····,如何描述這組樣本的分佈情況呢?一個直觀的想法是,向上圖中的圖1一樣,把這組二維樣本分別投影到X/Y軸,這樣就得到了兩組一維的樣本,這樣每一組樣本都能獲得中心值和方差兩個參數了,但是這種思路只能描述二維數據的兩個維度相互獨立的情況,如果說,這兩個維度的數據不是相互獨立的(例如,當第一維的數據的噪聲爲正值時,第二維的數據的噪聲也大概率爲正值),這種情況下我們就不能用兩個一維的方差來描述二維樣本的分佈情況了,而必須把兩者的相關性也考慮進來。下面再看一下協方差矩陣的數學定義:


仔細觀察上述定義式,可知:如果兩個變量的變化趨勢一致,也就是說如果其中一個大於自身的期望值時另外一個也大於自身的期望值,那麼兩個變量之間的協方差就是正值;如果兩個變量的變化趨勢相反,即其中一個變量大於自身的期望值時另外一個卻小於自身的期望值,那麼兩個變量之間的協方差就是負值。

我們還發現,Cov(X,X)的公式其實就是單變量方差的公式:

對於兩個隨機變量X、Y的協方差矩陣就有4個元素:Cov(X,X)、Cov(X,Y)、Cov(Y,Y)、Cov(Y,X),,顯然,主對角線上兩個元素分別是X、Y的方差Cov(X,X)和Cov(Y,Y),反對角線上兩個元素的值是相等的->Cov(X,Y)=Cov(Y,X)。




上圖中,H稱爲觀測矩陣(其實就是狀態空間表達式中的“輸出矩陣C”),z爲測量值(例如,激光測距的值),v爲測量誤差。如果我們能從小車外部測量到多個參數,例如我們能測到小車的路程s和實時速度w,那麼測量值Z就不再是一個標量值了,而變爲一個列向量:


如果只能測到路程s,那麼上式就簡化爲:

由此可見,觀測矩陣(輸出矩陣)的物理意義就是:根據狀態向量的值(這個值可能是測量值,也可能是數學模型算出的先驗估計值),輸出我們想要的變量的值。

前文中,我們提到,預測模型給出的預測值,並不是一個最優值,我們需要對它進行修正,修正方法如下:


上式中,即前文提到的數學模型給出的預測值,爲測量值和數學模型預測值的差值,Kt爲卡爾曼增益。

這個差值也有可能是個矩陣,這跟測量值的個數有關,如果測量值Z是列向量,那麼,該差值展開後即爲:

如果只能測量距離s,那麼上式就退化爲:



上面幾個式子中,
P爲狀態協方差矩陣,其意義是,我們的先驗估計到底有多大的“不可信度”;

Q爲狀態轉移協方差矩陣,其意義是,矩陣F到底有多大的“不可信度”;
H爲觀測矩陣,其功能是把幾個狀態變量線性疊加爲輸出變量,矩陣的值就是疊加所用的係數;

F爲狀態轉移矩陣;
R爲觀測噪聲的協方差矩陣,其意義是,我們的測量值到底有多大的“不可信度”;


P矩陣的初始值根據經驗/歷史樣本隨便設置一個差不多的值即可,別太誇張就行,該矩陣會自己迭代爲合適的值,例如我們設置的P過大(傾向於不相信預測模型),結果在迭代中發現,預測的值還是挺準的,那麼第5式就會自動把P給減小(傾向於相信預測模型)

卡爾曼增益K的物理意義,其實很簡單,就一句話:你是更相信測量值,還是更相信先驗估計值,這個K就代表了你對測量值的信任程度。對測量值和先驗估計值的信任程度的比例K是如何求的?那就是第3式的工作了,第3式根據測量值的誤差協方差R和先驗估計值的協方差P-的大小,來決定K的大小,顯然,測量值的誤差協方差R越小,計算出的K值越大。


定量的來看一下極端情況,假設我們完全相信先驗估計,也即R=0矩陣,那麼K的計算結果就是,這個結果代入第4式,纔可以把觀測值的尺度變換爲狀態變量的尺度。

關於狀態轉移協方差矩陣Q,我們這樣來理解它:狀態向量X有兩個元素,路程p和速度v,我們用數學模型預測遞推求解新的狀態向量時,是這樣求解的:,在很多時候,我們建立的數學模型和實際的物理系統總是存在差異,例如我們用二階系統來描述電機,實際上如果考慮到電機的種種細節的話,二階方程是不足以描述電機的,再以路程預測爲例,即使小車是勻加速運動,我們有標準的勻加速運動求解路程的公式,那麼這個公式就能完全吻合小車實際的位移嗎?顯然不可能,路面打滑、路面有坑、小車輪胎磨損等,都會使得我們的公式無法完全吻合實際的小車,無法完全吻合,這個問題就體現在轉移矩陣F並沒有描述到所有的細節,,p(t)是用p(t-1)和v(t-1)來預測的,他們的係數分別是1和Δt,這兩個係數的細節度不夠,從而造成預測誤差,那麼我們對p(t)的預測誤差,這個誤差具體是出在p(t-1)的係數1上呢?還是出在v(t-1)的係數Δt上呢?還是這兩個係數都有份呢?爲了區分各個狀態變量的係數對下一週期狀態變量預測造成的誤差的不同程度,我們需要爲每一個係數都描述一下它對造成預測誤差所做的“貢獻”,顯然,爲了描述每一個係數,我們需要一個和係數矩陣一樣大的矩陣,這個矩陣就是狀態轉移協方差矩陣Q,假設Q取值爲:,其物理意義就是,係數1和Δt對預測p(t)造成的誤差的貢獻分別爲0.01、0.005,係數0和係數1對預測v(t)造成的誤差的貢獻分別爲0.05、0.02,再說個題外話,如果兩個狀態變量X、Y完全不相關,也就是說,Y(t-1)的係數對預測X(t)不會產生任何影響,即使預測X(t)產生了誤差,那也是X(t-1)的係數不準確造成的,跟Y(t-1)的係數的無關,這種情況下,Q矩陣就會表現爲反對角線的值都爲0,也即X和Y的協方差爲0。


下面我們把卡爾曼濾波用在“角度傳感器和角加速度傳感器,獲取真實角度”這個問題中,問題描述:在一個物體上安裝了一個角度傳感器和一個角加速度傳感器,角度傳感器的特性是物體動作較慢時,測量很準確,但物體動作較快時,讀取出的測量結果帶有很大的噪聲,但均值基本是對的,而角加速度傳感器,在物體動作很快時,仍可以準確的測量出角加速度,但是因爲控制器只能以一定的時間間隔週期性的讀取角加速度,所以,無法求角加速度的積分,也就無法用角加速度的積分來求角度了,只能用Σ(αxΔt)來近似代替積分從而計算出角度,顯然這種近似會隨着時間的推移,累計誤差越來越大。實際上這個問題用互補濾波就可以簡單粗暴的解決,但這裏爲了學習卡爾曼,我們用卡爾曼濾波來解決下這個問題。

先定義幾個變量:角速度爲ω,角加速度爲α,角度爲a,所有變量的預測值都用帽子表示,

按照卡爾曼的標準五步來做:

(1)建立角度的預測模型(這是一個:非時變的離散的狀態空間模型)

F爲狀態轉移矩陣,B爲控制矩陣,X爲狀態,U爲輸入向量,因爲這個問題比較簡單,所以很多矩陣都退化成了1x1的標量。

該式計算出的結果,被稱爲“先驗估計”,其右上角帶個減號,所謂先驗和減號,其物理意義就是,待會還要修正這個估計的值。

(2)寫出對預測模型的不確定度,也即狀態協方差矩陣P


上式中,F爲狀態轉移矩陣,Pk-1爲上一運算週期修正過的狀態協方差矩陣(若本次計算爲首次計算,那麼Pk-1就是狀態協方差矩陣的初值),Q爲狀態轉移協方差矩陣,我們對預測模型的不確定度進行了定量計算,顯然它由兩部分組成:①數學模型中

在那個英文的卡爾曼視頻中講到,對於狀態向量只含一個元素的系統,P矩陣其實就是“先驗估計”的方差;如果狀態向量含有多個元素,那麼P矩陣就是所有狀態變量預測誤差的協方差矩陣,這就是P矩陣的名字“狀態協方差矩陣”的來歷。顯然P矩陣代表了預測模型的不確定度。


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