trackingKF

Линейный Фильтр Калмана для объектного отслеживания

Описание

trackingKF объект является дискретным временем, линейный Фильтр Калмана раньше отслеживал положения и скорости объектов, с которыми можно столкнуться в автоматизированном ведущем сценарии. Такие объекты включают автомобили, пешеходов, велосипеды, и стационарные структуры или препятствия.

Фильтр Калмана является рекурсивным алгоритмом для оценки развивающегося состояния процесса, когда измерения сделаны на процессе. Фильтр линеен, когда эволюция состояния следует линейной модели движения, и измерения являются линейными функциями состояния. Фильтр принимает, что и процесс и измерения имеют аддитивный шум. Когда шум процесса и шум измерения являются Гауссовыми, Фильтр Калмана является оптимальным средством оценки состояния минимальной среднеквадратической ошибки (MMSE) для линейных процессов.

Можно использовать этот объект этими способами:

  • Явным образом установите модель движения. Установите свойство модели движения, MotionModel, к Custom, и затем используйте StateTransitionModel свойство установить матрицу переходов.

  • Установите MotionModel свойство к предопределенной модели изменения состояния:

    Модель движения
    '1D Constant Velocity'
    '1D Constant Acceleration'
    '2D Constant Velocity'
    '2D Constant Acceleration'
    '3D Constant Velocity'
    '3D Constant Acceleration'

Создание

Описание

filter = trackingKF создает линейный объект Фильтра Калмана в течение дискретного времени, 2D, объект перемещения постоянной скорости. Фильтр Калмана использует значения по умолчанию в StateTransitionModel, MeasurementModel, и ControlModel свойства. Функция также устанавливает MotionModel свойство к '2D Constant Velocity'.

filter = trackingKF(F,H) задает модель изменения состояния, F, и модель измерения, H. С этим синтаксисом функция также устанавливает MotionModel свойство к 'Custom'.

filter = trackingKF(F,H,G) также задает модель управления, G. С этим синтаксисом функция также устанавливает MotionModel свойство к 'Custom'.

filter = trackingKF('MotionModel',model) устанавливает свойство модели движения, MotionModel, к model.

пример

filter = trackingKF(___,Name,Value) конфигурирует свойства Фильтра Калмана при помощи одного или нескольких NameЗначение парные аргументы и любой из предыдущих синтаксисов. Любые незаданные свойства берут значения по умолчанию.

Свойства

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

Состояние фильтра Калмана в виде M с действительным знаком - вектор элемента. M является размером вектора состояния. Типичные размеры вектора состояния описаны в MotionModel свойство. Когда начальное состояние задано как скаляр, состояние расширено в M - вектор элемента.

Можно установить состояние на скаляр в этих случаях:

  • Когда MotionModel свойство установлено в 'Custom', M определяется размером модели изменения состояния.

  • Когда MotionModel свойство установлено в '2D Constant Velocity', '3D Constant Velocity', '2D Constant Acceleration', или '3D Constant Acceleration', необходимо сначала задать состояние как M - вектор элемента. Можно использовать скаляр во всех последующих технических требованиях вектора состояния.

Пример: [200;0.2;-40;-0.01]

Типы данных: double

Ошибочная ковариация состояния в виде положительной скалярной величины или положительно-определенного M с действительным знаком-by-M матрица, где M является размером состояния. При определении значения, когда скаляр создает кратное M-by-M единичная матрица. Эта матрица представляет неопределенность в состоянии.

Пример: [20 0.1; 0.1 1]

Типы данных: double

Модель движения фильтра Калмана в виде 'Custom' или одна из этих предопределенных моделей. В этом случае вектор состояния и матрица переходов принимают форму, заданную в таблице.

Модель движенияФорма вектора состоянияФорма модели изменения состояния
'1D Constant Velocity'

[x;vx]

[1 dt; 0 1]

'2D Constant Velocity'

[x;vx;y;vy]

Блокируйте диагональную матрицу с [1 dt; 0 1] блок повторяется для x и y пространственные размерности

'3D Constant Velocity'

[x;vx;y;vy;z;vz]

Блокируйте диагональную матрицу с [1 dt; 0 1] блок повторяется для x, y и z пространственные размерности.

'1D Constant Acceleration'

[x;vx;ax]

[1 dt 0.5*dt^2; 0 1 dt; 0 0 1]

'2D Constant Acceleration'

[x;vx;ax;y;vy;ay]

Блокируйте диагональную матрицу с [1 dt 0.5*dt^2; 0 1 dt; 0 0 1] блоки повторяются для x и y пространственные размерности

'3D Constant Acceleration'

[x;vx,ax;y;vy;ay;z;vz;az]

Блокируйте диагональную матрицу с [1 dt 0.5*dt^2; 0 1 dt; 0 0 1] блок повторяется для x, y и z пространственные размерности

Когда ControlModel свойство задано, каждый ненулевой элемент модели изменения состояния заменяется dt.

Когда MotionModel 'Custom', необходимо задать матрицу модели изменения состояния, матрицу модели измерения, и опционально, матрица модели управления как входные параметры к Фильтру Калмана.

Типы данных: char

Модель изменения состояния между временными шагами в виде M с действительным знаком-by-M матрица. M является размером вектора состояния. В отсутствие средств управления и шума, имеет отношение модель изменения состояния, состояние в любое время продвигаются в состояние на предыдущем шаге. Модель изменения состояния является функцией размера временного шага фильтра.

Пример: [1 0; 1 2]

Зависимости

Чтобы включить это свойство, установите MotionModel к 'Custom'.

Типы данных: double

