(一)C語言嵌入式開發微控制器通用KALMAN濾波

2021-09-12 18:43:38 字數 1753 閱讀 6911

一直以來用過很多次kalman濾波,沒有進行系統的總結,本次筆記將對此進行從原理到推導到**實現及應用進行總結和分析,闡述一些個人使用的觀點。首先,了解該濾波的原理及使用場景和應用範疇,然後,說明使用此濾波要達到的目的,之後,**中如何加入該濾波模組及其調節增益,最後分析其帶來的優缺點。

原理:kalman濾波器是一種線性的離散時間的有限維系統。卡爾曼濾波器由一系列遞迴數學公式描述。它們提供了一種高效可

計算的方法來估計過程的狀態,並使估計均方誤差最小。卡爾曼濾波器應用廣泛且功能強大:它可以估計訊號的過去和當前狀態,甚至能估計將來的狀態,即使並不知道模型的確切性質。卡爾曼濾波是以最小均方誤差為估計的最佳準則,來尋求一套遞推估計的演算法,其基本思想是:採用訊號與雜訊的狀態空間模型,利用前一時刻地估計值和現時刻的觀測值來更新對狀態變數的估計,求出現時刻的估計值。

描述狀態向量的過程方程,引入乙個離散控制過程的系統。可用乙個線性隨機微分方程來描述:x(k)=a x(k-1)+b u(k)+w(k);

式中,向量x(k-1)表示系統在離散時間k-1的狀態向量,它是不可觀測的;矩陣a成為狀態轉移矩陣,描述動態系統在時間k-1的狀態到k的狀態之間的轉移,應為已知。而向量b代表可選的控制輸入的增益。w即為狀態轉移中間的雜訊或誤差即過程激勵雜訊。

描述觀測向量的觀測方程:z(k)=h x(k)+v(k),h為觀測矩陣,描述狀態經過作用,變成可**的;應為已知。

一般情況下,在理論推導和原理說明時,假設雜訊均為零均值的正態分佈的白雜訊。其簡單推導可以有以下公式來依次展現:

x(k|k-1)=a x(k-1|k-1)+b u(k)   通過上一狀態來**當前狀態;

p(k|k-1)=a p(k-1|k-1) a』+q      協方差更新

x(k|k)= x(k|k-1)+kg(k)(z(k)-h x(k|k-1))  當前狀態的最優估計值

k(k)= p(k|k-1)h/(h p(k|k-1)h+r)   kalman增益,通過調整此值改變使濾波收斂的速度

p(k|k)=(i-kg(k) h)p(k|k-1)  更新當前狀態下的協方差

使用場景和應用範疇:一般用於有狀態變換的情景,如機械人的狀態估計,雷射雷達的前後幀資料過濾,自平衡機械人的角度和速度的前後幀的資料過濾,閉環控制系統,自動路徑規劃和導航,影象處理(rgb影象、深度影象、點雲影象,灰度影象等)。

目的:一般情況下使用kalman濾波要實現在動態系統的執行過程中減少雜訊造成的干擾,在閉環系統中,使系統處於穩定狀態。換句話說,就是通過當前測量值**估計其它變數可能的值,最大程度的提煉有用的資訊在當前獲得的不確定性的測量資料中。

通過c語音來進行示例kalman濾波的簡單通用模組,體現它是如何去除雜訊使系統穩定的。

float angle, angle_dot; 		

float q_angle=0.001, q_gyro=0.003, r_angle=0.5, dt=0.006;

float p[2][2] = ,};

float pdot[4] =;

const char c_0 = 1;

float q_bias, angle_err, pct_0, pct_1, e, k_0, k_1, t_0, t_1;

void kalman_filter(float angle_m,float gyro_m) //mpu6050

kalman 的缺點和優點:非線性非高斯的模型下不能達到理想的效果(此類情況一般使用適用於自己場景的自適應濾波器,例如粒子濾波器等);以線性狀態方程為條件,通過觀測資料,對系統的狀態進行最優估計,實現閉環遞迴操作。

嵌入式 微控制器成長開發之路

作為乙個畢業3個多月的職場新人,我輾轉到微控制器開發這條道路上。本科學習的是電腦科學與技術,現在的目標是成為一名全棧式嵌入式開發者。我深知,要想在這個行業有所建樹,大學學習的知識與經驗是完全不足的,需要花費更多時間和精力去學習軟體知識和硬體知識,才或許可以勉強成為本行業的入門者。這條路,走起來一定不...

C語言和組合語言開發微控制器

組合語言是一種用文字助記符來表示機器指令的符號語言,是最接近機器碼的一種語言。其主要優點是占用資源少 程式執行效率高。但是不同的 cpu,其組合語言可能有所差異,所以不易移植。c 語言是一種結構化的高階語言。其優點是可讀性好,移植容易,是普遍使用的一種計算機 語言。缺點是占用資源較多,執行效率沒有彙...

從微控制器到嵌入式

1 什麼是微控制器?微控制器是乙個控制系統,接收管腳中斷輸入,進行一些簡單的邏輯操作,對記憶體或flash進行訪問,再輸出到管腳 2 什麼是嵌入式?嵌入式有linux核心 linux核心功能有 程序管理 記憶體管理 檔案系統管理 裝置驅動 網路管理 3 微控制器和嵌入式有什麼共同點?都是靠中斷驅動,...