我们写一个主程序,包括两个函数更新函数和预测函数,然后导入一系列测量和运动数据。

如果初始估计是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 并把这些全部打印出来。

以上就是一个完整的一维卡尔曼滤波。

 

posted on 2018-05-03 08:36  未完代码  阅读(1817)  评论(0编辑  收藏  举报