exponenta event banner

Отслеживание близко расположенных целей в условиях неоднозначности

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

Введение

Отслеживание - это процесс оценки ситуации на основе данных, собранных одним или несколькими источниками информации. Отслеживание пытается ответить на следующие вопросы:

  1. Сколько там объектов?

  2. Где находятся объекты в пространстве?

  3. Какова их скорость и направление движения?

  4. Как объекты маневрируют относительно друг друга?

Трекеры полагаются на данные датчиков, такие как радиолокационные обнаружения. Датчики могут генерировать два обнаружения для двух целей, если датчики могут разрешать цели пространственно. Если две цели расположены близко друг к другу, они могут находиться в пределах одной ячейки разрешения датчика, и датчик сообщает только об одном их обнаружении. Для иллюстрации проблемы на следующем рисунке показан радар с разрешением 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. Обнаружение назначается дорожке 1.

  2. Обнаружение назначается дорожке 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, если есть меньше областей неоднозначности или низкая плотность загромождения.