trackFuser

Фузер «трек-трек» с одной гипотезой

Описание

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

Чтобы сплавить дорожки, используя этот объект:

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

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

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

Создание

Описание

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

пример

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

Свойства

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

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

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

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

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

Пример: 2

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

Пример: 200

Строения исходных систем, заданные как массив ячеек fuserSourceConfiguration объекты. Значение по умолчанию является массивом ячеек N 1 байт fuserSourceConfiguration объекты, где N является значением MaxNumSources свойство. Можно задать это свойство во время создания как паре "имя-значение" или задать его после создания.

Типы данных: 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 значения [C 1 ,C 2], где C 1 ≤ C 2. Если задано в виде скаляра, заданное значение, val, расширяется до [val, Inf].

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

Совет:

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

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

Функция перехода состояния, заданная как указатель на функцию. Эта функция вычисляет состояние в временной шаг 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 vector целых чисел [<reservedrangesplaceholder9> <reservedrangesplaceholder8>] с <reservedrangesplaceholder7> <reservedrangesplaceholder6> <reservedrangesplaceholder5>. Центральный трек подтверждается, если он назначается локальным трекам по крайней мере M раз за последние обновления N. Если задано положительное целое число M, порог подтверждения расширяется до [M, M].

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

Порог для центрального удаления следа, определенного как положительное целое число P, или положительных 1 на 2 vector целых чисел [<reservedrangesplaceholder9> <reservedrangesplaceholder8>] с <reservedrangesplaceholder7> <reservedrangesplaceholder6> <reservedrangesplaceholder5>. Центральная дорожка удаляется, если дорожка не назначена локальным трекам по крайней мере 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 -by N.

Зависимости

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

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

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

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

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

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

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

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

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

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

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

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

Типы данных: 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

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

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

release(obj)

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

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

Примеры

свернуть все

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

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

Создайте trackFuser с FuserIndex равным 3. fuser принимает два источника, определенных выше, и использует '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] Blackman, S. and Popoli, R., 1999. Проект и анализ современных систем слежения (Книга). Norwood, MA: Artech House, 1999.

[2] Chong, Chee-Yee, Shozo Mori, William H. Barker, and Kuo-Chu Chang. «Архитектуры и алгоритмы объединения треков и слияния». IEEE Aerospace and Electronic Systems Magazine 15, № 1 (2000): 5-13.

[3] Tian, Xin, Yaakov Bar-Shalom, D. Choukroun, Y. Oshman, J. Thienel, and M. Idan. «Track-to-Track Fusion Architectures-A Review». В книге «Усовершенствований в оценке, навигации и управлении космическими аппаратами». Спрингер, 2015.

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

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