В этом примере показано, как задать архитектуру отслеживания системы систем, которая включает несколько средств отслеживания мультиобъекта уровня обнаружения и алгоритмов сплава уровня дорожки. Можно использовать архитектуры отслеживания, чтобы сравнить различные проекты системы слежения и найти лучшее решение для системы.
Симулирование и Дорожка В пути Самолет в Сосредоточенном Землей примере Сценариев показывает, как отследить самолет с помощью нескольких радиолокационных систем дальних и объединить данные от Автоматической Зависимой Широковещательной передачи Наблюдения (ADS-B) транспондеры, чтобы получить точное воздушное изображение ситуации. В том примере радарные обнаружения сплавлены централизованно средством отслеживания, прежде чем эти дорожки будут сплавлены с дорожками из отчетов ADS-B. Вы сначала загружаете данные о сценарии из того примера и настраиваете основанную на земном шаре визуализацию.
% Create the scenario and globe viewer load('recordedScenario','scenarioData'); viewer = createGlobe(scenarioData);
Архитектура, описанная выше, является только одной возможной архитектурой, и инженеры системы слежения часто рассматривают различные другие возможности. Существует много факторов, которые определяют, как система может быть спроектирована, некоторые из них:
Датчик выходные параметры: Некоторые производители датчика проектируют свои датчики, чтобы вывести списки обнаружений, в то время как отслеживаемые объекты других внутренне и только обеспечивают дорожки датчика как выход.
Коммуникационные сети: объем данных, который требуется, чтобы быть переданным, может уменьшаться, если датчики сообщают о дорожках вместо обнаружений. Кроме того, задержка, физическое расстояние и другие ограничения могут потребовать того отчета датчиков дорожки.
Вычислительные ресурсы: Обработка всех обнаружений в одном центральном средстве отслеживания обычно требует большей памяти и расчетов, чем при обработке данных 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)
Запустите сценарий и дорожку с помощью архитектуры отслеживания
% 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);
Вы хотите исследовать, как система работает, когда каждый уровень датчика показаний радара отслеживает, которые сплавлены с дорожками 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)
replayScenario
функция считывает записанные данные о сценарии, шаги новая архитектура, и отображает результаты.
% Rerun the scenario and observe tracking results
replayScenario(decentralizedArchitecture,scenarioData,viewer)
Другая возможная настройка может упасть между централизованными и децентрализованными архитектурами выше. Во многих случаях нет никакой потребности в центре управления воздушным движением, чтобы отследить самолеты, которые являются слишком далеко от него. В этом случае региональные центры управления воздушным движением могут использоваться, где один или несколько радаров сообщают каждой области.
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)
% Rerun the scenario and observe tracking results
replayScenario(regionalArchitecture,scenarioData,viewer)
В этом примере вы изучили, как задать архитектуры отслеживания для системы систем, которые используют несколько средств отслеживания и алгоритмов сплава от дорожки к дорожке. Вы видели, как передать обнаружения и дорожки как входные параметры к архитектуре отслеживания и как вывести дорожки от нее.
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