exponenta event banner

trackFuser

Однотеплетный фузер

Описание

trackFuser Система object™ предохраняет дорожки, генерируемые датчиками слежения или трекерами, и проектирует децентрализованные системы слежения. trackFuser использует алгоритм глобального ближайшего соседа (GNN) для поддержания единственной гипотезы об объектах, которые он отслеживает. Входные дорожки называются исходными или локальными дорожками, а выходные дорожки называются центральными дорожками.

Для слияния дорожек с использованием этого объекта:

  1. Создать trackFuser и задайте его свойства.

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

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

Создание

Описание

fuser = trackFuser создает track-to-track fuser, который использует алгоритм глобального ближайшего соседа (GNN) для поддержания единственной гипотезы об объектах, которые он отслеживает.

пример

fuser = trackFuser(Name,Value) задает свойства для fuser, используя одну или несколько пар имя-значение. Неопределенные свойства имеют значения по умолчанию. Заключите каждое имя свойства в отдельные кавычки.

Свойства

развернуть все

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

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

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

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

Пример: 2

Максимальное количество исходных конфигураций, которые может поддерживать fuser, указанное как положительное целое число.

Пример: 200

Конфигурации исходных систем, указанные как массив ячеек fuserSourceConfiguration объекты. Значением по умолчанию является 1-by-N массив ячеек fuserSourceConfiguration объекты, где N - значение MaxNumSources собственность. Это свойство можно указать во время создания как пару Имя (Name) - Значение (Value) или указать его после создания.

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

Алгоритм назначения, указанный как 'MatchPairs', 'Munkres', 'Jonker-Volgenant', 'Auction', или 'Custom'. Munkres является единственным алгоритмом назначения, который гарантирует оптимальное решение, но он также является самым медленным, особенно для большого количества обнаружений и дорожек. Другие алгоритмы не гарантируют оптимального решения, но могут быть быстрее для проблем с 20 или более дорожками и обнаружениями. Использовать'Custom' чтобы определить собственную функцию назначения и указать ее имя в CustomAssignmentFcn собственность.

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

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

 [assignments,unassignedCentral,unassignedLocal] = f(cost,costNonAssignment)
Пример функции назначения и описание ее аргументов см. в разделе assignmunkres.

Зависимости

Чтобы включить это свойство, установите значение Assignment свойство для 'Custom'.

Типы данных: function handle | string | char

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

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

Совет:

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

  • Увеличьте значение C1, если есть локальные дорожки, которые должны быть назначены центральным трассам, но не. Уменьшите его, если есть локальные дорожки, которые назначены центральным трассам, которым они не должны быть назначены (слишком далеко).

Функция перехода состояния, заданная как дескриптор функции. Эта функция вычисляет состояние на временном шаге k на основе состояния на временном шаге k-1.

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

    x(k) = f(x(k-1),dt)
    
    где:

    • x(k) - (Расчетное) состояние в момент времени k, задается как вектор или матрица. Если задано как матрица, то каждый столбец матрицы представляет один вектор состояния.

    • dt - Временной шаг для прогнозирования.

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

    x(k) = f(x(k-1),w(k-1),dt)
    где:

    • x(k) - (Расчетное) состояние в момент времени k, задается как вектор или матрица. Если задано как матрица, то каждый столбец матрицы представляет один вектор состояния.

    • w(k) - Технологический шум в момент времени k.

    • dt - Временной шаг для прогнозирования.

Пример: @constacc

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

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

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

    Jx(k) = statejacobianfcn(x(k),dt)
    
    где:

    • x(k) - (Расчетное) состояние в момент времени k, указанный как вектор M-by-1 вещественных значений.

    • dt - Временной шаг для прогнозирования.

    • Jx(k) - якобиан функции перехода состояния по отношению к государству, df/dx, оценивается в x(k). Якобиан возвращается в виде матрицы M-by-M.

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

    [Jx(k),Jw(k)] = statejacobianfcn(x(k),w(k),dt)
    
    где:

    • x(k) - (Расчетное) состояние в момент времени k, указанный как вектор M-by-1 вещественных значений.

    • w(k) - Технологический шум в момент времени k, заданный как вектор W-by-1 вещественных значений.

    • dt - Временной шаг для прогнозирования.

    • Jx(k) - якобиан функции перехода состояния по отношению к государству, df/dx, оценивается в x(k). Якобиан возвращается в виде матрицы M-by-M.

    • Jw(k) - якобиан функции перехода состояния по отношению к шуму процесса, df/dw, оценивается в x(k) и w(k). Якобиан возвращается в виде матрицы M-by-W.

