trackerPHD

Мультисенсорный, многообъектный PHD-трекер

Описание

The trackerPHD Системный object™ является трекером, способным обрабатывать обнаружения нескольких целей с нескольких датчиков. Трекер использует фильтр плотности гипотезы множественных целевых вероятностей (PHD), чтобы оценить состояния точечных целей и расширенных объектов. PHD является функцией, заданной над пространством состояний системы слежения, и ее значение в состоянии определяется как ожидаемое количество целей на модуль объема пространства состояний. PHD представлен взвешенным суммированием (смесью) функций плотности вероятностей, а пики в PHD соответствуют возможным целям. Обзор функций трекера см. в разделе Алгоритмы.

По умолчанию в trackerPHD может отслеживать расширенные объекты, используя ggiwphd фильтр, который моделирует обнаружения от расширенного объекта как облако точек анализа. Можно также использовать trackerPHD с gmphd фильтры, которые отслеживают целевые точки и расширенные объекты с назначенными формами. Входами к трекеру являются отчеты об обнаружении, сгенерированные objectDetection, fusionRadarSensor, irSensor, или sonarSensor объекты. Трекер выводит все поддерживаемые дорожки и их аналитическую информацию.

Чтобы отслеживать цели, использующие этот объект:

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

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

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

Создание

Описание

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

пример

tracker = trackerPHD(Name,Value) устанавливает свойства для трекера, используя одну или несколько пары "имя-значение". Для примера, trackerPHD('MaxNumTracks',100) создает PHD-трекер, который позволяет использовать не более 100 треков. Заключайте каждое имя свойства в кавычки.

Свойства

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

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

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

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

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

Пример: 1

Строение датчиков слежения, заданная как массив ячеек trackingSensorConfiguration объекты. Это свойство предоставляет трекеру информацию о строении датчика слежения, такие как пределы обнаружения датчика и разрешение датчика. Обратите внимание, что значений по умолчанию для SensorConfigurations нет свойство, и вы должны задать SensorConfigurations свойство перед использованием трекера. Однако вы можете обновить строение, установив HasSensorConfigurationsInput свойство к true и определение строения входа, config. Если вы задаете MaxDetsPerObject свойство trackingSensorConfiguration объект 1, трекер создает только один раздел, так что самое большее одно обнаружение может быть назначено каждому целевому объекту.

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

Вы также можете задать свою собственную функцию секционирования обнаружений. Для руководства при написании этой функции, можно изучить детали функции разбиения по умолчанию, partitionDetections, с использованием type команда как:

type partitionDetections

Пример: @myfunction или 'myfunction'

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

Коэффициент рождаемости новых целевых показателей в плотности, заданный как скаляр. Коэффициент рождаемости указывает ожидаемое количество целевых показателей, добавленных в плотности в единицу времени. Плотность рождения создается при помощи FilterInitializationFcn от trackingSensorConfiguration используется с трекером. В целом трекер добавляет компоненты в функцию плотности двумя способами:

  1. Прогнозирующая плотность рождения - плотность, инициализируемая FilterInitializationFcn функция при вызове без входов.

  2. Адаптивная плотность рождения - плотность, инициализированная FilterInitializationFcn функция при вызове с входами обнаружения. Обнаружения выбираются трекером на основе их логарифмической правдоподобности связи с текущими оценками целей.

Обратите внимание, что значение для BirthRate свойство представляет суммирование как прогнозирующей плотности рождения, так и адаптивной плотности рождения для каждого временного шага.

Пример: 0.01

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

Смертность компонентов в плотности, заданная как скаляр. Смертность указывает скорость, с которой компонент исчезает в плотности после одного временного шага. Смертность (P d) связана с вероятностью выживания (P s) компонента между последовательными временными шагами

Ps=(1Pd)ΔT

где Δ T является временным шагом.

Пример: 1e-4

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

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

Пример: 18.1

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

Порог для инициализации предварительной дорожки, заданное как скаляр. Если вес компонента выше порога, заданного ExtractionThreshold свойство, компонент помечен как 'Tentative' отследить и задать TrackID.

Пример: 0.45

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

Порог для подтверждения дорожки в виде скаляра. В trackerPHD объект, дорожка может иметь несколько компонентов, имеющих одинаковые TrackID. Если суммирование веса компонентов ориентировочной дорожки выше порога, заданного ConfirmationThreshold свойство, состояние дорожки помечено как 'Confirmed'.

Пример: 0.85

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

Порог для удаления компонента, заданное как скаляр. В трекере PHD, если вес компонента ниже значения, заданного DeletionThreshold свойство, компонент удален.

Пример: 0.01

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

Порог для объединения компонентов, заданное как действительная положительная скалярная величина. В трекере PHD, если расстояние Kullback-Leibler между компонентами с той же TrackID меньше значения, заданного MergingThreshold свойство, затем эти компоненты объединяются в один компонент. Объединенный вес нового компонента равен суммированию весов предварительно объединенных компонентов. Более того, если объединенный вес выше первого порога, заданного в LabelingThresholds свойство, объединенный вес обрезается до первого порога. Обратите внимание, что компоненты с TrackID равно 0 могут также быть объединены друг с другом.

