radarTracker

Многоцелевой трекер с использованием назначения GNN

Описание

The radarTracker Системная object™ инициализирует, подтверждает, предсказывает, исправляет и удаляет дорожки движущихся объектов. Входами к радарному трекеру являются отчеты о обнаружении, сгенерированные как objectDetection объект радиолокационными датчиками. Радар-трекер принимает обнаружения от нескольких датчиков и присваивает их трекам с помощью глобального критерия ближайшего соседа (GNN). Каждое обнаружение присваивается отдельной дорожке. Если обнаружение не может быть назначено какой-либо дорожке, на основе AssignmentThreshold свойство, трекер создает новый трек. Дорожки возвращаются в массиве структур.

Новый трек запускается в предварительном состоянии. Если предварительному дорожке назначено достаточное количество обнаружений, его статус меняется на подтвержденный. Если обнаружение является известной классификацией (ObjectClassID поле возвращаемой дорожки ненулевое), эта дорожка может быть немедленно подтверждена. Для получения дополнительной информации о свойствах радара-трекера, используемых для подтверждения треков, смотрите Алгоритмы.

Когда дорожка подтверждена, радар-трекер считает, что дорожка представляет физический объект. Если обнаружение не добавляется к дорожке в пределах заданного количества обновлений, дорожка удаляется.

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

Чтобы отслеживать объекты с помощью радара-трекера:

  1. Создайте radarTracker Объекту и установите его свойства.

  2. Вызывайте объект с аргументами, как будто это функция.

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

tracker = radarTracker создает radarTracker Системный объект со значениями свойств по умолчанию.

пример

tracker = radarTracker(Name,Value) устанавливает свойства для радар-трекера, используя одну или несколько пары "имя-значение". Для примера, radarTracker('FilterInitializationFcn',@initcvukf,'MaxNumTracks',100) создает радар-трекер, который использует неароматический сигма-точечный фильтр Калмана с постоянной скоростью и поддерживает максимум 100 дорожек. Заключайте каждое имя свойства в кавычки.

Свойства

расширить все

Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release функция разблокирует их.

Если свойство настраивается, можно изменить его значение в любой момент.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.

Уникальный идентификатор трекера, заданный как неотрицательное целое число. Это свойство используется как SourceIndex в выходах трекера и различает треки, которые поступают от разных трекеров в системе с несколькими трекерами.

Пример: 1

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

Тулбокс предоставляет несколько функций инициализации, которые можно использовать, чтобы задать FilterInitializationFcn.

Функция инициализацииОпределение функции
initcvekfИнициализируйте расширенный фильтр Калмана с постоянной скоростью.
initcvkfИнициализируйте линейный фильтр Калмана с постоянной скоростью.
initcvukfИнициализируйте сигма-точечный фильтр Калмана с постоянной скоростью.
initcaekfИнициализируйте расширенный фильтр Калмана с постоянным ускорением.
initcakfИнициализируйте линейный фильтр Калмана с постоянным ускорением.
initcaukf Инициализируйте сигма-точечный фильтр Калмана постоянного ускорения.
initctekf Инициализируйте расширенный фильтр Калмана с постоянным оборотом.
initctukfИнициализируйте постоянные сигма-точечные фильтры Калмана.

Можно также записать собственную функцию инициализации. Входными входами для этой функции должен быть отчет об обнаружении, созданный objectDetection. Выходные выходы этой функции должны быть объектом фильтра Калмана: trackingKF, trackingEKF, или trackingUKF. Чтобы помочь вам в написании этой функции, вы можете изучить детали поставляемых функций из MATLAB®. Для примера:

type initcvkf

Типы данных: function_handle | char | string

Порог назначения обнаружения (или порог стробирования), заданный как положительный скаляр или вектор 1 на 2 [C 1 ,C 2], где C 1 ≤ C 2. Если задано в виде скаляра, заданное значение, val, будет расширено до [val, Inf].

