particle filter является рекурсивным, Байесовым средством оценки состояния, которое использует дискретные частицы, чтобы аппроксимировать апостериорное распределение предполагаемого состояния.
Чтобы использовать фильтр частиц правильно, необходимо задать параметры, такие как количество частиц, начального местоположения частицы и метода оценки состояния. Кроме того, если у вас есть определенное движение и модель датчика, вы задаете эти параметры в функции изменения состояния и функции правдоподобия измерения, соответственно. Детали этих параметров детализированы на этой странице. Для получения дополнительной информации о рабочем процессе фильтра частиц смотрите Рабочий процесс Фильтра частиц.
Чтобы задать количество частиц, используйте метод initialize
. Каждая частица является гипотезой текущего состояния. Частицы распределяются на вашем пространстве состояний или на основе заданного среднего значения и ковариации, или на заданных границах состояния. В зависимости от свойства StateEstimationMethod
или частица с самым высоким весом или среднее значение всех частиц взяты, чтобы определить лучшую оценку состояния.
Количество по умолчанию частиц 1000. Если производительность не является проблемой, не используйте меньше чем 1 000 частиц. Более высокое количество частиц может улучшить оценку, но скорость производительности жертв, потому что алгоритм должен обработать больше частиц. Настройка количества частиц является лучшим способом влиять на вашу производительность фильтров частиц.
Эти результаты, которые основаны на Оценочном Положении Робота в Цикле Используя пример Фильтра частиц, показывают различие в точности отслеживания при использовании 100 частиц и 5 000 частиц.
Когда вы инициализируете свой фильтр частиц, можно задать начальное местоположение использования частиц:
Среднее значение и ковариация
Границы состояния
Ваше начальное состояние задано как среднее значение с ковариацией относительно вашей системы. Это среднее значение и ковариация коррелируют к начальному местоположению и неуверенности в вашей системе. Объект ParticleFilter
распределяет частицы на основе вашей ковариации вокруг данного среднего значения. Алгоритм использует это распределение частиц, чтобы получить лучшую оценку состояния, таким образом, точная инициализация частиц помогает сходиться к лучшей оценке состояния быстро.
Если начальное состояние неизвестно, можно равномерно распределить частицы через данные границы состояния. Границы состояния являются пределами вашего состояния. Например, при оценке положения робота, границы состояния ограничиваются средой, которую может на самом деле населять робот. В целом ровное распределение частиц является менее эффективным способом инициализировать частицы, чтобы улучшить быстроту сходимости.
График показывает, как среднее значение и спецификация ковариации могут кластеризировать частицы намного эффективнее на пробеле вместо того, чтобы задать полные границы состояния.
Функция изменения состояния, StateTransitionFcn
, фильтра частиц помогают развить частицы к следующему состоянию. Это используется во время шага прогноза Рабочего процесса Фильтра частиц. В объекте ParticleFilter
функция изменения состояния задана как функция обратного вызова, которая берет предыдущие частицы и любые другие необходимые параметры, и выводит предсказанное местоположение. Функциональный синтаксис заголовка:
function predictParticles = stateTransitionFcn(pf,prevParticles,varargin)
По умолчанию функция изменения состояния принимает Гауссову модель движения с постоянными скоростями. Функция использует Распределение Гаусса, чтобы определить положение частиц в следующем временном шаге.
Для вашего приложения важно иметь функцию изменения состояния, которая точно описывает, как вы ожидаете, что система будет вести себя. Чтобы точно развить все частицы, необходимо разработать и реализовать модель движения для системы. Если частицы не распределяются вокруг следующего состояния, объект ParticleFilter
не находит точную оценку. Поэтому важно понять, как ваша система может вести себя так, чтобы можно было отследить его точно.
Также необходимо задать системный шум в StateTransitionFcn
. Без случайного шума применился к предсказанной системе, фильтр частиц не функционирует, как предназначено.
Несмотря на то, что можно предсказать много систем на основе их предыдущего состояния, иногда система может включать дополнительную информацию. Использование varargin
в функции позволяет вам ввести любые дополнительные параметры, которые важны для предсказания следующего состояния. Когда вы вызываете predict
, можно включать эти параметры использование:
predict(pf,param1,param2)
Поскольку эти параметры совпадают с функцией изменения состояния, которую вы задали, вызывание predict
по существу вызывает функцию как:
predictParticles = stateTransitionFcn(pf,prevParticles,param1,param2)
Выходные частицы, predictParticles
, затем или используются Функцией правдоподобия Измерения, чтобы исправить частицы или используются на следующем шаге прогноза, если исправление не требуется.
После предсказания следующего состояния можно использовать измерения от датчиков, чтобы исправить предсказанное состояние. Путем определения MeasurementLikelihoodFcn
в объекте ParticleFilter
можно исправить предсказанные частицы с помощью функции correct
. Эта функция правдоподобия измерения, по определению, дает вес для гипотез состояния (ваши частицы) на основе данного измерения. По существу это дает вам вероятность, что наблюдаемое измерение на самом деле совпадает с тем, что наблюдает каждая частица. Эта вероятность используется в качестве веса на предсказанных частицах, чтобы помочь с исправлением их и получением лучшей оценки. Несмотря на то, что шаг прогноза может оказаться точным для небольшого количества промежуточных шагов, чтобы получить точное отслеживание, используйте наблюдения датчика, чтобы часто исправлять частицы.
Спецификация MeasurementLikelihoodFcn
подобна StateTransitionFcn
. Это задано как указатель на функцию в свойствах объекта ParticleFilter
. Функциональный синтаксис заголовка:
function likelihood = measurementLikelihoodFcn(pf,predictParticles,measurement,varargin)
Вывод является вероятностью каждой предсказанной частицы на основе данного измерения. Однако можно также задать больше параметров в varargin
. Использование varargin
в функции позволяет вам ввести любые дополнительные параметры, которые важны для исправления предсказанного состояния. Когда вы вызываете correct
, можно включать эти параметры использование:
correct(pf,measurement,param1,param2)
Эти параметры совпадают с функцией правдоподобия измерения, которую вы задали:
likelihood = measurementLikelihoodFcn(pf,predictParticles,measurement,param1,param2)
Функция correct
использует likelihood
вывод для передискретизации частицы и предоставления оценки конечного состояния.
Передискретизация частиц является жизненным шагом для непрерывного отслеживания объектов. Это позволяет вам выбрать частицы на основе текущего состояния, вместо того, чтобы использовать распределение частицы, данное при инициализации. Путем непрерывной передискретизации частиц вокруг текущей оценки можно получить более точное отслеживание и улучшать долгосрочную производительность.
Когда вы вызываете correct
, частицы, используемые для оценки состояния, могут передискретизироваться в зависимости от свойства ResamplingPolicy
, заданного в объекте ParticleFilter
. Это свойство задано как объект robotics.ResamplingPolicy
. Свойство TriggerMethod
на том объекте говорит фильтр частиц который метод использовать для передискретизации.
Можно инициировать передискретизацию или в фиксированный интервал или в когда минимальное эффективное отношение частицы достигнуто. Метод фиксированного интервала передискретизирует в количестве набора итераций, которое задано в свойстве SamplingInterval
. Минимальное эффективное отношение частицы является мерой того, как хорошо текущий набор частиц аппроксимирует апостериорное распределение. Количество эффективных частиц вычисляется:
В этом уравнении N является количеством частиц, и w является нормированным весом каждой частицы. Эффективным отношением частицы является затем Neff / NumParticles
. Поэтому эффективное отношение частицы является функцией весов всех частиц. После того, как веса частиц достигают достаточно низкого значения, они не способствуют оценке состояния. Эта низкая стоимость инициировала передискретизацию, таким образом, частицы ближе к оценке текущего состояния и имеют более высокие веса.
Последний шаг рабочего процесса фильтра частиц является выбором одной оценки состояния. Частицы и их веса, выбранные через распределение, используются, чтобы дать лучшую оценку реального положения. Однако можно использовать информацию о частицах, чтобы получить одну оценку состояния несколькими путями. С объектом ParticleFilter
можно или выбрать наилучшую оценку на основе частицы с самым высоким весом или взять среднее значение всех частиц. Задайте метод оценки в свойстве StateEstimationMethod
или как 'mean'
(значение по умолчанию) или как 'maxweight'
.
Поскольку можно оценить состояние от всех частиц во многих отношениях, можно также извлечь каждую частицу и ее вес от robotics.ParticleFilter
с помощью свойства Particles
.
robotics.ParticleFilter
| robotics.ParticleFilter.correct
| robotics.ParticleFilter.initialize
| robotics.ParticleFilter.predict