Пример: 30

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

Пороги маркировки, заданные как вектор 1 на 3 уменьшения положительных значений, [C 1, C 2, C 3]. На основе LabelingThresholds свойство, трекер управляет компонентами плотности с помощью следующих правил:

  1. Вес любого компонента, который выше первого порога C 1, уменьшается до C 1.

  2. Для всех компонентов с одинаковыми TrackID, если наибольший вес среди этих компонентов больше C 2, то компонент с наибольшим весом сохраняется, чтобы сохранить TrackID, в то время как все другие компоненты удаляются.

  3. Для всех компонентов с одинаковыми TrackID, если отношение наибольшего веса к массовому суммированию всех этих компонентов больше C 3, то компонент с наибольшим весом сохраняется, чтобы сохранить TrackID, в то время как все другие компоненты удаляются.

  4. Если ни условие 2, ни условие 3 не удовлетворены, то компонент с наибольшим весом сохраняет TrackID, в то время как для меток всех других компонентов задано значение 0. Когда это происходит, это по существу означает, что некоторые компоненты могут представлять другие объекты. Эта обработка сохраняет возможность повторного извлечения этих незащищенных компонентов в будущем.

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

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

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

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

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

Имя поляЗначение
Frame"Rectangular"
Position[10 10 0]
Velocity[2 -2 0]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Описание

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

confirmedTracks = tracker(detections,config,time) также задает вход строения датчика, config. Используйте этот синтаксис, когда строения датчиков изменяются со временем. Чтобы включить этот синтаксис, установите HasSensorConfigurationsInput свойство к true.

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

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

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

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

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

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

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

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

Строения датчика, заданные как массив структур, массив ячеек из структур или массив ячеек из trackingSensorConfiguration объекты. Если вы задаете значение с помощью массива структур или массива ячеек структур, вы должны включать SensorIndex как поле для каждого struct. Другие необязательные поля в каждом struct должны иметь то же имя что и одно из свойств trackingSensorConfiguration объект. Обратите внимание, что вам нужно задать только строения датчика, которые нужно обновить. Для примера, если вы хотите только обновить IsValidTime свойство для пятого датчика, задайте значение для config как struct('SensorIndex',5,'IsValidTime',false).

Зависимости

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

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

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

Подтвержденные дорожки обновлены до текущего времени, возвращены как структура или массив структур. Каждая структура соответствует дорожке. Дорожка подтверждается, если суммирование веса ее компонентов выше порога, заданного ConfirmationThreshold свойство. Если дорожка подтверждена, IsConfirmed поле структуры true. Поля подтвержденной структуры дорожек заданы в структуре дорожек.

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

Ориентировочные дорожки, возвращенные как структура или массив структур. Каждая структура соответствует дорожке. Дорожка является ориентировочной, если суммирование веса ее компонентов выше порога, заданного ExtractionThreshold свойство, но ниже порога, заданного ConfirmationThreshold свойство. В этом случае IsConfirmed поле структуры false. Поля структуры определены в Track Structure.

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

Все дорожки, возвращенные как структура или массив структур. Каждая структура соответствует дорожке. Набор всех треков состоит из подтвержденных и ориентировочных треков. Поля структуры определены в Track Structure.

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

Дополнительная информация для анализа обновлений трека, возвращенная как структура. Полями этой структуры являются:

ОбластьОписание
CorrectionOrder

Порядок, в котором датчики используются для коррекции оценки состояния, возвращается как вектор-строка SensorIndex. Для примера [1 3 2 4].

TrackIDsAtStepBeginning

Отслеживайте идентификаторы, когда шаг начался.

DeletedTrackIDs

Идентификаторы треков, удаленных во время шага.

TrackIDsAtStepEnd

Отслеживайте идентификаторы, когда шаг закончен.

SensorAnalysisInfo

Массив ячеек информации анализа датчика.

The SensorAnalysisInfo поле может включать в себя несколько информационных отчетов о датчике. Каждый отчет представляет собой структуру, содержащую:

ОбластьОписание
SensorIndex

Индекс датчика.

DetectionCells

Обнаружение камер, возвращенное как логическая матрица. Каждый столбец матрицы обозначает камеру обнаружения. В каждом столбце, если i элемент равен 1, то i-й обнаружение принадлежит камере обнаружения, обозначенной этим столбцом.

DetectionLikelihoods

Правдоподобия ассоциации между компонентами в функции плотности и камерах обнаружения, возвращенная как матрица N -by P. N - количество компонентов в функции плотности, а P - количество камер обнаружения.

IsBirthCells

Указывает, указаны ли камеры обнаружения в DetectionCells родить новые дорожки, возвращенные как 1-бай- P логический вектор, где P - количество камер обнаружения.

NumPartitions

Количество разделов.

DetectionProbability

Вероятность обнаружения датчиком существующих дорожек, заданная как вектор-строка N 1 байт, где N - количество компонентов в функции плотности.

