卡爾曼濾波法C程式設計

2022-03-15 13:52:35 字數 1126 閱讀 3286

float angle = 0.0;//卡爾曼濾波器的輸出值,最優估計的角度

//float gyro_x = 0.0;//卡爾曼濾波器的輸出值,最優估計的角速度

float q_angle = 0.001;//陀螺儀雜訊的協方差(估計過程的誤差協方差)

float q_gyro = 0.003;//陀螺儀漂移雜訊的協方差(估計過程的誤差協方差)

float r_angle = 0.5;//加速度計測量雜訊的協方差

float dt = 0.005;//積分時間,dt為濾波器取樣時間(秒)

char c_0 = 1;//h矩陣的乙個數

float q_bias = 0,angle_err = 0;//q_bias為陀螺儀漂移

float pct_0 = 0,pct_1 = 0,e = 0;//中間變數

float k_0 = 0,k_1 = 0,t_0 = 0,t_1= 0;//k是卡爾曼增益,t是中間變數

float pdot[4] = ;//計算p矩陣的中間變數

float pp[2][2] = ,};//公式中p矩陣,x的協方差

//gx...分別為重力加速度在三個軸向的分力 由加速度計測得

//ax...分別為角速度在三個軸向的角速度 由陀螺儀測得

//最後得到最終濾波完畢的x、y、z方向的角度值(°)

//呼叫下面的函式應該如下呼叫,使用atan2更為準確

//kalman_filter(gx,atan2(ay,sqrt(ax*ax+az*az))*1800/3.14);//與x軸角度

//kalman_filter(gx,atan(ay/sqrt(ax*ax+az*az))*1800/3.14);//與x軸角度

//三個方位具體帶入如下

//atan(sqrt(ax*ax+ay*ay)/z)*1800/3.14;

//atan(ay/sqrt(ax*ax+az*az))*1800/3.14;

//atan(ax/sqrt(ay*ay+az*az))*1800/3.14;

void kalman_filter(float gyro,float accel)//gyro陀螺儀的測量值,accel加速度計的角度計算值

卡爾曼 卡爾曼濾波 1

今天主要介紹一下卡爾曼濾波器,所謂卡爾曼濾波器其實是一種最優化遞迴數字處理演算法 optimal recursive data processing algorithm 卡爾曼濾波器應用 既然我們有了測量儀器,這些測量儀器可以目標給出準確測量值。還需要卡爾曼濾波器進行估計嗎?下面解釋一下為什麼需要卡...

卡爾曼 基礎卡爾曼濾波

卡爾曼濾波器是一種基礎 定位演算法。原理非常簡單易懂。核心過程可以用乙個圖說明 本質上就是這兩個狀態過程的迭代,來逐步的準確定位。更新 更具感測器獲取到比較準確的位置資訊後來更新當前的 問位置,也就是糾正 的錯誤。你可能要問為什麼有感測器的資料了還要進行更新?因為在現實世界中感測器是存在很多雜訊干擾...

卡爾曼濾波

卡爾曼濾波演算法 首先引入乙個離散控制過程的系統,用乙個線性隨機微分方程來描述 x k a x k 1 b u k w k 系統的測量值 z k h x k v k x k 是k時刻的系統狀態,u k 是k時刻對系統的控制量。a和b是系統引數,對於多模型系統,他們為矩陣。z k 是k時刻的測量值,h...