卡尔曼滤波器的特殊案例

重磅干货,第一时间送达

什么是卡尔曼滤波器?

卡阿尔曼滤波器为每个结果状态找到最佳的平均因子。另外,以某种方式保存过去的状态。它针对每个时间范围对变量执行联合概率分布。该算法对每个步骤使用新的均值和新方差,以便计算结果的不确定性,并尝试为测量更新(传感/预测)和运动更新(运动)的每个时间范围提供准确的测量。该算法还使用其他误差和统计噪声来表示初始的不确定性。

卡尔曼滤波器的目的:

· 将来自各种传感器(如LiDAR和Radar跟踪器)的数据输入转换为可用形式。计算和推断速度。

· 减少目标位置和速度的测量误差(噪声)。

· 使用先前的状态估计和新数据预测目标的未来状态。

· 简单,实用和可移植的算法。

· 估计一个连续状态和结果,卡尔曼滤波器给了我们一个单峰分布。

卡尔曼滤波器的工作

卡尔曼过滤为我们提供了一种数学方法,这种方法依据物体的初始位置和相关变量来推断物体之后的运动速度和状态。因此,在这里,我们将创建一个一维卡尔曼滤波器,设置初始位置,结合物体运动的不确定性,来估计物体未来的位置以及运动速度。此外,如果我们想了解卡尔曼滤波器的工作原理,我们首先需要了解一些有关高斯的知识,它代表卡尔曼滤波器中的单峰分布。

高斯是在位置空间上的连续函数,其下面的面积之和最多为1。高斯的特征在于两个参数,平均值,经常缩写为希腊字母μ,高斯的宽度通常被称为方差即σ ²。所以,我们常用平均值和方差来寻找对象的位置,获得最佳估计。另外,宽度越大,不确定性越大。

一维高斯方程

上图表示高斯的均值(μ)和方差(σ²)。平均值(μ)越高,物体在该位置出现的机会就越高。相反,如果方差(σ²)较大,即分布较宽,则该对象的不确定性较高;可以放置在高斯内部的任何位置。

就公式而言,它是二次函数的指数,我们取表达式的指数。我们的查询点x相对于平均值(μ)的二次方差,除以方差(σ²),乘以-(1/2)。现在,如果x =μ,则分子变为0,如果x为0,即1。事实证明,我们必须在2πσ²的平方根上对常数进行归一化处理。

高斯特性

高斯是其特征在于通过给定的指数函数平均值(μ),其限定了高斯曲线的峰值的位置,和一个方差(σ ²)限定曲线的宽度/扩散。所有高斯都是:对称的。它们具有一个峰(也称为“单峰”分布),并且在该峰的两侧均具有指数下降。

方差是高斯分布的度量;方差越大,对应的高斯越短。差异也是确定性的度量;如果试图找到最确定的位置,例如汽车的位置,则需要一个高斯函数,其均值是汽车的位置并且不确定性/传播范围最小。我们编写一个高斯函数:

from math import *import matplotlib.pyplot as pltimport numpy as np# gaussian functiondef f(mu, sigma2, x): ''' f takes in a mean and squared variance, and an input x and returns the gaussian value.''' coefficient = 1.0 / sqrt(2.0 * pi *sigma2) exponential = exp(-0.5 * (x-mu) ** 2 / sigma2)    return coefficient * exponential
改变均值

在卡尔曼滤波器中,我们迭代使用贝叶斯规则的测量(测量更新),贝叶斯规则仅是乘积或乘法,而运动更新(预测)则使用总概率(卷积或加法)进行迭代。

为了理解周期,我们假设我们正在对车辆进行定位并且我们有一个先验分布(蓝色高斯);这是一个非常宽泛的高斯平均值。现在,我们得到一个测量值(橙色高斯),它告诉我们有关车辆定位的信息。这是我们之前的一个例子,我们对位置不确定,但测量结果告诉我们有关车辆的位置信息。

事先分配和测量分配

注意:在上图中,Mu(μ)是先前的均值,Nu(v) 是新的测量均值。最终均值在两个旧均值,先验均值和测量均值之间移动。在测量方面,它要稍远一些,因为与以前相比,该测量可以更确定地确定车辆的位置。我们越确定,就越会在确定答案的方向上拉均值。

新高峰在哪里?

