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...