optimizePoseGraph

Оптимизируйте узлы в графике положения

Синтаксис

updatedGraph = optimizePoseGraph(poseGraph)
updatedGraph = optimizePoseGraph(poseGraph,solver)
[updatedGraph,solutionInfo] = optimizePoseGraph(___)
[___] = optimizePoseGraph(___,Name,Value)

Описание

пример

updatedGraph = optimizePoseGraph(poseGraph) настраивает положения на основе их ограничений ребра, заданных в заданном графике, чтобы улучшить полный график. Вы оптимизируете или 2D или 3-D график положения. Возвращенный график положения имеет ту же топологию с обновленными узлами.

updatedGraph = optimizePoseGraph(poseGraph,solver)задает тип решателя для оптимизации графика положения.

[updatedGraph,solutionInfo] = optimizePoseGraph(___) возвращает дополнительную статистику о процессе оптимизации в solutionInfo с помощью любого из предыдущих синтаксисов.

[___] = optimizePoseGraph(___,Name,Value) задает дополнительные опции с помощью одной или нескольких пар Name,Value. Например, 'MaxIterations',1000 увеличивает максимальное число итераций к 1 000.

Примеры

свернуть все

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

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

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

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

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

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

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

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

Входные параметры

свернуть все

2D или 3-D график положения, заданный как объект PoseGraph или PoseGraph3D.

Изложите решатель графика, заданный или как "builtin-trust-region" или как "g2o-levenberg-marquardt". Чтобы настроить любой решатель, используйте аргументы пары "имя-значение" для того решателя.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'MaxTime', 300

Примечание

В зависимости от входа solver функция поддерживает различные пары "имя-значение".

Если вход solver установлен в "builtin-trust-region":

свернуть все

Максимальное время, позволенное, заданное как пара, разделенная запятой, состоящая из 'MaxTime' и положительного числового скаляра в секундах. Выходы оптимизатора после того, как это превышает на этот раз.

Нижняя граница на норме градиента, заданного как пара, разделенная запятой, состоящая из 'GradientTolerance' и скаляра. Норма градиента вычисляется на основе функции стоимости оптимизации. Если норма падает ниже этого значения, выходов оптимизатора.

Нижняя граница на изменении в функции стоимости, заданной как пара, разделенная запятой, состоящая из 'FunctionTolerance' и скаляра. Если изменение функции стоимости падает ниже этого значения между шагами оптимизации, выходами оптимизатора.

Нижняя граница на размере шага, заданном как пара, разделенная запятой, состоящая из 'StepTolerance' и скаляра. Если норма шага оптимизации падает ниже этого значения, выходов оптимизатора.

Начальный доверительный радиус области, заданный как скаляр.

Отобразите промежуточную информацию об итерации о командной строке MATLAB®, заданной как пара, разделенная запятой, состоящая из 'VerboseOutput' и или 'off' или 'on'.

Идентификаторы ребер закрытия цикла в poseGraph, заданном как пара, разделенная запятой, состоящая из 'LoopClosuresToIgnore' и вектора. Чтобы получить идентификаторы ребра из графика положения, используйте findEdgeID.

Положение первого узла в poseGraph, заданном как пара, разделенная запятой, состоящая из 'FirstNodePose' и вектора положения.

Для (2D) PoseGraph положение является вектором [x y theta], который задает относительный позиционный xy и угол ориентации, theta.

Для PoseGraph3D положение является вектором [x y z qw qx qy qz], который задает относительный позиционный xyz и ориентация кватерниона, [qw qx qy qz].

Примечание

Много других источников для 3-D графиков положения, включая форматы .g2o, задают ориентацию кватерниона в различном порядке, например, [qx qy qz qw]. Проверяйте источник своих данных о графике положения перед добавляющими узлами к вашему объекту PoseGraph3D.

Если вход solver установлен в "g2o-levenberg-marquardt":

свернуть все

Максимальное количество итераций, заданных как пара, разделенная запятой, состоящая из 'MaxIterations' и положительного целого числа. Выходы оптимизатора после того, как это превышает это количество итераций.

Максимальное время, позволенное, заданное как пара, разделенная запятой, состоящая из 'MaxTime' и положительного числового скаляра в секундах. Выходы оптимизатора после того, как это превышает на этот раз.

Нижняя граница на изменении в функции стоимости, заданной как пара, разделенная запятой, состоящая из 'FunctionTolerance' и скаляра. Если изменение функции стоимости падает ниже этого значения между шагами оптимизации, выходами оптимизатора.

Отобразите промежуточную информацию об итерации о командной строке MATLAB, заданной как пара, разделенная запятой, состоящая из 'VerboseOutput' и или 'off' или 'on'.

Идентификаторы ребер закрытия цикла в poseGraph, заданном как пара, разделенная запятой, состоящая из 'LoopClosuresToIgnore' и вектора. Чтобы получить идентификаторы ребра из графика положения, используйте findEdgeID.

Положение первого узла в poseGraph, заданном как пара, разделенная запятой, состоящая из 'FirstNodePose' и вектора положения.

Для (2D) PoseGraph положение является вектором [x y theta], который задает относительный позиционный xy и угол ориентации, theta.

Для PoseGraph3D положение является вектором [x y z qw qx qy qz], который задает относительный позиционный xyz и ориентация кватерниона, [qw qx qy qz].

Примечание

Много других источников для 3-D графиков положения, включая форматы .g2o, задают ориентацию кватерниона в различном порядке, например, [qx qy qz qw]. Проверяйте источник своих данных о графике положения перед добавляющими узлами к вашему объекту PoseGraph3D.

Выходные аргументы

свернуть все

Оптимизированный 2D или 3-D график положения, возвращенный как объект PoseGraph или PoseGraph3D.

Статистика процесса оптимизации, возвращенного как структура с этими полями:

  • Iterations — Количество итераций используется в оптимизации.

  • ResidualError — Значение функции стоимости, когда оптимизатор выходит.

  • Exitflag Выйдите из условия для оптимизатора:

    • 1 — Локальный минимум найден.

    • 2 — Максимальное количество итераций достигнуто. Аргумент пары "имя-значение" See MaxIterations.

    • 3 — Алгоритм приведен к таймауту во время операции.

    • 4 — Минимальный размер шага. Размер шага ниже аргумента пары "имя-значение" StepTolerance.

    • 5 — Изменение по ошибке ниже минимума.

    • 8 — Доверительный радиус области ниже минимального набора в InitialTrustRegionRadius.

Ссылки

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

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

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

Введенный в R2018a

Для просмотра документации необходимо авторизоваться на сайте