exponenta event banner

optimizePoses

Оптимизация абсолютных поз с использованием зависимостей относительных поз

Описание

пример

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

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

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

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

vSetOptim = optimizePoses(___,Name,Value) использует дополнительные параметры, указанные одним или несколькими аргументами пары 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Кому true для отображения информации о ходе выполнения.

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

свернуть все

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

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

Совет

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

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

Алгоритмы

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

Ссылки

[1] Куеммерле, Р., Г. Гризетти, Х. Страсдат, К. Конолиже и У. Бургард. «g2o: Общая основа оптимизации графов Международная конференция IEEE по робототехнике и автоматизации». Материалы Международной конференции IEEE по робототехнике и автоматизации, ICRA, 2011.

См. также

Функции

Объекты

Представлен в R2020a