Этот пример показывает, как отслеживать объекты, когда ассоциация обнаружений датчиков с треками неоднозначна. В этом примере вы используете трекер с одной гипотезой, трекер с несколькими гипотезами и трекер вероятностной ассоциации данных, чтобы сравнить, как трекеры обрабатывают эту неоднозначность. Чтобы отслеживать, маневрирующие цели лучше, вы оцениваете движение целей с помощью различных моделей.
Отслеживание - это процесс оценки ситуации на основе данных, собранных одним или несколькими источниками информации. Отслеживать попытки ответить на следующие вопросы:
Сколько объектов?
Где объекты расположены в пространстве?
Какова их скорость и направление движения?
Как объекты маневрируют относительно друг друга?
Трекеры полагаются на данные о датчике, такие как радиолокационные обнаружения. Датчики могут сгенерировать два обнаружения для двух целей, если датчики могут разрешать цели пространственно. Если две цели тесно расположены, они могут попасть в одну камеру разрешения датчика, и датчик сообщает только об одном обнаружении их. Чтобы проиллюстрировать проблему, следующий рисунок показывает радар с разрешением азимута 1,5 степенью. В области значений 20 км радиолокационный бункер датчика имеет ширину выше 540 м, что означает, что любое обнаружение, сообщаемое из этой области значений, расположено в центре интервала с ± 270 м неопределенности вокруг него. Любые две цели в этом интервале сообщаются как одно обнаружение.
Чтобы продемонстрировать случай, когда отчеты о датчике неоднозначно назначены трекам, вы создаете простой сценарий. В этом сценарии один monostaticRadarSensor
объект, расположенный в источник (не показан), сканирует небольшую область примерно в 20 км от радара. Первоначально радар сообщает о двух обнаружениях на скан. Когда обнаружения поступают из области вокруг положения X = 0, Y = -20 км, радар в течение некоторого времени сообщает об одном обнаружении за скан, далее следуют два радиолокационных обнаружения, сообщаемых из области Y = -19,5 км и к датчику (вверх).
Сценарий и журнал обнаружений уже сохранены в matfile. Можно разомкнуть линии ниже, чтобы перегенерировать сценарий и синтетические обнаружения.
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
Вы используете фильтр Калмана с постоянной скоростью. The 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. Объект Truth 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 м/с RMS.
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 позволяет трекеру правильно идентифицировать маневр цели. Можно наблюдать этот вывод, глядя на дорожки, сгенерированные во время поворотов цели, и заметить, насколько хорошо отслеживаются оба поворота. В результате объект truth 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
, компьютерное время вычислений также значительно увеличено. Трекер Joint Probabilistic Data Association (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-трекера с моделью.
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, если есть менее неоднозначные области или низкая плотность загромождения.