Пример: @constaccjac

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

Ковариация шума процесса, заданная как положительный действительный скаляр или положительная определенная матрица.

  • Когда HasAdditiveProcessNoise является true, указать ковариацию шума процесса как положительный действительный скаляр или положительную определенную матрицу M-by-M. M - размерность вектора состояния. При задании в качестве скаляра матрица кратна единичной матрице M-by-M.

  • Когда HasAdditiveProcessNoise является falseукажите ковариацию шума процесса в виде матрицы W-by-W. W - размер вектора шума процесса.

Пример: [1.0 0.05; 0.05 2]

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

Опция моделирования технологического шума в качестве добавки, указанная как true или false. Когда это свойство true, к вектору состояния добавляется шум процесса. В противном случае шум включается в функцию перехода состояния.

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

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

Имя поляСтоимость
Frame"Rectangular"
Position[10 10 0]
Velocity[2 -2 0]

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

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

Порог для подтверждения центральной дорожки, указанный как положительное целое число M, или вектор 1 на 2 положительных целых чисел [M N] с M ≤ N. Центральная дорожка подтверждается , если она назначена локальным дорожкам не менее M раз за последние N обновлений. Если задано положительное целое число M, порог подтверждения увеличивается до [M, M].

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

Порог удаления центральной дорожки, указанный как положительное целое число P, или вектор 1 на 2 положительных целых чисел [P R] с P ≤ R. Центральная дорожка удаляется , если дорожка не назначена локальным дорожкам по крайней мере P раз в последних обновлениях R. Если задано положительное целое число P, порог подтверждения увеличивается до [P, P].

Пример: [5 6]

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

Предохранитель, подтвержденный только локальными путями, указанный как false или true. Установить для этого свойства значение false если вы хотите слить все локальные дорожки независимо от их статуса подтверждения.

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

Предохранитель, закачанный локальными путями, указанный как true или false. Установить для этого свойства значение true если вы хотите сплавить локальные трассы (IsCoasted поле или свойство localTracks вход - true). Установить для него значение false если вы хотите сплавить только локальные дорожки, которые не покрыты.

Пример: true

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

Алгоритм слияния состояний, указанный как:

  • 'Cross' - Использует алгоритм слияния перекрестных ковариаций

  • 'Intersection' - использует алгоритм слияния ковариационных пересечений

  • 'Custom' - Позволяет указать настраиваемую функцию слияния

Используйте StateFusionParameters для указания дополнительных параметров, используемых алгоритмом слияния состояний.

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

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

[fusedState,fusedCov] = f(trackState,trackCov)
[fusedState,fusedCov] = f(trackState,trackCov,fuseParams)
где:

  • trackState задается как матрица N-by-M. N - размерность состояния дорожки, а M - количество дорожек.

  • trackCov задается как матрица N-by-N-M. N - размерность состояния дорожки, а M - количество дорожек.

  • fuseParams является необязательными параметрами, определенными в StateFusionParameters собственность.

  • fusedState возвращается как вектор N-by-1.

  • fusedCov возвращается в виде матрицы N-к-N.

Зависимости

Чтобы включить это свойство, установите значение StateFusion свойство для 'Custom'.

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

Параметры функции слияния состояний. В зависимости от выбора StateFusion алгоритм, можно указать StateFusionParameters как:

  • Если StateFusion является 'Cross', укажите его как скаляр в (0,1). Посмотрите fusexcov для получения дополнительной информации.

  • Если StateFusion является 'Intersection', укажите его как 'det' или 'trace'. Посмотрите fusecovint для получения дополнительной информации.

  • Если StateFusion является 'Custom', можно указать эти параметры в любом типе переменной, если они соответствуют настройке необязательного fuseParams ввод функции слияния пользовательских состояний, указанной в CustomStateFusionFcn собственность.

По умолчанию свойство пустое.

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

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

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

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

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

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

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

Описание

confirmedTracks = fuser(localTracks,tFusion) возвращает список подтвержденных дорожек из списка локальных дорожек. Подтвержденные дорожки прогнозируются до времени обновления, tFusion.

[confirmedTracks,tentativeTracks,allTracks,analysisInformation] = fuser(localTracks,tFusion) также возвращает список предварительных дорожек, список всех дорожек и информацию анализа.

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

