Этот пример демонстрирует проблемы, связанные с отслеживанием транспортных средств на шоссе в присутствии многолучевых радиолокационных отражений. Также показан подход фильтрации призраков, используемый с расширенным трекером объектов для одновременной фильтрации обнаружений призраков и отслеживания объектов.
Автомобильные радарные датчики устойчивы к неблагоприятным условиям окружение, с которыми сталкиваются во время вождения, таким как туман, снег, дождь и сильный солнечный свет. Автомобильные радарные датчики имеют это преимущество, потому что они работают на по существу больших длинах волн по сравнению с датчиками видимой длины волны, такими как лидар и камера. Как побочный эффект использования больших длин волн, поверхности вокруг радарного датчика действуют как зеркала и вызывают нежелательные обнаружения из-за многолучевого распространения. Эти обнаружения часто называются обнаружениями призраков, потому что они, по-видимому, происходят из областей, где нет цели. Этот пример показывает влияние этих многолучевых отражений на разработку и конфигурирование стратегии отслеживания объектов с помощью радиолокационных обнаружений. Для получения дополнительной информации о многолучевом явлении и симуляции обнаружений призраков, обратитесь к примеру Simulate Radar Ghosts из-за Multipath Return.
В этом примере вы моделируете многолучевые обнаружения с радарных датчиков в сценарии вождения городского шоссе. Автомагистраль моделируется с барьером по обе стороны дороги. Сценарий состоит из автомобиля , оборудованного датчиком и четырех других транспортных средств, движущихся по шоссе. Автомобиль , оборудованный датчиком оборудован четырьмя радиолокационными датчиками, которые обеспечивают 360-градусное покрытие. Это изображение показывает строение радарных датчиков и обнаружения от одного скана датчиков. Красные области представляют поле зрения радарных датчиков, а черные точки - обнаружения.
Радарные датчики сообщают об обнаружениях от транспортных средств и от барьеров, которые находятся по обе стороны шоссе. Кроме того, радары сообщают об обнаружениях, которые, по-видимому, не происходят ни от какого реального объекта в сценарии. Это обнаружения призраков из-за многолучевого распространения радиолокационных сигналов. Трекеры объектов предполагают, что все обнаружения происходят из реальных объектов или равномерно распределенного случайного загромождения в поле зрения. Вопреки этому предположению, обнаружения призраков обычно более стойки, чем загромождение, и ведут себя как обнаружения от реальных целей. По этой причине алгоритм отслеживания объектов с большой вероятностью генерирует ложные дорожки от этих обнаружений. Важно отфильтровать эти обнаружения перед обработкой радиолокационного обзора трекером.
Сценарий, используемый в этом примере, создается с помощью drivingScenario
. Вы используете radarDataGenerator
Система object™ для симуляции возвратов радара от прямого пути и от отражений в сценарии. The HasGhosts
свойство датчика задается как true
для симуляции многолучевых отражений. Создание сценария и моделей датчиков заворачивается в функцию helper, helperCreateMultipathDrivingScenario
, который прилагается к этому примеру. Набор данных, полученный при симуляции датчика, записывается в файл MAT, который содержит возвраты от радара и соответствующие строения датчика. Чтобы записать данные для другого сценария или строения датчика, можно использовать следующую команду:
% Command to record data.
helperRecordData(scenario, egoVehicle, sensors, fName);
% Create the scenario [scenario, egoVehicle, sensors] = helperCreateMultipathDrivingScenario; % Load the recorded data load('MultiPathRadarScenarioRecording.mat','detectionLog','configurationLog');
В этом разделе вы настраиваете интегрированный алгоритм, чтобы одновременно фильтровать радиолокационные обнаружения и отслеживать расширенные объекты. Схема блока иллюстрирует цепи радиолокационной обработки, используемые в этом примере.
Далее вы узнаете о каждом из этих шагов и соответствующих вспомогательных функциях.
Доплеровский анализ
Радарные датчики сообщают об измеренной относительной радиальной скорости отраженных сигналов. На этом этапе вы используете измеренную радиальную скорость обнаружений, чтобы определить, является ли цель статической или динамической [1]. В предыдущих радиолокационных обзорах большой процент радиолокационных обнаружений происходит из статической среды вокруг автомобиля , оборудованного датчиком. Поэтому классификация каждого обнаружения как статического или динамического в значительной степени помогает улучшить понимание сцены. Вы используете функцию helper, helperClassifyStaticDynamic
, чтобы классифицировать каждое обнаружение как статическое или динамическое.
Статические отражатели
Статическое окружение также обычно ответственна за большой процент призрачных отражений, сообщаемых радарными датчиками. После сегментации набора данных и нахождения статических обнаружений, вы обрабатываете их, чтобы найти 2-D сегменты линии в координатной системе координат автомобиля , оборудованного датчиком. Во-первых, вы используете алгоритм DBSCAN, чтобы кластеризировать статические обнаружения в различные кластеры вокруг автомобиля , оборудованного датчиком. Во-вторых, вы подбираете 2-D сегмент линии на каждом кластере. Эти установленные сегменты линии определяют возможные поверхности отражения для сигналов, распространяющихся назад к радару. Вы используете функцию helper helperFindStaticReflectors
чтобы найти эти 2-D сегменты линии из статических обнаружений.
Окклюзионный анализ
Отражение от поверхностей производит обнаружения от радарного датчика, которые, по-видимому, начинаются позади отражателя. После сегментации динамических обнаружений с радара, вы используете простой окклюзионный анализ, чтобы определить, закрыто ли радиолокационное обнаружение позади возможного отражателя. Поскольку сигналы могут быть отражены статическими или динамическими объектами, вы выполняете окклюзионный анализ в два этапа. Во-первых, динамические обнаружения проверяются на окклюзию с сегментами 2-D линии, представляющими статические отражатели. Вы используете функцию helper helperClassifyGhostsUsingReflectors
классификация, если обнаружение окклюдировано статическим отражателем. Во-вторых, алгоритм использует информацию о предсказанных треках из расширенного алгоритма отслеживания, чтобы проверить на окклюзию относительно динамических объектов в сцене. Алгоритм использует только подтвержденные дорожки от трекера, чтобы предотвратить перефильтрацию радиолокационных обнаружений при наличии ориентировочных или ложных дорожек. Вы используете функцию helper helperClassifyGhostsUsingTracks
классификация, если обнаружение окклюдировано динамическим объектом.
Весь этот алгоритм для обработки радиолокационных обнаружений и их классификации затем упаковывается в большую вспомогательную функцию helperClassifyRadarDetections
, который классифицирует и разделяет список обнаружения на четыре основные категории:
Обнаружения целей - эти обнаружения классифицируются как происходящие от реальных динамических целей в сцене.
Обнаружения окружения - Эти обнаружения классифицируются как происходящие из статического окружения.
Призрак (Статический) - Эти обнаружения классифицируются как происходящие от динамических целей, но отраженные через статическое окружение.
Призрак (Динамический) - эти обнаружения классифицируются как исходные от динамических целей, но отражаются через другие динамические объекты.
Обнаружение целевых объектов обрабатывается расширенным трекером объектов. В этом примере вы используете расширенный трекер гипотезы вероятностей Гамма-Гауссова обратного желания (GGIW-PHD) объекта. Трекер GGIW-PHD моделирует цель с эллиптической формой, и модель измерения принимает, что обнаружения равномерно распределены внутри степени цели. Эта модель позволяет цели принимать 2-прыгающие обнаружения призрака, которые имеют более высокую вероятность быть неправильно классифицированными как реальные цели. Эти 2-bounce обнаружения призрака также сообщают о доплеровском измерении, которое не соответствует фактическому движению цели. Когда эти обнаружения призрака и реальные обнаружения цели от одного и того же объекта, по оценкам, относятся к одному и тому же разделу обнаружений, неправильная информация Доплера может потенциально вызвать различие в оценке дорожки.
Чтобы уменьшить эту проблему, трекер обрабатывает измерения уровня области значений с более высоким отклонением шума измерения, чтобы учесть это несовершенство в целевой модели измерения. Трекер также использует комбинацию высокого порога назначения и низкого порога слияния. Высокий порог назначения позволяет трекеру уменьшить генерацию новых компонентов из обнаружений призрачных целей, которые неправильно классифицируются как обнаружения целевых объектов. Низкий порог слияния позволяет трекеру отбрасывать исправленные компоненты (гипотезу) дорожки, которая могла различаться из-за коррекции с обнаружениями призраков.
Вы настраиваете трекер с помощью trackerPHD
Системные object™. Для получения дополнительной информации о расширенных трекерах объектов смотрите пример Расширенного Отслеживания Объектов Дорожных Транспортных Средств с Радаром и Камерой (Automated Driving Toolbox).
% Configuration of the sensors from the recording to set up the tracker [~, sensorConfigurations] = helperAssembleData(detectionLog{1},configurationLog{1}); % Configure the tracker to use the GGIW-PHD filter with constant turn-rate motion model for i = 1:numel(sensorConfigurations) sensorConfigurations{i}.FilterInitializationFcn = @helperInitGGIWFilter; sensorConfigurations{i}.SensorTransformFcn = @ctmeas; end % Create the tracker using trackerPHD with Name-value pairs tracker = trackerPHD('SensorConfigurations', sensorConfigurations,... 'PartitioningFcn',@(x)helperMultipathExamplePartitionFcn(x,2,5),... 'AssignmentThreshold',450,... 'ExtractionThreshold',0.8,... 'ConfirmationThreshold',0.98,... 'MergingThreshold',25,... 'DeletionThreshold',1e-3,... 'BirthRate',1e-2,... 'HasSensorConfigurationsInput',true... );
Далее вы продвигаете сценарий, используете зарегистрированные измерения с датчиков и обрабатываете их с помощью ранее описанного алгоритма. Вы анализируете эффективность алгоритма отслеживания с помощью Обобщённого Оптимального Подшаблона Назначения (GOSPA) метрики. Вы также анализируете эффективность алгоритма классификационной фильтрации, оценивая матрицу неточностей между истинной и предполагаемой классификацией радиолокационных обнаружений. Вы получаете истинную классификационную информацию о обнаружениях с помощью helperTrueClassificationInfo
вспомогательная функция.
% Create trackGOSPAMetric object to calculate GOSPA metric gospaMetric = trackGOSPAMetric('Distance','custom', ... 'DistanceFcn',@helperGOSPADistance, ... 'CutoffDistance',35); % Create display for visualization of results display = helperMultiPathTrackingDisplay; % Predicted track list for ghost filtering predictedTracks = objectTrack.empty(0,1); % Confusion matrix confMat = zeros(5,5,numel(detectionLog)); % GOSPA metric gospa = zeros(4,numel(detectionLog)); % Ground truth groundTruth = scenario.Actors(2:end); for i = 1:numel(detectionLog) % Advance scene for visualization of ground truth advance(scenario); % Current time time = scenario.SimulationTime; % Detections and sensor configurations [detections, configurations] = helperAssembleData(detectionLog{i},configurationLog{i}); % Predict confirmed tracks to current time for classifying ghosts if isLocked(tracker) predictedTracks = predictTracksToTime(tracker,'confirmed',time); end % Classify radar detections as targets, ghosts, or static environment [targets, ghostStatic, ghostDynamic, static, reflectors, classificationInfo] = helperClassifyRadarDetections(detections, egoVehicle, predictedTracks); % Pass detections from target and sensor configurations to the tracker confirmedTracks = tracker(targets, configurations, time); % Visualize the results display(egoVehicle, sensors, targets, confirmedTracks, ghostStatic, ghostDynamic, static, reflectors); % Calculate GOSPA metric [gospa(1, i),~,~,gospa(2,i),gospa(3,i),gospa(4,i)] = gospaMetric(confirmedTracks, groundTruth); % Get true classification information and generate confusion matrix trueClassificationInfo = helperTrueClassificationInfo(detections); confMat(:,:,i) = helperConfusionMatrix(trueClassificationInfo, classificationInfo); end
Анимация и анализ моментальных снимков
Следующая анимация показывает результат цепи радиолокационной обработки данных. Черные эллипсы вокруг транспортных средств представляют предполагаемые трассы. Радиолокационные обнаружения визуализируются четырьмя различными цветами в зависимости от их предсказанной классификации из алгоритма. Черные точки в визуализации представляют статические радиолокационные обнаружения целей. Заметьте, что эти обнаружения перекрываются черными линиями, которые представляют статические отражатели, найденные с помощью алгоритма DBSCAN. Темно-бордовые маркеры представляют обнаружения, обработанные трекером расширенных объектов, в то время как зеленые и синие маркеры представляют радиолокационные обнаружения, классифицированные как отражения через статические и динамические объекты соответственно. Заметьте, что трекер способен поддерживать трек на всех четырех транспортных средствах во время сценария и никакие ложные следы не были подтверждены трекером.
Затем вы анализируете эффективность алгоритма, используя различные снимки, захваченные во время симуляции. Снимок ниже фиксируется в момент времени = 3 секунды и показывает ситуацию перед автомобилем , оборудованным датчиком. В это время автомобиль , оборудованный датчиком приближается к медленно движущемуся грузовику, и левый радар наблюдает отражения этих объектов через левый барьер. Эти обнаружения появляются как зеркальные обнаружения этих объектов в барьере. Заметьте, что черная линия, оцененная как 2-D отражатель, находится в линии зрения этих обнаружений. Поэтому алгоритм способен правильно классифицировать эти обнаружения как призрачные цели, отраженные от статических объектов.
f = showSnaps(display,1:2,1); if ~isempty(f) ax = findall(f,'Type','Axes','Tag','birdsEyePlotAxes'); ax.XLim = [-10 30]; ax.YLim = [-10 20]; end
Затем проанализируйте эффективность алгоритма с помощью моментального снимка, полученного в момент времени = 4,5 секунды. В это время автомобиль , оборудованный датчиком ещё ближе к грузовику и грузовик находится примерно на полпути между зеленым автомобилем и автомобилем , оборудованным датчиком. Во время этих ситуаций левая сторона грузовика действует как сильный отражатель и генерирует обнаружения призраков. Обнаружение на правой половине зеленого транспортного средства происходит от 2-отскакивания от зеленого транспортного средства, когда сигнал перемещается назад к датчику после отражения грузовика. Алгоритм способен классифицировать эти обнаружения как обнаружения призраков, сгенерированные динамическими отражениями объектов, потому что оцененная степень грузовика находится в непосредственной линии зрения этих обнаружений.
f = showSnaps(display,1:2,2); if ~isempty(f) ax = findall(f,'Type','Axes','Tag','birdsEyePlotAxes'); ax.XLim = [-10 30]; ax.YLim = [-10 20]; end
Также обратите внимание на проезжающее мимо транспортное средство, обозначенное желтой машиной слева от автомобиля , оборудованного датчиком. Обнаружение, которое, по-видимому, происходит с невидимой поверхности желтого транспортного средства, представляет собой обнаружение 2-отскакивания барьеров, отраженных через переднюю поверхность проходящего транспортного средства. Эти обнаружения призраков неправильно классифицируются как целевые обнаружения, поскольку они, по-видимому, происходят изнутри предполагаемой протяженности транспортного средства. В том же месте обнаружения, которые находятся за пределами барьера, также являются 2-отскочными обнаружениями передней поверхности, когда сигнал отражается от барьера и возвращается к датчику. Поскольку эти обнаружения находятся за пределами дорожки, и дорожка находится в прямой линии зрения, они классифицируются как обнаружения призраков от отражений от динамических объектов.
Анализ эффективности
Количественно оцените эффективность алгоритма отслеживания с помощью метрики GOSPA и связанных с ней компонентов. Меньшее значение метрики обозначает лучшую эффективность отслеживания. На рисунке ниже компонент «Missed-target» метрики остается нулем после нескольких шагов в начале, представляющих задержку установления трекера. Этот компонент показывает, что трекер не пропустил цели. Кроме того, компонент «False-tracks» метрики остается нулем, представляющим, что никакие ложные треки не были подтверждены трекером.
figure; plot(gospa','LineWidth',2); legend('GOSPA','Localization GOSPA','Missed-target GOSPA','False-tracks GOSPA');
Подобно алгоритму отслеживания, вы также количественно анализируете эффективность алгоритма классификации радиолокационных обнаружений с помощью матрицы неточностей [2]. Строки, показанные в таблице, обозначают истинную классификационную информацию радиолокационных обнаружений, а столбцы представляют предсказанную классификационную информацию. Для примера второй элемент первой строки определяет процент обнаружений целевых объектов, предсказанных как призраки от статических отражений объектов.
Более 94% целевых обнаружений классифицированы правильно. Однако небольшой процент обнаружений целевых объектов неправильно классифицируется как призраки от динамических отражений. Кроме того, примерно 9% призраков от статических отражений объектов и 35% призраков от динамических отражений объектов неправильно классифицируются как цели и отправляются в трекер для обработки. Распространенной ситуацией, когда это происходит в этом примере, является ситуация, когда обнаружения от 2-отскакивающих отражений находятся внутри предполагаемой степени транспортного средства. Кроме того, алгоритм классификации, используемый в этом примере, не предназначен для поиска ложных предупреждений или загромождения в сцене. Поэтому пятый столбец матрицы неточностей равен нулю. Из-за пространственного распределения ложных предупреждений внутри поля зрения большинство обнаружений ложных предупреждений классифицируются как отражения от статических объектов или динамических объектов.
% Accumulate confusion matrix over all steps confusionMatrix = sum(confMat,3); numElements = sum(confusionMatrix,2); numElemsTable = array2table(numElements,'VariableNames',{'Number of Detections'},'RowNames',{'Targets','Ghost (S)','Ghost (D)','Environment','Clutter'}); disp('True Information');disp(numElemsTable);
True Information Number of Detections ____________________ Targets 1982 Ghost (S) 3818 Ghost (D) 345 Environment 25358 Clutter 150
% Calculate percentages percentMatrix = confusionMatrix./numElements*100; percentMatrixTable = array2table(round(percentMatrix,2),'RowNames',{'Targets','Ghost (S)','Ghost (D)','Environment','Clutter'},... "VariableNames",{'Targets','Ghost (S)','Ghost (D)', 'Environment','Clutter'}); disp('True vs Predicted Confusion Matrix (%)');disp(percentMatrixTable);
True vs Predicted Confusion Matrix (%) Targets Ghost (S) Ghost (D) Environment Clutter _______ _________ _________ ___________ _______ Targets 94.6 1.06 3.88 0.45 0 Ghost (S) 9.25 74.1 16.24 0.42 0 Ghost (D) 38.84 0 61.16 0 0 Environment 0.93 3.07 2.59 93.4 0 Clutter 16.67 62 20 1.33 0
В этом примере вы моделировали радиолокационные обнаружения из-за многолучевого распространения в сценарии вождения городского шоссе. Вы сконфигурировали алгоритм обработки данных, чтобы одновременно фильтровать обнаружения призраков и отслеживать транспортные средства на шоссе. Вы также проанализировали эффективность алгоритма отслеживания и алгоритма классификации, используя метрику GOSPA и матрицу неточностей.
[1] Пророк, Роберт и др. «Мгновенная идентификация обнаружения призраков в автомобильных сценариях». 2019 IEEE Radar Conference (RadarConf). IEEE, 2019.
[2] Kraus, Florian, et al. «Использование машинного обучения для обнаружения призрачных изображений в автомобильном радаре». 2020 IEEE 23 Международная конференция по интеллектуальным транспортным системам (ITSC). IEEE, 2020.