Реализуйте визуального SLAM в MATLAB

Визуальная одновременная локализация и картография (vSLAM) относится к процессу вычисления положения и ориентации камеры, относительно ее среды, одновременно сопоставляя среду. Процесс использует только визуальные входные параметры от камеры. Приложения для визуального SLAM включают дополненную реальность, робототехнику и автономное управление автомобилем. Для общего описания на том, почему SLAM имеет значение и как он работает на различные приложения, смотрите то, Что SLAM?

Визуальные алгоритмы SLAM широко классифицируются в две категории, в зависимости от того, как они оценивают движение камеры. Косвенный, основанный на функции метод использует характерные точки изображений, чтобы минимизировать ошибку перепроекции. Прямой метод использует полную яркость изображений, чтобы минимизировать светоизмерительную ошибку. Алгоритмы Computer Vision Toolbox™ обеспечивают функции для выполнения основанного на функции визуального SLAM. Рабочий процесс состоит из инициализации карты, отслеживания, локального отображения, обнаружения цикла и коррекции дрейфа.

Примечание

Рабочий процесс, описанный в этом обзоре, применяется к изображениям, взятым камерой с точечной диафрагмой. Чтобы использовать визуальный рабочий процесс SLAM с изображениями, взятыми fisheye-камерой, преобразуйте fisheye-камеру в виртуальную камеру с точечной диафрагмой с помощью undistortFisheyeImage функция.

Термины, использованные в визуальном SLAM

Визуальная литература SLAM использует эти распространенные термины:

  • Ключевые кадры — подмножество видеокадров, которые содержат сигналы для локализации и отслеживания. Два последовательных ключевых кадра обычно указывают на большое визуальное изменение, вызванное перемещением камеры.

  • Сопоставьте Точки — список 3-D мировых точек, которые представляют карту среды, восстановленной от ключевых кадров.

  • График Covisibility — график ключевых кадров как узлы. Два ключевых кадра соединяются ребром, если они совместно используют общие точки карты. Вес ребра является количеством разделяемых точек карты.

  • База данных распознавания — база данных, которая хранит визуальное отображение слова к изображению на основе входного набора признаков. Определите, посетили ли место в прошлом путем поиска базы данных изображение, которое визуально похоже на изображение запроса.

Типичный основанный на функции визуальный рабочий процесс SLAM

Чтобы создать основанный на функции визуальный трубопровод SLAM на последовательности изображений, выполните эти шаги:

  1. Инициализируйте Карту — Инициализируют карту 3-D точек от двух фреймов изображения. Вычислите 3-D точки и относительное положение камеры при помощи триангуляции на основе 2D соответствий функции.

  2. Отследите Функции — Для каждой новой системы координат, оцените положение камеры путем соответствия с функциями в текущей системе координат к функциям в последнем ключевом кадре.

  3. Создайте Локальную Карту — Если вы идентифицируете текущую систему координат как ключевой кадр, создаете новую 3-D карту точек. Используйте корректировку пакета, чтобы совершенствовать положение камеры и 3-D точки.

  4. Обнаружьте Циклы — Обнаруживают циклы для каждого ключевого кадра путем сравнения текущей системы координат со всеми предыдущими ключевыми кадрами с помощью подхода набора признаков.

  5. Правильный Дрейф — Оптимизирует график положения, чтобы откорректировать дрейф в положениях камеры всех ключевых кадров.

Фигура иллюстрирует типичный основанный на функции визуальный рабочий процесс SLAM. Это также показывает точки, в которых данные хранятся или полученный из объектов, которые управляют данными.

Flow chart diagram showing map initialization, tracking, local mapping, loop detection, and drift correction.

