Отслеживание тесно расположенных целей под неоднозначностью

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

Введение

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

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

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

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

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

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