optimizePoses

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

Описание

пример

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

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

[vSetOptim,poseScale] = optimizePoses(vSet) также возвращает шкалы, сопоставленные с оптимизированными абсолютными положениями. Этот выход применяется только когда RelativePose по меньшей мере, одно соединение представлено в виде affine3d объект.

vSetOptim = optimizePoses(vSet, minNumMatches) дополнительно задает минимальное количество совпадающих точек функции в соединении в порядок для включения соединения в оптимизацию.

vSetOptim = optimizePoses(___,Name,Value) использует дополнительные опции, заданные одним или несколькими аргументами в виде пар Имя, Значение.

Примеры

свернуть все

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

vSet = imageviewset;

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

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

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

свернуть все

Набор видов изображений, заданный как imageviewset объект.

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

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

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

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

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

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

Отобразите информацию о прогрессе, заданную как разделенная разделенными запятой парами, состоящая из Verbose и логический скаляр. Установите 'Verbose'to true отображение прогресса информации.

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

свернуть все

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

Шкалы оптимизированных абсолютных положений, возвращенные как вектор положительных значений. Этот выход применяется только когда RelativePose свойства pairwise Connections, по меньшей мере, одного соединения представлено как affine3d объект.

Совет

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

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

Алгоритмы

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

Ссылки

[1] Kuemmerle, R., G. Grisetti, H. Strasdat, K. Konolige, and W. Burgard. g2o: Общая среда для оптимизации графика Международная конференция IEEE по робототехнике и автоматизации. Материалы Международной конференции IEEE по робототехнике и автоматизации, ICRA, 2011.

См. также

Функции

Объекты

Введенный в R2020a