Kalman Filter學習筆記

2021-09-16 20:48:21 字數 3405 閱讀 5288

由於感測器本身的特性,任何測量結果都有誤差。因此需要在感測器測量結果的基礎上,進行跟蹤,以此來保證所觀測物體的資訊不會發生突變。這就需要用到經典跟蹤演算法——卡爾曼濾波器。

卡爾曼濾波器就是根據上一時刻的狀態,**當時時刻的狀態,將**的狀態與當時時刻的測量值進行加權,加權後的結果才認為是當前的實際狀態,而不是單單只是當前的測量值。

以下7個方程即為卡爾曼濾波器的理論描述:

** predication:

x ′=

fx+u

x' = fx + u

x′=fx+up′

=fpf

t+qp' = fpf^t + q

p′=fpf

t+q測量更新 measurement update:

y =z

−hx′

y = z - hx'

y=z−hx′k=

p′ht

(hp′

ht+r

)−1k = p'h^t(hp'h^t + r)^

k=p′ht

(hp′

ht+r

)−1x=x

′+ky

x = x' +ky

x=x′+kyp=

(i−k

h)p′

p=(i - kh)p'

p=(i−k

h)p′

接下來以飛行器追蹤小車為例,分析這7個方程的含義:

首先需要通過物理量對小車的狀態進行描述,小車相當於二維空間中的點,需要x,y方向上的座標,x,y方向上的速度,才能表示。這樣的狀態方程就有4個變數。

一、**:

1、x ′=

fx+u

x' = fx + u

x′=fx+

u x ′:

x':x′

:**狀態向量

f :f:

f:狀態轉移矩陣

u :u:

u:外部影響

x :x:

x:狀態向量

x = (1)[x

yvxv

y]\left[\begin x\\ y\\ v_x\\ v_y\\ \end\right]\tag

⎣⎢⎢⎡​x

yvx​

vy​​

⎦⎥⎥⎤

​(1)

假設當前小車運動為勻速運動,即加速度為0,加速度不會對**造成影響,即:

p:協方差矩陣,表示系統的不確定度

f :f:

f:在1中提到的狀態轉移矩陣

q :q:

q:過程雜訊,無法通過方程1表示的雜訊

由於攝像頭模組只能確定小車的位置,無法測量小車的速度,因此對於攝像頭模組來說,其位置資訊準確度較高,不確定度較低;速度資訊準確度較低,不確定度較高。

因此可以這樣確定p

p = [10

0001

1100

100000

0100

]\left[\begin 1&0&0&0\\ 0&1&1&1\\ 0&0&100&0\\ 0&0&0&100\\ \end\right]

⎣⎢⎢⎡​1

000​

0100

​011

000​

0101

00​⎦

⎥⎥⎤​

q在工程上一般設為單位矩陣參與運算,即

q = [10

0001

0000

1000

01]\left[\begin 1&0&0&0\\ 0&1&0&0\\ 0&0&1&0\\ 0&0&0&1\\ \end\right]

⎣⎢⎢⎡​1

000​

0100

​001

0​00

01​⎦

⎥⎥⎤​

二、觀測:

1、y =z

−hx′

y = z - hx'

y=z−hx

′ 該公式計算的是實際觀測值z同**值x』之間的差值y。

因為z是實際觀測值,只有x,y座標兩項。

而x『是**值,存在x,y,v_x,v_y四項。

所以需要狀態轉移矩陣h來將**值x』進行乙個轉換,使其能與實際觀察值z進行運算。

r:為測量雜訊矩陣,這個表示測量值與真值之間的差值。

k :k:

k:卡爾曼增益即上乙個公式y的權值

三、狀態量更新:

1、x =x

′+ky

x = x' +ky

x=x′+k

y 該公式完成了當前狀態向量的更新,綜合考慮了上一時刻的**值和當前時刻的測量值

2、p =(

i−kh

)p′p=(i - kh)p'

p=(i−k

h)p′i:

i:i:

與狀態向量同樣維度的單位矩陣

該公式根據卡爾曼增益,更新了系統的不確定度p,用於下乙個週期的計算

#include #include #include typedef struct

kalman_filter;

kalman_filter kal = ;//引數需要調節

kalman_filter *kq = &kal;

float kalman_filter_1(kalman_filter *kal)//一維卡爾曼濾波

void main()

}

舉例而言,r固定,q越大,代表越信任側量值,q無窮代表只用測量值;

反之,q越小代表越信任模型**值,q為零則是只用模型**。

引數的確定才是用好卡爾曼演算法的根本。

未完待續…

Kalman filter的個人理解

最近在做目標跟蹤相關的工作,看了很多資料,零零總總的,過段時間自己都有些小混亂了 不知道是不是自己應該吃點核桃補腦了呢 在這裡mark些資料,當腦容量不足時候,就暫且卸掉一些,擴充容量後,再繼續裝載 kalman filter,wiki上對它的介紹很詳細,對應中文的介紹 對每一步k,定義矩陣a,h,...

C Primer Chapter One學習筆記

筆記 1.流 從io裝置上讀入或寫出的字串行,用來說明字元隨時間順序生成或消耗。2.輸入輸出符可連用原因 operator 或operator 返回stream物件。3.要測試程式那個語句出錯,使用cout 4.新建乙個內建型別,如int i 0 最好先初始化,不然用到的時候沒初始化會產生奇怪的錯誤...

BroadcastReceiver學習筆記

需要注意 的是,不要在 onreceive 方法中新增過多的邏輯或者進行任何的耗時操作,因為在廣播接收 器中是不允許開啟執行緒的,當 onreceive 方法執行了較長時間而沒有結束時,程式就會報錯。有序broadcast,sendorderedbroadcast intent,null abort...