radarTracker

Мультицелевое средство отслеживания с помощью присвоения GNN

Описание

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

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

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

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

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

  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 Инициализируйте постоянный-turnrate расширенный Фильтр Калмана.
initctukfИнициализируйте постоянный-turnrate сигма-точечный фильтр Калмана.

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

type initcvkf

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

Порог присвоения обнаружения (или порог пропускания) в виде положительной скалярной величины или вектора 1 на 2 [C 1,C2], где C 1≤C2. Если задано как скаляр, заданное значение, 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.

Типы данных: логический

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

Типы данных: логический

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

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

Типы данных: 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

Стойте матрицы в виде N с действительным знаком матрица T-by-ND, где 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Сбросьте внутренние состояния Системного объекта

Примеры

свернуть все

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

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

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

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

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

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

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