poseGraph3D

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

Описание

A 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 mulitedges 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.

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

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

Создание

Описание

пример

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

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

Свойства

расширить все

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

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

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

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

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

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

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

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

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

Ориентир идентификаторов узла, заданный как вектор идентификаторов для каждого узла.

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

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

Примеры

свернуть все

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

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

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

               NumNodes: 1661
               NumEdges: 6275
    NumLoopClosureEdges: 4615
     LoopClosureEdgeIDs: [1x4615 double]
        LandmarkNodeIDs: [1x0 double]

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

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

Figure contains an axes. The axes 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. The axes contains 3 objects of type line.

Ссылки

[1] Carlone, Luca, Roberto Tron, Kostas Daniilidis и Frank Dellaert. «Initialization Методов for 3D SLAM: a Survey on Rotation Estimation and Use in Pose Graph Optimization». 2015 IEEE International Conference on Robotics and Automation (ICRA). 2015, стр 4597–4604.

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

.
Введенный в R2019b