Визуальная одновременная локализация и отображение (vSLAM) относится к процессу вычисления положения и ориентации камеры по отношению к её окружению при одновременном отображении среды. Процесс использует только визуальные входные данные с камеры. Приложения для визуального SLAM включают дополненную реальность, робототехнику и автономное вождение.
Визуальные алгоритмы SLAM широко подразделяются на две категории в зависимости от того, как они оценивают движение камеры. Косвенный метод, основанный на характеристиках, использует характерные точки изображений, чтобы минимизировать ошибку обратного впрыска. Прямой метод использует общую яркость изображений для минимизации фотометрической ошибки. Алгоритмы Computer Vision Toolbox™ обеспечивают функции для выполнения визуального SLAM на основе функций. Рабочий процесс состоит из инициализации карты, отслеживания, локального сопоставления, обнаружения петель и коррекции дрейфа.
Примечание
Последовательность операций, описанная в этом обзоре, применяется к изображениям, сделанным камерой с точечным отверстием. Чтобы использовать визуальный поток операций SLAM с изображениями, сделанными камерой «рыбий глаз», преобразуйте камеру «рыбий глаз» в виртуальную камеру-микроотверстие с помощью undistortFisheyeImage функция.
В литературе Visual SLAM используются следующие общие термины:
Ключевые кадры - подмножество видеокадров, содержащих сигналы для локализации и отслеживания. Два последовательных ключевых кадра обычно указывают на большое визуальное изменение, вызванное движением камеры.
Точки карты - список 3-D точек мира, которые представляют карту среды, реконструированную из ключевых кадров.
Covisibility Graph - граф ключевых кадров как узлов. Два ключевых кадра соединяются ребром, если они имеют общие точки карты. Вес кромки - это количество общих точек карты.
База данных распознавания (Recognition Database) - база данных, в которой хранится визуальное сопоставление «слово-изображение» на основе входного пакета элементов. Определите, посещалось ли место в прошлом, путем поиска в базе данных изображения, которое визуально похоже на изображение запроса.
Чтобы создать визуальный SLAM-конвейер на основе элементов для последовательности изображений, выполните следующие действия.
Инициализация карты - инициализация карты точек 3-D из двух кадров изображения. Вычислите точки 3-D и относительную позу камеры с помощью триангуляции на основе 2-D соответствий элементов.
Функции отслеживания - для каждого нового кадра оцените позу камеры, сопоставив функции в текущем кадре с функциями в последнем ключевом кадре.
Создать локальную карту - если текущий кадр определен как ключевой, создайте новую 3-D карту точек. Используйте регулировку пучка для уточнения позы камеры и точек 3-D.
Обнаружение петель - обнаружение петель для каждого ключевого кадра путем сравнения текущего кадра со всеми предыдущими ключевыми кадрами с использованием подхода «пакет функций».
Правильный дрейф - оптимизируйте график позы для коррекции дрейфа в позициях камеры всех ключевых кадров.
На рисунке показан типичный визуальный рабочий процесс SLAM на основе функций. Он также показывает точки, в которых данные хранятся или извлекаются из объектов, управляющих данными.

