poseGraph

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

Описание

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

Чтобы создать график положения итеративно, используйте 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 функция. Эта функция задает узлы, когда xy - указывает без оценок ориентации. Ориентиры должны быть заданы относительно узла положения.

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

lidarSLAM объект выполняет основанную на лидаре одновременную локализацию и картографию, которая базируется вокруг оптимизации 2D графика положения.

Для 3-D графиков положения смотрите poseGraph3D возразите или Ориентир SLAM Используя пример Маркеров AprilTag.

Создание

Описание

пример

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

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

Свойства

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

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

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

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

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

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

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

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

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

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

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

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

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

Примеры

свернуть все

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

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

load intel-2d-posegraph.mat pg
disp(pg)
  poseGraph with properties:

               NumNodes: 1228
               NumEdges: 1483
    NumLoopClosureEdges: 256
     LoopClosureEdgeIDs: [1x256 double]
        LandmarkNodeIDs: [1x0 double]

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

show(pg,'IDs','off');
title('Original Pose Graph')

Figure contains an axes. The axes with title Original Pose Graph contains 3 objects of type line.

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

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

Figure contains an axes. The axes with title Updated Pose Graph contains 3 objects of type line.

Ссылки

[1] Гризетти, G., Р. Каммерл, К. Стэкнисс и В. Бергард. "Пример на Основанном на графике SLAM". IEEE Интеллектуальный Системный Журнал Транспортировки. Издание 2, № 4, 2010, стр 31–43. doi:10.1109/mits.2010.939925.

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

Введенный в R2019b