Ключевой кадр и управление данными карты

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

  • Используйте imageviewset объект управлять данными, сопоставленными с одометрией и процессом отображения. Объект содержит данные в виде набора представлений и попарных связей между представлениями. Объект может также использоваться, чтобы создать и обновить график положения.

    • Каждый view состоит из абсолютного положения камеры и характерных точек, извлеченных из изображения. Каждое представление, с его уникальным идентификатором (представление ID), в рамках представления установило, формирует узел графика положения.

    • Каждый connection хранит информацию, которая соединяет одно представление с другим представлением. Связь включает индексы совпадающих функций между представлениями, относительного преобразования между связанными представлениями и неопределенности в вычислении измерения. Каждая связь формирует ребро в графике положения.

    • Используйте rigid3d объектный вход с imageviewset сохранить абсолютные положения камеры и относительные положения камеры ребер одометрии. Используйте affine3d объектный вход с imageviewset сохранить относительные положения камеры ребер закрытия цикла.

  • Используйте worldpointset возразите, чтобы сохранить соответствия между 3-D точками карты и 2D точками изображений через поля зрения камеры.

    • WorldPoints свойство worldpointset хранит 3-D местоположения точек карты.

    • Correspondence свойство worldpointset хранит представление IDs ключевых кадров, которые наблюдают точки карты.

Сопоставьте инициализацию

Чтобы инициализировать отображение, необходимо совпадать с функциями между двумя изображениями, оценить относительное положение камеры и треугольные начальные 3-D мировые точки. Этот рабочий процесс обычно использует Ускоренные устойчивые функции (SURF) и Ориентированный FAST и Вращаемый BRIEF (ORB) функции точки функций. Рабочий процесс инициализации карты состоит из обнаружения, извлечения, и соответствия с функциями, и затем нахождения относительной оценки положения камеры, нахождения 3-D местоположений совпадающих функций и совершенствования первоначальной карты. Наконец, сохраните получившиеся ключевые кадры и сопоставленные точки в наборе представления изображения и мировом наборе точки, соответственно.

Рабочий процессФункцияОписание
1. ОбнаружитьdetectSURFFeaturesОбнаружьте функции SURF и возвратите SURFPoints объект.
detectORBFeaturesОбнаружьте функции ORB и возвратите ORBPoints объект.
detectSIFTFeaturesОбнаружьте функции SIFT и возвратите SIFTPoints объект.
2. ИзвлечениеextractFeaturesИзвлеките характеристические векторы и их соответствующие местоположения в изображении интенсивности или двоичном файле.
3. СоответствиеmatchFeatures Получите индексы соответствующих функций между двумя наборами функций.
4. Оцените относительное положение камеры от совпадающих характерных точекestimateGeometricTransform2D Вычислите homography из соответствия с парами точки.
estimateFundamentalMatrix Оцените основную матрицу от соответствия с парами точки.
relativeCameraPose Вычислите относительные положения камеры, представленные как rigid3d объект, на основе homography или основной матрицы. Местоположение может только быть вычислено, чтобы масштабироваться, таким образом, расстояние между двумя камерами установлено в 1.
5. Найдите 3-D местоположения совпадающих характерных точекtriangulate Найдите 3-D местоположения соответствия с парами неискаженных точек изображений.
6. Совершенствуйте первоначальную картуbundleAdjustment Совершенствуйте 3-D точки карты и положения камеры, которые минимизируют ошибки перепроекции.
7. Управляйте данными для первоначальной карты и ключевых кадровaddView Добавьте два представления, сформированные характерными точками и их абсолютными положениями к imageviewset объект.
addConnection Добавьте ребро одометрии, заданное связью между последовательными ключевыми представлениями, сформированными относительным преобразованием положения между камерами, к imageviewset объект.
addWorldPoints Добавьте, что первоначальная карта указывает на worldpointset объект.
addCorrespondences Добавьте, что 3-D к 2D соответствиям проекции между ключевыми кадрами и картой указывает на worldpointset объект.

Отслеживание

Рабочий процесс отслеживания использует каждую систему координат, чтобы определить, когда вставить новый ключевой кадр. Используйте эти шаги и функции для рабочего процесса отслеживания.