Первоначально трекер выполняет грубую оценку нормированного расстояния между всеми треками и обнаружениями. Трекер вычисляет только точное нормированное расстояние для комбинаций, грубое нормированное расстояние которых меньше C 2. Кроме того, трекер может только назначить обнаружение дорожке, если их точное нормированное расстояние меньше C 1. См. distance функция, используемая с отслеживающими фильтрами (для примера, trackingEKF) для пояснения расчета расстояния.

Совет:

  • Увеличьте значение C 2, если существуют комбинации дорожки и обнаружения, которые должны быть рассчитаны для назначения, но не являются. Уменьшите его, если расчет стоимости занимает слишком много времени.

  • Увеличьте значение C 1, если есть обнаружения, которые должны быть назначены трекам, но не являются. Уменьшите его, если есть обнаружения, которые назначены трекам, которым они не должны быть назначены (слишком далеко ).

Максимальное количество треков, которые может поддерживать трекер, задается как положительное целое число.

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

Максимальное количество датчиков, которые могут быть подключены к трекеру, заданное в виде положительного целого числа. Когда вы задаете обнаружения как вход для радар-трекера, MaxNumSensors должно быть больше или равно самой высокой SensorIndex значение в detections массив ячеек objectDetection объекты, используемые для обновления радиолокационного трекера. Это свойство определяет, сколько наборов ObjectAttributes поля каждая выходная дорожка может иметь.

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

Обработка измерений вне последовательности, заданная как Terminate или neglect. Каждое обнаружение имеет сопоставленную с ним временную метку, t d, и блок трекера имеет свою собственную временную метку, t t, которая обновляется в каждом вызове. Блок трекера рассматривает измерение как OOSM, если t d < t t.

Когда параметр задан как:

  • Terminate - Блок перестает запускаться, когда сталкивается с любыми несогласованными измерениями.

  • Neglect - Блок пренебрегает любыми несовпадающими измерениями и продолжает выполняться.

Порог для подтверждения дорожки, заданное как двухэлементный вектор не уменьшающихся положительных целых чисел, [M N], где M меньше или равно N. Дорожка подтверждается, если она получает хотя бы M обнаружений в последней N обновления.

  • При установке M, учитывайте вероятность обнаружения объектов для датчиков. Вероятность обнаружения зависит от таких факторов, как окклюзия или загромождение. Можно уменьшить M когда дорожки не могут быть подтверждены или увеличены M когда трекам назначено слишком много ложных обнаружений.

  • При установке N, учитывайте количество раз, которое вы хотите обновить трекер, прежде чем он примет решение о подтверждении. Например, если трекер обновляется каждые 0,05 секунды, и вы позволяете 0,5 секунды принять решение о подтверждении, установите N = 10.

Пример: [3 5]

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

Порог для удаления дорожки, заданное как двухэлементный вектор положительных неубывающих целых чисел [P Q], где P меньше или равно Q. Если подтвержденная дорожка не назначена никакому обнаружению P раз в последней Q трекер обновляется, затем трек удаляется.

  • Уменьшите Q (или увеличить P) если треки следует удалить раньше.

  • Увеличение Q (или уменьшить P) если треки должны храниться в течение более длительного времени перед удалением.

Пример: [3 5]

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

Включите матрицу затрат как вход в radarTracker Системный объект, заданный как false или true.

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

Включите вход обнаруживаемых идентификаторов дорожек при каждом обновлении объекта, заданный как false или true. Установите это свойство на true если необходимо предоставить список обнаруживаемых идентификаторов дорожек. Этот список сообщает трекеру всех треков, что датчики, как ожидается, обнаружат и, опционально, вероятность обнаружения для каждой дорожки.

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

Параметры системы координат состояния дорожки, заданные как struct или структуры. Используйте это свойство, чтобы задать опорную систему координат состояния дорожки и как преобразовать дорожку из системы координат трекера (называемого источником) в систему координат фьюзера.