развернуть все

Локальные дорожки, указанные как массив objectTrack объекты или массив структур с именами полей, которые соответствуют именам свойств objectTrack объект. Локальные дорожки - это дорожки, генерируемые трекерами в системе исходных дорожек.

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

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

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

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

развернуть все

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

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

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

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

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

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

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

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

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

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

Отслеживать идентификаторы при начале шага

CostMatrix

Матрица стоимости назначения

Assignments

Назначения, возвращенные функцией назначения

UnassignedCentralTracks

Идентификаторы неприсвоенных центральных путей

UnassignedLocalTracks

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

NonInitializingLocalTracksИдентификаторы локальных дорожек, которые не были назначены, но не использовались для инициализации центральной дорожки
InitiatedCentralTrackIDs

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

UpdatedCentralTrackIDsИдентификаторы центральных дорожек, обновленные во время шага
DeletedTrackIDs

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

TrackIDsAtStepEnd

Идентификаторы центральных дорожек по окончании шага

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

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

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

release(obj)

развернуть все

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

Примеры

свернуть все

Определите два источника отслеживания: один внутренний и один внешний. SourceIndex каждый источник должен быть уникальным.

internalSource = fuserSourceConfiguration(1,'IsInternalSource',true);
externalSource = fuserSourceConfiguration(2,'IsInternalSource',false);

Создать trackFuser с FuserIndex равно 3. Фузер принимает два источника, определенные выше, и использует 'Cross' StateFusion модель.

fuser = trackFuser('FuserIndex',3, 'MaxNumSources',2, ...
       'SourceConfigurations',{internalSource;externalSource}, ...
       'StateFusion','Cross');

Обновите фузер двумя дорожками из двух источников. Используйте 3-D состояние постоянной скорости, в котором состояния задаются в порядке [x; vx; y; vy; z; vz]. Состояния двух дорожек одинаковы, но их ковариации различны. Для первого трека создайте большую ковариацию в оси X. Для второго трека создайте большую ковариацию в оси Y.

tracks = [objectTrack('SourceIndex',1,'State',[10;0;0;0;0;0], ...
          'StateCovariance',diag([100,1000,1,10,1,10])); ...
          objectTrack('SourceIndex',2,'State',[10;0;0;0;0;0], ...
          'StateCovariance',diag([1,10,100,1000,1,10]))];

Сплавить дорожку со временем слияния, равным 0.

time = 0;
confirmedTracks = fuser(tracks,time);

Получение положений и ковариаций положения исходных дорожек и подтвержденных дорожек.

positionSelector = [1 0 0 0 0 0; 0 0 1 0 0 0; 0 0 0 0 1 0]; % [x; y; z]
[inputPos,inputCov] = getTrackPositions(tracks,positionSelector);
[outputPos,outputCov] = getTrackPositions(confirmedTracks,positionSelector);

Визуализация результатов с помощью trackPlotter.

 tPlotter = theaterPlot('XLim',[0, 20],'YLim',[-10, 10],'ZLim',[-10, 10]);
 tPlotter1 = trackPlotter(tPlotter,'DisplayName','Input Tracks','MarkerEdgeColor','blue');
 tPlotter2 = trackPlotter(tPlotter,'DisplayName','Fused Tracks','MarkerEdgeColor','green');
 
 plotTrack(tPlotter1,inputPos,inputCov)
 plotTrack(tPlotter2,outputPos,outputCov)
 title('Cross-covariance fusion')

Figure contains an axes. The axes with title Cross-covariance fusion contains 2 objects of type line. These objects represent Input Tracks, Fused Tracks.

Ссылки

[1] Блэкман, С. и Пополи, Р., 1999. Проектирование и анализ современных систем слежения (Книга). Норвуд, Массачусетс: Artech House, 1999.

[2] Чонг, Чи-И, Сёдзо Мори, Уильям Х. Баркер и Куо-Чу Чанг. «Архитектуры и алгоритмы для ассоциации и слияния дорожек». IEEE Aerospace and Electronic Systems Magazine 15, No. 1 (2000): 5-13.

[3] Тянь, Синь, Яаков Бар-Шалом, Д. Чукрун, Я. Ошман, Дж. Тьенель и М. Идан. «Обзор Fusion-архитектур Track-to-Track». В книге «Достижения в области оценки, навигации и управления космическими аппаратами». Спрингер, 2015.

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

.
Представлен в R2019b