Задайте и протестируйте архитектуры отслеживания на систему систем

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

Введение

Симулирование и Дорожка В пути Самолет в Сосредоточенном Землей примере Сценариев показывает, как отследить самолет с помощью нескольких радиолокационных систем дальних и объединить данные от Автоматической Зависимой Широковещательной передачи Наблюдения (ADS-B) транспондеры, чтобы получить точное воздушное изображение ситуации. В том примере радарные обнаружения сплавлены централизованно средством отслеживания, прежде чем эти дорожки будут сплавлены с дорожками из отчетов ADS-B. Вы сначала загружаете данные о сценарии из того примера и настраиваете основанную на земном шаре визуализацию.

% Create the scenario and globe viewer
load('recordedScenario','scenarioData');
viewer = createGlobe(scenarioData);

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

  1. Датчик выходные параметры: Некоторые производители датчика проектируют свои датчики, чтобы вывести списки обнаружений, в то время как отслеживаемые объекты других внутренне и только обеспечивают дорожки датчика как выход.

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

  3. Вычислительные ресурсы: Обработка всех обнаружений в одном центральном средстве отслеживания обычно требует большей памяти и расчетов, чем при обработке данных distributively между различными узлами.

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

Централизованная воздушная архитектура наблюдения

Как базовая линия для сравнения, вы задаете архитектуру, которая отражает централизованную систему слежения, описанную в Симулировании и Дорожке В пути Самолет в Сосредоточенном Землей примере Сценариев. Чтобы сделать это, вы сначала задаете то же самое, централизованное trackerGNN для радаров. Обратите внимание на то, что радары обновляются каждые 12 секунд и обновления приемника ADS-B каждую секунду. Чтобы вместить различные частоты обновления, вы переносите средство отслеживания в helperScheduledTracker объект.

gnn = trackerGNN(...
    'TrackerIndex',2,...
    'FilterInitializationFcn',@initfilter,...
    'ConfirmationThreshold',[3 5],...
    'DeletionThreshold',[5 5],...
    'AssignmentThreshold',[1000 Inf]);

tracker = helperScheduledTracker(gnn, 12);

Вы задаете ADS-B и средство отслеживания как два источника, которые сплавлены trackFuser. Обратите внимание на то, что SourceIndex значение для каждой исходной настройки должно совпадать с SourceIndex значение дорожек ADS-B (1) и TrackerIndex значение средства отслеживания (2). Кроме того, FuserIndex значение должно быть уникальным также. В этом случае вы устанавливаете его на 3.

sources = {...
    fuserSourceConfiguration("SourceIndex", 1);... % ADS-B
    fuserSourceConfiguration("SourceIndex", 2) ... % Tracker
    };

fuser = trackFuser("FuserIndex",3, ...
    "MaxNumSources", 2,...
    "SourceConfigurations", sources, ...
    "AssignmentThreshold", [1000 Inf],...
    "StateFusion", "Intersection",...
    "StateFusionParameters", "trace",...
    "ProcessNoise", 10*eye(3));

Со средством отслеживания и заданным термофиксатором дорожки, вы задаете trackingArchitecture. Вы добавляете средство отслеживания в него, с датчиками 1, 2, и 3 создания отчетов к средству отслеживания. Вы также добавляете термофиксатор дорожки в trackingArchitecture. trackingArchitecture направляет источники термофиксатора к термофиксатору на основе SoucreConfigurations термофиксатора свойство. Наконец, вы используете show возразите функции, чтобы отобразить архитектуру.

centralizedArchitecture = trackingArchitecture;
addTracker(centralizedArchitecture,tracker,'Name','Tracker','SensorIndices',[1 2 3],'ToOutput',false);
addTrackFuser(centralizedArchitecture,fuser,'Name','Fuser','ToOutput',true);
show(centralizedArchitecture)

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

Запустите сценарий и дорожку с помощью архитектуры отслеживания

% Clear previous viewer data and reset the architecture if previously used
clear(viewer);
plotTruth(scenarioData, viewer);
reset(centralizedArchitecture);

for i = 1:numel(scenarioData)
    % Read the timestamp from the recorded scenario data
    time = scenarioData(i).Time;
    
    % Read detections from all radars in the scenario
    detections = scenarioData(i).Detections;
    
    % Update detections on the globe
    plotDetection(viewer, detections);
    
    % Read ADS-B tracks
    truePose = scenarioData(i).TruePose;
    adsbTracks = scenarioData(i).ADSBTrack;
    
    % Pass the detections and ADS-B tracks to the tracking architecture
    tracks = centralizedArchitecture(detections,adsbTracks,time);
    
    % Update display
    plotTrack(viewer, tracks);
end
% Provide an output image
snap(viewer);

Figure contains an axes. The axes contains an object of type image.

Децентрализованная архитектура

Вы хотите исследовать, как система работает, когда каждый уровень датчика показаний радара отслеживает, которые сплавлены с дорожками ADS-B алгоритмом сплава уровня дорожки. Вы задаете trackingArchitecture это представляет эту децентрализованную архитектуру.

decentralizedArchitecture = trackingArchitecture;

Затем вы задаете средство отслеживания для каждого радара. В исходном примере существует три радарных датчика, таким образом, вы задаете три средства отслеживания. Для простоты примите, что эти средства отслеживания заданы таким же образом как центральный случай. Поскольку SourceIndex дорожек ADS-B является 1, вы задаете средства отслеживания с TrackerIndex из 2, 3, и 4. Между тем радарные обнаружения имеют SensorIndex = 1, 2, и 3.

