Настройте и используйте график птичьего глаза для отображения покрытия датчиков, обнаружений и результатов отслеживания вокруг эго-транспортного средства.
Отображение данных, записанных в координатах транспортного средства, на двумерной карте вокруг эго-транспортного средства является важной частью анализа покрытий датчиков, обнаружений и результатов отслеживания. Использовать для отображения снимка этой информации в течение определенного времени или для потоковой передачи данных и эффективного обновления дисплея.birdsEyePlot
В этом примере считываются предварительно записанные данные датчика и результаты отслеживания. Он включает в себя следующее:
Информация о полосе движения
Объекты зрения
Радиолокационные объекты
Положения, скорости, ковариационные матрицы и метки дорожек.
Самый важный объект
Вышеуказанная информация регистрировалась с высокой скоростью 20 обновлений в секунду, за исключением обнаружений зрения, которые регистрировались с частотой 10 обновлений в секунду.
Файл конфигурации датчика определяет положение и зоны покрытия датчика зрения и радиолокационного датчика с двумя режимами покрытия. Эти зоны покрытия будут отображаться на графике птичьего глаза.
Обратите внимание, что birdsEyePlot объект устанавливает очень специфическую систему координат транспортного средства, где ось X указывает вперед от транспортного средства, ось Y указывает влево от транспортного средства, а ось Z указывает вверх от земли. Начало системы координат обычно определяется как центр задней оси, а положения датчиков определяются относительно начала координат. Дополнительные сведения см. в разделе Системы координат в автоматизированной панели инструментов вождения.
Настройка графика птичьего глаза занимает два шага. На первом этапе создается график птичьего глаза, который устанавливает описанную выше систему координат, где ось x направлена вверх, а ось y направлена влево. Можно определить границы осей в каждом направлении. В этом перспективном примере мы определяем сцену до 90 метров перед эго-транспортным средством и 35 метров с каждой стороны.
% Create a bird's-eye plot and limit its axes BEP = birdsEyePlot('Xlimits', [0 90], 'Ylimits', [-35 35]);
На втором этапе создаются плоттеры птичьего глаза. График «птичий глаз» предлагает следующие типы плоттеров, каждый из которых настроен для печати данных определенного типа. К ним относятся:
coverageAreaPlotter - Зона покрытия датчика
обнаружение Плоттер - печать обнаружений объектов
trackPlotter - Строит дорожки, отслеживает неопределенности и ведет историю
laneBoundaryPlotter - Границы Плот-Лейн
pathPlotter - Траектория объекта графика
% Create a coverageAreaPlotter for a vision sensor and two radar modes cap(1) = coverageAreaPlotter(BEP,'FaceColor','blue','EdgeColor','blue'); cap(2) = coverageAreaPlotter(BEP,'FaceColor','red','EdgeColor','red'); cap(3) = coverageAreaPlotter(BEP,'FaceColor','red','EdgeColor','red');
Загрузить данные конфигурации датчика. Конфигурация датчика включает в себя:
Положение датчиков относительно начала координат осей (X, Y), в метрах
Диапазон датчиков, в метрах
Угол рыскания датчика относительно оси X, в градусах
Поле зрения датчика (FOV), в градусах
load('SensorConfigurationData.mat'); % Use the sensor configuration to plot the sensor coverage areas. Vision % sensor uses the shaded blue coverage area and radar modes are shaded in % red. for i = 1:3 plotCoverageArea(cap(i), [sensorParams(i).X, sensorParams(i).Y],... sensorParams(i).Range, sensorParams(i).YawAngle, sensorParams(i).FoV); end % Add title title('Bird''s-Eye Plot')

На приведенном выше дисплее показано покрытие датчика зрения и два режима работы датчика радара.
Датчик зрения расположен на 3,30 метра перед началом координат (задней осью) в центре автомобиля, с дальностью 150 метров и ФОВ 38 градусов.
Радар расположен на 3,38 метра перед началом координат в центре автомобиля. Дальний режим РЛС имеет дальность 174 метра и ФОВ 20 градусов, в то время как средний режим имеет дальность 60 метров и ФОВ 90 градусов. Обратите внимание, что зоны покрытия усечены на расстоянии 90 метров перед эго-транспортным средством и 35 метров с каждой стороны.
В этом примере показан перспективный сценарий; однако можно определить зону покрытия
вокруг эго-транспортного средства. Например, датчик, который закрывает заднюю часть транспортного средства назад, будет ориентирован с углом рыскания.
Следующие несколько строк считывают записанные данные при подготовке к следующим шагам.
% Load recorded data from a file load('BirdsEyePlotExampleData.mat', 'dataToDisplay'); % Skip to the 125th time step, where there are 5 vision detections and % multiple radar objects and tracks. timeStep = 125; % Extract the various data from the recorded file for that time step [visionObjectsPos, radarObjectsPos, laneBoundaries, trackPositions, ... trackVelocities, trackCovariances, trackLabels, MIOlabel, MIOposition, ... MIOvelocity] = readDataFrame(dataToDisplay(timeStep));
Затем создайте плоттеры для отображения записанных сигналов наблюдения и радиолокационных сигналов
% create a vision detection plotter put it in a struct for future use bepPlotters.Vision = detectionPlotter(BEP, 'DisplayName','vision detection', ... 'MarkerEdgeColor','blue', 'Marker','^'); % Combine all radar detections into one entry and store it for later update bepPlotters.Radar = detectionPlotter(BEP, 'DisplayName','radar detection', ... 'MarkerEdgeColor','red'); % Call the vision detections plotter plotDetection(bepPlotters.Vision, visionObjectsPos); % Repeat the above for radar detections plotDetection(bepPlotters.Radar, radarObjectsPos);

