optimizePoses

Оптимизируйте абсолютные положения с помощью относительных ограничений положения

Описание

пример

vSetOptim = optimizePoses(vSet) возвращает набор ракурсов облака точек, абсолютные положения которого оптимизированы. vSetOptim и vSet являются pcviewset объекты.

The optimizePoses функция выполняет оптимизацию графика положения на абсолютных положениях для Views в наборе видов с помощью ограничений относительного положения, установленных Connections свойство. Можно использовать optimizePoses для коррекции дрейфа в одометрии после обнаружения замыканий цикла.

vSetOptim = optimizePoses(vSet,Name,Value) задает опции, используя один или несколько аргументы пары "имя-значение". Для примера, 'Tolerance', 0.2 устанавливает допуск функции оптимизации затрат равным 0.2.

Примеры

свернуть все

Создайте набор видов.

vSet = pcviewset;

Добавьте четыре узла и задайте абсолютные положения.

absPoses = repelem(rigid3d, 4, 1);   

absPoses(1).Translation = [ 0   0 0];
absPoses(2).Translation = [ 1   0 0];
absPoses(3).Translation = [ 2   0 0];
absPoses(4).Translation = [ 0.1 0 0];

vSet = addView(vSet, 1, absPoses(1));
vSet = addView(vSet, 2, absPoses(2));
vSet = addView(vSet, 3, absPoses(3));
vSet = addView(vSet, 4, absPoses(4));

Задайте 4 ребра, 3 одометрии и 1 замыкание цикла.

relPoses = repelem(rigid3d, 4, 1);

relPoses(1).Translation = [ 1   0 0];
relPoses(2).Translation = [ 1   0 0];
relPoses(3).Translation = [-1.9 0 0];
relPoses(4).Translation = [ 0.2 0 0];

vSet = addConnection(vSet, 1, 2, relPoses(1)); % odometry
vSet = addConnection(vSet, 2, 3, relPoses(2)); % odometry
vSet = addConnection(vSet, 3, 4, relPoses(3)); % odometry
vSet = addConnection(vSet, 4, 1, relPoses(4)); % loop closure

Оптимизируйте набор представлений.

vSetOptim = optimizePoses(vSet);

DIsplay оригинальные и оптимизированные местоположения.

disp('Original absolute translations:')
Original absolute translations:
disp(vertcat(vSet.Views.AbsolutePose.Translation))
         0         0         0
    1.0000         0         0
    2.0000         0         0
    0.1000         0         0
disp('Optimized absolute translations:')
Optimized absolute translations:
disp(vertcat(vSetOptim.Views.AbsolutePose.Translation))
         0         0         0
    0.9250         0         0
    1.8500         0         0
   -0.1250         0         0

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

свернуть все

Набор видов облака точек, заданный как pcviewset объект.

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'MaxIterations', 300 устанавливает максимальное количество итераций равным 300.

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

Допуск функции оптимизации затрат между двумя последовательными итерациями, заданный как разделенная разделенными запятой парами, состоящая из 'Tolerance'и положительный скаляр. Если функция стоимости изменяется на меньше, чем 'Tolerance'значение между двумя последовательными итерациями, функция прекращает оптимизацию.

Отобразите информацию о прогрессе, заданную как разделенная разделенными запятой парами, состоящая из Verbose и числовое или логическое 0 (false) или 1 (true). Чтобы отобразить информацию о прогрессе, установите 'Verbose'to true.

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

свернуть все

Набор видов облака точек, который содержит оптимизированные абсолютные положения, заданные как pcviewset объект.

Совет

  • Чтобы обновить набор видов с оптимизированными положениями, используйте updateView функция объекта.

  • The optimizePoses Функция object содержит первое фиксированное представление.

Алгоритмы

The optimizePoses функция использует алгоритм оптимизации Левенберга-Марквардта с разреженным разложением Холецкого из библиотеки общей (гипер) оптимизации графика (G2o), [1].

Ссылки

[1] Kümmerle, Rainer, Giorgio Grisetti, Hauke Strasdat, Kurt Konolige и Wolfram Burgard. «G2o: Общая среда для оптимизации графика». В 2011 году Международная конференция IEEE по робототехнике и автоматизации, 3607-13, 2011. https://doi.org/10.1109/ICRA.2011.5979949.

См. также

Функции

Объекты

Введенный в R2020a