trackerTOMHT

Мультигипотеза, мультисенсорный, многообъектный трекер

Описание

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

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

Чтобы отследить объекты с помощью трекера с несколькими гипотезами:

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

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

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

Создание

Описание

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

пример

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

Свойства

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

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

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

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

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

Пример: 1

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

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

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

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

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

Чтобы помочь вам в написании этой функции, вы можете изучить детали поставляемых функций из MATLAB®. Для примера:

type initcvekf

Типы данных: 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' - Трекер пренебрегает любыми несовпадающими измерениями и продолжает запускаться.

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

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

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

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

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

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

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

Пример: 10

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

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

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

Максимальное количество сканов, поддерживаемых в истории ветвей, задается как положительное целое число. Количество сканов истории дорожек обычно составляет от 2 до 6. Большие значения увеличивают вычислительную нагрузку.

Пример: 6

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

Порог назначения обнаружения, заданный как положительный скаляр, вектор 1 на 3 не уменьшающихся положительных значений, [C 1, C 2, C 3] или вектор an1 на 4 не уменьшающихся положительных значений, [C 1, C 2, C 3, C 4]. Если задано в виде скаляра, заданное значение, val, будет расширено до [0,3,0,7,1, Inf] * val. Если задано как [C 1, C 2, C 3], то оно будет развернуто как [C 1, C 2, C 3, Inf].

Пороги управляют (1) присвоением обнаружения дорожке, (2) созданием новой ветви от обнаружения и (3) созданием новой ветви от неназначенной дорожки. Пороговые значения должны удовлетворить: <<reservedrangesplaceholder6> 1 <reservedrangesplaceholder5> <reservedrangesplaceholder4> 2 <reservedrangesplaceholder3> <reser vedrangesplaceholder2> 3 <reservedrangesplaceholder1> <reservedrangesplaceholder0> 4 .

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

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

  • C 3 определяет максимальное расстояние для назначения обнаружения дорожке.

  • C 4 определяет комбинации дорожки и обнаружения, для которых выполняется точное нормированное вычисление затрат. Первоначально трекер выполняет грубую оценку нормированного расстояния между всеми треками и обнаружениями. Трекер вычисляет только точное нормированное расстояние для комбинаций, грубое нормированное расстояние которых меньше C 4.

Совет:

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

  • Увеличение значений C 1 и C 2 помогает контролировать количество созданных ветвей дорожки. Однако это уменьшает количество ветвей (гипотез), которые имеет каждая дорожка.

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

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

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

Пример: 12

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

Максимальное падение счета перед удалением дорожки, заданное как скаляр. Любой трек с счетом, который падает больше, чем этот параметр, из максимального счета удаляется. На порог удаления влияет вероятность ложного предупреждения.

Пример: 12

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

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

Пример: 0.5

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

Вероятность ложного предупреждения, заданная как скаляр. Это свойство используется для вычисления счета трека.

Пример: 1e-5

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

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

Пример: 2.5

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

Объем интервала измерения датчика, заданный как положительная скалярная величина. Для примера, если радар производит 4-D измерение, которое включает азимут, повышения, диапазон и скорость области значений, объем 4-D определяется шириной углового луча радара, шириной интервала диапазона и шириной интервала уровня области значений. Объем используется при вычислении счета дорожки при инициализации и обновлении дорожки.

Пример: 1.5

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

Минимальная вероятность, необходимая для сохранения трека, заданная как положительная скалярная величина менее единицы. Любая дорожка с меньшей вероятностью обрезается. Типичные значения: от 0,001 до 0,005.

Пример: .003

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

Метод обрезки N-сканирования, заданный как 'None' или 'Hypothesis'. При обрезке N-сканирования ветви, которые относятся к одной дорожке, обрезаются (удаляются), если в истории N-сканирований они противоречат наиболее вероятной ветви для той же дорожки. Наиболее вероятная ветвь определяется одним из двух способов:

  • 'None' - обрезка N-образного сканирования не выполняется.

  • 'Hypothesis' - Выбранная ветвь находится в наиболее вероятной гипотезе.

Пример: 'Hypothesis'

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

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

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

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

Отследите метод выхода, заданный как 'Tracks', 'Hypothesis', или 'Clusters'.

  • 'Tracks' - Вывод центроида каждой дорожки на основе ее ветвей дорожки.

  • 'Hypothesis' - Выходные ветви, которые находятся в определенных гипотезах. Если вы выбираете эту опцию, перечислите гипотезы, которые нужно вывести с помощью HypothesesToOutput свойство.

  • 'Clusters' - Вывод центроида каждого кластера. Подобно 'Tracks' выход, но включает все дорожки в кластере.

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

Индексы выводимых гипотез, заданные как массив положительных целых чисел. Все индексы должны быть меньше или равны максимальному количеству гипотез, предоставленных трекером.

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

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

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

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

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

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

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

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

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

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

