Совместный вероятностный трекер ассоциации данных
The 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
в выходах трекера и различает треки, которые поступают от разных трекеров в системе с несколькими трекерами. Вы должны задать это свойство как положительное целое число, чтобы использовать выходы дорожки в качестве входов для track fuser.
Пример: 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® функций. Для примера:
type
initcvekf
Примечание
trackerJPDA
не принимает все функции инициализации фильтра в Sensor Fusion and Tracking Toolbox. Полный список функций инициализации фильтра, доступных в Sensor Fusion and Tracking Toolbox, приведен в Initialization разделе Оценочных фильтров.
Типы данных: function_handle
| char
MaxNumEvents
- Значение k для k-best JPDAInf
(по умолчанию) | положительное целое числоЗначение k для k-лучшего JPDA, заданное в виде положительного целого числа. Это свойство определяет максимальное количество допустимых совместных событий для ассоциации track и detection каждого кластера. Установка этого свойства на конечное значение позволяет вам запустить k-лучший 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
объект. The MaxNumSensors
свойство определяет, сколько наборов ObjectAttributes
каждая дорожка может иметь.
Типы данных: single
| double
OOSMHandling
- Указатель измерений вне последовательности (OOSM)'Terminate'
(по умолчанию) | 'Neglect'
Обработайте измерение вне последовательности (OOSM), заданное как 'Terminate'
или 'Neglect'
. Каждое обнаружение имеет сопоставленную с ним временную метку, t d, и у трекера есть своя временная метка, t t, которая обновляется в каждом вызове. Трекер рассматривает измерение как OOSM, если t d < t t.
Когда свойство задано как
'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 [C 1 ,C 2], где C 1 ≤ C 2. Если задано в виде скаляра, заданное значение, val, расширяется до [val, Inf
].
Первоначально трекер выполняет грубую оценку нормированного расстояния между всеми треками и обнаружениями. Трекер вычисляет только точное нормированное расстояние для комбинаций, грубое нормированное расстояние которых меньше C 2. Кроме того, трекер может только назначить обнаружение дорожке, если точное нормированное расстояние между ними меньше C 1. См. distance
функция, используемая с отслеживающими фильтрами (такими как trackingCKF
и trackingEKF
) для пояснения расчета расстояния.
Совет:
Увеличьте значение C 2, если существуют комбинации дорожки и обнаружения, которые должны быть рассчитаны для назначения, но не являются. Уменьшите это значение, если вычисление стоимости занимает слишком много времени.
Увеличьте значение C 1, если есть обнаружения, которые должны быть назначены трекам, но не имеют. Уменьшите это значение, если есть обнаружения, которые назначены трекам, которым они не должны быть назначены (слишком далеко ).
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]. Трек подтверждается, если он записал хотя бы M хитов в последних обновлениях N. The trackerJPDA регистрирует хит в логике истории трека согласно
HitMissThrehold
. Значение по умолчанию [2 3]
.
'Integrated'
- Задайте порог подтверждения как скаляр. Дорожка подтверждается, если ее вероятность существования больше или равна порогу подтверждения. Значение по умолчанию 0.95
.
Типы данных: single
| double
DeletionThreshold
- Порог для удаления дорожкиПорог для удаления дорожки, заданное как скаляр или действительный вектор 1 на 2. Порог зависит от типа логики подтверждения и удаления дорожки, установленной в TrackLogic
свойство:
'History'
- Задайте порог подтверждения как [P
R]. Если, в P последнего
R
tracker обновляется, подтвержденный трек не назначается никакому обнаружению, которое имеет вероятность больше, чем 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):
где δ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
объекты. The 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 | Отслеживайте идентификаторы, когда шаг закончен. |
The Clusters
поле может включать несколько отчетов кластеров. Каждый отчет кластера представляет собой структуру, содержащую:
Область | Описание |
DetectionIndices | Индексы кластеризованных обнаружений. |
TrackIDs | Отслеживайте идентификаторы кластеризованных дорожек. |
ValidationMatrix | Матрица валидации кластера. Посмотрите jpadEvents для получения дополнительной информации. |
SensorIndex | Индекс исходного датчика кластеризованных обнаружений. |
TimeStamp | Средняя метка времени кластеризованных обнаружений. |
MarginalProbabilities | Матрица краевых вероятностей ассоциации апостериорных соединений. |
Типы данных: struct
Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj
, используйте следующий синтаксис:
release(obj)
trackerJPDA
predictTracksToTime | Предсказать состояние дорожки |
getTrackFilterProperties | Получите свойства фильтра дорожек |
setTrackFilterProperties | Установите свойства фильтра дорожки |
initializeTrack | Инициализация новой дорожки |
deleteTrack | Удалить существующий трек |
Создайте объект 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');
Чтобы получить положение и скорость, создайте селекторы положения и скорости.
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% вероятность, для примера) попадания в эту логическую матрицу валидации.
Однако, если трекер поддерживает несколько треков, процесс ассоциации данных становится более сложным, потому что одно обнаружение может попадать в ворота валидации нескольких треков. Например, на следующем рисунке треки T 1 и T 2 активно поддерживаются в трекере, и у каждого из них есть свои ворота валидации. Поскольку D 2 обнаружения находится в пересечении ворот валидации обоих T 1 и T 2, две дорожки (T 1 и T 2) соединяются и образуют кластер. Кластер является набором связанных дорожек и связанных с ними обнаружений.
Для представления связи связи в кластере обычно используется матрица валидации. Каждая строка матрицы валидации соответствует обнаружению, в то время как каждый столбец соответствует дорожке. Для расчета вероятности того, что каждое обнаружение является загроможденным, добавляется первый столбец, который обычно упоминается как «Track 0» или T 0. Если D обнаружения i находится внутри врата валидации дорожки D j, то запись (j, i + 1) матрицы валидации 1. В противном случае он равен нулю. Для кластера, показанного на рисунке, матрица валидации
Обратите внимание на то, что все элементы в первом столбце И равны 1, потому что любое обнаружение может быть загромождением или ложным предупреждением. Одним из важных шагов в логике совместной вероятностной ассоциации данных (JPDA) является получение всех допустимых независимых совместных событий в кластере. Два предположения для допустимых совместных событий:
Обнаружение не может быть вызвано несколькими дорожками.
Дорожка не может быть обнаружена более одного раза датчиком во время одного скана.
На основе этих двух предположений могут быть сформулированы возможные совместные события (FJE). Каждый FJE сопоставлен с матрицей A p FJE из исходной матрицы А валидации. Для примера с матрицей валидации
Как прямое следствие этих двух предположений, у Ωp матриц есть точно одно «1» значение за строку. Кроме того, за исключением первого столбца, который сопоставляется с загромождением, может быть не более одного «1» на столбец. Когда количество подключенных дорожек растет в кластере, количество FJE быстро увеличивается. jpdaEvents
функция использует эффективный алгоритм поиска глубины первый, чтобы сгенерировать все допустимые совместные матрицы событий.
[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.
Указания и ограничения по применению:
Смотрите Системные объекты в Генерации кода MATLAB (MATLAB Coder).
Все обнаружения, используемые с многообъектным трекером, должны иметь свойства с одинаковыми размерами и типами.
Если вы используете ObjectAttributes
поле в objectDetection
объект, необходимо задать это поле как камера, содержащее структуру. Структура для всех обнаружений должна иметь одинаковые поля, а значения в этих полях должны всегда иметь одинаковый размер и тип. Форма структуры не может измениться во время симуляции.
Если ObjectAttributes
содержатся в обнаружении, SensorIndex
значение обнаружения не может быть больше 10.
Первое обновление трекера мультиобъекта должно содержать хотя бы одно обнаружение.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.