Это свойство настраивается.

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

Это свойство доступно только для чтения.

Количество треков, поддерживаемых радарным трекером, заданное в виде неотрицательного целого числа.

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

Это свойство доступно только для чтения.

Количество подтвержденных дорожек, заданное как неотрицательное целое число. The IsConfirmed поля выходных путевых структур указывают, какие пути подтверждаются.

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

Использование

Описание

confirmedTracks = tracker(detections,time) создает, обновляет и удаляет треки в радар-трекере и возвращает детали о подтвержденных треках. Обновления основаны на указанном списке detections, и все дорожки обновляются до заданного time. Каждый элемент в возвращенном confirmedTracks соответствует одной дорожке.

[confirmedTracks,tentativeTracks] = tracker(detections,time) также возвращается tentativeTracks содержащие подробную информацию о предварительных треках.

пример

[confirmedTracks,tentativeTracks,allTracks] = tracker(detections,time) также возвращается allTracks содержащий подробности обо всех подтвержденных и ориентировочных треках. Дорожки возвращаются в том порядке, в котором трекер их внутренне поддерживает. Можно использовать этот выход, чтобы помочь вам вычислить матрицу затрат, необязательный входной параметр.

[___] = tracker(detections,time,costMatrix) задает матрицу затрат, возвращая любой из выходов из предыдущих синтаксисов.

Чтобы задать матрицу затрат, установите HasCostMatrixInput свойство трекера, чтобы true.

[___] = tracker(___,detectableTrackIDs) также задает список ожидаемых обнаруживаемых треков, заданных detectableTrackIDs. Этот аргумент может использоваться с любым из предыдущих входных синтаксисов.

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

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

расширить все

Список обнаружений, заданный как массив ячеек objectDetection объекты. The Time значение свойства каждого objectDetection объект должен быть меньше или равен текущему времени обновления, timeи больше предыдущего значения времени, используемого для обновления трекера мультиобъекта.

Время обновления, заданное как реальный скаляр. Трекер обновляет все треки к этому времени. Модули указаны в секундах.

time должно быть больше или равно самой большой Time значение свойства objectDetection объекты в вход detections список. time необходимо увеличить значение с каждым обновлением трекера мультиобъекта.

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

Матрица стоимости, заданная как действительная N T-by N D матрица, где N T - количество существующих треков, а N D - количество текущих обнаружений. Строки матрицы затрат соответствуют существующим трекам. Столбцы соответствуют обнаружениям. Треки упорядочиваются по мере их появления в списке треков в allTracks выходной аргумент предыдущего обновления трекера мультиобъекта.

В первом обновлении многообъектного трекера или когда у трекера нет предыдущих треков, присвойте матрице затрат размер [0, N D]. Стоимость должна быть рассчитана так, чтобы более низкие затраты указывали на более высокую вероятность того, что трекер присваивает обнаружение дорожке. Чтобы предотвратить назначение определенных обнаружений определенным трекам, используйте Inf.

Зависимости

Чтобы включить спецификацию матрицы затрат при обновлении треков, установите HasCostMatrixInput свойство трекера, чтобы true

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

Обнаруживаемые идентификаторы дорожек, заданные как действительный вектор M -by-1 или M -by-2 матрица. Обнаруживаемые дорожки являются треками, которые датчики ожидают обнаружить. Первый столбец матрицы содержит список идентификаторов дорожек, которые датчики сообщают как обнаруживаемые. Дополнительный второй столбец содержит вероятность обнаружения для дорожки. Вероятность обнаружения либо сообщается датчиком, либо, если не сообщается, получена из DetectionProbability свойство.

Трекы, идентификаторы которых не включены в detectableTrackIDs рассматриваются как неопределяемые. Логика удаления дорожки не рассчитывает отсутствие обнаружения как 'пропущенное обнаружение' в целях удаления дорожки.

