trackerJPDA

Совместный вероятностный трекер ассоциации данных

Описание

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

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

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

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

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

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

Создание

Описание

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

пример

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

Свойства

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

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

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

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

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

Пример: 1

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

Sensor Fusion and Tracking Toolbox™ обеспечивает многие функции инициализации, которые можно использовать, чтобы задать FilterInitializationFcn для trackerJPDA объект.

Функция инициализацииОпределение функции
initcvkfИнициализируйте линейный фильтр Калмана с постоянной скоростью.
initcakfИнициализируйте линейный фильтр Калмана с постоянным ускорением.
initcvabfИнициализируйте альфа-бета фильтр с постоянной скоростью
initcaabfИнициализируйте альфа-бета фильтр с постоянным ускорением
initcvekfИнициализируйте расширенный фильтр Калмана с постоянной скоростью.
initcaekfИнициализируйте расширенный фильтр Калмана с постоянным ускорением.
initrpekfИнициализируйте параметризованный расширенный фильтр Калмана с постоянной скоростью.
initapekfИнициализируйте расширенный фильтр Калмана с параметризацией угла постоянной скорости.
initctekf Инициализируйте расширенный фильтр Калмана с постоянной скоростью поворота.
initcackfИнициализируйте кубический фильтр с постоянным ускорением.
initctckfИнициализируйте кубический фильтр постоянной скорости поворота.
initcvckfИнициализируйте кубический фильтр постоянной скорости.
initcvukfИнициализируйте сигма-точечный фильтр Калмана с постоянной скоростью.
initcaukf Инициализируйте сигма-точечный фильтр Калмана постоянного ускорения.
initctukfИнициализируйте неароматизированный сигма-точечный фильтр Калмана с постоянной скоростью поворота.
initcvmscekfИнициализируйте расширенный фильтр Калмана с постоянной скоростью в измененных сферических координатах.
initekfimmИнициализируйте отслеживающий фильтр IMM.

Можно также записать собственную функцию инициализации с помощью следующего синтаксиса:

filter = filterInitializationFcn(detection)
Вход этой функции является отчетом об обнаружении, подобным тем, которые были созданы objectDetection. Выходные выходы этой функции должны быть объектом фильтра: trackingKF, trackingEKF, trackingUKF, trackingCKF, trackingGSF, trackingIMM, trackingMSCEKF, или trackingABF.

Для руководства при написании этой функции используйте type команда для исследования деталей встроенного MATLAB® функций. Для примера:

type initcvekf

Примечание

trackerJPDA не принимает все функции инициализации фильтра в Sensor Fusion and Tracking Toolbox. Полный список функций инициализации фильтра, доступных в Sensor Fusion and Tracking Toolbox, приведен в Initialization разделе Оценочных фильтров.

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

Значение k для k-лучшего JPDA, заданное в виде положительного целого числа. Это свойство определяет максимальное количество допустимых совместных событий для ассоциации track и detection каждого кластера. Установка этого свойства на конечное значение позволяет вам запустить k-лучший JPDA-трекер, который генерирует максимум k событий на кластер.

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

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

Вы также можете написать свою собственную функцию генерации.

  • Если на MaxNumEvents для свойства задано значение Infфункция должна иметь следующий синтаксис:

    FJE = myfunction(ValidationMatrix)
    Вход и выход из этой функции должны точно следовать форматам, используемым в jpdaEvents.

  • Если на MaxNumEvents свойство установлено в конечное значение, функция должна иметь следующий синтаксис:

    [FJE,FJEProbs] = myfunction(likelihoodMatrix,k)
    Вход и выход из этой функции должны точно следовать форматам, используемым в jpdaEvents.

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

type jpdaEvents

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

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

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

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

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

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

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

Когда свойство задано как

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

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

Примечание

Трекер требует всех входных обнаружений, которые имеют одинаковые SensorIndex иметь свои Time различия, ограниченные свойством TimeTolerance. Когда вы устанавливаете OOSMHandling свойство к 'Neglect'при запуске трекера необходимо убедиться, что обнаружение вне последовательности имеет временные метки строго меньше, чем предыдущая временная метка.

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

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

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

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

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

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

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

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

Совет:

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

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

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

Пример: 0.85

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

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

Пример: 0.1

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

Тип логики подтверждения и удаления, заданный как:

  • 'History' - Подтверждение и удаление отслеживания основаны на количестве раз, когда трек был назначен обнаружению в последних обновлениях трекера.

  • 'Integrated' - Подтверждение и удаление трека основано на вероятности существования трека, которая интегрирована в функцию назначения.

