主要内容

stateEstimatorPF

创建粒子滤波器状态估计器

描述

stateEstimatorPF对象是一个递归的贝叶斯状态估计器,它使用离散粒子来近似估计状态的后验分布。

粒子滤波算法递归计算状态估计,包括两个步骤:预测和修正。预测步骤根据给定的系统模型,使用前一个状态来预测当前状态。修正步骤使用电流传感器测量来修正状态估计。该算法周期性地重新分布或重新采样状态空间中的粒子,以匹配估计状态的后验分布。

估计的状态由状态变量组成。每个粒子代表这些状态变量的一个离散状态假设。所有粒子的集合被用来帮助确定最终的状态估计。

你可以将粒子滤波器应用于任意非线性系统模型。过程噪声和测量噪声可以遵循任意的非高斯分布。

有关粒子过滤器工作流程和设置具体参数的更多信息,请参见:

创建

描述

例子

pf= stateEstimatorPF创建一个对象,该对象支持使用三个状态变量的简单系统的状态估计。使用初始化方法初始化粒子与一个已知的平均值和协方差或均匀分布粒子在定义的界限。要定制粒子过滤器的系统和测量模型,请修改StateTransitionFcnMeasurementLikelihoodFcn属性。

创建对象后,使用初始化初始化NumStateVariablesNumParticles属性。的初始化函数根据您的输入设置这两个属性。

属性

全部展开

此属性是只读的。

状态变量的数量,指定为标量。属性的输入设置此属性初始化方法。状态数是隐式的,基于初始状态和协方差的指定矩阵。

此属性是只读的。

在过滤器中使用的粒子数,指定为标量。属性可以指定此属性初始化方法。

用于确定粒子筛选步骤之间的状态转换的回调函数,指定为函数句柄。状态转移函数演化每个粒子的系统状态。函数签名为:

函数predictParticles = stateTransitionFcn (pf、prevParticles变长度输入宗量)

回调函数至少接受两个输入参数stateEstimatorPF对象,pf,和上一个时间步长的粒子,prevParticles.这些特定的粒子是predictParticles从对象的前一个调用返回。predictParticlesprevParticles大小相同:NumParticles——- - - - - -NumStateVariables

你也可以用变长度输入宗量的参数传入数量可变的参数预测函数。当你调用:

预测(pf、__arg1最长)

MATLAB®本质上调用stateTranstionFcn为:

stateTransitionFcn (pf、prevParticles __arg1、最长)

计算传感器测量的可能性的回调函数,指定为函数句柄。一旦传感器测量可用,这个回调函数计算测量与每个粒子的状态假设一致的可能性。您必须基于度量模型实现此功能。函数签名为:

函数可能性= measurementLikelihoodFcn (PF、predictParticles、测量、变长度输入宗量)

回调函数至少接受三个输入参数:

  1. pf——相关的stateEstimatorPF对象

  2. predictParticles-表示当前时间步长的预测系统状态的粒子,以大小数组表示NumParticles——- - - - - -NumStateVariables

  3. 测量—当前时间步长的状态度量值

你也可以用变长度输入宗量传入数量可变的参数。这些参数由正确的函数。当你调用:

正确的(pf、测量、__arg1最长)

MATLAB是调用measurementLikelihoodFcn为:

measurementLikelihoodFcn (pf predictParticles、测量、__arg1最长)

回调只需要返回一个输出,可能性,这是给定的可能性测量对于每个粒子状态假设。

指示器,如果状态变量有一个循环分布,指定为一个逻辑数组。圆形(或角)分布使用一个范围为的概率密度函数(π-π,).如果对象有多个状态变量,那么IsStateVariableCircular是一个行向量。每个向量元素指示关联的状态变量是否是循环的。如果对象只有一个状态变量,那么IsStateVariableCircular是一个标量。

确定何时触发重采样的策略设置,指定为对象。你可以在固定的时间间隔触发重采样,也可以根据有效粒子的数量动态触发重采样。看到resamplingPolicyPF为更多的信息。

用于粒子重采样的方法,规定为多项式的“残留”“分层”,“系统”

用于状态估计的方法,指定为“的意思是”“maxweight”

粒子值数组,指定为NumParticles——- - - - - -NumStateVariables矩阵。每一行对应一个粒子的状态假设。

粒子重量,指定为NumParticles1的向量。每个重量与粒子在同一行粒子财产。

此属性是只读的。

最佳状态估计,返回为带有长度的向量NumStateVariables.估计是基于StateEstimationMethod财产。

此属性是只读的。

