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);

Отобразите исходные и оптимизированные местоположения.

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 имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

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

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

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

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

свернуть все

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

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

Советы

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

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

Алгоритмы

optimizePoses функционируйте использует алгоритм оптимизации Levenberg Marquardt с разреженной факторизацией Холесского от общей (hyper) оптимизации графика (g2o) библиотека, (1).

Ссылки

[1] Kuemmerle, R., Г. Гризетти, Х. Стрэсдэт, К. Конолидж и В. Бергард. "g2o: Общие рамки для Международной конференции IEEE Оптимизации Графика по вопросам Робототехники и Автоматизации". Продолжения Международной конференции IEEE по вопросам Робототехники и Автоматизации, ICRA, 2011.

Смотрите также

Функции

Объекты

Введенный в R2020a