particle filter является рекурсивным, Байесовым средством оценки состояния, которое использует дискретные частицы, чтобы аппроксимировать апостериорное распределение предполагаемого состояния.
Алгоритм фильтра частиц вычисляет оценку состояния рекурсивно и включает два шага:
Прогноз – алгоритм использует предыдущее состояние, чтобы предсказать текущее состояние на основе данной системной модели.
Исправление – алгоритм использует измерение датчика тока, чтобы исправить оценку состояния.
Алгоритм также периодически перераспределяет или передискретизирует, частицы в пространстве состояний, чтобы совпадать с апостериорным распределением предполагаемого состояния.
Предполагаемое состояние состоит из всех переменных состояния. Каждая частица представляет гипотезу дискретного состояния. Набор всех частиц используется, чтобы помочь определить оценку конечного состояния.
Можно применить фильтр частиц к произвольным нелинейным системным моделям. Процесс и шум измерения могут следовать за произвольными нераспределениями Гаусса.
Чтобы использовать фильтр частиц правильно, необходимо задать параметры, такие как количество частиц, начального местоположения частицы и метода оценки состояния. Кроме того, если у вас есть определенное движение и модель датчика, вы задаете эти параметры в функции изменения состояния и функции правдоподобия измерения, соответственно. Для получения дополнительной информации смотрите Параметры Фильтра частиц.
Следуйте за этим основным рабочим процессом, чтобы создать и использовать фильтр частиц. Эта страница детализирует рабочий процесс оценки и показывает пример того, как запустить фильтр частиц в цикле, чтобы постоянно оценить состояние.
При использовании фильтра частиц существует необходимый набор шагов, чтобы создать оценочное состояние и фильтр частиц. Прогноз и шаги исправления являются основными шагами итерации для того, чтобы постоянно оценить состояние.
Создайте объект ParticleFilter
путем вызова robotics.ParticleFilter
.
Измените эти параметры ParticleFilter
к пригодному для вашей определенной системы или приложения:
StateTransitionFcn
MeasurementLikelihoodFcn
ResamplingPolicy
ResamplingMethod
StateEstimationMethod
Значения по умолчанию для этих параметров даны для основной операции.
StateTransitionFcn
и функции MeasurementLikelihoodFcn
задают интегрирование измерения и поведение системы. Они жизненно важны для фильтра частиц, чтобы отследить точно. Для получения дополнительной информации смотрите Параметры Фильтра частиц.
Используйте метод initialize
, чтобы определить номер частиц и начального состояния. Смотрите robotics.ParticleFilter.initialize
.
Можно выбрать начальные местоположения частицы двумя способами:
Начальное положение и ковариация — Если у вас есть идея вашего начального состояния, рекомендуется, чтобы вы задали начальное положение и ковариацию. Эта спецификация помогает кластеризироваться, частицы ближе к вашей оценке, настолько отслеживающей, более вступает в силу с запуска.
Границы состояния — Если вы не знаете свое начальное состояние, можно задать возможные пределы каждой переменной состояния. Частицы равномерно распределены через границы состояния для каждой переменной. Широко распределенные частицы не являются столь же эффективными при отслеживании, потому что меньше частиц около реального положения. Используя границы состояния обычно требует, чтобы больше частиц, время вычисления и итерации сходилось к оценке реального положения.
На основе заданной функции изменения состояния частицы развиваются, чтобы оценить следующее состояние. Используйте predict
, чтобы выполнить функцию изменения состояния, заданную в свойстве StateTransitionFcn
. Смотрите robotics.ParticleFilter.predict
.
Измерения, собранные из датчиков, используются на следующем шаге, чтобы исправить текущее предсказанное состояние.
Измерения затем используются, чтобы настроить предсказанное состояние и исправить оценку. Задайте свои измерения с помощью функции correct
. robotics.ParticleFilter.correct
использует MeasurementLikelihoodFcn
, чтобы вычислить вероятность измерений датчика для каждой частицы. Передискретизация частиц требуется, чтобы обновлять вашу оценку как изменения состояния в последующих итерациях. Эта триггерная передискретизация шага на основе свойств ResamplingMethod
и ResamplingPolicy
.
После вызова correct
лучшая оценка состояния автоматически извлечена на основе Weights
каждой частицы и свойства StateEstimationMethod
, заданного в robotics.ParticleFilter
. Лучшее предполагаемое состояние и ковариация выводятся функцией correct
.
Этот шаг отдельно не называется, но выполняется, когда вы вызываете correct
. Если ваше состояние изменилось достаточно, передискретизируйте свои частицы на основе новейшей оценки. Метод correct
проверяет ResamplingPolicy
на инициирование передискретизации частицы согласно распределению тока частиц и их весов. Если передискретизация не инициирована, те же частицы используются для следующей оценки. Если ваше состояние не отличается очень или если ваш временной шаг является низким, можно вызвать предсказывание и исправить методы без передискретизации.
Повторите предыдущий прогноз, и исправление продвигается по мере необходимости для оценки состояния. Шаг исправления определяет, требуется ли передискретизация частиц. Множественные вызовы predict
или correct
могут требоваться когда:
Никакое измерение не доступно, но входные параметры управления, и обновления времени, происходят в высокой частоте. Используйте метод predict
, чтобы развить частицы, чтобы получать обновленное предсказанное состояние чаще.
Несколько чтение измерения доступны. Используйте correct
, чтобы интегрировать несколько показаний от того же самого или несколько датчиков. Функция исправляет состояние на основе каждого набора собранной информации.
Используйте объект ParticleFilter
отследить робота, когда он перемещается в 2D пробел. Измеренное положение имеет случайный добавленный шум. Используя predict
и correct
, отследите робота на основе измерения и на принятой модели движения.
Инициализируйте фильтр частиц и задайте функцию перехода состояния по умолчанию, функцию правдоподобия измерения и политику передискретизации.
pf = robotics.ParticleFilter; pf.StateEstimationMethod = 'mean'; pf.ResamplingMethod = 'systematic';
Демонстрационные 1 000 частиц с исходным положением [0 0] и модульная ковариация.
initialize(pf,1000,[0 0],eye(2));
До оценки задайте путь к синусоиде для точки, чтобы следовать. Создайте массив, чтобы сохранить предсказанное и предполагаемое положение. Задайте амплитуду шума.
t = 0:0.1:4*pi; dot = [t; sin(t)]'; robotPred = zeros(length(t),2); robotCorrected = zeros(length(t),2); noise = 0.1;
Начните цикл для предсказания и исправления предполагаемого положения на основе измерений. Передискретизация частиц происходит на основе свойства ResamplingPolicy
. Робот перемещается на основе функции синусоиды со случайным шумом, добавленным к измерению.
for i = 1:length(t) % Predict next position. Resample particles if necessary. [robotPred(i,:),robotCov] = predict(pf); % Generate dot measurement with random noise. This is % equivalent to the observation step. measurement(i,:) = dot(i,:) + noise*(rand([1 2])-noise/2); % Correct position based on the given measurement to get best estimation. % Actual dot position is not used. Store corrected position in data array. [robotCorrected(i,:),robotCov] = correct(pf,measurement(i,:)); end
Постройте фактический путь по сравнению с предполагаемым положением. Фактические результаты могут отличаться из-за случайности дистрибутивов частицы.
plot(dot(:,1),dot(:,2),robotCorrected(:,1),robotCorrected(:,2),'or') xlim([0 t(end)]) ylim([-1 1]) legend('Actual position','Estimated position') grid on
Данные показывают, как близко оценочное состояние совпадает с фактическим положением робота. Попытайтесь настроить количество частиц или задать различное исходное положение и ковариацию, чтобы видеть, как это влияет на отслеживание в зависимости от времени.
robotics.ParticleFilter
| robotics.ParticleFilter.correct
| robotics.ParticleFilter.initialize
| robotics.ParticleFilter.predict