Порог для подтверждения дорожки, заданное как скаляр или вектор 1 на 2. Порог зависит от типа логики подтверждения и удаления дорожки, установленной в TrackLogic свойство:

  • 'History' - Задайте порог подтверждения как вектор 1 на 2 [M N]. Трек подтверждается, если он записал хотя бы M хитов в последних обновлениях N. The trackerJPDA регистрирует хит в логике истории трека согласно HitMissThrehold. Значение по умолчанию [2 3].

  • 'Integrated' - Задайте порог подтверждения как скаляр. Дорожка подтверждается, если ее вероятность существования больше или равна порогу подтверждения. Значение по умолчанию 0.95.

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

Порог для удаления дорожки, заданное как скаляр или действительный вектор 1 на 2. Порог зависит от типа логики подтверждения и удаления дорожки, установленной в TrackLogic свойство:

  • 'History' - Задайте порог подтверждения как [P R]. Если, в P последнего R tracker обновляется, подтвержденный трек не назначается никакому обнаружению, которое имеет вероятность больше, чем HitMissThreshold свойство, затем этот трек удаляется. Значение по умолчанию [5,5].

  • 'Integrated' - Задайте порог удаления как скаляр. Дорожка удаляется, если ее вероятность существования падает ниже порога. Значение по умолчанию 0.1.

Пример: 0.2 или [5,6]

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

Порог для регистрации попадания или промаха, заданное как скаляр в области значений [0,1]. Логика истории треков регистрирует промах, и трек будет покрыт, если сумма предельных вероятностей назначений ниже HitMissThreshold. В противном случае логика истории треков регистрирует хит.

Пример: 0.3

Зависимости

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

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

Пространственная плотность измерений загромождения, заданная в виде положительной скалярной величины. Плотность загромождения описывает ожидаемое количество ложных положительных обнаружений на модуль объема. Он используется как параметр модели загромождения Пуассона. Когда TrackLogic установлено в 'Integrated', ClutterDensity также используется при вычислении начальной вероятности существования дорожки.

Пример: 1e-5

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

Пространственная плотность новых целей, заданная как положительная скалярная величина. Новая целевая плотность описывает ожидаемое количество новых треков на модуль объема в пространстве измерений. Используется при вычислении вероятности существования дорожки во время инициализации дорожки.

Пример: 1e-3

Зависимости

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

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

Частота целевых смертей, заданная в виде скаляра в области значений [0,1]. DeathRate описывает вероятность исчезновения истинных целей. Оно связано с распространением вероятности существования дорожки (PTE):

PTE(t+δt)=(1DeathRate)δtPTE(t)

где δt - временной интервал с момента предыдущего t времени обновления.

Зависимости

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

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

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

Начальная вероятность существования дорожки, заданная как скаляр в области значений [0,1] и вычисленная как InitialExistenceProbability = NewTargetDensity*DetectionProbability/(ClutterDensity + NewTargetDensity*DetectionProbability).

Зависимости

Чтобы включить это свойство, установите TrackLogic свойство к 'Integrated'. Когда TrackLogic для свойства задано значение 'History', это свойство недоступно.

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

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

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

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

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

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

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

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

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

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

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

Абсолютный временной допуск между обнаружениями для того же датчика, заданный как положительная скалярная величина. В идеале trackerJPDA ожидает, что обнаружения от датчика будут иметь одинаковые метки времени. Однако, если метки времени различий между обнаружениями датчика находятся в пределах поля, заданного TimeToleranceэти обнаружения будут использоваться для обновления оценки дорожки на основе среднего времени этих обнаружений.

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

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

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

Описание

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

confirmedTracks = tracker(detections,time,costMatrix) также задает матрицу затрат.

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

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

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

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

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

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

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

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

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

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

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

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

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

Зависимости

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

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

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

Трекы, идентификаторы которых не включены в 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

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

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

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

CostMatrix

Матрица затрат для присвоения.

UnassingedTracks

Идентификаторы неназначенных дорожек.

UnassingedDetections

Индексы неназначенных обнаружений в detections вход.

Clusters

Массив ячеек из отчетов кластера.

InitiatedTrackIDs

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

DeletedTrackIDs

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

TrackIDsAtStepEnd

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

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

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

Индексы кластеризованных обнаружений.

TrackIDs

Отслеживайте идентификаторы кластеризованных дорожек.

ValidationMatrixМатрица валидации кластера. Посмотрите jpadEvents для получения дополнительной информации.
SensorIndex

Индекс исходного датчика кластеризованных обнаружений.