Модель управления в виде M-by-L матрица. M является размерностью вектора состояния, и L является количеством средств управления или сил. Модель управления добавляет эффект средств управления на эволюции состояния.

Пример: [.01 0.2]

Типы данных: double

Ковариация шума процесса в виде положительной скалярной величины или M-by-M матрица, где M является размерностью состояния. Если вы задаете это свойство как скаляр, фильтр использует значение в качестве множителя M-by-M единичная матрица. шум Process выражает неопределенность в динамической модели и принят, чтобы быть нулевым средним Гауссовым белым шумом.

Пример: [1.0 0.05; 0.05 2]

Типы данных: double

Модель Measurement от вектора состояния в виде N с действительным знаком-by-M матрица, где N является размером вектора измерения и M, является размером вектора состояния. measurement model является линейной матрицей, которая определяет предсказанные измерения из предсказанного состояния.

Пример: [1 0.5 0.01; 1.0 1 0]

Типы данных: double

Ковариация шума измерения в виде положительной скалярной величины или положительно-определенного, N с действительным знаком-by-N матрица, где N является размером вектора измерения. Если вы задаете это свойство как скаляр, фильтр использует значение в качестве множителя N-by-N единичная матрица. Шум измерения представляет неопределенность в измерении и принят, чтобы быть нулевым средним Гауссовым белым шумом.

Пример: 0.2

Типы данных: double

Функции объекта

predictПредскажите ошибочную ковариацию оценки состояния и оценки состояния линейного Фильтра Калмана
correctФильтр отслеживания использования правильного состояния и ковариации ошибки оценки состояния
correctjpdaФильтр отслеживания использования правильного состояния и ковариации ошибки оценки состояния и JPDA
distanceРасстояния между текущими и предсказанными измерениями отслеживания фильтра
likelihoodВероятность измерения от отслеживания фильтра
cloneСоздайте фильтр отслеживания копии
residualНевязка измерения и остаточный шум от отслеживания фильтра
initializeИнициализируйте состояние и ковариацию отслеживания фильтра

Примеры

свернуть все

Создайте линейный Фильтр Калмана, который использует 2D Constant Velocity модель движения. Примите, что измерение состоит из x-y местоположения объекта.

Задайте оценку начального состояния, чтобы иметь нулевую скорость.

x = 5.3;
y = 3.6;
initialState = [x;0;y;0];
KF = trackingKF('MotionModel','2D Constant Velocity','State',initialState);

Создайте измеренные положения из траектории постоянной скорости.

vx = 0.2;
vy = 0.1;
T  = 0.5;
pos = [0:vx*T:2;5:vy*T:6]';

Предскажите и откорректируйте состояние объекта.

for k = 1:size(pos,1)
    pstates(k,:) = predict(KF,T);
    cstates(k,:) = correct(KF,pos(k,:));
end

Постройте дорожки.

plot(pos(:,1),pos(:,2),'k.', pstates(:,1),pstates(:,3),'+', ...
    cstates(:,1),cstates(:,3),'o')
xlabel('x [m]')
ylabel('y [m]')
grid
xt  = [x-2 pos(1,1)+0.1 pos(end,1)+0.1];
yt = [y pos(1,2) pos(end,2)];
text(xt,yt,{'First measurement','First position','Last position'})
legend('Object position', 'Predicted position', 'Corrected position')

Больше о

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

Алгоритмы

Фильтр Калмана описывает движение объекта путем оценки его состояния. Состояние обычно состоит из положения объекта и скорости и возможно ее ускорения. Состояние может охватить один, два, или три пространственных размерности. Наиболее часто вы используете Фильтр Калмана для постоянной скорости модели или движения постоянного ускорения. Линейный Фильтр Калмана принимает, что процесс выполняет следующее линейное стохастическое разностное уравнение:

xk+1=Fkxk+Gkuk+vk

xk является состоянием на шаге k. Fk является матрицей модели изменения состояния. Gk является матрицей модели управления. uk представляет известные обобщенные средства управления, действующие на объект. В дополнение к заданным уравнениям движения движение может быть затронуто случайными шумовыми возмущениями, vk. Состояние, матрица переходов и средства управления вместе предоставляют достаточно информации, чтобы определить будущее движение объекта в отсутствие шума.

В Фильтре Калмана измерения являются также линейными функциями состояния,

zk=Hkxk+wk

где Hk является матрицей модели измерения. Эта модель выражает измерения как функции состояния. Измерение может состоять из положения объекта, положения и скорости, или ее положения, скорости, и ускорения или некоторой функции этих количеств. Измерения могут также включать шумовые возмущения, wk.

Эти уравнения, в отсутствие шума, моделируют фактическое движение объекта и фактические измерения. Шумовые вклады на каждом шаге неизвестны и не могут быть смоделированы. Только шумовые ковариационные матрицы известны. Ковариационная матрица состояния обновляется со знанием шумовой ковариации только.

Для краткого описания линейного алгоритма Фильтра Калмана смотрите Линейные Фильтры Калмана.

Ссылки

[1] Браун, R.G. и P.Y.C. Ван. Введение в случайный анализ сигнала и прикладного Кальмана, фильтрующего. 3-й выпуск. Нью-Йорк: John Wiley & Sons, 1997.

[2] Кальман, R. E. "Новый Подход к Линейным проблемам Фильтрации и Предсказания". Транзакция Журнала ASME Базового проектирования, Издания 82, Серии D, март 1960, стр 35–45.

[3] Блэкмен, Сэмюэль. Несколько - целевое отслеживание с радарными приложениями. Дом Artech. 1986.

Расширенные возможности

Введенный в R2017a