stateEstimatorPF

创建粒子滤波状态估计

描述

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

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

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

您可以将颗粒过滤器适用于任意的非线性系统模型。过程和测量噪声可以按照任意的非高斯分布。

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

创建

描述

例子

PF= stateEstimatorPF创建一个对象,该对象允许对具有三个状态变量的简单系统进行状态估计。使用初始化方法对已知均值和协方差的粒子进行初始化,或对粒子在限定范围内均匀分布进行初始化。自定义粒子滤波器的系统和测量模型,修改StateTransitionFcnMeasurementLikelihoodFcn属性。

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

属性

展开全部

此属性是只读的。

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

此属性是只读的。

使用在过滤器的颗粒数,指定为一个标量。您只能通过调用指定此属性初始化方法。

回调函数用于确定颗粒过滤器的步骤之间的状态转变,指定为功能句柄。状态转移函数演变每个粒子的系统状态。函数签名是:

功能predictParticles = stateTransitionFcn(PF,prevParticles,varargin)

回调函数至少接受两个输入参数stateEstimatorPF目的,PF,并在先前的时间步骤中的颗粒,prevParticles。这些指定的颗粒是predictParticles从对象的上一次调用返回。predictParticlesprevParticles大小相同:NumParticles-通过-NumStateVariables

你也可以使用变长度输入宗量在从参数的变量数传预测功能。您打电话的时候:

预测(PF,ARG1,ARG2)

MATLAB®本质上调用stateTranstionFcn为:

stateTransitionFcn(PF,prevParticles,ARG1,ARG2)

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

功能似然= measurementLikelihoodFcn(PF,predictParticles,测量,varargin)

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

  1. PF- 相关的stateEstimatorPF对象

  2. predictParticles- 即在当前时间步骤中大小的数组代表预测系统状态中的颗粒NumParticles-通过-NumStateVariables

  3. 测量- 在当前时间步骤中的状态测量

你也可以使用变长度输入宗量在参数可变数量通过。这些参数由传递正确的功能。您打电话的时候:

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

MATLAB是调用measurementLikelihoodFcn为:

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

回调需要返回一个输出,可能性,即给定的概率测量每个粒子的状态的假设。

指示器如果状态变量有一个圆形分布,指定为逻辑阵列。圆形(或角度)分布使用的概率密度函数与一系列的[-pi,PI]。如果对象有多个状态变量,然后IsStateVariableCircular是一个行向量。每个向量元素指示如果相关联的状态变量是圆形的。如果对象具有唯一的一个状态变量,则IsStateVariableCircular是一个标量。

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

方法用于颗粒重采样,指定为多项式的,'剩余的','分层'“系统”

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

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

颗粒重,指定为NumParticles×1向量。每个权重与该颗粒的相同的行中相关联的粒子财产。

此属性是只读的。

最好的状态估计,返回与长度的矢量NumStateVariables。的值提取估计值StateEstimationMethod财产。

此属性是只读的。

修正系统偏差,返回一个N-通过-N矩阵,其中N等于NumStateVariables财产。校正后的状态下,计算基于所述StateEstimationMethod财产和MeasurementLikelihoodFcn。如果指定不支持协方差的状态估计方法,则将属性设置为万博1manbetx[]

对象函数

初始化 初始化颗粒过滤器的状态
getStateEstimate 提取颗粒最好的状态估计和协方差
预测 预测在下一时间步骤机器人的状态
正确的 根据传感器测量调整状态估计

例子

全部收缩

创建一个stateEstimatorPF对象,并且执行用于状态估计的预测和校正步骤。颗粒过滤器给出了基于的返回值的预测状态估计StateTransitionFcn。然后,它修正基于给定的测量和返回值的状态MeasurementLikelihoodFcn

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

PF = stateEstimatorPF
属性:NumStateVariables: 3 NumParticles: 1000 StateTransitionFcn: @nav.algs的stateEstimatorPF。gaussianMotion MeasurementLikelihoodFcn: @nav.algs。恢复方法:“多项”状态估计方法:“平均”状态定向:“行”粒子:[1000x3双]权值:[1000x1双]状态:使用getStateEstimate函数来查看值。' 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] =正确(PF,[4.2 0.9 9]);

获取基础上,最好的状态估计StateEstimationMethod算法。

stateEst = getStateEstimate(PF)
stateEst =1×34.1562 0.9185 9.0202

使用stateEstimatorPF对象,因为它在2 d空间中移动以跟踪机器人。所测量的位置增加了随机噪声。运用预测正确的,根据测量结果和假设的运动模型跟踪机器人。

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

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(I,:),robotCov] =预测(PF);%与生成的随机噪声的点的测量。这是当量%至观察步骤。测量(I,:) =点(I,:) +噪声*(兰特([1 2]) - 噪声/ 2);根据给定的测量%正确的位置以获得最佳估计。%实际点位置不被使用。商店校正在数据阵列的位置。[robotCorrected(I,:),robotCov] =正确(PF,测量(ⅰ,:));结束

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

积(点(:,1),点(:,2),robotCorrected(:,1),robotCorrected(:,2),'要么')XLIM([0 T(端)])ylim([ -  1 1])图例(“实际位置”,“估计位置”)网格

该图显示了估计状态如何关闭机器人的实际位置相匹配。尝试调整颗粒的数目或指定一个不同的初始位置和协方差看它如何影响随着时间的推移追踪。

兼容性注意事项

展开全部

在未来的版本中行为改变

参考

[1] Arulampalam,M.S.,S. Maskell,N.戈登,和T.克拉普。“粒子教程过滤器的非线性/非高斯跟踪在线贝叶斯”。IEEE TRANSACTIONS ON信号处理。卷。50,第2号,2002年2月,第174-188。

[2]陈,Z.“贝叶斯过滤:从卡尔曼滤波器来筛选颗粒,及以后”统计数据。卷。182,第1号,2003,第1-69。

扩展功能

C / C ++代码生成
生成使用MATLAB®编码器™C和C ++代码。

介绍了R2016a