修正的系统方差,返回为N——- - - - - -N矩阵,N等于NumStateVariables财产。修正后的状态是基于StateEstimationMethod财产和MeasurementLikelihoodFcn.如果指定不支持协方差的状态估计方法,则将该属性设置为万博1manbetx[]

对象的功能

初始化 初始化粒子过滤器的状态
getStateEstimate 从粒子中提取最佳状态估计和协方差
预测 预测机器人在下一时刻的状态
正确的 调整基于传感器测量的状态估计

例子

全部折叠

创建一个stateEstimatorPF对象,并执行状态估计的预测和校正步骤。粒子滤波器根据的返回值给出一个预测状态估计StateTransitionFcn.然后,它根据给定的度量值和返回值来修正状态MeasurementLikelihoodFcn

创建一个粒子过滤器,默认三种状态。

pf = stateEstimatorPF
NumStateVariables: 3 NumParticles: 1000 stattransitionfcn: @nav.algs. pf = statestimatorpf属性:NumStateVariables: 3gaussianMotion MeasurementLikelihoodFcn: @nav.algs。fullstatmeasurement isstatevariableccircular: [0 00] ResamplingPolicy: [1x1 resamplingpolicyypf] ResamplingMethod: 'multinomial' StateEstimationMethod: 'mean' StateOrientation: 'row' Particles: [1000x3 double] Weights: [1000x1 double] State: 'Use the getStateEstimate function to see the value.'StateCovariance: '使用getStateEstimate函数查看值。'

给出了平均状态估计方法和系统重采样方法。

pf.StateEstimationMethod =“的意思是”;pf.ResamplingMethod =“系统”

用单位协方差初始化状态[4 1 9]的粒子滤波器((3)).使用5000个粒子。

初始化(pf, 5000,(4 1 9),眼(3));

假设一个测量[4.2 0.9 9],运行一个预测和一个正确的步骤。

[statePredicted, stateCov] =预测(pf);[stateCorrected,stateCov] = correct(pf,[4.2 0.9 9]);

得到最佳状态估计基于StateEstimationMethod算法。

状态= getStateEstimate (pf)
状态=1×34.1562 0.9185 9.0202

使用stateEstimatorPF物体来跟踪在二维空间中移动的机器人。测量位置添加了随机噪声。使用预测正确的,根据测量和假设的运动模型跟踪机器人。

初始化粒子滤波并指定默认状态转移函数、测量似然函数和重采样策略。

pf = stateEstimatorPF;pf.StateEstimationMethod =“的意思是”;pf.ResamplingMethod =“系统”

样本1000个粒子,初始位置为[0 0],单位协方差。

初始化(pf, 1000年,[0 0],眼(2));

在估计之前,定义一个正弦波路径让点跟随。创建一个数组来存储预测和估计的位置。定义噪声的振幅。

t = 0:0.1:4 *π;点= [t;罪(t)];robotPred = 0(长度(t), 2);robotCorrected = 0(长度(t), 2);噪音= 0.1;

开始循环预测和修正基于测量的估计位置。粒子的重采样是基于ResamplingPolicy财产。机器人的运动基于一个正弦波函数,测量中加入了随机噪声。

i = 1:长度(t)预测下一个位置。必要时重新取样。[robotPred(我,:),robotCov] =预测(pf);生成带有随机噪声的点测量。这是%等于观察步长。测量(我:)=点(我:)+噪声*(兰德([1 - 2])噪声/ 2);根据给定的测量值正确定位,以得到最佳的估计。%没有使用实际的点位置。在数据数组中存储正确的位置。[robotCorrected(我,:),robotCov] =正确(pf、测量(我,:));结束

绘制实际路径和估计位置。由于粒子分布的随机性,实际结果可能会有所不同。

情节(点(:1),点(:,2),robotCorrected (: 1), robotCorrected (:, 2),”或“) xlim([0 t(end)]) ylim([-1 1]) legend(的实际位置“估计位置”网格)

图中包含一个轴对象。轴对象包含两个类型为line的对象。这些物体代表实际位置,估计位置。

图中显示了估计状态与机器人实际位置的匹配程度。尝试调整粒子数量或指定不同的初始位置和协方差,以查看它如何影响随时间的跟踪。

兼容性的考虑

全部展开

未来版本中的行为改变

参考文献

Arulampalam, m.s., S. Maskell, N. Gordon和T. Clapp。粒子过滤器在线非线性/非高斯贝叶斯跟踪教程IEEE信号处理汇刊。第50卷第2期2002年2月174-188页。

[2], Z。贝叶斯滤波:从卡尔曼滤波到粒子滤波,以及其他统计数据.第182卷,第1期,2003年,1-69页。

扩展功能

C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。

介绍了R2016a