所得的高斯比两个分量的高斯更确定,即协方差小于设备中两个协方差中的任一个。直观上来说,是因为我们实际上获得了位置信息。在任一高斯装置中,这两个高斯都具有较高的信息量。

测量更新的公式

1.假设我们按照贝叶斯规则将两个高斯乘以一个先验概率和一个测量概率。先验的均值为Mu (μ),且为σ²,方差为Nu (v),协方差为r-square (r²)。

2. 然后,新的均值Mu prime (μ')是旧均值的加权和。Mu (μ)由r平方(r²)加权,Nu (v)由Sigma平方(σ²)加权,并由加权因子之和标准化。新的方差项将是Sigma平方素数(σ²')。

3. 显然,先验的高斯不确定性要高得多,因此σ²更大,这意味着Nu(v)的权重比Mu (μ)大得多。需要注意的是,方差项不受实际方法的影响,它仅使用以前的方差。

def update(mean1, var1, mean2, var2): ''' This function takes in two means and two squared variance terms, and returns updated gaussian parameters.''' #Calculate the new parameters new_mean = (var2*mean1 + var1*mean2)/(var2+var1) new_var = 1/(1/var2 + 1/var1)

高斯运动:

运动更新的公式

新的均值(μ')是旧均值Mu (μ)加上u的运动。因此,如果在x方向上移动了10米,那么它就是10米,并且知道σ²'是旧σ²加上运动高斯的方差(r²)。这就是我们所需要知道的,仅仅是补充。在预测步骤中得到的高斯只是将这两件事加起来,即mu(μ)加u和σ²加方差(r²)。

def predict(mean1, var1, mean2, var2): ''' This function takes in two means and two squared variance terms, and returns updated gaussian parameters, after motion.''' #Calculate the new parameters new_mean = mean1 + mean2 new_var = var1 + var2 return [new_mean, new_var]

过滤器管道:

# measurements for mu and motions, Umeasurements = [5., 6., 7., 9., 10.]motions = [1., 1., 2., 1., 1.] # initial parametersmeasurement_sig = 4.motion_sig = 2.mu = 0.sig = 10000.  #0000000001 ## TODO: Loop through allmeasurements/motions## Print out and display the resultingGaussian# your code herefor i in range(len(measurements)): #measurement update, with uncertainty mu, sig = update(mu, sig, measurements[i], measurement_sig) print('Update: [{}, {}]'.format(mu, sig)) #motion update, with uncertainty mu, sig = predict(mu, sig, motions[i], motion_sig)   print('Predict: [{}, {}]'.format(mu, sig))   # print the final, resultant mu, sigprint('\n')print('Final result: [{}, {}]'.format(mu,sig))

·现在,我们将所有内容放在一起编写一个具有这两个功能的主程序,进行更新和预测,并馈入一系列测量和运动。选择的示例中,测量值= 5,6,7,9,10,运动是1,1,2,1,1。如果初始估算为5,但我们将其设置为0,不确定性为10,000。

·假设测量不确定度为常数4,运动不确定度为常数2。运行该变量时,位置的第一个估算值基本上应为5–4.99,原因是初始不确定性太大,因此估算值占主导地位通过第一次测量。不确定性减少到3.99,这比测量不确定性要好一些。然后,预测将增加1,但是不确定性增加到5.99,这是运动不确定性2。

·再次基于度量6更新,得到的估计值为5.99,几乎是6。再次移动1。测量了7。移动了2.测量了9.移动了1.测量了10,然后移动了最终1。结果作为最终结果,该位置的预测为10.99,即10位置移动了1 ,以及不确定性(残余不确定性)4。

绘制高斯:

## Print out and display the final,resulting Gaussian# set the parameters equal to the output ofthe Kalman filter resultmu = musigma2 = sig # define a range of x valuesx_axis = np.arange(-20, 20, 0.1)# create a corresponding list of gaussianvaluesg = []for x in x_axis:g.append(f(mu, sigma2, x))# plot the resultplt.plot(x_axis, g)
过滤器的实际工作方式

请记住,在测量更新中,measurement_sig(var2或σ²)= 4,在运动更新(预测)中,motion_sig(var2或σ²)= 2将保持恒定。除此之外,代码中的每个变量都会在每个时间步更新。例如,在过滤器管道的for循环中,mu和sig值将在测量更新中得到更新,然后将新的更新的mu和sig值输入到运动更新(预测)功能中。然后再次通过运动更新(预测)功能生成新值时,将这些更新后的值输入到测量更新(更新)功能中,循环继续进行,直到为车辆/物体的每个时间步长计算不确定性为止。

下载1:OpenCV-Contrib扩展模块中文版教程
(0)

相关推荐

  • 【强基固本】卡尔曼滤波器

    转载来源:https://longaspire.github.io/blog/卡尔曼滤波/ Kalman Filter (KF) 是一个高效的递归滤波器,它可以实现从一系列的噪声观测中,估计动态系统的 ...

  • 【译】图解卡尔曼滤波(Kalman Filter)

    译者注:这恐怕是全网有关卡尔曼滤波最简单易懂的解释,如果你认真的读完本文,你将对卡尔曼滤波有一个更加清晰的认识,并且可以手推卡尔曼滤波.原文作者使用了漂亮的图片和颜色来阐明它的原理(读起来并不会因公式 ...

  • 道路识别算法详解

    本文详细描述了当前代码中(git 版本: 16b521b12d2e3bdc00bd996acafe4526f1d1cb9a)道路识别的算法. 如果没有特殊说明,下文中所说的"算法" ...

  • 【SLAM】卡尔曼滤波:究竟滤了谁?

    在SLAM系统中,后端优化部分有两大流派. 一派是基于马尔科夫性假设的滤波器方法,认为当前时刻的状态只与上一时刻的状态有关.另一派是非线性优化方法,认为当前时刻状态应该结合之前所有时刻的状态一起考虑. ...

  • 面向软件工程师的卡尔曼滤波器

    与我的朋友交谈时,我经常听到:"哦,卡尔曼(Kalman)滤波器--我经常学它,然后我什么都忘了".好吧,考虑到卡尔曼滤波器(KF)是世界上应用最广泛的算法之一(如果环顾四周,你8 ...

  • 卡尔曼滤波器:用R语言中的KFAS建模时间序列

    原文链接:http://tecdat.cn/?p=6762 时间序列预测,ARIMA等传统模型通常是一种流行的选择.虽然这些模型可以证明具有高度的准确性,但它们有一个主要缺点 - 它们通常不会解释&q ...

  • 【泡泡图灵智库】基于实时无迹卡尔曼滤波器的自主式水下航行器

    泡泡图灵智库,带你精读机器人顶级会议文章 标题:A real-time unscented Kalman fifilter on manifolds for challenging AUV navig ...

  • 经典重温:卡尔曼滤波器介绍与理论分析

    最近业余在研究物体追踪,看到传统的方法用到了卡尔曼滤波(Kalman Filter)+匈牙利算法做轨迹匹配,因而开始研究这两种算法是如何实现的.这里简单总结一下卡尔曼滤波算法探索的过程. ▊ 卡尔曼滤 ...

  • 状态空间模型:卡尔曼滤波器KFAS建模时间序列

    原文链接:http://tecdat.cn/?p=6762 1 时间序列 时间序列是指同一种现象在不同时间上的相继观察值排列而成的一组数字序列.统计学上,一个时间序列即是一个随机过程的实现.时间序列按 ...

  • 低温漂和零温漂滤波器解决温漂困扰【案例分析】

    电子万花筒平台核心服务 电子元器件:价格比您现有供应商最少降低10% 射频微波天线新产品新技术发布平台:让更多优秀的国产射频微波产品得到最好的宣传!发布产品欢迎联系管理,专刊发布!强力曝光! 1.  ...

  • 经方治疗淋巴癌化療後肝區痛案例

    ◎9-16-2008初診 A.W.C婦人, 61歲,B型肝炎病史,2007年9月發現淋巴癌,六次化療後,出現右脅下持續性尖銳刺痛,左脅間斷刺痛,肝功能指數.病毒數量飆高,四肢未稍麻痛,半夜2點必醒,須 ...

  • 血癌案例—精彩的人紀班學生的診療案例

    初診11-11-2008 J.L. 53歲男性, 2008年1月,西醫診斷為血癌(白血病),查白血球高達6萬.自三月起口服第二代抗血癌新藥(nilotinib),副作用為傷害心臟,三年之間,大約十人, ...