Описание

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

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

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

confirmedTracks = tracker(___,detectableBranchIDs) также задает список ожидаемых обнаруживаемых ветвей, detectableBranchIDs.

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

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

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

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

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

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

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

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

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

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

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

Зависимости

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

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

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

Ветви, идентификаторы которых не включены в detectableBranchIDs рассматриваются как неопределяемые. Логика удаления дорожки не рассчитывает отсутствие обнаружения как 'miss' в целях удаления ветви.

Зависимости

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

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

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

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

Подтвержденные дорожки, возвращенные как массив objectTrack объекты в MATLAB и возвращенные как массив структур в генерации кода. При генерации кода имена полей возвращаемой структуры совпадают с именами свойства objectTrack.

Дорожка подтверждается, если она удовлетворяет порогу подтверждения, указанному в ConfirmationThreshold свойство. В этом случае IsConfirmed свойство объекта или поля структуры true.

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

Ориентировочные дорожки, возвращенные как массив objectTrack объекты в MATLAB и возвращенные как массив структур в генерации кода. При генерации кода имена полей возвращаемой структуры совпадают с именами свойства objectTrack.

Дорожка является ориентировочной, если она не удовлетворяет порогу подтверждения, указанному в ConfirmationThreshold свойство. В этом случае IsConfirmed свойство объекта или поля структуры false.

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

Все треки, возвращенные как массив objectTrack объекты в MATLAB и возвращенные как массив структур в генерации кода. При генерации кода имена полей возвращаемой структуры совпадают с именами свойства objectTrack. Все треки состоят из подтверждённых и ориентировочных треков.

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

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

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

Идентификаторы ветвей при начале обновления.

CostMatrix

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

Assignments

Назначения, возвращенные из assignTOMHT.

UnassignedTracks

Идентификаторы неназначенных ветвей, возвращенные с трекера

UnassignedDetections

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

InitialBranchHistory

История ветви после ответвления и до обрезки.

InitialBranchScores

Ветви счетов перед обрезкой.

KeptBranchHistory

История ветви после начальной обрезки.

KeptBranchScores

Счета ветви после начальной обрезки.

Clusters

Логический массив, сопоставляющий ветви с кластерами. Ветви относятся к одному и тому же кластеру, если они имеют общий доступ к обнаружениям в своей истории или относятся к одной и той же дорожке, непосредственно или через другие ветви. Такие ветви несовместимы.

TrackIncompatibility

Матрица несовместимости ветвей. The (i,j) элемент true, если i -th и j -th ветви имеют общие обнаружения в своей истории или относятся к одной дорожке.

GlobalHypotheses

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

GlobalHypScoresОбщий счет глобальных гипотез.
PrunedBranches

Логический массив ветвей, которые pruneTrackBranches функция определяет, чтобы быть обрезанной.

GlobalBranchProbabilities

Глобальная вероятность каждой ветви, существующей в глобальных гипотезах.

BranchesDeletedByPruning

Ветви, удаленные трекером.

BranchIDsAtStepEnd

Идентификаторы ветвей, когда обновление закончилось.

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

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

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

release(obj)

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

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

Примеры

свернуть все

Создайте trackerTOMHT Системный объект с функцией инициализации фильтра Калмана с постоянной скоростью, initcvkf.

tracker = trackerTOMHT('FilterInitializationFcn',@initcvkf, ...
    'ConfirmationThreshold',20, ...
    'DeletionThreshold',-7, ...
    'MaxNumHypotheses',10);

Обновите трекер с двумя обнаружениями, не имеющими нуля ObjectClassID. Обнаружения сразу создают подтвержденные дорожки.

detections = {objectDetection(1,[10;0],'SensorIndex',1, ...
    'ObjectClassID',5,'ObjectAttributes',{struct('ID',1)}); ...
    objectDetection(1,[0;10],'SensorIndex',1, ...
    'ObjectClassID',2,'ObjectAttributes',{struct('ID',2)})};
time = 2;
tracks = tracker(detections,time);

Найдите и отобразите положения и скорости.

positionSelector = [1 0 0 0; 0 0 1 0];
velocitySelector = [0 1 0 0; 0 0 0 1];
positions = getTrackPositions(tracks,positionSelector)
positions = 2×2

   10.0000         0
         0   10.0000

velocities = getTrackVelocities(tracks,velocitySelector)
velocities = 2×2

     0     0
     0     0

Алгоритмы

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

Ссылки

[1] Вертманн, Дж. Р.. «Пошаговое описание вычислительно эффективной версии отслеживания нескольких гипотез». В Международном обществе оптики и фотоники, том 1698, стр. 228 - 301, 1992.

[2] Блэкмен, С. и Р. Пополи. Проект и анализ современных систем слежения. Artech House Radar Library, Бостон, 1999.

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

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