TimeStampСредняя метка времени кластеризованных обнаружений.
MarginalProbabilitiesМатрица краевых вероятностей ассоциации апостериорных соединений.

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

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

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

release(obj)

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

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

Примеры

свернуть все

Создайте объект trackerJPDA с постоянной скоростью по умолчанию Extended Kalman Filter и логикой трека 'History'. Установите значение 100 AssignmentThreshold, чтобы разрешить совместную связь между треками.

tracker = trackerJPDA('TrackLogic','History', 'AssignmentThreshold',100,...
    'ConfirmationThreshold', [4 5], ...
    'DeletionThreshold', [10 10]);

Задайте истинные начальные положения и скорости двух объектов.

pos_true = [0 0 ; 40 -40 ; 0 0];
V_true = 5*[cosd(-30) cosd(30)  ; sind(-30) sind(30) ;0 0];

Создайте график театра, чтобы визуализировать дорожки и обнаружения.

tp = theaterPlot('XLimits',[-1 150],'YLimits',[-50 50]);
trackP = trackPlotter(tp,'DisplayName','Tracks','MarkerFaceColor','g','HistoryDepth',0);
detectionP = detectionPlotter(tp,'DisplayName','Detections','MarkerFaceColor','r');

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Tracks, Detections.

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

positionSelector = [1 0 0 0 0 0; 0 0 1 0 0 0; 0 0 0 0 0 0]; % [x, y, 0]
velocitySelector = [0 1 0 0 0 0; 0 0 0 1 0 0; 0 0 0 0 0 0 ]; % [vx, vy, 0]

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

dt = 0.2;
for time = 0:dt:30
    % Update the true positions of objects.
    pos_true = pos_true + V_true*dt;
    
    % Create detections of the two objects with noise.
    detection(1) = objectDetection(time,pos_true(:,1)+1*randn(3,1));
    detection(2) = objectDetection(time,pos_true(:,2)+1*randn(3,1));
    
    % Step the tracker through time with the detections.
    [confirmed,tentative,alltracks,info] = tracker(detection,time);
    
    % Extract position, velocity and label info.
    [pos,cov] = getTrackPositions(confirmed,positionSelector);
    vel = getTrackVelocities(confirmed,velocitySelector);
    meas = cat(2,detection.Measurement);
    measCov = cat(3,detection.MeasurementNoise);
    
    % Update the plot if there are any tracks.
    if numel(confirmed)>0
        labels = arrayfun(@(x)num2str([x.TrackID]),confirmed,'UniformOutput',false);
        trackP.plotTrack(pos,vel,cov,labels);
    end
    detectionP.plotDetection(meas',measCov);
    drawnow;
    
    % Display the cost and marginal probability of distribution every eight
    % seconds.
    if time>0 && mod(time,8) == 0
        disp(['At time t = ' num2str(time) ' seconds,']);
        disp('The cost of assignment was: ')
        disp(info.CostMatrix);
        disp(['Number of clusters: ' num2str(numel(info.Clusters))]);
        if numel(info.Clusters) == 1
            
            disp('The two tracks were in the same cluster.')
            disp('Marginal probabilities of association:')
            disp(info.Clusters{1}.MarginalProbabilities)
        end
        disp('-----------------------------')
    end
end
At time t = 8 seconds,
The cost of assignment was: 
   1.0e+03 *

    0.0020    1.1523
    1.2277    0.0053
Number of clusters: 2
-----------------------------
At time t = 16 seconds,
The cost of assignment was: 
    1.3968    4.5123
    2.0747    1.9558
Number of clusters: 1
The two tracks were in the same cluster.
Marginal probabilities of association:
    0.8344    0.1656
    0.1656    0.8344
    0.0000    0.0000
-----------------------------
At time t = 24 seconds,
The cost of assignment was: 
   1.0e+03 *

    0.0018    1.2962
    1.2664    0.0013
Number of clusters: 2
-----------------------------

Figure contains an axes. The axes contains 6 objects of type line, patch, text. These objects represent Tracks, Detections.

Алгоритмы

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

Ссылки

[1] Фортманн, Т., Я. Бар-Шалом, и М. Шеффе. Sonar Tracking of Multiple Targets Using Joint Probabilistic Data Association (неопр.) (недоступная ссылка). IEEE Journal of Ocean Engineering. Том 8, № 3, 1983, с. 173-184.

[2] Мусицки, Д. и Р. Эванс. Joint Integrated Probabilistic Data Association: JIPDA (неопр.) (недоступная ссылка). Транзакции IEEE по аэрокосмическим и электронным системам. Том 40, № 3, 2004, стр. 1093-1099.

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

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