LabelsBeforeCorrection

Метки компонентов в функции плотности перед коррекцией возвращаются как вектор-строка 1-by- M b. M b - количество компонентов, поддерживаемых в трекере перед коррекцией. Каждый элемент вектора является TrackID. Для примера [1 1 2 0 0]. Обратите внимание, что несколько компонентов могут совместно использовать одну и ту же TrackID.

LabelsAfterCorrection

Метки компонентов в функции плотности после коррекции, возвращенные как 1-байт- M вектор-строка. M a - количество компонентов, поддерживаемых в трекере после коррекции. Каждый элемент вектора является TrackID. Для примера [1 1 2 2 0 0]. Обратите внимание, что несколько компонентов могут совместно использовать одну и ту же TrackID.

WeightsBeforeCorrection

Веса компонентов в функции плотности перед коррекцией, возвращенные как вектор-строка 1-by M b. M b - количество компонентов, поддерживаемых в трекере перед коррекцией. Каждый элемент вектора является весом соответствующего компонента, заданным в LabelsBeforeCorrection. Для примера [0,1 0,5 0,7 0,3 0,2].

WeightsAfterCorrection

Веса компонентов в функции плотности после коррекции, возвращенные как 1-by- M вектор-строка. M a - количество компонентов, поддерживаемых в трекере после коррекции. Каждый элемент вектора является весом соответствующего компонента, заданным в LabelsAfterCorrection. Для примера [0,1 0,4 0,2 0,6 0,3 0,2 0,2].

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

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

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

release(obj)

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

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

Примеры

свернуть все

Настройте строение датчика, создайте PHD-трекер и подайте трекер с обнаружениями.

    % Create sensor configuration. Specify clutter density of the sensor and
    % set the IsValidTime property to true.
    configuration = trackingSensorConfiguration(1);
    configuration.ClutterDensity = 1e-7;   
    configuration.IsValidTime = true;
    
    % Create a PHD tracker.
    tracker = trackerPHD('SensorConfigurations',configuration);
    
    % Create detections near points [5;-5;0] and [-5;5;0] at t=0, and 
    % update the tracker with these detections.
    detections = cell(20,1);
    for i = 1:10
        detections{i} = objectDetection(0,[5;-5;0] + 0.2*randn(3,1));
    end
    for j = 11:20
        detections{j} = objectDetection(0,[-5;5;0] + 0.2*randn(3,1));
    end

    tracker(detections,0);

Обновите трекер снова через 0,1 секунд путем принятия того, что цели движутся с постоянной скоростью [1; 2; 0] модуль в секунду.

    dT = 0.1;
    for i = 1:20
        detections{i}.Time = detections{i}.Time + dT;
        detections{i}.Measurement = detections{i}.Measurement + [1;2;0]*dT;
    end
    [confTracks,tentTracks,allTracks] = tracker(detections,dT);

Визуализация обнаружений и подтвержденных дорожек.

    % Obtain measurements from detections.
    d = [detections{:}];
    measurements = [d.Measurement];
    
    % Extract positions of confirmed tracking using getTrackPositions function.
    % Note that we used the default sensor configuration
    % FilterInitializationFcn, initcvggiwphd, which uses a constant velocity
    % model and defines the states as [x;vx;y;vy;z;vy].
    positionSelector = [1 0 0 0 0 0;0 0 1 0 0 0;0 0 0 0 1 0];
    positions = getTrackPositions(confTracks,positionSelector);
    
    figure()
    plot(measurements(1,:),measurements(2,:),'x','MarkerSize',5,'MarkerEdgeColor','b');
    hold on;
    plot(positions(1,1),positions(1,2),'v','MarkerSize',5,'MarkerEdgeColor','r' );
    hold on;
    plot(positions(2,1),positions(2,2),'^','MarkerSize',5,'MarkerEdgeColor','r' );
    legend('Detections','Track 1','Track 2')
    xlabel('x')
    ylabel('y')

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Detections, Track 1, Track 2.

Подробнее о

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

Алгоритмы

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

Ссылки

[1] Granstorm, K., C. Lundquiest, and O. Orguner. Расширенное отслеживание цели с использованием PHD-фильтра Гауссовой смеси. Транзакции IEEE по аэрокосмическим и электронным системам. Том 48, № 4, 2012, стр. 3268-3286.

[2] Granstorm, K., and O. Orguner ". PHD-фильтр для слежения за несколькими расширенными целями с помощью случайных матриц ". Транзакции IEEE по обработке сигналов. Том 60, № 11, 2012, стр. 5657-5671.

[3] Granstorm, K., and A. Natale, P. Braca, G. Ludeno, and F. Serafino. «Гамма Гауссов обратный Wishart гипотезы вероятности плотности для расширенного отслеживания цели с использованием морских радиолокационных данных X-диапазона». Транзакции IEEE по геологии и дистанционному зондированию. Том 53, № 12, 2015, стр. 6617-6631.

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

.
Введенный в R2019a