poseGraph3D

Создайте 3-D график положения

Описание

poseGraph3D объект сохраняет информацию для 3-D представления графика положения. График положения содержит узлы, соединенные ребрами. Каждая оценка узла соединяется с графиком ограничениями ребра, которые задают относительное положение между узлами и неопределенностью на том измерении.

Чтобы создать график положения итеративно, используйте addRelativePose функция, чтобы добавить родственника излагает оценки и соединить их с существующим узлом с заданными ограничениями ребра. Позируйте узлы должны быть заданы относительно узла положения. Задайте неопределенность в измерении с помощью информационной матрицы.

Figure showing relative poses between node poses. Each sequential pose is connected by an edge. Poses are specified as x,y, theta relative to the previous node.

Добавление ребра между двумя непоследовательными узлами создает закрытие цикла в графике. Несколько ребер или мультиребер между парами узла также поддерживаются, который включает закрытия цикла. Чтобы добавить дополнительные ограничения ребра или закрытия цикла, задайте идентификаторы узла с помощью addRelativePose функция. При оптимизации графика положения, optimizePoseGraph функция находит решение удовлетворить всем этим ограничениям ребра.

Figure showing loop closures and multiedges as constraints between nodes. Loop closures connect to previous non-sequential nodes. Multiedges are multiple constraints between the same node pair.

Чтобы добавить узлы поворотного момента, используйте addPointLandmark функция. Эта функция задает узлы, когда xyz - указывает без оценок ориентации. Ориентиры должны быть заданы относительно узла положения.

Figure showing a landmark position as an xy point relative to two nodes with an edge between each node. to.

Для 2D графиков положения смотрите poseGraph.

Для примера, который создает и оптимизирует 3-D график положения из реальных данных о датчике, смотрите Ориентир SLAM Используя Маркеры AprilTag.

Создание

Описание

пример

poseGraph = poseGraph3D создает 3-D объект графика положения. Добавьте использование положений addRelativePose создать график положения итеративно.

poseGraph = poseGraph3D('MaxNumEdges',maxEdges,'MaxNumNodes',maxNodes) задает верхнюю границу на количестве ребер и узлов, позволенных в графике положения при генерации кода. Этот предел только требуется при генерации кода.

Свойства

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

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

Количество узлов в графике положения в виде положительного целого числа. Каждый узел представляет измерение положения или значительное измерение точки. Чтобы задать относительные положения между узлами, использовать addRelativePose. Чтобы задать знаменательное положение, использовать addLandmarkPose. Чтобы получить список всех узлов, использовать edgeNodePairs.

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

Количество ребер в графике положения в виде неотрицательного целого числа. Каждое ребро соединяет два узла в графике положения. Ребра закрытия цикла и знаменательные ребра включены.

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

Количество закрытий цикла в графике положения в виде неотрицательного целого числа. Чтобы получить идентификаторы ребра закрытий цикла, используйте LoopClosureEdgeIDs свойство.

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

Идентификаторы ребер закрытия цикла в виде вектора из идентификаторов ребра.

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

Знаменательные идентификаторы узла в виде вектора из идентификаторов для каждого узла.

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

addPointLandmarkДобавьте узел поворотного момента в график положения
addRelativePoseДобавьте относительное положение в график положения
copyСоздайте копию графика положения
edgeNodePairsПары узла ребра в графике положения
edgeConstraintsОграничения ребра в графике положения
edgeResidualErrorsВычислите остаточные ошибки ребра графика положения
findEdgeIDНайдите ID ребра ребра
nodeEstimatesПоложения узлов в графике положения
removeEdgesУдалите ребра закрытия цикла из графика
showПостройте график положения

Примеры

свернуть все

Оптимизируйте график положения на основе ограничений ребра и узлов. График положения, используемый в этом примере, взят из Набора данных MIT и был сгенерирован с помощью информации, извлеченной из гаража.

Загрузите график положения от набора данных MIT. Смотрите poseGraph3D возразите, чтобы просмотреть количество закрытий цикла и узлов.

load parking-garage-posegraph.mat pg
disp(pg);
  poseGraph3D with properties:

               NumNodes: 1661
               NumEdges: 6275
    NumLoopClosureEdges: 4615
     LoopClosureEdgeIDs: [128 129 130 132 133 134 135 137 138 139 140 ... ]
        LandmarkNodeIDs: [1x0 double]

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

title('Original Pose Graph')
show(pg,'IDs','off');
view(-30,45)

Figure contains an axes object. The axes object contains 3 objects of type line.

Оптимизируйте график положения. Узлы настроены на основе ограничений ребра и закрытий цикла. Постройте оптимизированный график положения, чтобы видеть корректировку узлов с закрытиями цикла.

updatedPG = optimizePoseGraph(pg);
figure
title('Updated Pose Graph')
show(updatedPG,'IDs','off');
view(-30,45)

Figure contains an axes object. The axes object contains 3 objects of type line.

Ссылки

[1] Carlone, Лука, Роберто Трон, Костас Даниилидис и Франк Деллэерт. "Методы инициализации для 3D SLAM: Обзор Оценки Вращения и ее Использования в Оптимизации Графика положения". 2 015 Международных конференций IEEE по вопросам Робототехники и Автоматизации (ICRA). 2015, стр 4597–4604.

Расширенные возможности

Введенный в R2019b