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;

Создайте читателя Velodyne, чтобы считать облака точек.

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

Отобразите набор представления в 2D представлении по умолчанию.

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

Введенный в R2020a