Сконфигурируйте и используйте График Bird 's-Eye для отображения покрытия датчика, обнаружений и результатов отслеживания вокруг автомобиля , оборудованного датчиком.
Отображение данных, записанных в координатах транспортного средства, на 2-мерной карте вокруг автомобиля , оборудованного датчиком является важной частью анализа покрытий датчика, обнаружений и результатов отслеживания. Использование
отображение моментального снимка этой информации в течение определенного времени или потоковая передача данных и эффективное обновление изображения.birdsEyePlot
Этот пример считывает предварительно записанные данные датчика и результаты отслеживания. Он включает в себя следующее:
Информация о маршруте
Объекты зрения
Радиолокационные объекты
Положения, скорости, ковариационные матрицы и метки треков.
Самый важный объект
Вышеуказанная информация записывалась с высокой частотой обновлений 20 в секунду, кроме обнаружений зрения, которые регистрировались с 10 обновлениями в секунду.
Файл строения датчика определяет положение и зоны покрытия датчика зрения и радара с двумя режимами покрытия. Эти зоны покрытия будут отображаться на графике птичьего глаза.
Обратите внимание, что birdsEyePlot
объект настраивает очень специфическую систему координат транспортного средства, где ось X указывает вперед от транспортного средства, ось Y указывает налево от транспортного средства, а ось Z указывает вверх от земли. Источник системы координат обычно определяется как центр задней оси, а положения датчиков определяются относительно источника. Для получения дополнительной информации смотрите Системы координат в Automated Driving Toolbox.
Настройка графика птичьего глаза делает два шага. На первом этапе создается график птичьего глаза, который настраивает описанную выше систему координат, где ось x направлена вверх, а ось Y направлена налево. Возможно задать пределы осей в каждом направлении. В этом перспективном примере мы задаем сцену до 90 метров перед автомобилем , оборудованным датчиком и 35 метров с каждой стороны.
% Create a bird's-eye plot and limit its axes BEP = birdsEyePlot('Xlimits', [0 90], 'Ylimits', [-35 35]);
На втором этапе создаются плоттеры птичьего глаза. График птичьего глаза предлагает следующее разнообразие плоттеров, каждый из которых сконфигурирован для графического изображения определенного типа данных. Они включают в себя:
coverageAreaPlotter - Зоны покрытия датчика графика
detectionPlotter - Графическое изображение обнаружений объектов
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 метров и FOV 38 степеней.
Радар расположен на 3,38 метра перед источник по центру автомобиля. Радиолокационный режим большой дальности имеет область значений 174 метра и FOV 20 степеней, в то время как режим средней дальности имеет область значений 60 метров и FOV 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);
При добавлении дорожек к графику Птичьего Глаза, мы предоставляем информацию о положении, скорости и положении ковариации. Плоттер заботится о отображении истории треков, но поскольку это единственная система координат, истории не будет.
% 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 и вызовем с ним плоттер.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