Используйте набор представлений, набор точек и объекты преобразования для управления ключевыми кадрами и данными карты.
Используйте imageviewset объект для управления данными, связанными с процессом одометрии и отображения. Объект содержит данные в виде набора представлений и попарных соединений между представлениями. Объект также можно использовать для построения и обновления графика позы.
Каждый вид состоит из абсолютной позы камеры и характерных точек, извлеченных из изображения. Каждое представление с его уникальным идентификатором (ИД вида) в наборе представлений образует узел графа позы.
В каждом соединении хранится информация, связывающая одно представление с другим. Соединение включает в себя индексы согласованных элементов между представлениями, относительное преобразование между связанными представлениями и неопределенность при вычислении измерения. Каждое соединение образует ребро в графе позы.
Использовать rigid3d ввод объекта с imageviewset для хранения абсолютных поз камеры и относительных поз камеры краев одометрии. Использовать affine3d ввод объекта с imageviewset для хранения относительных позиций камеры контуров замыкания.
Используйте worldpointset объект для хранения соответствий между точками карты 3-D и точками изображения 2-D на всех видах камеры.
WorldPoints имущество worldpointset сохраняет 3-D местоположения точек карты.
Correspondence имущество worldpointset сохраняет идентификаторы видов ключевых кадров, наблюдающих точки карты.
Для инициализации сопоставления необходимо сопоставить элементы между двумя изображениями, оценить относительную позу камеры и триангулировать начальные точки 3-D мира. В этом рабочем процессе обычно используются функции ускоренного создания надежных элементов (SURF) и ориентированного FAST и повернутого BRIEF (ORB). Процесс инициализации карты состоит из обнаружения, извлечения и сопоставления элементов, а затем поиска относительной оценки позы камеры, поиска 3-D местоположений соответствующих элементов и уточнения начальной карты. Наконец, сохраните полученные ключевые кадры и отображенные точки в наборе видов изображения и наборе точек мира соответственно.
| Технологический процесс | Функция | Описание |
|---|---|---|
| Обнаружить | detectSURFFeatures | Обнаружение элементов SURF и возврат SURFPoints объект. |
detectORBFeatures | Обнаружение функций ORB и возврат ORBPoints объект. | |
| Извлечение | extractFeatures | Извлеките векторы элементов и их соответствующие расположения в двоичном изображении или изображении интенсивности. |
| Матч | matchFeatures | Получение индексов совпадающих элементов между двумя наборами элементов. |
| Оценка относительного положения камеры по соответствующим характерным точкам | estimateGeometricTransform2D | Вычислите гомографию из совпадающих пар точек. |
estimateFundamentalMatrix | Оценка фундаментальной матрицы по парам точек согласования. | |
relativeCameraPose | Вычислить относительные позы камеры, представленные как rigid3d объект, основанный на гомографии или фундаментальной матрице. Местоположение можно вычислить только до масштаба, поэтому расстояние между двумя камерами устанавливается равным 1. | |
| Поиск 3-D расположений совпадающих точек элемента | triangulate | Найдите 3-D расположения совпадающих пар неискаженных точек изображения. |
| Уточнение начальной карты | bundleAdjustment | Уточните 3-D точки карты и позы камеры, которые минимизируют ошибки обратного впрыска. |
| Управление данными для начальной карты и ключевых кадров | addView | Добавьте два вида, образованные точками элемента и их абсолютными позициями, к imageviewset объект. |
addConnection | Добавьте кромку одометрии, определяемую соединением между последовательными ключевыми видами, образованными относительным преобразованием позы между камерами, к imageviewset объект. | |
addWorldPoints | Добавление начальных точек карты к worldpointset объект. | |
addCorrespondences | Добавьте 3-D для 2-D соответствия проекции между ключевыми кадрами и точками карты worldpointset объект. |
Процесс отслеживания использует каждый кадр для определения времени вставки нового ключевого кадра. Используйте эти шаги и функции для потока операций отслеживания.
| Технологический процесс | Функция | Описание |
|---|---|---|
| Сопоставить извлеченные элементы | matchFeatures | Сопоставьте извлеченные элементы из текущего кадра с элементами в последнем ключевом кадре, которые имеют известные 3-D расположения. |
| Оценка позы камеры | estimateWorldCameraPose | Оценка текущей позы камеры. |
| Точки карты проекта | worldToImage | Спроецируйте точки карты, наблюдаемые последним ключевым кадром, в текущий кадр. |
| Поиск соответствий элементов | matchFeaturesInRadius | Поиск соответствий элементов в пространственных ограничениях. |
| Уточнение позы камеры | bundleAdjustmentMotion | Уточните позу камеры с 3-D, чтобы 2-D соответствие, выполнив настройку пучка только для движения. |
| Определение локальных точек карты | Определите точки на виде и точки, соответствующие дорожкам точек. | |
| Поиск дополнительных соответствий функций | matchFeaturesInRadius | Поиск дополнительных соответствий элементов в текущем кадре, содержащем спроецированные локальные точки карты. |
| Уточнение позы камеры | bundleAdjustmentMotion | Уточните позу камеры с 3-D, чтобы 2-D соответствие, выполнив настройку пучка только для движения. |
| Сохранить новый ключевой кадр | Если определено, что текущий кадр является новым ключевым кадром, добавьте его и его соединения с скрытыми ключевыми кадрами в imageviewset. |
Сопоставление функций имеет решающее значение в рабочем процессе отслеживания. Используйте matchFeaturesInRadius функция для возврата большего количества предполагаемых совпадений, когда доступна оценка положений совпадающих характерных точек. В рабочем процессе используются две функции совмещения функций:
matchFeatures - возвращает индексы соответствующих элементов в двух наборах входных элементов.
matchFeaturesInRadius - возвращает индексы совпадающих элементов, удовлетворяющие пространственным ограничениям, в двух наборах входных элементов.
Чтобы получить большее количество совпадающих пар элементов, увеличьте значения для MatchThreshhold и MaxRatio аргументы «имя-значение» matchFeatures и matchFeaturesInRadius функции. Пары отклонений могут быть отброшены после выполнения корректировки пучка на этапе локального отображения.
Выполнение локального сопоставления для каждого ключевого кадра. Выполните следующие действия для создания новых точек карты.
| Технологический процесс | Функция | Описание |
|---|---|---|
| Подключить ключевые кадры | connectedViews | Найдите скрытые ключевые кадры текущего ключевого кадра. |
| Поиск совпадений в подключенных ключевых кадрах | matchFeatures | Для каждой точки отличия в текущем ключевом кадре используйте matchFeatures функция для поиска совпадения с другими непревзойденными точками в скрытых ключевых кадрах. |
| Вычислить расположение для новых совпадений | triangulate | Вычислите 3-D расположения совпадающих точек элемента. |
| Сохранить новые точки карты | addWorldPoints | Добавление новых точек карты в worldpointset объект. |
| Сохранить 3-D для 2-D соответствий | addCorrespondences | Добавление новых 3-D к 2-D соответствиям worldpointset объект. |
| Обновление соединения одометрии | updateConnection | Обновите соединение между текущим ключевым кадром и его скрытыми кадрами с помощью большего количества совпадений функций. |
| Уточнить позу | bundleAdjustment | Уточните позу текущего ключевого кадра, позы ковисных ключевых кадров и все точки карты, наблюдаемые в этих ключевых кадрах. Для повышения производительности в процесс уточнения включаются только сильно связанные, ковисные ключевые кадры. Используйте |
| Удаление отклонений | removeWorldPoints | Удалить точки карты отклонений с большими ошибками обратного впрыска из worldpointset объект. Связанные 3-D с 2-D соответствиями удаляются автоматически. |
В этой таблице сравниваются позиции камеры, точки карты и количество камер для каждой из функций регулировки пучка, используемых при реконструкции 3-D.
| Функция | Позы камеры | Точки карты | Количество камер |
|---|---|---|---|
bundleAdjustment | Оптимизированный | Оптимизированный | Несколько |
bundleAdjustmentMotion | Оптимизированный | Фиксированный | Один |
bundleAdjustmentStructure | Фиксированный | Оптимизированный | Несколько |
Из-за накопления ошибок использование только визуальной одометрии может привести к дрейфу. Эти ошибки могут привести к серьезным неточностям на больших расстояниях. Использование SLAM на основе графика помогает исправить дрейф. Для этого определите замыкания петель, найдя ранее посещенное местоположение. Общий подход заключается в использовании этого потока операций пакета функций:
| Технологический процесс | Функция | Описание |
|---|---|---|
| Создание пакета визуальных слов | bagOfFeatures | Создайте пакет визуальных слов для распознавания места. |
| Создание базы данных распознавания | indexImages | Создание базы данных распознавания, invertedImageIndex, для отображения визуальных слов на изображения. |
| Определение кандидатов на замыкание шлейфа | retrieveImages | Поиск изображений, аналогичных текущему ключевому кадру. Идентифицируйте последовательные изображения как кандидаты на замыкание цикла, если они аналогичны текущему кадру. В противном случае добавьте текущий ключевой кадр в базу данных распознавания. |
| Вычислить относительную позу камеры для кандидатов на замыкание петли | estimateGeometricTransform3D | Вычислить относительную позу камеры между возможным ключевым кадром и текущим ключевым кадром для каждого кандидата на замыкание контура |
| Замкнуть петлю | addConnection | Замкните контур, добавив кромку замыкания контура с соответствующей позой камеры к imageviewset объект. |
imageviewset объект внутренне обновляет график позы по мере добавления видов и соединений. Чтобы минимизировать дрейф, выполните оптимизацию графика позы с помощью optimizePoses после добавления достаточного количества замыкателей контура. optimizePoses функция возвращает imageviewset с оптимизированными абсолютными преобразованиями позы для каждого вида.
Вы можете использовать createPoseGraph функция для возврата графика позы в виде MATLAB
®digraph объект. Алгоритмы графика в MATLAB можно использовать для проверки, просмотра или изменения графика позы. Используйте optimizePoseGraph(Панель инструментов навигации) из Toolbox™ навигации, чтобы оптимизировать измененный график позы, а затем использовать updateView для обновления позиций камеры в наборе видов.
Для разработки визуальной системы SLAM можно использовать следующие функции визуализации.
| Функция | Описание |
|---|---|
imshow | Отображение изображения |
showMatchedFeatures | Отображение совпадающих характерных точек на двух изображениях |
plot | Печать вида изображения: набор видов и соединений |
plotCamera | Печать камеры в 3-D координатах |
pcshow | Печать 3-D облако точек |
pcplayer | Визуализация потоковой передачи 3-D данных облака точек |
[1] Хартли, Ричард и Эндрю Зиссерман. Геометрия нескольких видов в компьютерном видении. 2-й ред. Кембридж: Cambridge University Press, 2003.
[2] Фраундорфер, Фридрих и Давиде Скарамуцца. «Визуальная одометрия: часть II: соответствие, надежность, оптимизация и приложения». IEEE Robotics & Automation Magazine 19, No 2 (июнь 2012): 78-90. https://doi.org/10.1109/MRA.2012.2182810.
[3] Мур-Артал, Рауль, Дж. М. М. Монтьель и Хуан Д. Тардос. «ORB-SLAM: универсальная и точная монокулярная система SLAM». Транзакции IEEE по робототехнике 31, № 5 (октябрь 2015 г.): 1147-63. https://doi.org/10.1109/TRO.2015.2463671.
[4] Кюмерле, Райнер, Джорджо Гризетти, Хауке Страсдат, Курт Конолиже и Вольфрам Бургард. «G2o: Общая структура оптимизации графов». В 2011 году Международная конференция IEEE по робототехнике и автоматизации (ICRA 2011), Шанхай, 9-13 мая 2011 года, 3607-13. Нью-Йорк: Институт инженеров по электротехнике и электронике. https://doi.org//10.1109/ICRA.2011.5979949.
bundleAdjustment | bundleAdjustmentMotion | bundleAdjustmentStructure | createPoseGraph | detectORBFeatures | detectSURFFeatures | estimateFundamentalMatrix | estimateGeometricTransform2D | estimateGeometricTransform3D | estimateWorldCameraPose | extractFeatures | matchFeatures | matchFeaturesInRadius | optimizePoses | relativeCameraPose | triangulate | worldToImage