В этом примере показано, как отслеживать объекты, когда связь обнаруженных датчиков с дорожками неоднозначна. В этом примере используется трекер с одной гипотезой, трекер с несколькими гипотезами и вероятностный трекер ассоциации данных для сравнения того, как трекеры обрабатывают эту неоднозначность. Чтобы отслеживать, маневрирующие цели лучше, вы оцениваете движение целей с помощью различных моделей.
Отслеживание - это процесс оценки ситуации на основе данных, собранных одним или несколькими источниками информации. Отслеживание пытается ответить на следующие вопросы:
Сколько там объектов?
Где находятся объекты в пространстве?
Какова их скорость и направление движения?
Как объекты маневрируют относительно друг друга?
Трекеры полагаются на данные датчиков, такие как радиолокационные обнаружения. Датчики могут генерировать два обнаружения для двух целей, если датчики могут разрешать цели пространственно. Если две цели расположены близко друг к другу, они могут находиться в пределах одной ячейки разрешения датчика, и датчик сообщает только об одном их обнаружении. Для иллюстрации проблемы на следующем рисунке показан радар с разрешением 1,5 градуса азимута. На дальности 20 км бункер радиолокационного датчика имеет ширину выше 540 м, что означает, что любое обнаружение, сообщаемое с этого диапазона, расположено в центре бункера, с неопределенностью ± 270 м вокруг него. Любые две цели в этой ячейке регистрируются как одно обнаружение.

