класс 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, аргументы пары Value. Любые незаданные свойства берут значения по умолчанию.

Свойства

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

Состояние фильтра Калмана, заданное как 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' или одна из этих предопределенных моделей. В этом случае вектор состояния и матрица Грина принимают форму, заданную в таблице.

MotionModelФорма вектора состоянияФорма модели изменения состояния
'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

Методы

клонСоздайте Линейный объект Фильтра Калмана с идентичными значениями свойств
правильныйИсправьте вектор состояния Кальмана и утвердите ковариационную матрицу
correctjpdaПравильная ошибочная ковариация оценки состояния и оценки состояния с помощью JPDA
расстояниеРасстояние от измерений до предсказанного измерения
инициализироватьИнициализируйте Фильтр Калмана
вероятностьВероятность измерения
предсказатьПредскажите линейное состояние Фильтра Калмана
невязкаНевязка измерения и остаточная ковариация

Примеры

свернуть все

Создайте линейный Фильтр Калмана, который использует модель движения 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] Браун, Р.Г. и П.И.К. Ван. Введение в случайный анализ сигнала и прикладного Кальмана, фильтрующего. 3-й выпуск. Нью-Йорк: John Wiley & Sons, 1997.

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

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

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

Смотрите также

Функции

Классы

Системные объекты

Введенный в R2017a