Рабочий процессФункцияОписание
Совпадайте с извлеченными функциямиmatchFeaturesСовпадайте с извлеченными функциями от текущей системы координат с функциями в последнем ключевом кадре, которые знали 3-D местоположения.
Оцените положение камерыestimateWorldCameraPoseОцените текущее положение камеры.
Точки карты проектаworldToImageСпроектируйте точки карты, наблюдаемые последним ключевым кадром в текущую систему координат.
Ищите соответствия функцииmatchFeaturesInRadiusИщите соответствия функции в рамках пространственных ограничений.
Совершенствуйте положение камерыbundleAdjustmentMotionСовершенствуйте положение камеры с 3-D к 2D соответствию путем выполнения корректировки пакета только для движения.
Идентифицируйте локальные точки карты

findWorldPointsInView

findWorldPointsInTracks

Идентифицируйте точки в представлении и точки, которые соответствуют дорожкам точки.
Поиск большего количества соответствий функцииmatchFeaturesInRadiusПоиск большего количества соответствий функции в текущей системе координат, которая содержит спроектированные локальные точки карты.
Совершенствуйте положение камеры bundleAdjustmentMotionСовершенствуйте положение камеры с 3-D к 2D соответствию путем выполнения корректировки пакета только для движения.
Сохраните новый ключевой кадр

addView

addConnection

Если вы решаете, что текущая система координат является новым ключевым кадром, добавьте его и его связи с covisible ключевыми кадрами к imageviewset.

Соответствие функции очень важно в рабочем процессе отслеживания. Используйте matchFeaturesInRadius функционируйте, чтобы возвратить больше предполагаемых соответствий, когда оценка положений совпадающих характерных точек будет доступна. Две функции функции соответствия, используемые в рабочем процессе:

  • matchFeatures — Возвращает индексы соответствующих функций в двух входных наборах функций.

  • matchFeaturesInRadius — Возвращает индексы соответствующих функций, которые удовлетворяют пространственным ограничениям в двух входных наборах функций.

Чтобы получить большее количество совпадающих пар функции, увеличьте значения для MatchThreshhold и MaxRatio аргументы name-value matchFeatures и matchFeaturesInRadius функции. Пары выбросов могут быть отброшены после выполнения корректировки пакета на локальном шаге отображения.

Локальное отображение

Выполните локальное отображение для каждого ключевого кадра. Выполните эти шаги, чтобы создать новые точки карты.

Рабочий процессФункцияОписание
Соедините ключевые кадры connectedViewsНайдите covisible ключевые кадры текущего ключевого кадра.
Ищите соответствия в связанных ключевых кадрахmatchFeaturesДля каждой несопоставленной характерной точки в текущем ключевом кадре используйте matchFeatures функционируйте, чтобы искать соответствие с другими несопоставленными точками в covisible ключевых кадрах.
Вычислите местоположение для новых соответствийtriangulateВычислите 3-D местоположения совпадающих характерных точек.
Сохраните новые точки картыaddWorldPointsДобавьте, что новая карта указывает на worldpointset объект.
Сохраните 3-D к 2D соответствиямaddCorrespondencesДобавьте новый 3-D к 2D соответствиям к worldpointset объект.
Обновите связь одометрииupdateConnectionОбновите связь между текущим ключевым кадром и его системами координат covisible с большим количеством соответствий функции.
Совершенствуйте положениеbundleAdjustment

Совершенствуйте положение текущего ключевого кадра, положения covisible ключевых кадров и все точки карты, наблюдаемые в этих ключевых кадрах. Для улучшенной производительности только включайте строго соединенный, covisible ключевые кадры в процессе улучшения.

Используйте minNumMatches аргумент connectedViews функционируйте, чтобы выбрать строго соединенные covisible ключевые кадры.

Удалите выбросыremoveWorldPointsУдалите точки карты выброса с большими ошибками перепроекции от worldpointset объект. Связанные 3-D к 2D соответствиям удалены автоматически.

Эта таблица сравнивает положения камеры, точки карты и количество камер для каждой из функций корректировки пакета, используемых в 3-D реконструкции.

ФункцияПоложения камерыСопоставьте точкиКоличество камер
bundleAdjustmentОптимизированныйОптимизированныйНесколько
bundleAdjustmentMotionОптимизированныйФиксированныйОдин
bundleAdjustmentStructureФиксированныйОптимизированныйНесколько

Обнаружение цикла

