exponenta event banner

multiObjectTracker

Отслеживание объектов с помощью присвоения GNN

Описание

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

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

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

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

Для отслеживания объектов с помощью многообъектного трекера:

  1. Создать multiObjectTracker и задайте его свойства.

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

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

Создание

Описание

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

пример

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

Свойства

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

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

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

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

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

Пример: 1

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

Automated Driving Toolbox™ предоставляет несколько функций инициализации, которые можно использовать для определения 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

Обрабатывать измерения вне последовательности (OOSM), указанные как '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

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

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

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

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

Параметры опорного кадра состояния дорожки, заданные как структура или массив структуры. Трекер передает StateParameters значения свойств для StateParameters свойства созданных дорожек. Эти параметры можно использовать для определения опорной рамки, в которой сообщается о дорожке, или других требуемых атрибутов сгенерированных дорожек.

Например, можно использовать следующую структуру для определения прямоугольной опорной рамки, исходная позиция которой находится в [10 10 0] м и чья исходная скорость составляет [2-2 0] м/с относительно кадра сценария.

Имя поляСтоимость
Frame"Rectangular"
Position[10 10 0]
Velocity[2 -2 0]

Настраиваемый: Да

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

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

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

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

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

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

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

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

Чтобы обновить дорожки, вызовите созданный многообъектный трекер с аргументами, как если бы это была функция (описано здесь). Либо обновите дорожки с помощью updateTracks , указывая многообъектный трекер в качестве входного аргумента.

Описание

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 имущества multiObjectTracker Системный объект для 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)

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

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

Примеры

свернуть все

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

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

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

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

Обновление многообъектного трекера с помощью этого обнаружения с помощью updateTracks функция. Время, в которое вы обновляете мультиобъектную подкладку, должно быть больше или равно времени обнаружения объекта.

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

Создайте другое обнаружение того же объекта и обновите многообъектный трекер, на этот раз путем вызова самого трекера вместо использования updateTracks. Трекер поддерживает только одну дорожку.

dettime = 1.5;
det = { ...
    objectDetection(dettime,[10.1; -1.1], ...
    '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 1 0];
velocitySelector = [0 1 0 0; 0 0 0 1];
position = getTrackPositions(tentativeTracks,positionSelector)
position = 1×2

   10.1426   -1.1426

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

    0.1852   -0.1852

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

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

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

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

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 свойство трекера.

Вопросы совместимости

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

В R2020a изменилось поведение

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

.
Представлен в R2017a