Визуальная одновременная локализация и картография (vSLAM) относится к процессу вычисления положения и ориентации камеры, относительно её окружения, с одновременным отображением среды. Процесс использует только визуальные входы от камеры. Приложения для визуального SLAM включают дополненную реальность, робототехнику и автономное управление автомобилем.
Алгоритмы Visual SLAM широко классифицируются по двум категориям, в зависимости от того, как они оценивают движение камеры. Косвенный метод на основе признаков использует функцию точки изображений, чтобы минимизировать ошибку репроекции. Прямой метод использует общую яркость изображений, чтобы минимизировать фотометрическую ошибку. Алгоритмы Computer Vision Toolbox™ обеспечивают функции для выполнения визуального SLAM на основе признаков. Рабочий процесс состоит из инициализации карты, отслеживания, локального отображения, обнаружения цикла и коррекции дрейфа.
Примечание
Рабочий процесс, описанный в этом обзоре, применяется к изображениям, сделанным камерой pinhole. Чтобы использовать визуальный рабочий процесс SLAM с изображениями, сделанными fisheye-камерой, преобразуйте fisheye-камеру в виртуальную камеру pinhole с помощью undistortFisheyeImage
функция.
В литературе Visual SLAM используются следующие общие термины:
Ключевые системы координат - подмножество видеокадров, которые содержат сигналы для локализации и отслеживания. Две последовательные системы координат обычно указывают на большое визуальное изменение, вызванное движением камеры.
Точки карты - список 3-D мировых точек, которые представляют карту окружения, восстановленную из ключевых систем координат.
Covisibility Графика - график ключевых систем координат как узлов. Два ключевых кадра соединяются ребро, если они имеют общие точки карты. Вес ребра - это количество общих точек карты.
База данных распознавания - база данных, которая хранит визуальное отображение слова с изображением на основе входного набора признаков. Определите, посещалось ли место в прошлом, путем поиска в базе данных изображения, которое визуально подобно изображению запроса.
Чтобы создать визуальный трубопровод SLAM на основе признаков на последовательности изображений, выполните следующие шаги:
Инициализация карты - Инициализация карты 3-D точек из двух систем координат изображения. Вычислите точки 3-D и относительное положение камеры с помощью триангуляции на основе 2-D соответствий функций.
Характеристики дорожки - Для каждой новой системы координат оцените положение камеры, сопоставив характеристики в текущей системе координат с функциями в последней ключевой системе координат.
Создать локальную карту - Если вы идентифицируете текущую систему координат как ключевая система координат, создайте новую 3-D карту точек. Используйте настройку пучка, чтобы уточнить положение камеры и точки 3-D.
Обнаружение циклов - Обнаружение циклов для каждой ключевой системы координат путем сравнения текущей системы координат со всеми предыдущими ключевыми системами координат с помощью подхода набор признаков.
Правильный дрейф - оптимизируйте график положения, чтобы исправить дрейф в позах камеры всех ключевых систем координат.
Рисунок иллюстрирует типичный визуальный рабочий процесс SLAM на основе признаков. Он также показывает точки, в которых данные хранятся или извлекаются из объектов, которые управляют данными.
Используйте набор представлений, набор точек и объекты преобразования для управления ключевыми системами координат и данными карты.
Используйте imageviewset
объект для управления данными, связанными с процессом одометрии и отображения. Объект содержит данные как набор представлений и парные связи между представлениями. Объект также может использоваться для построения и обновления графика положения.
Каждый view состоит из абсолютного положения камеры и характерных точек, извлеченных из изображения. Каждое представление с его уникальным идентификатором (идентификатором представления) в наборе представлений образует узел графика положения.
Каждый connection хранит информацию, связывающую одно представление с другим. Связь включает индексы совпадающих функций между представлениями, относительное преобразование между связанными представлениями и неопределенность при вычислении измерения. Каждое соединение образует ребро в графике положения.
Использование rigid3d
входной параметр объекта с imageviewset
для хранения абсолютных положений камеры и относительных положений камеры на ребрах одометрии. Использование affine3d
входной параметр объекта с imageviewset
для хранения соответствующих положений камеры на ребрах замыкания контура.
Используйте worldpointset
объект для хранения соответствий между точками карты 3-D и точками 2-D изображения между полями зрения камеры.
The WorldPoints
свойство worldpointset
сохраняет 3-D местоположения точек карты.
The Correspondence
свойство worldpointset
сохраняет идентификаторы видов ключевых систем координат, которые наблюдают точки карты.
Чтобы инициализировать отображение, вы должны соответствовать функциям между двумя изображениями, оценить относительное положение камеры и триангулировать начальные точки 3-D мира. Этот процесс обычно использует ускоренные робастные функции (SURF) и ориентированные функции FAST и Rotated 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 объект. Связанное с 2-D 3-D соответствия удаляется автоматически. |
В этой таблице сравниваются положения камеры, точки карты и количество камер для каждой из функций регулировки пучка, используемых в реконструкции 3-D.
Функция | Положения фотоаппарата | Точки карты | Количество камер |
---|---|---|---|
bundleAdjustment | Оптимизированный | Оптимизированный | Несколько |
bundleAdjustmentMotion | Оптимизированный | Фиксированный | Один |
bundleAdjustmentStructure | Фиксированный | Оптимизированный | Несколько |
Из-за накопления ошибок использование только визуальной одометрии может привести к дрейфу. Эти ошибки могут привести к серьезным неточностям на больших расстояниях. Использование основанного на графике SLAM помогает исправить дрейф. Для этого обнаружите замыкания цикла путем нахождения ранее посещенного местоположения. Общим подходом является использование этого рабочего процесса набора признаков:
Рабочий процесс | Функция | Описание |
---|---|---|
Создайте сумку визуальных слов | bagOfFeatures | Создайте пакет визуальных слов для распознавания места. |
Создайте базу данных распознавания | indexImages | Создайте базу данных распознавания, invertedImageIndex , для сопоставления визуальных слов с изображениями. |
Идентифицируйте кандидатов на закрытие цикла | retrieveImages | Поиск изображений, которые аналогичны текущей ключевой системе координат. Идентифицируйте последовательные изображения как кандидаты замыкания цикла, если они аналогичны текущей системе координат. В противном случае добавьте текущую ключевую систему координат в базу данных распознавания. |
Вычислите относительное положение камеры для кандидатов замыкания цикла | estimateGeometricTransform3D | Вычислите относительное положение камеры между ключевой системой координат кандидата и текущей ключевой системой координат для каждого кандидата на закрытие цикла |
Замкнутый цикл | addConnection | Закройте цикл, добавив ребро замыкания цикла с относительным положением камеры к imageviewset объект. |
The imageviewset
объект внутренне обновляет график положения при добавлении представлений и соединений. Чтобы минимизировать дрейф, выполните оптимизацию графика положения с помощью optimizePoses
функция, после добавления достаточного количества замыканий цикла. optimizePoses
функция возвращает imageviewset
объект с оптимизированными преобразованиями абсолютного положения для каждого вида.
Вы можете использовать createPoseGraph
функция для возврата графика положения в виде MATLAB®
digraph
объект. Можно использовать алгоритмы графа в MATLAB, чтобы просмотреть, просмотреть или изменить график положения. Используйте optimizePoseGraph
(Navigation Toolbox) функция из Toolbox™ навигации, чтобы оптимизировать измененный график положения, и затем используйте updateView
функция для обновления положения камеры в наборе видов.
Для разработки визуальной системы SLAM можно использовать следующие функции визуализации.
Функция | Описание |
---|---|
imshow | Отобразите изображение |
showMatchedFeatures | Отобразите совпадающие точки функции на двух изображениях |
plot | Постройте графики наборов видов изображений и соединений |
plotCamera | Постройте график камеры в 3-D координатах |
pcshow | Постройте график 3-D облаке точек |
pcplayer | Визуализация потоковых данных 3-D облака точек |
[1] Хартли, Ричард и Эндрю Зиссерман. Несколько видов геометрии в Компьютерное Зрение. Cambridge: Cambridge University Press, 2003.
[2] Фраундорфер, Фридрих и Давиде Скарамуцца. Визуальная одометрия: Часть II: Совпадение, робастность, оптимизация и приложения. IEEE Robotics & Automation Magazine 19, № 2 (июнь 2012): 78-90. https://doi.org/10.1109/MRA.2012.2182810.
[3] Mur-Artal, Raul, J. M. Montiel, and Juan D. Tardos. ORB-SLAM: универсальная и точная монокулярная система SLAM. Транзакции IEEE по робототехнике 31, № 5 (октябрь 2015): 1147-63. https://doi.org/10.1109/TRO.2015.2463671.
[4] Kümmerle, Rainer, Giorgio Grisetti, Hauke Strasdat, Kurt Konolige и Wolfram Burgard. "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