版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
/***************************************************************************/
/*kalman.c
*/
/*1-DKalmanfilterAlgorithm,usinganinclinometerandgyro
*/
/*Author:RichChiOoi
*/
/*Version:1.0
*/
/*Date:30.05.2003
*/
/*AdaptedfromTrammelHudson(hudson@)
*/
/*-------------------------------
*/
/*Compilation
procedure:
*/
/*
Linux
*/
/*
gcc68-c
XXXXXX.c(tocreateobjectfile)
*/
/*
gcc68-o
XXXXXX.hexXXXXXX.oppwa.o
*/
/*Uploaddata:
*/
/*ulfilename.txt
*/
/***************************************************************************/
/*Inthisversion:
*/
/***************************************************************************/
/*Thisisafreesoftware;youcanredistributeitand/ormodify
*/
/*itunderthetermsoftheGNUGeneralPublicLicenseaspublished
*/
/*bytheFreeSoftwareFoundation;eitherversion2oftheLicense,
*/
/*or(atyouroption)anylaterversion.
*/
/*
*/
/*thiscodeisdistributedinthehopethatitwillbeuseful,
*/
/*butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof
*/
/*MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.
Seethe
*/
/*GNUGeneralPublicLicenseformoredetails.
*/
/*
*/
/*YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense
*/
/*alongwithAutopilot;ifnot,writetotheFreeSoftware
*/
/*Foundation,Inc.,59TemplePlace,Suite330,Boston,
*/
/*MA
02111-1307
USA
*/
/***************************************************************************/
#include<math.h>
#include"eyebot.h"
/*
*Thestateisupdatedwithgyroratemeasurementevery20ms
*changethisvalueifyouupdateatadifferentrate.
*/
staticconstfloatdt=0.02;
/*
*Thecovariancematrix.Thisisupdatedateverytimestepto
*determinehowwellthesensorsaretrackingtheactualstate.
*/
staticfloatP[2][2]={{1,0},
{0,1}};
/*
*Ourtwostates,theangleandthegyrobias.Asabyproductofcomputing
*theangle,wealsohaveanunbiasedangularrateavailable.Theseare
*read-onlytotheuserofthemodule.
*/
floatangle;
floatq_bias;
floatrate;
/*
*TheRrepresentsthemeasurementcovariancenoise.R=E[vvT]
*Inthiscase,itisa1x1matrixthatsaysthatweexpect
*0.1radjitterfromtheinclinometer.
*fora1x1matrixinthiscasev=0.1
*/
staticconstfloatR_angle=0.001;
/*
*Qisa2x2matrixthatrepresentstheprocesscovariancenoise.
*Inthiscase,itindicateshowmuchwetrusttheinclinometer
*relativetothegyros.
*/
staticconstfloatQ_angle=0.001;
staticconstfloatQ_gyro
=0.0015;
/*
*state_updateiscalledeverydtwithabiasedgyromeasurement
*bytheuserofthemodule.
Itupdatesthecurrentangleand
*rateestimate.
*
*Thepitchgyromeasurementshouldbescaledintorealunits,but
*doesnotneedanybiasremoval.
Thefilterwilltrackthebias.
*
*
A=[0-1]
*
[0
0]
*/
voidstateUpdate(constfloatq_m){
Angle_err=Accel-Angle; PCt_0=C_0*PP[0][0]; PCt_1=C_0*PP[1][0]; E=R_angle+C_0*PCt_0; K_0=PCt_0/E; K_1=PCt_1/E; t_0=PCt_0; t_1=C_0*PP[0][1]; PP[0][0]-=K_0*t_0; PP[0][1]-=K_0*t_1; PP[1][0]-=K_1*t_0; PP[1][1]-=K_1*t_1; Angle +=K_0*Angle_err; Q_bias +=K_1*Angle_err; Gyro_x=Gyro-Q_bias; }首先是卡爾曼濾波的5個方程X(k|k-1)=AX(k-1|k-1)+BU(k)………..(1)//先驗估計P(k|k-1)=AP(k-1|k-1)A’+Q………(2)//協(xié)方差矩陣的預測Kg(k)=P(k|k-1)H’/(HP(k|k-1)H’+R)………(3)//計算卡爾曼增益X(k|k)=X(k|k-1)+Kg(k)(Z(k)-HX(k|k-1))………(4)通過卡爾曼增益進行修正P(k|k)=(I-Kg(k)H)P(k|k-1)………(5)//跟新協(xié)方差陣5個式子比較抽象,現(xiàn)在直接用實例來說—,對于角度來說,我們認為此時的角度可以近似認為是上一時刻的角度值加上上一時刻陀螺儀測得的角加速度值乘以時間,因為,角度微分等于時間的微分乘以角速度。但是陀螺儀有個靜態(tài)漂移(而且還是變化的),靜態(tài)漂移就是靜止了沒有角速度然后陀螺儀也會輸出一個值,這個值肯定是沒有意義的,計算時要把它減去。由此我們得到了當前角度的預測值AngleAngle=Angle+(Gyro-Q_bias)*dt;其中等號左邊Angle為此時的角度,等號右邊Angle為上一時刻的角度,Gyro為陀螺儀測的角速度的值,dt是兩次濾波之間的時間間隔。floatdt=0.005; 這是程序中的定義同時Q_bias也是一個變化的量。但是就預測來說認為現(xiàn)在的漂移跟上一時刻是相同的即Q_bias=Q_bias將兩個式子寫成矩陣的形式得到上式,這個式子對應于卡爾曼濾波的第一個式子X(k|k-1)=AX(k-1|k-1)+BU(k)………..(1)//先驗估計X(k|k-1)為2維列向量,A為2維方陣,X(k-1|k-1)為2維列向量,B為2維列向量,U(k)為Gyro二,這里是卡爾曼濾波的第二個式子接著是預測方差陣的預測值,這里首先要給出兩個值,一個是漂移的噪聲,一個是角度值的噪聲,(所謂噪聲就是數(shù)據(jù)的方差值)P(k|k-1)=AP(k-1|k-1)A’+Q這里的Q為向量的協(xié)方差矩陣,即因為漂移噪聲還有角度噪聲是相互獨立的,則=0;=0又由性質(zhì)可知cov(x,x)=D(x)即方差,所以得到的矩陣如下,這里的兩個方差值是開始就給出的常數(shù)程序中的定義如下floatQ_angle=0.001;floatQ_gyro=0.003; 接著是這一部分AP(k-1|k-1)A’,其中的(P(k-1)|P(k-1))為上一時刻的預測方差陣卡爾曼濾波的目標就是要讓這個預測方差陣最小。其中P(k-1|k-1)設為,第一式已知A為 則計算AP(k-1|k-1)A’+Q(就是個矩陣乘法和加法,算算吧)結(jié)果如下很小為了計算簡便忽略不計。于是得到a,b,c,d分別和矩陣的P[0][0],P[0][1],P[1][0],P[1][1]計算過程轉(zhuǎn)化為如下程序,代換即可Pdot[0]=Q_angle-PP[0][1]-PP[1][0]; Pdot[1]=-PP[1][1]; Pdot[2]=-PP[1][1]; Pdot[3]=Q_gyro; PP[0][0]+=Pdot[0]*dt; PP[0][1]+=Pdot[1]*dt; PP[1][0]+=Pdot[2]*dt; PP[1][1]+=Pdot[3]*dt;三,這里是卡爾曼濾波的第三個式子Kg(k)=P(k|k-1)H’/(HP(k|k-1)H’+R)………(3)//計算卡爾曼增益即計算卡爾曼增益,這是個二維向量設為,這里的=為由此kg=P(K|K-1)+R,這里又有一個常數(shù)R,程序中的定義如下floatR_angle=0.5;這個指的是角度測量噪聲值,則式子的分母=P[0][0]+R_angle即程序中的 PCt_0=C_0*PP[0][0]; PCt_1=C_0*PP[1][0]; E=R_angle+C_0*PCt_0;分子 于是求出 K_0=PCt_0/E; K_1=PCt_1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 打贏疫情防控阻擊戰(zhàn)(超星集團)學習通測試及答案
- 【名師一號】2020-2021學年高中英語北師大版必修4-雙基限時練16
- 【優(yōu)教通】2021年高一生物同步練習:3章-細胞的結(jié)構(gòu)和功能-測試1(蘇教版必修1)-
- 2022高考英語暑假閱讀理解講練(21)及答案
- 【2022屆走向高考】高三數(shù)學一輪(北師大版)專題1-高考中的導數(shù)應用問題
- 【9語一模】2024年蚌埠市懷遠縣中考一模語文試題
- 浙江省湖州市長興中學等四校2024-2025學年高一上學期12月聯(lián)考數(shù)學試題(含解析)
- 【名師伴你行】2021屆高考生物二輪復習專題提能專訓4細胞的生命歷程
- 第九課糾紛的多元解決方式單元測試(含解析)-2024-2025學年高中政治統(tǒng)編版選擇性必修二法律與生活
- 幼兒園年度教育教學工作總結(jié)范本
- 高效復習+期末動員+高二上學期考前動員主題班會
- 美術(shù)年終總結(jié)匯報
- 鉛鋅礦資源的勘查與儲量評估
- 數(shù)字孿生技術(shù)與MES系統(tǒng)的融合
- 人才梯隊(人才庫、人才盤點)建設方案
- 非遺傳統(tǒng)手工藝教學總結(jié)
- 廣西柳州市2023-2024學年四年級上學期期末考試語文試卷
- 《芯片制造工藝》課件
- 中山大學研究生中特考試大題
- 2023全國重點高中自主招生考試數(shù)學試卷大全
- 問題樓盤輿情應急預案范文
評論
0/150
提交評論