exponenta event banner

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

Настройте и используйте график птичьего глаза для отображения покрытия датчиков, обнаружений и результатов отслеживания вокруг эго-транспортного средства.

Обзор

Отображение данных, записанных в координатах транспортного средства, на двумерной карте вокруг эго-транспортного средства является важной частью анализа покрытий датчиков, обнаружений и результатов отслеживания. Использовать 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 метров с каждой стороны.

В этом примере показан перспективный сценарий; однако можно определить зону покрытия$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);

Печать дорожек и наиболее важных объектов

При добавлении дорожек в 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

См. также

Объекты

Функции

Связанные темы