pcviewset

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

Описание

The 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

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

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

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

Введенный в R2020a