Я начинаю серию статей о Visual SLAM. Я давно хотел разобраться в этой непростой теме и решил чтобудет полезно параллельно делиться информацией с коммюнити робототехников.

Я планирую оформить эту серию статей в виде вики или handbook, где я буду рассказывать об основных механизмах работы VSLAM без глубокого погружения в низкоуровневые детали. Для читателей, которым интересно более глубоко погрузиться детали как работают те или иные механизмы, я буду давать ссылки на полезные материалы где можно ознакомиться с темой более детально. Моей целью является дать читателю общее понимание работы визуального SLAM. Также я буду рассматривать популярные алгоритмы VSLAM (как классические так и основанные на Deep Learning) и расскажу какие пакеты для VSLAM доступны в платформе для разработки робототехники ROS 2. Я надеюсь, что такой формат вики по Visual SLAM будет полезен как читателю так и в будущем мне в виде такой «шпаргалки».

В первой статье мы познакомимся с визуальным SLAM в общих чертах с точки зрения его применения в сервисной робототехнике (здесь я не буду рассматривать индустриальных роботов для которых SLAM не является приоритетной задачей). Любой сервисный робот должен выполнять некоторые специфические задачи, например доставку грузов, чистку тротуаров, дезинфекцию воздуха (в больнице) итд. В большинстве случаев для выполнения таких задач роботу требуется понимать текущее положение в пространстве и быстро перемещаться в целевую точку. Чаще всего окружающее пространство в котором оперирует робот представляет собой довольно сложную среду со множеством объектов (часть из которых постоянно перемещаются). Для эффективного перемещения по такой среде роботу нужно иметь карту пространства в некотором удобном формате. Не всегда есть возможность заранее построить карту местности и использовать ее для локализации и навигации робота. Чаще всего приходится выполнять одновременную локализацию робота и построение карты местности. Эта процедура и называется SLAM.

Сервисный робот Relay
Сервисный робот Relay

В чем смысл SLAM?

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

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

Мы будем рассматривать только визуальный SLAM. Это такой вид SLAM, где в качестве источника сенсорных данных используется камера (монокулярная, стерео или RGB-D).

Данные сенсоров и разные виды 3D карт местности
Данные сенсоров и разные виды 3D карт местности

Визуальный SLAM можно разделить на несколько видов (visual-only, визуально-инерциональный и RGB-D SLAM). В свою очередь visual-only SLAM делится на feature based и прямой (direct).

В алгоритмах Visual-only используется только камера (монокулярную или стерео), в визуально-инерциональном SLAM используется комбинация камеры и IMU. В RGB-D SLAM используются RGB-D камеры (Structured Light, Time-of-Flight (ToF) итд.) соответственно. Более детально с этой классификацией можно ознакомиться в статье.

Как работает visual SLAM

Можно выделить следующие основные шаги (этапы) в процессе работы Visual SLAM:

  • Получение данных с сенсоров

  • Визуальная одометрия

  • Оптимизация на бекенде

  • Закрытие циклов (Loop closure)

  • 3D реконструкция

Пайплайн Visual SLAM
Пайплайн Visual SLAM

Визуальная одометрия это оценка перемещения робота между последовательными кадрами.

Этот этап SLAM выполняет фронтенд. Как это работает? На каждом кадре извлекаются 2D ключевые точки и сопоставляются с ключевыми точками на предыдущем кадре так что мы получаем повторное наблюдение той же самой 3D точки (тн. лендмарк) с разных ракурсов камеры.

Иллюстрация наблюдения лендмарков роботом в процессе SLAM
Иллюстрация наблюдения лендмарков роботом в процессе SLAM

Также фронтенд выполняет грубое вычисление позиций камеры и 3D позиций лендмарков с помощью так называемых минимальных разрешителей (minimal solvers). Более подробно о них можно прочитать в главе 4 в книге SLAM Handbook (ссылку на книгу я дам в конце статьи).

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

Траектория робота и позиции камеры
Траектория робота и позиции камеры

Затем в игру вступает бекенд. Он выполняет более точную оценку 3D позиций лендмарков и робота решая оптимизационную проблему методом Bundle Adjustment.

Loop closure позволяет определить если робот вернулся в точку, которую уже посещал в прошлом. Это полезно для корректировки накопившейся ошибки положения робота (проблема дрифта).

На конечном шаге выполняется 3D реконструкция местности, результатом которой является 3D карта (обычно это 3D облако точек).

3D реконструкция карты местности и исходные кадры с камеры с позициями
3D реконструкция карты местности и исходные кадры с камеры с позициями

Визуальный SLAM имеет некоторые общие моменты с техникой Structure from Motion. Тем не менее это разные процедуры. Отличие VSLAM от Structure from Motion заключается в том что первый является процедурой, которая выполняется в реальном времени (или онлайн) в то время как Structure from Motion это полностью оффлайн процедура.

На этом пока все. Думаю уже статья получилась довольно большой. Есть хорошая книга SLAM Handbook где очень подробно разбирается теория SLAM (с большим количеством математики). Скачать ее можно здесь.

Жду комментариев и вашего мнения насколько такой формат повествования был вам понятен и интересен и насколько материал полезен чтобы мне планировать последующие статьи и цикла. Всем удачи!

Список использованных источников для материала:

  • Книга Hartley-Zisserman Multiple View Geometry (краткое изложение основных моментов в блоге на Medium)

  • Видео курс Computer Vision, Prof. Dr. Andreas Geiger (ссылка на ютуб)

  • Курс по фотограмметрии (ссылка на ютуб)

Комментарии (0)