原理
卡爾曼濾波器是一種基礎預測定位算法。原理非常簡單易懂。核心過程可以用一個圖說明:
![](https://file1.elecfans.com//web2/M00/94/A5/wKgaomTl9puAGdi7AABSGQezAxI620.jpg)
本質上就是這兩個狀態過程的迭代,來逐步的準確定位。
預測:當前狀態環境下,對下一個時間段t的位置估計計算的值。
更新:更具傳感器獲取到比較準確的位置信息后來更新當前的預測問位置,也就是糾正預測的錯誤。
你可能要問為什么有傳感器的數據了還要進行更新?因為在現實世界中傳感器是存在很多噪聲干擾的,所以也不能完全相信傳感器數據。卡爾曼算法依賴于線性計算,高斯分布,我們以一維定位來介紹算法的實現。
![](https://file1.elecfans.com//web2/M00/94/A5/wKgaomTl9puAaKTuAAA9CEpMGEI542.jpg)
![](https://file1.elecfans.com//web2/M00/94/A5/wKgaomTl9puAVRPGAAAqtHOQo0A955.png)
接下來我們開更新,預測后我們獲取到傳感器數據,表示目前傳感器發現小車的位置應該是在26這個位置,在這種情況下,我們肯定是覺得傳感器的準確度比我之前的預測瞎猜要來的準確。
所以方差自然會比較小,最終我們覺得真是的小車位置應該是更靠近傳感器數據的,而且方差會縮小,以至于,想想也很清楚,我猜了一個預測值,現在有個專家告訴了我相對比較靠譜的數據,那我對小車的位置的自信度肯定會上升啊。
最終小車的位置經過這個時間段t的更新就是下圖紅色的高斯圖:
![](https://file1.elecfans.com//web2/M00/94/A5/wKgaomTl9puAcz2nAAB941nK9cw485.jpg)
就這樣不停的移動更新,最終小車的位置就會越來越準確。
一維模型下的Kalman公式:
預測
![](https://file1.elecfans.com//web2/M00/94/A5/wKgaomTl9pyAYSllAAAgzwT497s325.jpg)
更新
![](https://file1.elecfans.com//web2/M00/94/A5/wKgaomTl9pyAH5piAAAOhXX03Kw400.jpg)
![](https://file1.elecfans.com//web2/M00/94/A5/wKgaomTl9pyAXZZQAAAI67Vp6Is330.jpg)
參考代碼:
using namespace std;
double new_mean, new_var;
tuple<double, double> measurement_update(double mean1, double var1, double mean2, double var2)
{
new_mean = (var2 * mean1 + var1 * mean2) / (var1 + var2);
new_var = 1 / (1 / var1 + 1 / var2);
return make_tuple(new_mean, new_var);
}
tuple<double, double> state_prediction(double mean1, double var1, double mean2, double var2)
{
new_mean = mean1 + mean2;
new_var = var1 + var2;
return make_tuple(new_mean, new_var);
}
int main()
{
//Measurements and measurement variance
double measurements[5] = { 5, 6, 7, 9, 10 };
double measurement_sig = 4;
//Motions and motion variance
double motion[5] = { 1, 1, 2, 1, 1 };
double motion_sig = 2;
//Initial state
double mu = 0;
double sig = 1000;
for (int i = 0; i < sizeof(measurements) / sizeof(measurements[0]); i++) {
tie(mu, sig) = measurement_update(mu, sig, measurements[i], measurement_sig);
printf("update: [%f, %f] ", mu, sig);
tie(mu, sig) = state_prediction(mu, sig, motion[i], motion_sig);
printf("predict: [%f, %f] ", mu, sig);
}
return 0;
}
原文標題:基礎卡爾曼濾波
文章出處:【微信公眾號:機器視覺智能檢測】歡迎添加關注!文章轉載請注明出處。
審核編輯:湯梓紅
-
濾波器
+關注
關注
161文章
7860瀏覽量
178931 -
算法
+關注
關注
23文章
4630瀏覽量
93355 -
原理
+關注
關注
4文章
550瀏覽量
44971
發布評論請先 登錄
相關推薦
卡爾曼濾波器是什么
如何理解卡爾曼濾波器?卡爾曼濾波器狀態方程及測量方程
卡爾曼濾波器的特性及仿真
![<b class='flag-5'>卡爾</b><b class='flag-5'>曼</b><b class='flag-5'>濾波器</b>的特性及仿真](https://file1.elecfans.com/web2/M00/0A/C5/wKgZomcoQguAAeuwAAAAWwWCeQ0425.png)
評論