sensorTracker = trackerGNN(...
    'TrackerIndex',2,...
    'FilterInitializationFcn',@initfilter,...
    'ConfirmationThreshold',[3 5],...
    'DeletionThreshold',[5 5],...
    'AssignmentThreshold',[1000 Inf]);

% Add one tracker to each radar
for i = 2:4
    tracker = helperScheduledTracker(clone(sensorTracker),12);
    tracker.TrackerIndex = i; % Specify each radar tracker with a different index
    addTracker(decentralizedArchitecture, tracker, 'Name', strcat('Radar',num2str(i-1)), 'SensorIndices', i-1, 'ToOutput', false); % Connect the tracker to the correct radar index 
end

Вы добавляете trackFuser это плавит дорожки из четырех источников, ADS-B и трех радарных средств отслеживания.

% Define the sources
sources = {...
    fuserSourceConfiguration(1);... % ADS-B
    fuserSourceConfiguration(2);... % Tracker for radar 1
    fuserSourceConfiguration(3);... % Tracker for radar 2
    fuserSourceConfiguration(4);... % Tracker for radar 3
    };

% Add the fuser
fuser = trackFuser("FuserIndex", 5, ...
    "MaxNumSources", 4,...
    "SourceConfigurations", sources, ...
    "AssignmentThreshold", [1000 Inf],...
    "StateFusion", "Intersection", ...
    "StateFusionParameters", "trace", ...
    "ProcessNoise", 10*eye(3));
addTrackFuser(decentralizedArchitecture, fuser, 'Name', 'Fuser');

% Show the tracking architecture in a figure
show(decentralizedArchitecture)

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

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

% Rerun the scenario and observe tracking results
replayScenario(decentralizedArchitecture,scenarioData,viewer)

Figure contains an axes. The axes contains an object of type image.

Региональная воздушная архитектура наблюдения

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

regionalArchitecture = trackingArchitecture;
for i = 2:4
    tracker = helperScheduledTracker(clone(sensorTracker),12);
    tracker.TrackerIndex = i; % Specify each radar with a different index
    addTracker(regionalArchitecture, tracker, 'Name', strcat('Radar',num2str(i-1)), 'SensorIndices', i-1, 'ToOutput', false);
end

Вы задаете две области и присоединяете два радарных датчика к каждому. Кроме того, каждая область только плавит дорожки ADS-B, если самолет создания отчетов достаточно близок к области.

region1Fuser = trackFuser('FuserIndex',5, 'MaxNumSources',3, ...
    'SourceConfigurations',sources([1,2,3]),... % Two radars and ADS-B
    "AssignmentThreshold",[1000 Inf],... 
    "StateFusion",'Intersection',...
    'StateFusionParameters','trace',...
    'ProcessNoise',10*eye(3)); 
region2Fuser = trackFuser('FuserIndex',6, 'MaxNumSources',3, ...
    'SourceConfigurations',sources([1,3,4]),... % Two radars and ADS-B
    "AssignmentThreshold",[1000 Inf],... 
    "StateFusion",'Intersection',...
    'StateFusionParameters','trace',...
    'ProcessNoise',10*eye(3));
addTrackFuser(regionalArchitecture, region1Fuser, 'Name', 'Region1');
addTrackFuser(regionalArchitecture, region2Fuser, 'Name', 'Region2');
show(regionalArchitecture)

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

% Rerun the scenario and observe tracking results
replayScenario(regionalArchitecture,scenarioData,viewer)

Figure contains an axes. The axes contains an object of type image.

Сводные данные

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

Вспомогательные Функции

createGlobe Создает визуализацию земного шара

function gl = createGlobe(scenarioData)
% You use the helperGlobeViewer object attached in this example to display
% platforms, trajectories, detections, and tracks on the Earth.
gl = helperGlobeViewer;
setCamera(gl,[28.9176  -95.3388  5.8e5],[0 -30 10]);

% Show flight route
plotTruth(scenarioData, gl);
end

plotTruth строит положение основной истины

function plotTruth(scenarioData, viewer)
poses = [scenarioData.TruePose];
positions = vertcat(poses.Position);
plotLines(viewer, positions(:,1), positions(:,2), positions(:,3))
end

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

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

function filter = initfilter(detection)
filter = initcvekf(detection);
filter.StateCovariance = 10*filter.StateCovariance; % initcvekf uses measurement noise as the default
filter.ProcessNoise = eye(3);
end

replayScenario Воспроизводит записанный сценарий и генерирует результаты

function replayScenario(arch,scenarioData,viewer)
clear(viewer);
plotTruth(scenarioData, viewer);
reset(arch);
numFusers = numel(arch.TrackFusers);
tracks = cell(1,numFusers);
for i = 1:numel(scenarioData)
    time = scenarioData(i).Time;
    
    % Create detections from all radars in the scenario
    detections = scenarioData(i).Detections;
    
    % Update detections on the globe
    plotDetection(viewer, detections);
    
    % Generate ADS-B tracks
    adsbTracks = scenarioData(i).ADSBTrack;
    
    % Pass the detections and ADS-B tracks to the tracking architecture
    [tracks{1:numFusers}] = arch(detections,adsbTracks,time);
    
    % Update display
    plotTrack(viewer, vertcat(tracks{:}));
end
snap(viewer);
end
Для просмотра документации необходимо авторизоваться на сайте