exponenta event banner

pcviewset

Управление данными для визуальной одометрии на основе облака точек и SLAM

Описание

pcviewset объект хранит данные одометрии облака точек и одновременной локализации и отображения (SLAM) как набор представлений и попарных соединений между представлениями.

Создание

Синтаксис

Описание

пример

vSet = pcviewset создает объект pcviewset с именами свойств по умолчанию. Используйте функции объекта для выполнения таких действий, как добавление, изменение или удаление представлений или соединений.

Свойства

развернуть все

Это свойство доступно только для чтения.

Просмотр атрибутов, заданных в виде таблицы из трех столбцов. Таблица содержит столбцы, как описано в этой таблице.

КолонкаОписание
ViewIDИдентификатор представления, указанный как целое число. Идентификаторы представлений уникальны для определенного представления.
AbsolutePoseАбсолютная поза вида, указанная как rigid3d объект.
PointCloudОблако точек, указанное как pointCloud объект.

Это свойство доступно только для чтения.

Парные соединения между представлениями, заданными в виде таблицы из четырех столбцов. Таблица содержит столбцы, как описано в этой таблице. Каждая строка соответствует одному соединению.

КолонкаОписание
ViewID1Идентификатор представления для первого представления, указанный как уникальное целое число.
ViewID2Идентификатор представления для второго представления, указанного как уникальное целое число.
RelativePoseОтносительная позиция второго вида относительно первого вида, указанного как rigid3d объект.
InformationMatrixИнформационная матрица, заданная как матрица 6 на 6. Информационная матрица представляет неопределенность ошибки измерения и является обратной от ковариационной матрицы.

Это свойство доступно только для чтения.

Число представлений, указанное как неотрицательное целое число.

Это свойство доступно только для чтения.

Число подключений, указанное как неотрицательное целое число.

Функции объекта

addViewДобавление видов в набор видов
updateViewОбновить представление в наборе представлений
deleteViewУдалить представление из набора представлений
hasViewПроверка наличия представления в наборе представлений
addConnectionДобавление соединения между видами в наборе представлений
updateConnectionОбновление связи между представлениями в наборе представлений
deleteConnectionУдаление соединения между представлениями в наборе представлений
hasConnectionПроверка наличия соединения между двумя представлениями в наборе представлений
connectedViewsСвязанные виды в наборе представлений
posesАбсолютные позы, связанные с представлениями в наборе представлений
createPoseGraphСоздать график позы
optimizePosesОптимизация абсолютных поз с использованием зависимостей относительных поз
plotНабор видов печати и соединения

Примеры

свернуть все

Создайте набор видов для хранения одометрии.

 vSet = pcviewset;

Создайте считыватель Velodine для чтения облаков точек.

veloReader = velodyneFileReader('lidarData_ConstructionRoad.pcap','HDL32E');
ptCloud = readFrame(veloReader);

Выполните предварительную обработку одного кадра для удаления нулевой плоскости и для уменьшения числа облаков точек.

elevationDelta = 25;
gridStep       = 0.2;
groundPtsIdx = segmentGroundFromLidarData(ptCloud, ...
    'ElevationAngleDelta',elevationDelta);
ptCloud = select(ptCloud, ~groundPtsIdx,'Output','full');
ptCloud = pcdownsample(ptCloud,'gridAverage',gridStep);

Инициализация атрибутов для первого представления.

absPose = rigid3d;
relPose = rigid3d;

Добавьте первый вид в набор видов облака точек.

vSet = addView(vSet,1,absPose,'PointCloud',ptCloud);

Инициализируйте карту облака точек с помощью первого вида.

ptCloudMap = copy(ptCloud);

skipFrames = 5;
prevViewId = 1;
prevPtCloud = ptCloud;

Закольцовывание кадров для обновления одометрии и карты облаков точек.

for viewId = 6 : skipFrames : 50
    % Read point cloud.
    ptCloud = readFrame(veloReader,viewId);

    %Preprocess the frame.
    groundPtsIdx = segmentGroundFromLidarData(ptCloud, ...
        'ElevationAngleDelta', elevationDelta);
    ptCloud = select(ptCloud, ~groundPtsIdx, 'Output', 'full');
    ptCloud = pcdownsample(ptCloud, 'gridAverage', gridStep);

    % Register new point cloud against the previous one.
    regGridStep = 5;
    relPose = pcregisterndt(ptCloud, prevPtCloud, regGridStep, ...
        'InitialTransform', relPose);

    % Update the absolute transform.
    absPose = rigid3d( relPose.T*absPose.T );

    % Add new view and connection to the previous view.
    vSet = addView(vSet,viewId,absPose,'PointCloud',ptCloud);
    vSet = addConnection(vSet,prevViewId,viewId,relPose);

    prevPtCloud = ptCloud;
    prevViewId  = viewId;
end

Отображение вида, заданного в виде 2-D по умолчанию.

plot(vSet, 'ShowViewIds', 'on')
view(2)

Figure contains an axes. The axes contains an object of type graphplot.

Представлен в R2020a