Сконфигурируйте и используйте Видимый с большого расстояния График отобразить покрытие датчика, обнаружения и отслеживающие результаты вокруг автомобиля, оборудованного датчиком.
Отображение данных, зарегистрированных в координатах автомобиля на 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 - Траектория объекта Plot
% 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