Визуализация покрытия, обнаружений и дорожек датчика

Сконфигурируйте и используйте График 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 метрах с каждой стороны.

Этот пример показывает перспективный сценарий; однако можно задать зону покрытия$360^{\circ}$ вокруг автомобиля , оборудованного датчиком. Например, датчик, который покрывает заднюю часть транспортного средства назад, будет ориентирован с углом рыскания, равным.$180^{\circ}$

Следующие несколько линии считывают записанные данные в процессе подготовки к следующим шагам.

% 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

См. также

Объекты

Функции

Похожие темы