Зависимости

Чтобы включить этот входной параметр, установите detectableTrackIDs свойство к true.

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

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

расширить все

Подтвержденные дорожки, возвращенные как массив objectTrack объекты в MATLAB и возвращенные как массив структур в генерации кода. При генерации кода имена полей возвращаемой структуры совпадают с именами свойства objectTrack.

Дорожка подтверждается, если она удовлетворяет порогу подтверждения, указанному в ConfirmationThreshold свойство. В этом случае IsConfirmed свойство объекта или поля структуры true.

Типы данных: struct | object

Ориентировочные дорожки, возвращенные как массив objectTrack объекты в MATLAB и возвращенные как массив структур в генерации кода. При генерации кода имена полей возвращаемой структуры совпадают с именами свойства objectTrack.

Дорожка является ориентировочной, если она не удовлетворяет порогу подтверждения, указанному в ConfirmationThreshold свойство. В этом случае IsConfirmed свойство объекта или поля структуры false.

Типы данных: struct | object

Все треки, возвращенные как массив objectTrack объекты в MATLAB и возвращенные как массив структур в генерации кода. При генерации кода имена полей возвращаемой структуры совпадают с именами свойства objectTrack. Все треки состоят из подтверждённых и ориентировочных треков.

Типы данных: struct | object

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

Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj, используйте следующий синтаксис:

release(obj)

расширить все

deleteTrackУдалить существующий трек
getTrackFilterPropertiesПолучите значения свойств фильтра от radarTracker
initializeTrackИнициализируйте новый трек в трекере
predictTracksToTimeСпрогнозируйте дорожки к метке времени
setTrackFilterPropertiesУстанавливает значения свойств фильтра дорожки
stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
cloneСоздайте повторяющийся системный объект
isLockedОпределите, используется ли системный объект
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

Создайте радиолокационный Tracker Система object™ с помощью функции инициализации фильтра по умолчанию для 3-D модели с постоянной скоростью. Для этой модели движения вектор состояния является [x; vx; y; vy; z; vz].

tracker = radarTracker('ConfirmationThreshold',[4 5], ...
    'DeletionThreshold',10);

Создайте обнаружение путем определения objectDetection объект. Чтобы использовать это обнаружение с радарным трекером, заключайте обнаружение в массив ячеек.

dettime = 1.0;
det = { ...
    objectDetection(dettime,[10; -1; 1], ...
    'SensorIndex',1, ...
    'ObjectAttributes',{'ExampleObject',1}) ...
    };

Обновите радар трекер с этим обнаружением. Время, в которое вы обновляете обработчик, должно быть больше или равным времени, в которое объект был обнаружен.

updatetime = 1.25;
[confirmedTracks,tentativeTracks,allTracks] = tracker(det,updatetime);

Создайте еще одно обнаружение того же объекта и обновите трекер. Трекер поддерживает только один трек.

dettime = 1.5;
det = { ...
    objectDetection(dettime,[10.1; -1.1; 1.2], ...
    'SensorIndex',1, ...
    'ObjectAttributes',{'ExampleObject',1}) ...
    };
updatetime = 1.75;
[confirmedTracks,tentativeTracks,allTracks] = tracker(det,updatetime);

Определите, была ли проверена дорожка, проверив количество подтвержденных дорожек.

numConfirmed = tracker.NumConfirmedTracks
numConfirmed = 0

Исследуйте положение и скорость отслеживаемого объекта. Поскольку дорожка не была подтверждена, получите положение и скорость от tentativeTracks структура.

positionSelector = [1 0 0 0 0 0; 0 0 1 0 0 0; 0 0 0 0 1 0];
velocitySelector = [0 1 0 0 0 0; 0 0 0 1 0 0; 0 0 0 0 0 1];
position = getTrackPositions(tentativeTracks,positionSelector)
position = 1×3

   10.1426   -1.1426    1.2852

