trackFuser

Термофиксатор от дорожки к дорожке одно гипотезы

Описание

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

Плавить дорожки с помощью этого объекта:

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

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Описание

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

пример

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

Свойства

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

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

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

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

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

Пример 2

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

Пример: 200

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

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

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

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

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

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

Зависимости

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

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

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

Первоначально, термофиксатор выполняет крупную оценку для нормированного расстояния между всеми локальными и центральными дорожками. Термофиксатор только вычисляет точное нормированное расстояние для локальных и центральных комбинаций, крупное нормированное расстояние которых меньше C 2. Кроме того, термофиксатор может только присвоить локальную дорожку центральной дорожке, если их точное нормированное расстояние меньше 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, шум процесса добавляется к вектору состояния. В противном случае шум включен в функцию изменения состояния.

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

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

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

Типы данных: логический

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

Пример: true

Типы данных: логический

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

  • '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 свойство.

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

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

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

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

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

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

release(obj)

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

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

Примеры

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

Задайте два источника отслеживания: одно внутреннее и одно внешнее. 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')

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

Введенный в R2019b