Визуальная одновременная локализация и картография (vSLAM) относится к процессу вычисления положения и ориентации камеры, относительно ее среды, одновременно сопоставляя среду. Процесс использует только визуальные входные параметры от камеры. Приложения для визуального SLAM включают дополненную реальность, робототехнику и автономное управление автомобилем. Для общего описания на том, почему SLAM имеет значение и как он работает на различные приложения, смотрите то, Что SLAM?
Визуальные алгоритмы SLAM широко классифицируются в две категории, в зависимости от того, как они оценивают движение камеры. Косвенный, основанный на функции метод использует характерные точки изображений, чтобы минимизировать ошибку перепроекции. Прямой метод использует полную яркость изображений, чтобы минимизировать светоизмерительную ошибку. Алгоритмы Computer Vision Toolbox™ обеспечивают функции для выполнения основанного на функции визуального SLAM. Рабочий процесс состоит из инициализации карты, отслеживания, локального отображения, обнаружения цикла и коррекции дрейфа.
Примечание
Рабочий процесс, описанный в этом обзоре, применяется к изображениям, взятым камерой с точечной диафрагмой. Чтобы использовать визуальный рабочий процесс SLAM с изображениями, взятыми fisheye-камерой, преобразуйте fisheye-камеру в виртуальную камеру с точечной диафрагмой с помощью undistortFisheyeImage
функция.
Визуальная литература SLAM использует эти распространенные термины:
Ключевые кадры — подмножество видеокадров, которые содержат сигналы для локализации и отслеживания. Два последовательных ключевых кадра обычно указывают на большое визуальное изменение, вызванное перемещением камеры.
Сопоставьте Точки — список 3-D мировых точек, которые представляют карту среды, восстановленной от ключевых кадров.
График Covisibility — график ключевых кадров как узлы. Два ключевых кадра соединяются ребром, если они совместно используют общие точки карты. Вес ребра является количеством разделяемых точек карты.
База данных распознавания — база данных, которая хранит визуальное отображение слова к изображению на основе входного набора признаков. Определите, посетили ли место в прошлом путем поиска базы данных изображение, которое визуально похоже на изображение запроса.
Чтобы создать основанный на функции визуальный трубопровод SLAM на последовательности изображений, выполните эти шаги:
Инициализируйте Карту — Инициализируют карту 3-D точек от двух фреймов изображения. Вычислите 3-D точки и относительное положение камеры при помощи триангуляции на основе 2D соответствий функции.
Отследите Функции — Для каждой новой системы координат, оцените положение камеры путем соответствия с функциями в текущей системе координат к функциям в последнем ключевом кадре.
Создайте Локальную Карту — Если вы идентифицируете текущую систему координат как ключевой кадр, создаете новую 3-D карту точек. Используйте корректировку пакета, чтобы совершенствовать положение камеры и 3-D точки.
Обнаружьте Циклы — Обнаруживают циклы для каждого ключевого кадра путем сравнения текущей системы координат со всеми предыдущими ключевыми кадрами с помощью подхода набора признаков.
Правильный Дрейф — Оптимизирует график положения, чтобы откорректировать дрейф в положениях камеры всех ключевых кадров.
Фигура иллюстрирует типичный основанный на функции визуальный рабочий процесс SLAM. Это также показывает точки, в которых данные хранятся или полученный из объектов, которые управляют данными.
Используйте набор представления, набор точки, и преобразование возражает, чтобы управлять данные о карте и ключевые кадры.
Используйте 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 соответствию путем выполнения корректировки пакета только для движения. |
Идентифицируйте локальные точки карты | Идентифицируйте точки в представлении и точки, которые соответствуют дорожкам точки. | |
Поиск большего количества соответствий функции | matchFeaturesInRadius | Поиск большего количества соответствий функции в текущей системе координат, которая содержит спроектированные локальные точки карты. |
Совершенствуйте положение камеры | bundleAdjustmentMotion | Совершенствуйте положение камеры с 3-D к 2D соответствию путем выполнения корректировки пакета только для движения. |
Сохраните новый ключевой кадр | Если вы решаете, что текущая система координат является новым ключевым кадром, добавьте его и его связи с 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 ключевые кадры в процессе улучшения. Используйте |
Удалите выбросы | 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.
detectSURFFeatures
| detectSIFTFeatures
| detectORBFeatures
| extractFeatures
| matchFeatures
| matchFeaturesInRadius
| estimateGeometricTransform2D
| estimateGeometricTransform3D
| estimateFundamentalMatrix
| relativeCameraPose
| estimateWorldCameraPose
| worldToImage
| triangulate
| bundleAdjustment
| bundleAdjustmentMotion
| bundleAdjustmentStructure
| createPoseGraph
| optimizePoses