Из-за накопления ошибок, с помощью одной только визуальной одометрии может вести, чтобы дрейфовать. Эти ошибки могут привести к серьезным погрешностям по большим расстояниям. Используя основанного на графике SLAM помогает откорректировать дрейф. Для этого обнаружьте закрытия цикла путем нахождения ранее посещаемого местоположения. Общий подход должен использовать этот рабочий процесс набора признаков:

Рабочий процессФункцияОписание
Создайте мешок визуальных словbagOfFeaturesСоздайте мешок визуальных слов для распознавания места.
Создайте базу данных распознаванияindexImagesСоздайте базу данных распознавания, invertedImageIndex, сопоставлять визуальные слова с изображениями.
Идентифицируйте кандидатов закрытия циклаretrieveImagesИщите изображения, которые похожи на текущий ключевой кадр. Идентифицируйте последовательные изображения как кандидатов закрытия цикла, если они похожи на текущую систему координат. В противном случае добавьте текущий ключевой кадр в базу данных распознавания.
Вычислите относительных кандидатов закрытия цикла for положения камерыestimateGeometricTransform3DВычислите относительное положение камеры между системой координат ключа-кандидата и текущим ключевым кадром для каждого кандидата закрытия цикла
Замкните кругaddConnectionЗамкните круг путем добавления ребра закрытия цикла с относительным положением камеры к imageviewset объект.

Коррекция дрейфа

imageviewset возразите внутренне обновляет график положения как представления, и связи добавляются. Чтобы минимизировать дрейф, выполните оптимизацию графика положения при помощи optimizePoses функция, когда-то достаточные закрытия цикла добавляются. optimizePoses функция возвращает imageviewset объект с оптимизированными абсолютными преобразованиями положения для каждого представления.

Можно использовать createPoseGraph функционируйте, чтобы возвратить график положения как MATLAB® digraph объект. Можно использовать алгоритмы графика в MATLAB, чтобы смотреть, просмотреть, или изменить график положения. Используйте optimizePoseGraph (Navigation Toolbox) функция от Navigation Toolbox™, чтобы оптимизировать модифицированный график положения, и затем использовать updateView функционируйте, чтобы обновить положения камеры в наборе представления.

Визуализация

Чтобы разработать визуальную систему SLAM, можно использовать следующие функции визуализации.

ФункцияОписание
imshowОтобразите изображение
showMatchedFeaturesОтобразите соответствующие характерные точки в двух изображениях
plotПостройте представления набора представления изображения и связи
plotCameraПостройте камеру в 3-D координатах
pcshowПостройте 3-D облако точек
pcplayerВизуализируйте передающие потоком 3-D данные об облаке точек

Ссылки

[1] Хартли, Ричард и Эндрю Зиссермен. Несколько Геометрия Представления в Компьютерном зрении. 2-й редактор Кембридж: Издательство Кембриджского университета, 2003.

[2] Fraundorfer, Фридрих и Давиде Скарамуцца. “Визуальная Одометрия: Вторая часть: Соответствие, Робастность, Оптимизация и Приложения”. IEEE Robotics & Automation Magazine 19, № 2 (июнь 2012): 78–90. https://doi.org/10.1109/MRA.2012.2182810.

[3] Mur-Artal, Рауль, Х. М. М. Монтьель и Хуан Д. Тардос. “ORB-SLAM: Универсальный и Точный Монокуляр Система SLAM”. Транзакции IEEE на Робототехнике 31, № 5 (октябрь 2015): 1147–63. https://doi.org/10.1109/TRO.2015.2463671.

[4] Kümmerle, Рэйнер, Джорджо Гризетти, Hauke Strasdat, Курт Конолиге и вольфрам Burgard. G2o: Общие рамки для Оптимизации Графика". На 2 011 Международных конференциях IEEE по вопросам Робототехники и Автоматизации (ICRA 2011), Шанхай, 9-13 мая 2011, 3607–13. Нью-Йорк: Институт инженеров по электротехнике и электронике. https://doi.org//10.1109/ICRA.2011.5979949.

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

Функции

Объекты

Похожие темы