правильный

Класс: робототехника. ParticleFilter
Пакет: робототехника

Настройте оценку состояния на основе измерения датчика

Синтаксис

[stateCorr,stateCov] = correct(pf,measurement)
[stateCorr,stateCov] = correct(pf,measurement,varargin)

Описание

[stateCorr,stateCov] = correct(pf,measurement) вычисляет исправленное системное состояние и его связанную ковариацию неуверенности на основе датчика measurement на шаге текущего времени. correct использует свойство MeasurementLikelihoodFcn от объекта фильтра частиц, pf, как функция, чтобы вычислить вероятность измерения датчика для каждой частицы. Два входных параметров к функции MeasurementLikelihoodFcn:

  1. Объект pf - The ParticleFilter, который содержит частицы текущей итерации

  2. measurement – Измерения датчика раньше исправляли оценку состояния

Функция MeasurementLikelihoodFcn затем извлекает лучшую оценку состояния и ковариацию на основе установки в свойстве StateEstimationMethod.

[stateCorr,stateCov] = correct(pf,measurement,varargin) передачи все дополнительные аргументы в varargin к базовому MeasurementLikelihoodFcn после первых трех необходимых входных параметров.

Входные параметры

развернуть все

Объект ParticleFilter, заданный как указатель. Смотрите robotics.ParticleFilter для получения дополнительной информации.

Измерения датчика, заданные как массив. Этот вход передается непосредственно в свойство MeasurementLikelihoodFcn pf. Это используется, чтобы вычислить вероятность измерения датчика для каждой частицы.

Список входных параметров переменной длины, заданный как список, разделенный запятыми. Этот вход передается непосредственно в свойство MeasurementLikelihoodFcn pf. Это используется, чтобы вычислить вероятность измерения датчика для каждой частицы. Когда вы вызываете:

correct(pf,measurement,arg1,arg2)
MATLAB® по существу вызывает measurementLikelihoodFcn как:
measurementLikelihoodFcn(pf,measurement,arg1,arg2)

Выходные аргументы

развернуть все

Исправленное системное состояние, возвращенное как вектор - строка с длиной NumStateVariables. Исправленное состояние вычисляется на основе алгоритма StateEstimationMethod и MeasurementLikelihoodFcn.

Исправленная системная дисперсия, возвращенная как N-by-N матрица, где N является значением свойства NumStateVariables от pf. Исправленное состояние вычисляется на основе алгоритма StateEstimationMethod и MeasurementLikelihoodFcn. Если вы задаете оценочный метод состояния, который не поддерживает ковариацию, то функция возвращает stateCov как [].

Примеры

развернуть все

Создайте объект ParticleFilter и выполните прогноз и шаг исправления для оценки состояния. Фильтр частиц дает предсказанную оценку состояния на основе возвращаемого значения StateTransitionFcn. Это затем исправляет состояние на основе данного измерения и возвращаемого значения MeasurementLikelihoodFcn.

Создайте фильтр частиц со значением по умолчанию три состояния.

pf = robotics.ParticleFilter
pf = 
  ParticleFilter with properties:

           NumStateVariables: 3
                NumParticles: 1000
          StateTransitionFcn: @robotics.algs.gaussianMotion
    MeasurementLikelihoodFcn: @robotics.algs.fullStateMeasurement
     IsStateVariableCircular: [0 0 0]
            ResamplingPolicy: [1x1 robotics.ResamplingPolicy]
            ResamplingMethod: 'multinomial'
       StateEstimationMethod: 'mean'
            StateOrientation: 'row'
                   Particles: [1000x3 double]
                     Weights: [1000x1 double]
                       State: 'Use the getStateEstimate function to see the value.'
             StateCovariance: 'Use the getStateEstimate function to see the value.'

Задайте средний метод оценки состояния и систематический метод передискретизации.

pf.StateEstimationMethod = 'mean';
pf.ResamplingMethod = 'systematic';

Инициализируйте фильтр частиц в состоянии [4 1 9] с модульной ковариацией (eye(3)). Используйте 5 000 частиц.

initialize(pf,5000,[4 1 9],eye(3));

При принятии измерения [4.2 0.9 9], запуститесь, каждый предсказывает и один правильный шаг.

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

Получите лучшую оценку состояния на основе алгоритма StateEstimationMethod.

stateEst = getStateEstimate(pf)
stateEst = 1×3

    4.1562    0.9185    9.0202

Введенный в R2016a