trackingArchitecture

Отслеживание системной архитектуры

Описание

The trackingArchitecture Системная object™ позволяет вам систематически моделировать архитектуру системы слежения, состоящей из трекеров и трек-фузеров.

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

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

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

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

Создание

Синтаксис

Описание

пример

ta = trackingArchitecture создает trackingArchitecture Системный объект, который позволяет вам проектировать систему слежения, состоящую из датчиков, трекеров и трек-фузеров.

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

  • Используйте addTrackFuser функция для добавления track fuser к архитектуре и подключения добавленного track fuser с трекерами и входами архитектуры.

  • Используйте summary функция, чтобы перечислить все трекеры и фузеры в архитектуре и показать, как они связаны с входами и выходами архитектуры.

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

Свойства

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

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

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

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

Список трекеров, заданный как массив ячеек трекеров. Каждый элемент камеры является одним из следующих объектов трекера:

Можно также использовать пользовательский трекер, наследующий от fusion.trackingArchitecture.Tracker класс.

Список track fusers, заданный как массив ячеек trackFuser объекты.

Можно также использовать пользовательский track fuser, наследующий от fusion.trackingArchitecture.TrackFuser класс.

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

Описание

пример

[tracks1,...,tracksN] = ta(detections,sourceTracks,time) запускает trackingArchitecture объект, ta, и возвращает подтвержденные дорожки.

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

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

Список обнаружений, заданный как массив objectDetection объекты, массив ячеек objectDetection объекты или массив структур. Если указано в качестве структур, имена полей каждой структуры должны совпадать с именами свойства objectDetection объект. Архитектура маршрутизирует обнаружение на трекер, чья соответствующая ArchitectureInputs значения в архитектуре содержат SensorIndex значение обнаружения.

Исходные дорожки, заданные как массив objectTrack объекты или массив структур. Если указано в качестве структур, имена полей каждой структуры должны совпадать с именами свойства objectTrack объект. Архитектура маршрутизирует исходную дорожку к фузеру, чья соответствующая FuserInputs значения в архитектуре содержат SourceIndex значение дорожки.

Используйте SourceConfigurations свойство trackFuser для определения входных источников фузера.

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

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

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

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

Дорожки из архитектуры выхода Nth, возвращенные как массив objectTrack объекты в MATLAB®, и возвращается как массив структур в генерации кода. При генерации кода имена полей возвращаемой структуры совпадают с именами свойства objectTrack. tracksN сгенерирован от трекера или трек-фьюзера, чья соответствующая ArchitectureOutput значение в архитектуре равно N.

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

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

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

release(obj)

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

addTrackerДобавьте трекер в архитектуру отслеживания
addTrackFuserДобавьте track fuser в архитектуру отслеживания
summaryОтображение табличных сводных данных архитектуры отслеживания
showПоказать архитектуру отслеживания на рисунке
stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
isLockedОпределите, используется ли системный объект
cloneСоздайте повторяющийся системный объект
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

Создайте архитектуру отслеживания.

ta = trackingArchitecture;

Создайте trackerGNN объект. Трекер принимает входы обнаружения с датчиков 1 и 2. Добавьте трекер в архитектуру отслеживания.

tracker1 = trackerGNN('TrackerIndex',1);
addTracker(ta,tracker1,'SensorIndices',[1,2]);

Создайте trackerPHD объект. Трекер принимает входы обнаружения с датчиков 3 и 4. Добавьте трекер в архитектуру отслеживания и отключите его прямой выход.

tracker2 = trackerPHD('TrackerIndex',2,'SensorConfigurations',...
    {trackingSensorConfiguration(3),trackingSensorConfiguration(4)});
addTracker(ta,tracker2,'ToOutput',false); % Disable ouput

Создайте trackFuser объект. Трек-фьюзер берёт входы с двух трекеров.

fuser = trackFuser('FuserIndex',3,'SourceConfigurations',...
    {fuserSourceConfiguration(1),fuserSourceConfiguration(2)});
addTrackFuser(ta,fuser);

Отображение сводных данных архитектуры отслеживания.

