В этом примере показано, как смоделировать и смягчить многопутевые радарные отражения в магистрали ведущий сценарий в Simulink®. Это сопровождает Отслеживание Дорожного транспортного средства с Многопутевыми Радарными Отражениями (Radar Toolbox) пример MATLAB®.
В то время как автомобильные радары обеспечивают устойчивую эффективность обнаружения через разнообразный массив условий окружающей среды, с которыми сталкиваются в сценариях автономного управления автомобилем, интерпретирование обнаружений, о которых сообщает радар, может оказаться сложным. Алгоритмы cочетания датчиков, обрабатывающие радарные обнаружения, должны будут смочь идентифицировать желаемые целевые обнаружения, возвращенные наряду с обнаружениями, являющимися результатом дороги (часто называемый помехой) и многопутевой между различными объектами в ведущем сценарии как поручни и другие транспортные средства на дороге. Обнаружения, сгенерированные несколькими отражениями между радаром и конкретной целью, часто упоминаются как фантомные обнаружения, потому что они, кажется, происходят в областях, где никакие цели не существуют. Этот пример показывает вам удар этих многопутевых отражений о разработке и конфигурировании объекта, отслеживающего стратегию с помощью радарных обнаружений. Для получения дополнительной информации относительно многопутевого явления и симуляции фантомных обнаружений, отошлите к Симулировать Радарным Фантомам из-за Многопутевого Возврата (Radar Toolbox) пример.
Этот пример использует тот же сценарий и радары, заданные helperCreateMultipathDrivingScenario
функция использовала в Отслеживании Дорожного транспортного средства с Многопутевыми Радарными Отражениями (Radar Toolbox) пример. Открытие модели загружает этот сценарий в рабочую область для использования блоком Scenario Reader (Automated Driving Toolbox).
open_system('MultipathRadarDetectionsTrackingModel')
Используйте "Радарный блок помощника" эго, чтобы воспроизвести обнаружения, зарегистрированные от четырех радаров, обеспечивающих полные 360 покрытий степени вокруг автомобиля, оборудованного датчиком. Чтобы записать новый набор обнаружений, снимите флажок "С радарной записью воспроизведения".
open_system('MultipathRadarDetectionsTrackingModel/Ego radars')
close_system('MultipathRadarDetectionsTrackingModel/Ego radars')
Четыре модели датчика сконфигурированы в блоке "Record radars".
open_system('MultipathRadarDetectionsTrackingModel/Ego radars/Record radars')
Используйте Bird ' s-Eye Scope (Automated Driving Toolbox), чтобы визуализировать сценарий и покрытие датчика в этой модели.
"Классифицируют обнаружения" блок помощника, классифицирует обнаружения, сгенерированные этими четырьмя радарами путем сравнения их измерений с подтвержденными дорожками от блока Probability Hypothesis Density (PHD) Tracker. Классификация обнаружений использует измеренную радиальную скорость от целей, чтобы определить, была ли цель, генерирующая обнаружение, статической или динамическая [1]. Обнаружения классифицируются в четыре категории:
Динамические цели - Эти (красные) обнаружения классифицируются, чтобы произойти из действительных динамических целей в сцене.
Статические фантомы - Эти (зеленые) обнаружения классифицируются, чтобы произойти из динамических целей, но отражаются через статическую среду.
Динамические фантомы - Эти (синие) обнаружения классифицируются, чтобы произойти из динамических целей, но отражаются через другие динамические объекты.
Статические цели - Эти (черные) обнаружения классифицируются, чтобы произойти из статической среды.
Сконфигурируйте блок Probability Hypothesis Density (PHD) Tracker теми же параметрами, как используется Отслеживанием Дорожного транспортного средства с Многопутевыми Радарными Отражениями (Radar Toolbox) пример. Снова используйте helperMultipathExamplePartitionFcn
функция, чтобы задать разделы обнаружения, используемые в средстве отслеживания.
open_system('MultipathRadarDetectionsTrackingModel/Probability Hypothesis Density Tracker')
close_system('MultipathRadarDetectionsTrackingModel/Probability Hypothesis Density Tracker',0)
Используйте следующую команду, чтобы воспроизвести записанные обнаружения и сгенерировать дорожки.
simout = sim('MultipathRadarDetectionsTrackingModel')
Используйте helperSaveSimulationLogs
сохранить регистрируемые дорожки и классифицированные обнаружения для оффлайнового анализа.
helperSaveSimulationLogs('MultipathRadarDetectionsTrackingModel',simout);
Загрузите регистрируемые дорожки и обнаружения, чтобы оценить эффективность алгоритма отслеживания при помощи метрики GOSPA и ее связанных компонентов.
[confirmedTracks,confusionMatrix] = helperLoadSimulationLogs('MultipathRadarDetectionsTrackingModel');
Используйте trackGOSPAMetric
вычислить метрики GOSPA от регистрируемых дорожек.
gospaMetric = trackGOSPAMetric('Distance','custom', ... 'DistanceFcn',@helperGOSPADistance, ... 'CutoffDistance',35); % Number of simulated track updates numSteps = numel(confirmedTracks.Time); % GOSPA metric gospa = NaN(4,numSteps); restart(scenario); groundTruth = scenario.Actors(2:end); iStep = 1; tol = seconds(scenario.SampleTime/4); while scenario.SimulationTime<=seconds(confirmedTracks.Time(end)) % Select data from time table for current simulation time tsim = scenario.SimulationTime; wt = withtol(seconds(tsim),tol); % Select tracks from time table and compute GOSPA metrics theseTracks = confirmedTracks{wt,'Tracks'}{1}; [gospa(1,iStep),~,~,gospa(2,iStep),gospa(3,iStep),gospa(4,iStep)] = gospaMetric(theseTracks,groundTruth); if scenario.IsRunning advance(scenario); else break end iStep = iStep+1; end
Количественно оцените эффективность алгоритма отслеживания при помощи метрики GOSPA и ее связанных компонентов. Нижнее значение метрики обозначает лучшую эффективность отслеживания. В рисунке ниже компонент "пропущенной цели" метрики остается нуль после нескольких шагов в начале, представляя задержку установления средства отслеживания. Этот компонент показывает, что никакие цели не были пропущены средством отслеживания. Компонент "Ложных дорожек" метрики является нулем для большей части симуляции, указывая, что никакие ложные дорожки не были подтверждены средством отслеживания в течение тех времен.
% Plot GOSPA metrics plot(seconds(confirmedTracks.Time),gospa','LineWidth',2); xlabel('Time (s)'); title('GOSPA Metrics'); grid on; legend('GOSPA','Localization GOSPA','Missed-target GOSPA','False-tracks GOSPA');
Подобно алгоритму отслеживания вы также количественно анализируете эффективность радарного алгоритма классификации обнаружений при помощи матрицы [2] беспорядка. Строки, показанные в таблице, обозначают истинную информацию о классификации радарных обнаружений, и столбцы представляют предсказанную информацию о классификации. Например, второй элемент первой строки задает процент целевых обнаружений, предсказанных как фантомы от отражений статического объекта.
91% целевых обнаружений классифицируется правильно. Однако небольшой процент целевых обнаружений неправильно классифицируется как фантомы от динамических отражений. Кроме того, приблизительно 3% фантомов от отражений статического объекта и 23% фантомов от отражений динамического объекта неправильно классифицируются как цели и отправляются в средство отслеживания для обработки. Общая ситуация, когда это происходит в этом примере, состоит в том, когда обнаружения от отражений 2D возврата лежат в предполагаемой степени транспортного средства. Далее, алгоритм классификации, используемый в этом примере, не спроектирован, чтобы найти ложные предупреждения или помеху в сцене. Поэтому пятая колонна матрицы беспорядка является нулем. Из-за пространственного распределения ложных предупреждений в поле зрения, большинство ложных сигнальных обнаружений или классифицируется как отражения от статических объектов или динамических объектов.
% Accumulate confusion matrix over all steps confMat = shiftdim(reshape([confusionMatrix{:,'Confusion Matrix'}],numSteps,5,5),1); confMat = sum(confMat,3); % Number of detections for each target type numDetections = sum(confMat,2); numDetsTable = array2table(numDetections,'RowNames',{'Targets','Ghost (S)','Ghost (D)','Environment','Clutter'},... 'VariableNames',{'Number of Detections'}); disp('True Information');disp(numDetsTable);
True Information Number of Detections ____________________ Targets 1986 Ghost (S) 3244 Ghost (D) 836 Environment 27441 Clutter 139
% Calculate classification percentages percentMatrix = confMat./numDetections*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 90.99 0.76 7.85 0.4 0 Ghost (S) 3.18 85.39 11.13 0.31 0 Ghost (D) 22.97 0.36 76.67 0 0 Environment 1.56 2.92 3.41 92.1 0 Clutter 19.42 65.47 14.39 0.72 0
В этом примере вы симулировали радарные обнаружения из-за многопутевого распространения в городской магистрали ведущий сценарий с помощью Simulink. Вы сконфигурировали алгоритм обработки данных, чтобы одновременно отфильтровать фантомные обнаружения и транспортные средства дорожки на магистрали. Вы также анализировали эффективность алгоритма отслеживания и алгоритма классификации с помощью метрики GOSPA и матрицы беспорядка.
[1] Пророк, Роберт, и др. "Мгновенная Фантомная Идентификация Обнаружения в Автомобильных Сценариях". 2 019 Радарных Конференций по IEEE (RadarConf). IEEE, 2019.
[2] Kraus, Флориэн, и др. "Используя машинное обучение, чтобы обнаружить фантомные изображения в автомобильном радаре". 2 020 IEEE 23-я Международная конференция по вопросам Интеллектуальных Систем Транспортировки (ITSC). IEEE, 2020.