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

Сконфигурируйте и используйте Видимый с большого расстояния График отобразить покрытие датчика, обнаружения и отслеживающие результаты вокруг автомобиля, оборудованного датчиком.

Обзор

Отображение данных, зарегистрированных в координатах транспортного средства на 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 метров на каждой стороне.

Этот пример показывает перспективный сценарий; однако, можно задать зону охвата$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

Смотрите также

Объекты

Функции

Похожие темы