velocity = getTrackVelocities(tentativeTracks,velocitySelector)
velocity = 1×3

    0.1852   -0.1852    0.3705

Создайте последовательность обнаружений движущегося объекта. Отслеживайте обнаружения с помощью радара Tracker Системные object™. Наблюдайте, как дорожки переключаются с предварительных на подтвержденные, а затем на удаленные.

Создайте радар-трекер, используя initcakf функция инициализации фильтра. Трекер моделирует 2-D движение с постоянным ускорением. Для этой модели движения вектор состояния является [x; vx; ax; y; vy; ay].

tracker = radarTracker('FilterInitializationFcn',@initcakf, ...
    'ConfirmationThreshold',[3 4],'DeletionThreshold',[6 6]);

Создайте последовательность обнаружений движущейся цели с помощью objectDetection. Чтобы использовать эти обнаружения с радаром Tracker, заключайте обнаружение в массив ячеек.

dt = 0.1;
pos = [10; -1];
vel = [10; 5];
for detno = 1:2
    time = (detno-1)*dt;
    det = { ...
        objectDetection(time,pos, ...
        'SensorIndex',1, ...
        'ObjectAttributes',{'ExampleObject',1}) ...
        };
    [confirmedTracks,tentativeTracks,allTracks] = tracker(det,time);
    pos = pos + vel*dt;
    meas = pos;
end

Проверьте, что дорожка еще не была подтверждена, проверив количество подтвержденных дорожек.

numConfirmed = tracker.NumConfirmedTracks
numConfirmed = 0

Поскольку дорожка не подтверждена, получите положение и скорость от tentativeTracks структура.

positionSelector = [1 0 0 0 0 0; 0 0 0 1 0 0];
velocitySelector = [0 1 0 0 0 0; 0 0 0 0 1 0];
position = getTrackPositions(tentativeTracks,positionSelector)
position = 1×2

   10.6669   -0.6665

velocity = getTrackVelocities(tentativeTracks,velocitySelector)
velocity = 1×2

    3.3473    1.6737

Добавьте больше обнаружений, чтобы подтвердить дорожку.

for detno = 3:5
    time = (detno-1)*dt;
    det = { ...
        objectDetection(time,pos, ...
        'SensorIndex',1, ...
        'ObjectAttributes',{'ExampleObject',1}) ...
        };
    [confirmedTracks,tentativeTracks,allTracks] = tracker(det,time);
    pos = pos + vel*dt;
    meas = pos;
end

Проверьте, что дорожка была подтверждена, и отобразите векторы положения и скорости для этой дорожки.

numConfirmed = tracker.NumConfirmedTracks
numConfirmed = 1
position = getTrackPositions(confirmedTracks,positionSelector)
position = 1×2

   13.8417    0.9208

velocity = getTrackVelocities(confirmedTracks,velocitySelector)
velocity = 1×2

    9.4670    4.7335

Пусть трекер запускается, но не добавляет новых обнаружений. Существующая дорожка удалена.

for detno = 6:20
    time = (detno-1)*dt;
    det = {};
    [confirmedTracks,tentativeTracks,allTracks] = tracker(det,time);
    pos = pos + vel*dt;
    meas = pos;
end

Проверьте, что у трекера нет предварительных или подтвержденных треков.

isempty(allTracks)
ans = logical
   1

Алгоритмы

Когда вы передаете обнаружения в радар-трекер, системный объект:

  • Попытка назначить входные обнаружения существующим трекам, основанная на AssignmentThreshold свойство многообъектного трекера.

  • Создает новые дорожки из неназначенных обнаружений.

  • Обновления уже назначенных треков и, возможно, их подтверждение, на основе ConfirmationThreshold свойство трекера.

  • Удаляет треки, которым не назначены обнаружения, на основе DeletionThreshold свойство трекера.

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

.

См. также

Функции

Объекты

Введенный в R2021a