卡爾曼濾波——19.卡爾曼濾波器代碼


我們寫一個主程序,包括兩個函數更新函數和預測函數,然后導入一系列測量和運動數據。

如果初始估計是5,非常好,但我們將其設置為mu=0,且不確定性非常高為sig=10000.

我們假設測量不確定性為常量4,運動不確定性為2.

運動時 你的第一次位置估計應該是4.9.原因在於初始不確定性高,第一次測量值5主導了估計結果。

你的不確定性縮減到了3,99

比測量不確定性稍好一點。

然后你的預測加1,但是不確定性增加到了5.99

也就是運動不確定性等於2,然后根據測量數據6 再次跟新 得到你的估計5.99

你再移動1 測量數據為7 你移動2 測量數據9 你移動1  測量數據10 最后移動1.

最后結果出來 該位置的預測為10.99

即你的位置10移動1  殘留不確定性為4.

# Write a program that will iteratively update and
# predict based on the location measurements 
# and inferred motions shown below. 

def update(mean1, var1, mean2, var2):
    new_mean = float(var2 * mean1 + var1 * mean2) / (var1 + var2)
    new_var = 1./(1./var1 + 1./var2)
    return [new_mean, new_var]

def predict(mean1, var1, mean2, var2):
    new_mean = mean1 + mean2
    new_var = var1 + var2
    return [new_mean, new_var]

measurements = [5., 6., 7., 9., 10.]
motion = [1., 1., 2., 1., 1.]
measurement_sig = 4.
motion_sig = 2.
mu = 0.
sig = 10000.

#Please print out ONLY the final values of the mean
#and the variance in a list [mu, sig]. 

# Insert code here
for n in range(len(measurements)):
[mu,sig]=update(mu,sig,measurements[n],measurement_sig)
print 'update:',[mu,sig]
[mu,sig]=predict(mu,sig,motion[n],motion_sig)
print 'predict:',[mu,sig] print [mu, sig]

這段代碼部署了整個卡爾曼濾波器,它檢查了所有測量元素 並默認,測量值的個數為運動的n次冪,它使用update 遞歸公式更新mu和sigma.  如果我們導入第n個測量值和測量不確定性,他會對運動進行同樣的操作,這里的預測部分,它使用第n個運動和運動不確定性遞歸地更新mu和sigma 並把這些全部打印出來。

以上就是一個完整的一維卡爾曼濾波。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM