Совместный вероятностный трекер ассоциации данных
trackerJPDA Система object™ представляет собой трекер, способный обрабатывать обнаружения множества целей от множества датчиков. Трекер использует совместную вероятностную ассоциацию данных для назначения обнаружений каждой дорожке. Трекер применяет мягкое назначение, где множественные обнаружения могут способствовать каждой дорожке. Трекер инициализирует, подтверждает, корректирует, прогнозирует (выполняет накрутку) и удаляет дорожки. Входами в трекер являются отчеты об обнаружении, генерируемые objectDetection, fusionRadarSensor, irSensor, или sonarSensor объекты. Трекер оценивает вектор состояния и ковариационную матрицу ошибки оценки состояния для каждой дорожки. Каждое обнаружение назначается, по меньшей мере, одной дорожке. Если обнаружение не может быть назначено какой-либо существующей дорожке, трекер создает новую дорожку.
Любой новый трек начинается в предварительном состоянии. Если предварительной дорожке назначено достаточно обнаружений, ее статус изменяется на подтвержденный (см. ConfirmationThreshold свойство). Если обнаружение уже имеет известную классификацию (т.е. ObjectClassID поле возвращаемой дорожки ненулевое), что соответствующая дорожка подтверждается немедленно. Когда дорожка подтверждена, трекер считает, что дорожка представляет физический объект. Если обнаружения не назначены дорожке в пределах заданного количества обновлений, дорожка удаляется.
Для отслеживания целей с помощью этого объекта:
Создать trackerJPDA и задайте его свойства.
Вызовите объект с аргументами, как если бы это была функция.
Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.
создает tracker = trackerJPDAtrackerJPDA Системный объект со значениями свойств по умолчанию.
задает свойства для трекера, используя одну или несколько пар имя-значение. Например, tracker = trackerJPDA(Name,Value)trackerJPDA('FilterInitializationFcn',@initcvukf,'MaxNumTracks',100) создает многообъектный трекер, использующий фильтр Калмана с постоянной скоростью и допускающий максимум 100 дорожек. Заключите каждое имя свойства в кавычки.
Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.
Если свойство настраивается, его значение можно изменить в любое время.
Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.
TrackerIndex - Уникальный идентификатор трекера0 (по умолчанию) | неотрицательное целое числоУникальный идентификатор трекера, указанный как неотрицательное целое число. Это свойство используется в качестве SourceIndex в выходах трекера и различает дорожки, которые поступают от разных трекеров в системе с несколькими трекерами. Необходимо указать это свойство как положительное целое число, чтобы использовать выходные данные дорожки в качестве входных данных для фузера дорожки.
Пример: 1
FilterInitializationFcn - Функция инициализации фильтра@initcvekf (по умолчанию) | дескриптор функции | символьный векторФункция инициализации фильтра, заданная как дескриптор функции или как символьный вектор, содержащий имя допустимой функции инициализации фильтра. Трекер использует функцию инициализации фильтра при создании новых дорожек.
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 ®. Например:
typeinitcvekf
Примечание
trackerJPDA не принимает все функции инициализации фильтра в панели инструментов Sensor Fusion и Tracking. Полный список функций инициализации фильтра, доступных в Sensor Fusion и Tracking Toolbox, приведен в разделе Initialization (Инициализация) окна Estimation Filters (Фильтры оценки).
Типы данных: function_handle | char
MaxNumEvents - Значение k для k-best JPDAInf (по умолчанию) | положительное целое числоЗначение k для k-best JPDA, указанное как положительное целое число. Это свойство определяет максимальное количество возможных совместных событий для ассоциации отслеживания и обнаружения каждого кластера. Установка для этого свойства конечного значения позволяет запускать k-best JPDA-трекер, который генерирует максимум k событий на кластер.
Типы данных: single | double
EventGenerationFcn - Реализуемая функция создания совместных событий@jpdaEvents (по умолчанию) | дескриптор функции | символьный векторФункция генерации возможных совместных событий, заданная как дескриптор функции или как символьный вектор, содержащий имя функции генерации возможных совместных событий. Функция генерации генерирует возможные матрицы совместных событий из допустимых событий (обычно задаваемых матрицей проверки действительности или матрицей правдоподобия) сценария. Для получения более подробной информации см. jpadEvents.
Также можно написать собственную функцию генерации.
Если MaxNumEvents свойство имеет значение Inf, функция должна иметь следующий синтаксис:
FJE = myfunction(ValidationMatrix)
jpdaEvents. Если MaxNumEvents свойство имеет конечное значение, функция должна иметь следующий синтаксис:
[FJE,FJEProbs] = myfunction(likelihoodMatrix,k)
jpdaEvents.
Для получения рекомендаций по написанию этой функции используйте type для проверки деталей jpdaEvents:
type jpdaEventsПример:
@myfunction или 'myfunction'
Типы данных: function_handle | char
MaxNumTracks - Максимальное количество дорожек100 (по умолчанию) | положительное целое числоМаксимальное количество дорожек, которое может поддерживать трекер, указанное как положительное целое число.
Типы данных: single | double
MaxNumSensors - Максимальное количество датчиков20 (по умолчанию) | положительное целое числоМаксимальное количество датчиков, которые могут быть подключены к трекеру, указанное как положительное целое число. MaxNumSensors должно быть больше или равно наибольшему значению SensorIndex найдено во всех обнаружениях, использованных для обновления трекера. SensorIndex является свойством objectDetection объект. MaxNumSensors свойство определяет, сколько наборов ObjectAttributes каждая дорожка может иметь.
Типы данных: single | double
OOSMHandling - Обработка измерений вне последовательности (OOSM)'Terminate' (по умолчанию) | 'Neglect'Обрабатывать измерения вне последовательности (OOSM), указанные как 'Terminate' или 'Neglect'. Каждое обнаружение имеет связанную с ним временную метку td, и трекер имеет собственную временную метку tt, которая обновляется в каждом вызове. Трекер рассматривает измерение как OOSM, если td < tt.
Когда свойство указано как
'Terminate' - Трекер прекращает работу, когда он сталкивается с какими-либо неупорядоченными измерениями.
'Neglect' - Трекер игнорирует любые измерения вне последовательности и продолжает работать.
Примечание
Для трекера требуются все обнаруженные входные данные, которые являются общими SensorIndex имеют свои Time различия, ограниченные свойством TimeTolerance. При установке OOSMHandling свойство для 'Neglect', при запуске трекера необходимо убедиться в том, что при обнаружениях с нарушением последовательности метки времени строго меньше предыдущей метки времени.
Настраиваемый: Да
StateParameters - Параметры опорного кадра состояния путиstruct([]) (по умолчанию) | struct arrayПараметры опорного кадра состояния дорожки, заданные как структура или массив структуры. Трекер передает StateParameters значения свойств для StateParameters свойства созданных дорожек. Эти параметры можно использовать для определения опорной рамки, в которой сообщается о дорожке, или других требуемых атрибутов сгенерированных дорожек.
Например, можно использовать следующую структуру для определения прямоугольной опорной рамки, исходная позиция которой находится в [10 10 0] м и чья исходная скорость составляет [2-2 0] м/с относительно кадра сценария.
| Имя поля | Стоимость |
|---|---|
Frame | "Rectangular" |
Position | [10 10 0] |
Velocity | [2 -2 0] |
Настраиваемый: Да
Типы данных: struct
AssignmentThreshold - Порог назначения обнаружения30*[1 Inf] (по умолчанию) | положительный скаляр | вектор 1 на 2 положительных значенийПорог назначения обнаружения (или порог стробирования), заданный как положительный скаляр или вектор 1 на 2 для [C1, C2], где C1 ≤ C2. Если указано как скаляр, указанное значение, val, расширяется до [val ,Inf].
Первоначально трекер выполняет грубую оценку для нормализованного расстояния между всеми дорожками и обнаружениями. Трекер вычисляет только точное нормированное расстояние для комбинаций, грубое нормированное расстояние которых меньше C2. Кроме того, трекер может назначать обнаружение дорожке только в том случае, если точное нормализованное расстояние между ними меньше C1. См. раздел distance функция, используемая с фильтрами слежения (например, trackingCKF и trackingEKF) для пояснения расчета расстояния.
Совет:
Увеличьте значение C2, если существуют комбинации отслеживания и обнаружения, которые должны вычисляться для назначения, но не являются таковыми. Уменьшите это значение, если расчет затрат занимает слишком много времени.
Увеличьте значение C1, если есть обнаружения, которые должны быть назначены дорожкам, но не. Уменьшите это значение, если есть обнаружения, которые назначены дорожкам, которым они не должны быть назначены (слишком далеко).
DetectionProbability - Вероятность обнаружения0.9 (по умолчанию) | скаляр в диапазоне [0,1]Вероятность обнаружения, заданная как скаляр в диапазоне [0,1]. Это свойство используется при вычислениях предельных задних вероятностей ассоциации и вероятности существования трека при инициализации и обновлении трека.
Пример: 0.85
Типы данных: single | double
InitializationThreshold - Пороговое значение для инициализации дорожки0 (по умолчанию) | скаляр в диапазоне [0,1]Порог вероятности для инициализации новой дорожки, заданный как скаляр в диапазоне [0,1]. Если вероятности ассоциирования обнаружения с любой из существующих дорожек меньше, чем InitializationThreshold, обнаружение будет использоваться для инициализации новой дорожки. Это позволяет обнаружениям, которые находятся в пределах вентиля проверки подлинности дорожки, но имеют вероятность ассоциации ниже порога инициализации, порождать новую дорожку.
Пример: 0.1
Типы данных: single | double
TrackLogic - Тип логики подтверждения и удаления отслеживания'History' (по умолчанию) | 'Integrated'Логический тип подтверждения и удаления, указанный как:
'History' - Подтверждение и удаление трека основано на количестве назначений трека обнаружению в последних обновлениях трекера.
'Integrated' - Подтверждение и удаление трека основано на вероятности существования трека, которая интегрирована в функцию присвоения.
ConfirmationThreshold - Пороговое значение для подтверждения путиПорог подтверждения дорожки, заданный как скаляр или вектор 1 на 2. Пороговое значение зависит от типа логики подтверждения и удаления дорожки, установленной с помощью TrackLogic свойство:
'History' - Укажите порог подтверждения как вектор 1 на 2 [M
N]. Дорожка подтверждается, если она записала по меньшей мере М попаданий в последние N обновлений. trackerJPDA регистрирует попадание в логику истории трека согласно HitMissThrehold. Значение по умолчанию: [2 3].
'Integrated' - укажите порог подтверждения как скаляр. Дорожка подтверждается, если ее вероятность существования больше или равна порогу подтверждения. Значение по умолчанию: 0.95.
Типы данных: single | double
DeletionThreshold - Пороговое значение для удаления дорожкиПорог удаления дорожки, заданный как скаляр или действительный вектор 1 на 2. Пороговое значение зависит от типа логики подтверждения и удаления дорожки, установленной с помощью TrackLogic свойство:
'History' - Укажите порог подтверждения как [P
R]. Если, в P последнего R трекер обновляет, подтвержденная дорожка не назначается никакому обнаружению, которое имеет вероятность больше, чем HitMissThreshold свойство, то эта дорожка удаляется. Значение по умолчанию: [5,5].
'Integrated' - укажите порог удаления как скаляр. Дорожка удаляется, если ее вероятность существования падает ниже порогового значения. Значение по умолчанию: 0.1.
Пример: 0.2 или [5,6]
Типы данных: single | double
HitMissThreshold - Порог для регистрации попадания или промахаПорог для регистрации попадания или промаха, заданный как скаляр в диапазоне [0,1]. Логика истории дорожек регистрирует промах, и дорожка будет покрыта, если сумма предельных вероятностей назначений ниже HitMissThreshold. В противном случае логика истории дорожек регистрирует попадание.
Пример: 0.3
Чтобы включить этот аргумент, установите TrackLogic свойство для 'History'.
Типы данных: single | double
ClutterDensity - Пространственная плотность измерений загромождений1e-6 (по умолчанию) | положительный скалярПространственная плотность измерений загромождения, заданная как положительный скаляр. Плотность беспорядка описывает ожидаемое количество ложноположительных обнаружений на единицу объема. Используется в качестве параметра модели захламления Пуассона. Когда TrackLogic имеет значение 'Integrated', ClutterDensity также используется при вычислении начальной вероятности существования пути.
Пример: 1e-5
Типы данных: single | double
NewTargetDensity - Пространственная плотность новых целей1e-5 (по умолчанию) | положительный скалярПространственная плотность новых целей, заданная как положительный скаляр. Новая целевая плотность описывает ожидаемое количество новых дорожек на единицу объема в пространстве измерения. Используется при вычислении вероятности существования дорожки при инициализации дорожки.
Пример: 1e-3
Чтобы включить этот аргумент, установите TrackLogic свойство для 'Integrated'.
Типы данных: single | double
DeathRate - Временной коэффициент целевой смертности0.01 (по умолчанию) | скаляр в диапазоне [0,1]Временная скорость целевых смертей, заданная как скаляр в диапазоне [0,1]. DeathRate описывает вероятность исчезновения истинных целей. Он связан с распространением вероятности существования дорожки (PTE):
δtPTE (t)
где δt - интервал времени с момента предыдущего обновления t.
Чтобы включить этот аргумент, установите TrackLogic свойство для 'Integrated'.
Типы данных: single | double
InitialExistenceProbability - Начальная вероятность существования пути0.9 (по умолчанию) | скаляр в диапазоне [0,1]Это свойство доступно только для чтения.
Начальная вероятность существования дорожки, заданная как скаляр в диапазоне [0,1] и вычисленная как InitialExistenceProbability = NewTargetDensity*DetectionProbability/(ClutterDensity + NewTargetDensity*DetectionProbability).
Чтобы включить это свойство, установите значение TrackLogic свойство для 'Integrated'. Когда TrackLogic свойство имеет значение 'History', это свойство недоступно.
Типы данных: single | double
HasCostMatrixInput - Включить ввод матрицы затратfalse (по умолчанию) | trueВключить матрицу затрат, указанную как false или true. Если true, можно предоставить матрицу затрат назначения в качестве входного аргумента при вызове объекта.
Типы данных: logical
HasDetectableTrackIDsInput - Включение ввода обнаруживаемых идентификаторов дорожекfalse (по умолчанию) | trueВключить ввод обнаруживаемых идентификаторов дорожек при каждом обновлении объекта, указанном как false или true. Установить для этого свойства значение true если вы хотите предоставить список обнаруживаемых идентификаторов дорожек. Этот список информирует трекер обо всех дорожках, что датчики, как ожидается, обнаружат и, необязательно, вероятность обнаружения для каждой дорожки.
Типы данных: logical
NumTracks - Количество путей, обслуживаемых трекеромЭто свойство доступно только для чтения.
Количество дорожек, поддерживаемых трекером, возвращаемых как неотрицательное целое число.
Типы данных: single | double
NumConfirmedTracks - Количество подтвержденных путейЭто свойство доступно только для чтения.
Количество подтвержденных дорожек, возвращаемых как неотрицательное целое число. Если IsConfirmed поле выходной структуры пути true, трасса подтверждена.
Типы данных: single | double
TimeTolerance - Абсолютный допуск по времени между обнаружениями1e-5 (по умолчанию) | положительный скалярАбсолютный допуск по времени между обнаружениями для одного и того же датчика, заданный как положительный скаляр. В идеале, 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(___)
detections - Список обнаруженияobjectDetection объектыСписок обнаружения, указанный как массив ячеек objectDetection объекты. Time значение свойства каждого objectDetection объект должен быть меньше или равен текущему времени обновления, timeи больше предыдущего значения времени, использованного для обновления трекера. Также, Time различия между различными objectDetection объекты в массиве ячеек не обязательно должны быть равными.
time - Время обновленияВремя обновления, указанное как скаляр. Трекер обновляет все дорожки до этого времени. Единицы измерения в секундах.
time должно быть больше или равно наибольшему Time значение свойства objectDetection объекты на входе detections список. time должен увеличиваться с каждым обновлением трекера.
Типы данных: single | double
costMatrix - Матрица затратМатрица затрат, заданная как действительная матрица M-by-N, где M - количество существующих дорожек в предыдущем обновлении, а N - количество текущих обнаружений. Строки матрицы затрат должны находиться в том же порядке, что и список дорожек, а столбцы должны находиться в том же порядке, что и список обнаружений. Получить правильный порядок списка дорожек из третьего выходного аргумента, allTracks, при обновлении трекера.
При первом обновлении трекера или когда у трекера нет предыдущих треков, укажите матрицу затрат, которая должна быть пустой с размером [0,numDetections]. Следует отметить, что стоимость должна быть предоставлена так, чтобы более низкие затраты указывали на более высокую вероятность назначения обнаружения дорожке. Чтобы предотвратить присвоение определенных обнаружений определенным дорожкам, можно установить для соответствующей записи матрицы затрат значение Inf.
Чтобы включить этот аргумент, установите HasCostMatrixInput свойство для true.
Типы данных: double | single
detectableTrackIDs - Обнаруживаемые идентификаторы дорожекОбнаруживаемые идентификаторы дорожек, заданные как действительный вектор M-by-1 или матрица M-by-2. Обнаруживаемые дорожки - это дорожки, которые датчики ожидают обнаружить. Первый столбец матрицы содержит список идентификаторов дорожек, которые датчики сообщают как обнаруживаемые. Дополнительный второй столбец позволяет добавить вероятность обнаружения для каждой дорожки.
Дорожки, идентификаторы которых не включены в detectableTrackIDs считаются необнаруживаемыми. В этом случае логика удаления дорожки не засчитывает отсутствие обнаружения для этой дорожки как пропущенное обнаружение для целей удаления дорожки.
Чтобы включить этот входной аргумент, установите detectableTrackIDs свойство для true.
Типы данных: single | double
confirmedTracks - Подтвержденные трекиobjectTrack объекты | массив структурПодтвержденные дорожки, возвращенные в виде массива objectTrack объекты в MATLAB и возвращенные в виде массива структур при создании кода. При создании кода имена полей возвращаемой структуры совпадают с именами свойств objectTrack.
Дорожка подтверждается, если она удовлетворяет порогу подтверждения, указанному в ConfirmationThreshold собственность. В этом случае IsConfirmed свойство объекта или поля структуры true.
Типы данных: struct | object
tentativeTracks - Предварительные направленияobjectTrack объекты | массив структурПредварительные треки, возвращенные в виде массива objectTrack объекты в MATLAB и возвращенные в виде массива структур при создании кода. При создании кода имена полей возвращаемой структуры совпадают с именами свойств objectTrack.
Дорожка является предварительной, если она не удовлетворяет порогу подтверждения, указанному в ConfirmationThreshold собственность. В этом случае IsConfirmed свойство объекта или поля структуры false.
Типы данных: struct | object
allTracks - Все трекиobjectTrack объекты | массив структурВсе треки, возвращенные в виде массива objectTrack объекты в MATLAB и возвращенные в виде массива структур при создании кода. При создании кода имена полей возвращаемой структуры совпадают с именами свойств objectTrack. Все треки состоят из подтвержденных и предварительных треков.
Типы данных: struct | object
analysisInformation - Дополнительная информация для анализа обновлений отслеживанияДополнительная информация для анализа обновлений отслеживания, возвращенная в виде структуры. К полям этой структуры относятся:
| Область | Описание |
TrackIDsAtStepBeginning | Отслеживать идентификаторы при начале шага. |
CostMatrix | Матрица затрат для присвоения. |
UnassingedTracks | Идентификаторы неназначенных дорожек. |
UnassingedDetections | Индексы неназначенных обнаружений в |
Clusters | Массив ячеек отчетов кластера. |
InitiatedTrackIDs | Идентификаторы дорожек, инициированных во время шага. |
DeletedTrackIDs | Идентификаторы дорожек, удаленных во время шага. |
TrackIDsAtStepEnd | Отслеживать идентификаторы по завершении шага. |
Clusters может включать несколько кластерных отчетов. Каждый кластерный отчет представляет собой структуру, содержащую:
| Область | Описание |
DetectionIndices | Индексы кластеризованных обнаружений. |
TrackIDs | Отслеживать идентификаторы кластеризованных дорожек. |
ValidationMatrix | Матрица проверки кластера. Посмотрите jpadEvents для получения дополнительной информации. |
SensorIndex | Индекс исходного датчика кластеризованных обнаружений. |
TimeStamp | Средняя метка времени кластеризованных обнаружений. |
MarginalProbabilities | Матрица вероятностей ассоциации краевого заднего сустава. |
Типы данных: struct
Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:
release(obj)
trackerJPDApredictTracksToTime | Прогнозировать состояние дорожки |
getTrackFilterProperties | Получение свойств фильтра дорожки |
setTrackFilterProperties | Задать свойства фильтра дорожки |
initializeTrack | Инициализировать новую дорожку |
deleteTrack | Удалить существующую дорожку |
Создайте объект trackerJPDA с постоянной скоростью по умолчанию Расширенный фильтр Калмана и логика отслеживания «История». Установите значение AssignureThreshold равным 100, чтобы разрешить совместное связывание дорожек.
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');
![]()
Чтобы получить положение и скорость, создайте селекторы положения и скорости.
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
-----------------------------
![]()
Когда трекер JPDA обрабатывает обнаружения, создание и управление отслеживанием выполняются следующим образом.
Трекер разделяет обнаруженные сигналы на несколько групп с помощью исходного датчика.
Для каждого датчика:
Трекер вычисляет расстояния от обнаружений до существующих дорожек и формирует costMatrix.
Трекер создает проверочную матрицу на основе порога назначения (или порога перехода) существующих дорожек. Проверочная матрица - это двоичная матрица, в которой перечислены все возможные ассоциации обнаружения для отслеживания. Дополнительные сведения см. в разделе Возможные совместные события.
Затем дорожки и обнаружения разделяют на кластеры. Кластер может содержать одну дорожку или несколько дорожек, если эти дорожки имеют общие обнаружения в пределах их элементов проверки. Проверочный затвор - это пространственная граница, в которой предсказанное обнаружение дорожки имеет высокую вероятность падения. Дополнительные сведения см. в разделе Возможные совместные события.
Обновите все кластеры, следуя порядку средней временной метки обнаружения в кластере. Для каждого кластера трекер:
Создает все возможные совместные события. Для получения более подробной информации см. jpdaEvents.
Вычисляет заднюю вероятность каждого совместного события.
Вычисляет предельную вероятность каждой отдельной пары «обнаружение-дорожка» в кластере.
Сообщает о слабых обнаружениях. Слабые обнаружения - это обнаружения, которые находятся в пределах вентиля проверки, по крайней мере, одной дорожки, но имеют связь вероятности со всеми дорожками меньше, чем IntitializationThreshold.
Обновляет дорожки в кластере с помощью correctjpda.
Неназначенные обнаружения (их нет ни в одном кластере) и слабые обнаружения порождают новые дорожки.
Трекер проверяет все дорожки на удаление. Треки удаляются по количеству сканирований без связи с помощью 'History' логика или на основе их вероятности существования с использованием'Integrated' логика отслеживания.
Все треки прогнозируются до самого последнего значения времени (либо входного времени, если оно предоставлено, либо последней средней отметки времени кластера).
В типичном рабочем процессе для системы отслеживания трекер должен определить, может ли обнаружение быть связано с какой-либо из существующих дорожек. Если трекер поддерживает только одну дорожку, назначение может быть выполнено путем оценки проверочного затвора вокруг предсказанного измерения и принятия решения о том, попадает ли измерение в проверочный затвор. В пространстве измерения проверочный затвор представляет собой пространственную границу, такую как эллипс 2-D или эллипсоид 3-D, центрированный при прогнозируемом измерении. Проверочный вентиль определяется с использованием информации о вероятности (оценка состояния и ковариация, например) существующей дорожки, так что правильные или идеальные обнаружения имеют высокую вероятность (97% вероятность, например) попадания в этот проверочный вентиль.
Однако, если трекер поддерживает множество дорожек, процесс ассоциации данных становится более сложным, поскольку одно обнаружение может попасть в вентили проверки достоверности множества дорожек. Например, на следующем рисунке дорожки T1 и T2 активно поддерживаются в трекере, и каждая из них имеет свой вентиль проверки. Поскольку D2 обнаружения находится на пересечении вентилей проверки достоверности как T1, так и T2, две дорожки (T1 и T2) соединены и образуют кластер. Кластер - это набор подключенных дорожек и связанных с ними обнаружений.