При добавлении дорожек в Bird 's-Eye Plot мы предоставляем информацию о положении, скорости и положении ковариации. Плоттер заботится о отображении следа истории дорожек, но так как это один кадр, истории не будет.
% Create a track plotter that shows the last 10 track updates bepPlotters.Track = trackPlotter(BEP, 'DisplayName','tracked object', ... 'HistoryDepth',10); % Create a track plotter to plot the most important object bepPlotters.MIO = trackPlotter(BEP, 'DisplayName','most important object', ... 'MarkerFaceColor','black'); % Call the track plotter to plot all the tracks plotTrack(bepPlotters.Track, trackPositions, trackVelocities, trackCovariances, trackLabels); % Repeat for the Most Important Object (MIO) plotTrack(bepPlotters.MIO, MIOposition, MIOvelocity, MIOlabel);

При печати границ полос можно использовать объект. Чтобы использовать его, мы сохранили границы полосы движения как параболические объекты «Границы» и вызовем плоттер вместе с ним.parabolicLaneBoundary
% Create a plotter for lane boundaries bepPlotters.LaneBoundary = laneBoundaryPlotter(BEP, ... 'DisplayName','lane boundaries', 'Color',[.9 .9 0]); % Call the lane boundaries plotter plotLaneBoundary(bepPlotters.LaneBoundary, laneBoundaries);

Файл записи содержит зависящие от времени обнаружения датчиков, информацию для отслеживания и границы полос движения. Следующий код показывает, как воспроизводить записи и отображать результаты на графике птичьего глаза, который был настроен выше.
Примечание: обнаружение зрения предоставлялось каждый другой кадр. В таких случаях полезно показать отсутствие новых датчиков. Для этого просто передайте пустой массив на соответствующий плоттер для удаления предыдущих обнаружений с экрана.
% Rewind to the beginning of the recording file timeStep = 0; numSteps = numel(dataToDisplay); % Number of steps in the scenario % Loop through the scenario as long as the bird's eye plot is open while timeStep < numSteps && isvalid(BEP.Parent) % Promote the timeStep timeStep = timeStep + 1; % Capture the current time for a realistic display rate tic; % Read the data for that time step [visionObjectsPos, radarObjectsPos, laneBoundaries, trackPositions, ... trackVelocities, trackCovariances, trackLabels, MIOlabel, MIOposition, ... MIOvelocity] = readDataFrame(dataToDisplay(timeStep)); % Plot detections plotDetection(bepPlotters.Vision, visionObjectsPos); plotDetection(bepPlotters.Radar, radarObjectsPos); % Plot tracks and MIO plotTrack(bepPlotters.Track, trackPositions, trackVelocities, trackCovariances, trackLabels); plotTrack(bepPlotters.MIO, MIOposition, MIOvelocity, MIOlabel); % Plot lane boundaries plotLaneBoundary(bepPlotters.LaneBoundary, laneBoundaries); % The recorded data was obtained at a rate of 20 frames per second. % Pause for 50 milliseconds for a more realistic display rate. You % would not need this when you process data and form tracks in this % loop. pause(0.05 - toc) end
В этом примере показано, как настроить и использовать объект-график птичьего глаза и некоторые из связанных с ним плоттеров.
Попробуйте использовать дорожку и наиболее важные объектные плоттеры или использовать график птичьего глаза с другим файлом записи.
readDataFrame - извлекает отдельные поля из данных, предоставленных в dataFrame
function [visionObjectsPos, radarObjectsPos, laneBoundaries, trackPositions, ... trackVelocities, trackCovariances, trackLabels, MIOlabel, MIOposition, ... MIOvelocity] = readDataFrame(dataFrame) visionObjectsPos = dataFrame.visionObjectsPos; radarObjectsPos = dataFrame.radarObjectsPos; laneBoundaries = dataFrame.laneBoundaries; trackPositions = dataFrame.trackPositions; trackVelocities = dataFrame.trackVelocities; trackCovariances = dataFrame.trackCovariances; trackLabels = dataFrame.trackLabels; MIOlabel = dataFrame.MIOlabel; MIOposition = dataFrame.MIOposition; MIOvelocity = dataFrame.MIOvelocity; end