Для демонстрации случая, когда отчеты датчиков неоднозначно назначены трассам, создается простой сценарий. В этом сценарии один monostaticRadarSensor объект, расположенный в начале координат (не показан), сканирует небольшой регион примерно в 20 км от радара. Изначально радар сообщает о двух обнаружениях на сканирование. Когда детекторы поступают из области вокруг положения X = 0, Y = -20 км, радар в течение некоторого времени сообщает об одном детекторе на сканирование, за которым следуют два радиолокационных детектора, сообщенные из положения Y = -19,5 км и по направлению к датчику (вверх).
Журнал сценариев и обнаружений уже сохранен в файле соответствия. Можно раскомментировать строки ниже для регенерации сценария и синтетических обнаружений.
load ATCdata.mat % scenario = helperCreateScenario; % dataLog = helperRunDetections(scenario); plotScenarioAndDetections(dataLog);
![]()
Глядя только на обнаружения в этом сюжете, разумно предположить, что есть две цели, но неясно, пересеклись ли их траектории. Цели не пересекались, как видно по их траектории.
Простейший выбор многоточечного трекера - трекер с одной гипотезой, подобный trackerGNN. Вы устанавливаете его для использования логики оценки, чтобы облегчить сравнение с trackerTOMHT далее в этом примере.
Этот пример мал и не требует более 20 дорожек. Ворота должны быть выбраны так, чтобы обеспечить возможность создания дорожек без ложных дорожек и были увеличены по сравнению со значениями по умолчанию.
Объем бункера датчика может быть грубо оценен с использованием определителя детектирующего шума измерения. В этом случае значение равно примерно 1e9, поэтому объем устанавливается равным 1e9. Значение бета-версии должно указывать, сколько новых объектов ожидается в единице объема. Поскольку количество объектов в этом сценарии является постоянным, установите бета-версию очень маленькой. Значения вероятности обнаружения и частоты ложной сигнализации берутся из соответствующих значений РЛС.
numTracks = 20; % Maximum number of tracks gate = 45; % Association gate vol = 1e9; % Sensor bin volume beta = 1e-14; % Rate of new targets in a unit volume pd = 0.8; % Probability of detection far = 1e-6; % False alarm rate
Используется фильтр Калмана с постоянной скоростью. initCVFilter функция изменяет фильтр, который initcvekf возвращается, чтобы обеспечить более высокую неопределенность в терминах скорости и более высокое горизонтальное ускорение в шуме процесса. Эти модификации нужны для отслеживания целей в этом сценарии, которые движутся с большой скоростью и маневрируют поворотом в горизонтальной плоскости.
tracker = trackerGNN( ... 'FilterInitializationFcn',@initCVFilter,... 'MaxNumTracks', numTracks, ... 'MaxNumSensors', 1, ... 'AssignmentThreshold',gate, ... 'TrackLogic', 'Score', ... 'DetectionProbability', pd, 'FalseAlarmRate', far, ... 'Volume', vol, 'Beta', beta);
В следующей строке выполняется сценарий и создается визуализация.
[trackSummary, truthSummary, trackMetrics, truthMetrics,timeGNNCV] = helperRunTracker(dataLog,tracker,false);
![]()
С пользой от использования смоделированной базовой истины мы можем сравнить результаты трекера с правдой, используя trackAssignmentMetrics . Результаты показывают, что существует два объекта истинности, но три трека были сгенерированы трекером. Одна из трасс не сохранилась до конца сценария, то есть была сброшена, а две другие трассы -.
В конце сценария объект 2 истинности был связан с дорожкой 8, которая была создана в середине сценария после того, как дорожка 2 была удалена. Объекту истинности 3 была назначена дорожка 1 в конце сценария, но имеет два разрыва.
Обратите внимание, что длина установления обоих объектов истинности была небольшой, в то время как было мало ложных дорожек, что означает, что порог подтверждения хороший.
disp(trackSummary) disp(truthSummary)
TrackID AssignedTruthID Surviving TotalLength DivergenceStatus
_______ _______________ _________ ___________ ________________
1 3 true 190 false
2 NaN false 77 true
8 2 true 111 false
TruthID AssociatedTrackID TotalLength BreakCount EstablishmentLength
_______ _________________ ___________ __________ ___________________
2 8 192 1 4
3 1 192 2 2
Используйте trackErrorMetrics для анализа качества отслеживания с точки зрения ошибок положения и скорости между объектами истинности и дорожками, связанными с ними. Результаты показывают, что погрешности положения составляют около 50-60 м, а погрешности скорости - около 30 м/с.
disp(trackMetrics) disp(truthMetrics)
TrackID posRMS velRMS posANEES velANEES
_______ ______ ______ ________ ________
1 59.461 26.119 7.9331 3.495
2 51.803 39.433 5.7494 3.0362
8 62.914 28.877 7.2004 3.0465
TruthID posRMS velRMS posANEES velANEES
_______ ______ ______ ________ ________
2 62.147 27.546 8.3597 3.9608
3 56.218 32.109 6.3234 2.6642
Комбинация трекера с одной гипотезой и фильтра постоянной скорости не могла отслеживать маневрирующие цели. Этот результат очевиден тем, что одна из трасс останавливается, а затем начинается новая трасса, в то время как в сценарии есть только две цели. Это видно и из неспособности следовать за целевыми поворотами.
Одним из вариантов улучшения трекера является изменение фильтра на взаимодействующий фильтр с несколькими моделями (IMM), что позволяет рассмотреть две или более моделей движения для целей. Фильтр переключается на правильную модель, основываясь на вероятности одной модели по сравнению с другой с учетом измерений. В этом примере цели перемещаются с постоянной скоростью до тех пор, пока они не повернутся с постоянной скоростью, так что вы определяете фильтр IMM с этими двумя моделями с помощью initIMMFilter функция.
tracker = trackerGNN( ... 'FilterInitializationFcn',@initIMMFilter,... 'MaxNumTracks', numTracks, ... 'MaxNumSensors', 1, ... 'AssignmentThreshold',gate, ... 'TrackLogic', 'Score', ... 'DetectionProbability', pd, 'FalseAlarmRate', far, ... 'Volume', vol, 'Beta', beta); [trackSummary, truthSummary, trackMetrics, truthMetrics, timeGNNIMM] = helperRunTracker(dataLog,tracker,false);
![]()
Добавление фильтра IMM позволяет трекеру правильно идентифицировать маневр цели. Вы можете наблюдать этот вывод, глядя на дорожки, генерируемые во время целевых поворотов, и заметить, насколько хорошо отслеживаются оба оборота. В результате объект истинности 2 имеет нулевые разрывы, которые можно увидеть на графике по непрерывной истории связанного с ним трека.
Однако даже с взаимодействующими моделями одна из дорожек обрывается в области неоднозначности. Трекер с одной гипотезой получает только одно обнаружение с этой областью и может обновить только одну из дорожек с ней, пропуская другую дорожку. После нескольких обновлений оценка совмещенной дорожки падает ниже порога удаления, и трекер сбрасывает дорожку.
disp(trackSummary) disp(truthSummary)
TrackID AssignedTruthID Surviving TotalLength DivergenceStatus
_______ _______________ _________ ___________ ________________
1 2 true 190 false
2 NaN false 77 true
8 3 true 111 false
TruthID AssociatedTrackID TotalLength BreakCount EstablishmentLength
_______ _________________ ___________ __________ ___________________
2 1 192 0 4
3 8 192 1 2
Использование IMM также улучшило точность слежения, так как ошибки положения уменьшились до 40-60 метров, в то время как ошибки скорости уменьшились до 25-30 м/с. Это улучшение можно объяснить более низкими значениями технологического шума, используемыми в IMM для каждой модели, которые позволяют лучше сглаживать шумные измерения.
disp(trackMetrics) disp(truthMetrics)
TrackID posRMS velRMS posANEES velANEES
_______ ______ ______ ________ ________
1 52.445 22.4 7.6006 6.0031
2 48.149 35.239 6.5401 3.4887
8 34.787 20.279 5.2549 4.2032
TruthID posRMS velRMS posANEES velANEES
_______ ______ ______ ________ ________
2 52.445 22.4 7.6006 6.0031
3 40.75 27.364 5.7772 3.9128
Для решения проблемы пробитой дорожки используйте трекер с несколькими гипотезами (MHT), trackerTOMHT. В области неоднозначности трекер генерирует множество гипотез о связи обнаружения с дорожками. В частности, она поддерживает одну гипотезу о том, что первой дорожке назначено это обнаружение, и другую гипотезу о том, что второй дорожке назначено обнаружение. При этом обе дорожки сохраняются в живых, так что трекер получает достаточное количество обнаружений для разрешения неоднозначности в следующих обновлениях.
trackerTOMHT использует те же параметры, что и trackerGNN, за исключением:
AssignmentThreshold позволяет считать трассу неназначенной даже при наличии назначенного обнаружения. Этот параметр позволяет использовать несколько ветвей на дорожку. Однако второй элемент затвора запрещает новые дорожки от назначенных обнаружений, чтобы уменьшить общее количество дорожек и улучшить производительность.
MaxNumHistoryScans увеличивается до 10, для задержки NScanPruning.
MaxNumTrackBranches увеличивается до 5, чтобы позволить больше ветвей (гипотез) на дорожку.
tracker = trackerTOMHT( ... 'FilterInitializationFcn',@initCVFilter, ... 'MaxNumTracks', numTracks, ... 'MaxNumSensors', 1, ... 'AssignmentThreshold', [0.2, 1, 1]*gate,... 'DetectionProbability', pd, 'FalseAlarmRate', far, ... 'Volume', vol, 'Beta', beta, ... 'MaxNumHistoryScans', 10,... 'MaxNumTrackBranches', 5,... 'NScanPruning', 'Hypothesis', ... 'OutputRepresentation', 'Tracks'); [trackSummary, truthSummary, trackMetrics, truthMetrics, timeTOMHTCV] = helperRunTracker(dataLog,tracker,false);
![]()
Результаты показывают, что трекер с несколькими гипотезами способен отслеживать два объекта истинности по всему сценарию. Для области неоднозначности MHT-трекер формулирует две гипотезы о назначении:
Обнаружение назначается дорожке 1.
Обнаружение назначается дорожке 2.
С помощью этих гипотез обе дорожки генерируют ветви (гипотезы дорожек), которые обновляют их, используя одно и то же обнаружение. Очевидно, что использование одного и того же обнаружения для обновления обеих дорожек вызывает сближение дорожек в их оценке, и в конечном итоге две дорожки могут объединиться. Однако, если длительность неоднозначного назначения является короткой, трекер может иметь возможность разрешить две дорожки, когда имеются два обнаружения. В этом случае вы видите, что две дорожки пересекаются друг с другом, но метрики показывают, что число разрывов для каждой истины равно 1, что означает, что истинные цели, вероятно, не пересекаются друг с другом.
disp(trackSummary) disp(truthSummary)
TrackID AssignedTruthID Surviving TotalLength DivergenceStatus
_______ _______________ _________ ___________ ________________
1 3 true 190 false
2 2 true 191 false
TruthID AssociatedTrackID TotalLength BreakCount EstablishmentLength
_______ _________________ ___________ __________ ___________________
2 2 192 1 2
3 1 192 1 2
По точности слежения погрешности положения и скорости этого трекера аналогичны погрешностям из комбинации трекера одной гипотезы с фильтром постоянной скорости.
disp(trackMetrics) disp(truthMetrics)
TrackID posRMS velRMS posANEES velANEES
_______ ______ ______ ________ ________
1 45.532 28.802 4.5909 3.2827
2 61.968 29.851 6.7191 2.7338
TruthID posRMS velRMS posANEES velANEES
_______ ______ ______ ________ ________
2 48.877 28.57 5.0144 3.2761
3 58.203 29.895 6.1414 2.8049
Основываясь на успехе использования трекера с несколькими гипотезами с постоянной скоростью для поддержания непрерывного трекинга, объедините трекер с преимуществами фильтра IMM. Фильтр IMM может быть более успешным в предотвращении пересечения пути, поскольку он улучшает сопровождение при повороте целей. Следующий код настраивает trackerTOMHT с trackingIMM фильтр.
tracker = trackerTOMHT( ... 'FilterInitializationFcn',@initIMMFilter, ... 'MaxNumTracks', numTracks, ... 'MaxNumSensors', 1, ... 'AssignmentThreshold', [0.2, 1, 1]*gate,... 'DetectionProbability', pd, 'FalseAlarmRate', far, ... 'Volume', vol, 'Beta', beta, ... 'MaxNumHistoryScans', 10,... 'MaxNumTrackBranches', 5,... 'NScanPruning', 'Hypothesis', ... 'OutputRepresentation', 'Tracks'); [trackSummary, truthSummary, trackMetrics, truthMetrics, timeTOMHTIMM] = helperRunTracker(dataLog,tracker,false);
![]()
На сюжете видно, что две дорожки не пересекались. Этот результат также очевиден в подсчете разрывов истинных целей ниже, который показывает нулевые разрывы.
Можно также увидеть истинный путь к целям, показанный сплошной линией.
disp(trackSummary) disp(truthSummary)
TrackID AssignedTruthID Surviving TotalLength DivergenceStatus
_______ _______________ _________ ___________ ________________
1 2 true 190 false
2 3 true 191 false
TruthID AssociatedTrackID TotalLength BreakCount EstablishmentLength
_______ _________________ ___________ __________ ___________________
2 1 192 0 2
3 2 192 0 2
Точность отслеживания аналогична комбинации трекера одной гипотезы с фильтром IMM. Обратите внимание, что истинная точность и связанная с ней точность дорожки одинаковы, потому что не было перерыва в отслеживании на протяжении всего сценария.
disp(trackMetrics) disp(truthMetrics)
TrackID posRMS velRMS posANEES velANEES
_______ ______ ______ ________ ________
1 55.947 24.442 6.9595 5.5471
2 37.797 25.949 5.2605 4.0935
TruthID posRMS velRMS posANEES velANEES
_______ ______ ______ ________ ________
2 55.947 24.442 6.9595 5.5471
3 37.797 25.949 5.2605 4.0935
Хотя метрики отслеживания значительно улучшаются с помощью trackerTOMHT trackerGNN, время компьютерной обработки также значительно увеличивается. Трекер Объединенной вероятностной ассоциации данных (JPDA), trackerJPDA, позволит вам изучить дальнейшие компромиссные соображения. В отличие от GNN, JPDA позволяет использовать одиночное обнаружение для обновления нескольких дорожек в его окрестностях. Кроме того, множество обнаружений может быть сгруппировано вместе с несколькими дорожками и обновить каждую из этих дорожек. Это решает проблему пробитой дорожки. Тем не менее, JPDA не поддерживает множественную гипотезу в течение нескольких сканирований, что делает его неоптимальным подходом в отличие от MHT.
trackerJPDA использует те же параметры, что и trackerGNN за исключением:
ClutterDensity - отношение FalseAlarmRate и Volume.
NewTargetDensity заменяет Beta.
TimeTolerance позволяет обрабатывать множество обнаружений от сканирующего радара в одном кластере.
Кроме того, установите TrackLogic кому Integrated что концептуально ближе к логике оценки, используемой с двумя предыдущими трекерами.
tracker = trackerJPDA(... 'FilterInitializationFcn',@initCVFilter,... 'MaxNumTracks', numTracks, ... 'MaxNumSensors', 1, ... 'AssignmentThreshold',gate, ... 'TrackLogic','Integrated',... 'DetectionProbability', pd, ... 'ClutterDensity', far/vol, ... 'NewTargetDensity', beta,... 'TimeTolerance',0.05); [trackSummary, truthSummary, trackMetrics, truthMetrics, timeJPDACV] = helperRunTracker(dataLog,tracker,false);
![]()
Хотя trackerJPDA не поддерживает несколько гипотез, он позволяет обоим трекам оставаться подтвержденными в области неоднозначности, где сообщается только об одном обнаружении на обновление. Обе дорожки могут быть назначены обнаружению с различными вероятностями. Однако дорожки пересекаются друг с другом, как наблюдалось ранее, с другими трекерами. Число разрывов метрик для каждой истины также равно 1.
disp(trackSummary) disp(truthSummary)
TrackID AssignedTruthID Surviving TotalLength DivergenceStatus
_______ _______________ _________ ___________ ________________
1 3 true 191 false
2 2 true 191 false
TruthID AssociatedTrackID TotalLength BreakCount EstablishmentLength
_______ _________________ ___________ __________ ___________________
2 2 192 1 1
3 1 192 1 2
Точность отслеживания совпадает с тем, что получается при помощи trackerGNN и trackerTOMHT.
disp(trackMetrics) disp(truthMetrics)
TrackID posRMS velRMS posANEES velANEES
_______ ______ ______ ________ ________
1 44.918 29.911 5.1894 3.5599
2 58.904 31.484 7.0023 3.0944
TruthID posRMS velRMS posANEES velANEES
_______ ______ ______ ________ ________
2 47.304 29.606 5.4677 3.5093
3 56.106 31.564 6.5976 3.1815
Как видно из двух других трекеров, поворот перед областью неоднозначности лучше решать с помощью взаимодействующих нескольких моделей. trackerJPDA также может использоваться с trackingIMM, используя то же самое FilterInitializationFcn как и прежде.
tracker = trackerJPDA( ... 'FilterInitializationFcn',@initIMMFilter,... 'MaxNumTracks', numTracks, ... 'MaxNumSensors', 1, ... 'AssignmentThreshold',gate, ... 'TrackLogic','Integrated',... 'DetectionProbability', pd, ... 'ClutterDensity', far/vol, ... 'NewTargetDensity', beta,... 'TimeTolerance',0.05); [trackSummary, truthSummary, trackMetrics, truthMetrics,timeJPDAIMM] = helperRunTracker(dataLog,tracker,true);
![]()
Результаты сопоставимы с trackerTOMHTблагодаря взаимодействующим множественным моделям цели более точно отслеживаются во время поворота и достаточно разделены перед входом в область неоднозначности. Обе дорожки 1 и 2 назначены цели с нулевыми счетчиками разрывов.
disp(trackSummary) disp(truthSummary)
TrackID AssignedTruthID Surviving TotalLength DivergenceStatus
_______ _______________ _________ ___________ ________________
1 2 true 191 false
2 3 true 191 false
TruthID AssociatedTrackID TotalLength BreakCount EstablishmentLength
_______ _________________ ___________ __________ ___________________
2 1 192 0 1
3 2 192 0 2
Опять же, результаты точности отслеживания аналогичны результатам, полученным ранее с использованием trackerGNN и trackerTOMHT.
disp(trackMetrics) disp(truthMetrics)
TrackID posRMS velRMS posANEES velANEES
_______ ______ ______ ________ ________
1 57.172 27.523 7.6831 6.2685
2 39.21 29.184 6.1317 4.769
TruthID posRMS velRMS posANEES velANEES
_______ ______ ______ ________ ________
2 57.172 27.523 7.6831 6.2685
3 39.21 29.184 6.1317 4.769
Другой точкой сравнения для каждой комбинации трекера и фильтра является среда выполнения. На графике ниже показаны записи длительности цикла отслеживания. Результаты нормализуются на основе значения времени выполнения трекера GNN с моделью CV.
figure
c1 = categorical({'CV','IMM'});
timeData = [timeGNNCV timeJPDACV timeTOMHTCV ; timeGNNIMM timeJPDAIMM timeTOMHTIMM]/timeGNNCV;
bar(c1,timeData)
legend('GNN','JPDA','TOMHT','Location','northwest')
ylabel('Normalized Time (x timeGNN-CV)')
title('Time Performance Comparison')
ax = gca;
ax.YGrid = 'on';
![]()
Результаты показывают, что GNN и JPDA могут отслеживать цели в 5-6 раз быстрее, чем MHT, в зависимости от модели движения. Модель движения IMM делает работу всех трех трекеров в 3-4 раза медленнее. Следует отметить, что время обработки каждого трекера варьируется в зависимости от количества целевых объектов сценария, плотности ложных аварийных сигналов, плотности целевых объектов и т.д. Этот пример не гарантирует аналогичного сравнения производительности в различных сценариях использования.
В этом примере создан сценарий, в котором две маневрирующие цели обнаруживаются одним датчиком, где часть их движения находится в области неоднозначности. Вы использовали шесть комбинаций трекеров и фильтров, чтобы показать вклад каждого в общее отслеживание. Вы заметили, что фильтр постоянной скорости был менее точен в слежении за целями во время их маневра, что требовало взаимодействующего многомодельного фильтра. Вы также наблюдали способность MHT и JPDA обрабатывать случай неоднозначной связи обнаружений с треками, и как ее можно использовать для поддержания непрерывного слежения, в то время как трекер с одной гипотезой не может этого сделать. Наконец, вы заметили компромиссы между результатами отслеживания и временем обработки при выборе трекера. В этом случае наилучшим вариантом является JPDA. В различных сценариях может потребоваться более сложный MHT, если ни GNN, ни JPDA не дают приемлемых результатов отслеживания. Вы также можете предпочесть GNN, если есть меньше областей неоднозначности или низкая плотность загромождения.