Для представления отношения связи в кластере обычно используется матрица проверки. Каждая строка матрицы проверки соответствует обнаружению, в то время как каждый столбец соответствует дорожке. Для учета вероятности того, что каждое обнаружение будет загромождаться, добавляется первый столбец, который обычно называют «дорожкой 0» или T0. Если детектор Di находится внутри проверочного вентиля дорожки Dj, то (j, i + 1) запись проверочной матрицы равна 1. В противном случае он равен нулю. Для кластера, показанного на рисунке, проверочная матрица
Обратите внимание на то, что все элементы в первом столбце Λ равны 1, поскольку любое обнаружение может быть загроможденным или ложным. Важным шагом в логике ассоциации совместных вероятностных данных (JPDA) является получение всех возможных независимых совместных событий в кластере. Двумя предположениями для возможных совместных мероприятий являются:
Обнаружение не может быть выдано несколькими дорожками.
Во время одного сканирования датчик не может обнаружить дорожку более одного раза.
На основе этих двух предположений могут быть сформулированы возможные совместные события (FJE). Каждый FJE отображается на FJE-матрицу Startp из начальной проверочной матрицы Λ. Например, с помощью проверочной матрицы Λ можно получить восемь матриц FJE:
Как прямое следствие этих двух предположений, matrices Startp имеет ровно одно значение «1» на строку. Кроме того, за исключением первого столбца, отображаемого для загромождения, может быть не более одного «1» на столбец. Когда количество соединенных дорожек растет в кластере, количество FJE быстро увеличивается. jpdaEvents функция использует эффективный алгоритм поиска по глубине для генерации всех возможных матриц совместных событий.
[1] Фортманн, Т., Я. Бар-Шалом и М. Шеффе. «Сонарное отслеживание нескольких целей с использованием совместной вероятностной ассоциации данных». IEEE Journal of Ocean Engineering. Том 8, номер 3, 1983, стр. 173-184.
[2] Мусицки, Д. и Р. Эванс. «Совместная ассоциация комплексных вероятностных данных: JIPDA». Сделки IEEE по аэрокосмическим и электронным системам. Том 40, номер 3, 2004, стр. 1093-1099.
Примечания и ограничения по использованию:
См. Системные объекты в создании кода MATLAB (кодер MATLAB).
Все обнаруженные объекты, используемые в многообъектном трекере, должны иметь свойства одинаковых размеров и типов.
Если вы используете ObjectAttributes поле в пределах objectDetection необходимо указать это поле как ячейку, содержащую структуру. Структура для всех обнаружений должна иметь одинаковые поля, а значения в этих полях должны всегда иметь одинаковый размер и тип. Форма структуры не может изменяться во время моделирования.
Если ObjectAttributes содержатся в обнаружении, SensorIndex значение обнаружения не может быть больше 10.
Первое обновление для многообъектного трекера должно содержать по крайней мере одно обнаружение.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.