sum = summary(ta)
sum=3×4 table
         System          ArchitectureInputs       FuserInputs        ArchitectureOutput
    _________________    __________________    __________________    __________________

    {'T1:trackerGNN'}        {'1  2'  }        {'Not applicable'}       {[       1]}   
    {'T2:trackerPHD'}        {'3  4'  }        {'Not applicable'}       {0x0 double}   
    {'F3:trackFuser'}        {0x0 char}        {'1  2'          }       {[       2]}   

Показать архитектуру отслеживания.

show(ta)

Figure contains an axes. The axes with title Tracking Architecture: ta contains 38 objects of type rectangle, text, line, patch.

Эта архитектура имеет два трекера:

  • Трекер 1: a trackerGNN который принимает обнаружения от датчиков 1 и 2.

  • Трекер 2: a trackerJPDA который принимает обнаружения от датчика 3.

Оба трекера передают треки в trackFuser который также принимает дорожки непосредственно от датчика 4 слежения.

Создайте trackingArchitecure объект. Добавьте два трекера с заданными индексами датчика.

ta = trackingArchitecture; 
addTracker(ta,trackerGNN('TrackerIndex',1),'SensorIndices',[1 2]);
addTracker(ta,trackerJPDA('TrackerIndex',2),'SensorIndices',3);

Создайте trackFuser. Укажите его источники с помощью SourceConfigurations свойство. Добавьте fuser к архитектуре отслеживания.

fuser = trackFuser('FuserIndex',3,'MaxNumSources',3, ...
     'SourceConfigurations',{fuserSourceConfiguration(1); ...
     fuserSourceConfiguration(2); fuserSourceConfiguration(4)});
addTrackFuser(ta,fuser);

Проверьте сводные данные по архитектуре.

disp(summary(ta))
          System          ArchitectureInputs       FuserInputs        ArchitectureOutput
    __________________    __________________    __________________    __________________

    {'T1:trackerGNN' }         {'1  2'}         {'Not applicable'}            1         
    {'T2:trackerJPDA'}         {'3'   }         {'Not applicable'}            2         
    {'F3:trackFuser' }         {'4'   }         {'1  2'          }            3         

Отобразите архитектуру на рисунке.

figure
show(ta)

Figure contains an axes. The axes with title Tracking Architecture: ta contains 42 objects of type rectangle, text, line, patch.

Создайте отображение с помощью theaterPlot чтобы визуализировать дорожки, сгенерированные trackingArchitecture позже.

figure
ax1 = subplot(3,1,1);
p1 = theaterPlot('Parent',ax1,'XLimits',[-100 150],'YLimits',[-5 15]);
view(2) 
title('GNN tracks')
t1 = trackPlotter(p1,'ConnectHistory','on','ColorizeHistory','on','DisplayName','Tracks');

ax2 =subplot(3,1,2);
p2 = theaterPlot('Parent',ax2,'XLimits',[-100 150],'YLimits',[-5 15]);
t2 = trackPlotter(p2,'ConnectHistory','on','ColorizeHistory','on','DisplayName','Tracks');
view(2)
title('JPDA tracks')

ax3 =subplot(3,1,3);
p3 = theaterPlot('Parent',ax3,'XLimits',[-100 150],'YLimits',[-5 15]);
t3 = trackPlotter(p3,'ConnectHistory','on','ColorizeHistory','on','DisplayName','Tracks');
view(2)
title('Fused tracks')

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

load('archInputs','detections','tracks');
positionSelector = [1 0 0 0 0 0; 0 0 1 0 0 0;0 0 0 0 1 0];
for i = 1:numel(detections)
    [gnnTrks,jpdaTrks,fusedTrks] = ta(detections{i},tracks{i},i);
    plotTrack(t1, getTrackPositions(gnnTrks,positionSelector),string([gnnTrks.TrackID]));
    plotTrack(t2, getTrackPositions(jpdaTrks,positionSelector),string([jpdaTrks.TrackID]));
    plotTrack(t3, getTrackPositions(fusedTrks,positionSelector),string([fusedTrks.TrackID]));
end

Figure contains 3 axes. Axes 1 with title GNN tracks contains 5 objects of type line, text. These objects represent Tracks, (history). Axes 2 with title JPDA tracks contains 5 objects of type line, text. These objects represent Tracks, (history). Axes 3 with title Fused tracks contains 5 objects of type line, text. These objects represent Tracks, (history).

Введенный в R2021a