exponenta event banner

radarTracker

Многоточечный трекер, использующий назначение GNN

Описание

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 [C1, C2], где C1≤C2. Если указано как скаляр, указанное значение, val, будет расширено до [val ,Inf].

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

Совет:

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

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

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

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

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

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

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

Если параметр указан как:

  • 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

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

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

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

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

Количество подтвержденных дорожек, указанное как неотрицательное целое число. 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 объекты. Time значение свойства каждого objectDetection объект должен быть меньше или равен текущему времени обновления, timeи больше предыдущего значения времени, использованного для обновления многообъектного трекера.

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

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

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

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

При первом обновлении многообъектного трекера или при отсутствии у трекера предыдущих дорожек присвойте матрице затрат размер [0, ND]. Стоимость должна быть рассчитана так, чтобы более низкие затраты указывали на более высокую вероятность того, что трекер назначит обнаружение дорожке. Чтобы предотвратить назначение определенных обнаружений определенным дорожкам, используйте 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

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

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

release(obj)

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

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

Примеры

свернуть все

Создание радара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

Алгоритмы

При передаче обнаружений в радиолокационный трекер объект System:

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

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

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

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

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

.

См. также

Функции

Объекты

Представлен в R2021a