MEMS器件的四元數(shù)EKF濾波
1,關(guān)于Kalman濾波
本文應(yīng)用的是MEMS器件的IMU,姿態(tài)的表示為四元數(shù)形式(不是網(wǎng)上的單軸卡爾曼濾波!不過原理都是一樣的)
首先是卡爾曼的五條公式
預(yù)測部分
卡爾曼增益
更新部分
其中
式中變量的含義:
狀態(tài)向量
狀態(tài)向量的協(xié)方差矩陣驱敲,表示狀態(tài)的不確定度(或精度)
在時刻的最優(yōu)估計(后驗)
用時刻估計的狀態(tài)量(先驗)
后驗協(xié)方差矩陣
預(yù)測協(xié)方差矩陣
控制矩陣
控制向量
預(yù)測過程的噪聲
時刻的卡爾曼增益
時刻狀態(tài)轉(zhuǎn)移矩陣
時刻觀測向量
觀測噪聲
2耻讽,關(guān)于EKF
卡爾曼濾波是由線性系統(tǒng)推導(dǎo)來的,為了應(yīng)用于非線性系統(tǒng),我們可以把非線性系統(tǒng)在平衡點附近線性化,這樣就有了EKF(擴展卡爾曼濾波)
在預(yù)測部分
由于是非線性的函數(shù),我們把它在一點展開求它的矩陣
有時轉(zhuǎn)移矩陣也需要線性化
這樣可以寫成:
3眯分,實例化
現(xiàn)在我們要以MEMS的6DOF的imu器件為例看看怎么把EKF應(yīng)用到以四元數(shù)為基礎(chǔ)的姿態(tài)解算上,首先考慮下我們的器件特性骆莹,現(xiàn)認為陀螺儀在靜差校正后的輸出數(shù)學(xué)模型為:
即認為陀螺儀的輸出值符合正態(tài)分布(當(dāng)然真實模型會復(fù)雜的多颗搂,不止包含白噪聲)
先把上面這個式子放一下,現(xiàn)在我們選取四元數(shù)作為機體的姿態(tài)狀態(tài)量
然后我們要知道四元數(shù)的微分方程幕垦,以便更新四元數(shù)
我們可以用一階龍格-庫卡法來做數(shù)值積分丢氢,當(dāng)然可以用更高階的如二階傅联,四階龍格-庫卡法,這里用最簡單的一階(也就是矩形積分的形式)
現(xiàn)在我們得到了狀態(tài)轉(zhuǎn)移矩陣
但注意到(1-2)中的真值是不知道的疚察,而我們把陀螺儀的數(shù)據(jù)帶進去是有誤差的蒸走,下面我們需要定義協(xié)方差矩陣來描述狀態(tài)向量的誤差。
很明顯協(xié)方差矩陣是一個4x4的方陣貌嫡,的四個元素一定不是相互獨立的比驻,在也是為什么用協(xié)方差矩陣來表示狀態(tài)向量的分布情況。我們先把(2)式初始化為零岛抄,回到(1-2)討論一下預(yù)測過程的噪聲該如何表示
由前面的討論可以知道:
現(xiàn)在我們把這個矩陣乘出來别惦,以第一行為例:
現(xiàn)在我們考慮現(xiàn)實情況把陀螺儀的輸出值代替
前面說明了,于是上式即為正太分布概率密度函數(shù)的四則運算問題夫椭,我們認為是互相獨立的掸掸,這一點是非常重要的。
假設(shè)是符合正態(tài)分布的概率密度函數(shù) 是一個常數(shù)蹭秋。那么:
與相互獨立時:
回到式(2-2)我們可以把它變成:
式中
綜上我們可以寫出預(yù)測過程的噪聲
其中
ok現(xiàn)在我們的預(yù)測過程結(jié)束了扰付!下面我們要用傳感器的觀測來修正預(yù)測,在此之前我們先來討論下轉(zhuǎn)換矩陣
我們的觀測量往往與我們選擇的狀態(tài)量不是同一個單位甚至不是同一個維度仁讨,因此需要引入轉(zhuǎn)換矩陣
是我們的觀測向量
表示機體坐標(biāo)系下重力加速度的分量
是觀測噪聲羽莺,我們同樣認為是白噪聲(事實上忽略了機體運動的加速度)
根據(jù)慣性導(dǎo)航的知識(參考秦永元《慣性導(dǎo)航》)
我們在點處將線性化
現(xiàn)在我們看下整個狀態(tài)轉(zhuǎn)換的過程:
與相同我們可以寫出觀測噪聲矩陣也就是加速度計噪聲
好了,到此所有卡爾曼需要的變量都推出來了洞豁,接下來只要按照卡爾曼的后三條公式依次計算卡爾曼增益盐固,然后更新狀態(tài)向量,再更新協(xié)方差矩陣就完成了一次迭代族跛。
4闰挡,一些tips
1.由于機體振動的影響,加速度計的可取變量礁哄,在加速度變化劇烈時取大些
2.對于資源有限的MCU來說,矩陣運算非常耗時溪北,可以把矩陣乘開桐绒,含零的項就可以不寫到代碼中了(不過這樣犧牲了可讀性)
5,結(jié)語
后續(xù)的筆記再慢慢補充吧之拨!
如有錯誤歡迎指出