stateEstimatorPF

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

描述

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

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

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

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

有关粒子过滤器工作流和设置特定参数的详细信息,请参见:

创建

描述

例子

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

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

属性

全部展开

此属性是只读的。

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

此属性是只读的。

筛选器中使用的粒子数,指定为标量。只能通过调用初始化方法。

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

作用predictParticles = stateTransitionFcn (pf、prevParticles变长度输入宗量)

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

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

预测(pf、arg1、arg2)

MATLAB®本质上调用stateTranstionFcn为:

stateTransitionFcn (pf、prevParticles __arg1、最长)

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

作用可能性=测量可能性FCN(PF,预测粒子,测量,变精)

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

  1. pf–相关的stateEstimatorPF对象

  2. predictParticles-表示当前时间步长的预测系统状态的粒子,以大小数组表示微粒-借-numstate变量

  3. 测量–当前时间步的状态测量

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

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

MATLAB是调用measurementLikelihoodFcn为:

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

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

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

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

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

用于状态估计的方法,指定为“中庸”“maxweight”

粒子值数组,指定为微粒-借-numstate变量矩阵。每一行对应一个粒子的状态假设。

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

此属性是只读的。

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

此属性是只读的。

修正的系统方差,返回为N-借-N矩阵,在哪里N等于numstate变量财产。修正后的状态是基于StateEstimationMethod财产和MeasurementLikelihoodFcn.如果指定不支持协方差的状态估计方法,则将该属性设置为金宝app[]

对象的功能

初始化 初始化粒子过滤器的状态
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 =“系统”

对初始位置为[0]且单位协方差的1000个粒子进行采样。

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

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

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

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

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

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

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

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

兼容性考虑

全部展开

未来版本中的行为改变

工具书类

[1] 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®编码器生成C和C++代码™.

介绍了R2016a