Введение в SLAM, подробный обзор интерфейса SLAM и набора датчиков

В MTank мы стремимся к двум целям:
(1) моделирование и обобщение знаний в рамках ИИ.
(2) Продвигайтесь к созданию действительно интеллектуальных машин.
В рамках этих усилий команда MTank выпускает статьи о нашей работе, чтобы люди могли получать удовольствие и учиться, причем совершенно бесплатно. Если вам нравится наша работа, то проявите свою поддержку. Заранее спасибо!

Вступление

«Все, что вам нужно, это план, дорожная карта и мужество, чтобы двигаться к месту назначения» - Эрл Найтингейл

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

«Если вы не знаете, куда хотите отправиться, имеет ли значение, по какой дороге вы выберете?»

Это первая из двух частей, в которых мы говорим о том, как наши , казалось бы, похищенные роботы ориентируются. Что мы имеем в виду? Что ж, с их точки зрения, каждый дом - это таинственное место, в которое они были брошены или внезапно проснулись. Как можно догадаться, этот процесс открытия почти исключительно в области восприятия и именно там, по логике, мы должны Начните. Сначала нужно воспринимать , прежде чем действовать соответственно, включая понимание вашего окружения, составление карты вашего окружения, то есть понимание того, что где, где «занято» и куда можно беспрепятственно переместиться.

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

Кажется достаточно простым.

Отображение в симуляции

В части 1 мы представили наши философские мотивы и желания собирать чашки и рассмотрели набор смоделированных трехмерных домашних сред. Во части 2 мы рассмотрели нашу оболочку для среды ai2thor house, некоторые эксперименты с обучением с подкреплением (RL) и две специфические физические симуляции под названием PyBullet и Gazebo, которые позволили нам отправить робота Vector на Луну.

Зная, что сопоставление было нашей следующей вехой, мы, естественно, начали с реализации начального сопоставления в рамках моделирования PyBullet. Поскольку PyBullet содержит RGB-изображение глубины и цвета, а также положение камеры (положение и ориентацию), мы можем использовать эту информацию о глубине от виртуальной камеры для преобразования каждого 2D-пикселя в его 3D-координаты в пространстве, создание так называемого облака точек.

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

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

Итак, что мы узнали?

Это научило нас многому о сетках присутствия, моделях датчиков и объединении нескольких точек обзора в одну большую сетку присутствия. Но все, что упомянуто выше, было найдено с использованием точной позы (положения и ориентации) камеры, предоставленной PyBullet. Мы знали, что дальше необходимо найти способ локализовать позу агента в мире и, в частности, в реальном мире.

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

В будущем, чтобы масштабировать количество задач, чашек, чайников и сред, с которыми могут справиться наши роботы, нам наверняка понадобится моделирование. Но на данный момент сборы кубков в реальном мире каждый раз берут верх над матричным стилем. Как видите, путь к AGI долог, извилист и опасен. Все начинается с первого обретения себя.

Одновременная локализация и отображение (SLAM)

«Мы не начинаем обнаруживать себя, пока не потеряемся» - Генри Дэвид Торо

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

Это, относительно говоря, не так просто.

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

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

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

Не существует единого датчика, который мог бы решить все наши проблемы. Нам нужно будет объединить множество датчиков вместе (т.е. объединить датчики) в нашем стремлении создать роботов, которые могут понимать мир таким образом, чтобы мы могли связать в то же время, сохраняя низкие затраты. Для этого мы решили сосредоточить наши усилия на визуальных алгоритмах. То есть SLAM на основе камеры или, как упоминается в литературе, Visual SLAM (V-SLAM).

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

Архитектура типичной SLAM-системы

Типичный алгоритм Visual SLAM состоит из двух основных компонентов, которые можно легко распараллелить, что означает, что они могут выполняться независимо, даже если обе части взаимосвязаны. Следуя литературе, мы будем называть их «интерфейс» и «бэк-энд».

Внешний интерфейс

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

В случае VSLAM алгоритм, который выполняет это, представляет собой визуальную одометрию (VO), которая по существу вычисляет относительную позу (преобразование) между двумя кадрами в соответствии с характерными визуальными особенностями.

Наиболее распространенный метод - извлечь ключевые точки (например, с помощью SIFT, ORB) из кадра, а затем сопоставить эти же ключевые точки в следующем кадре или отслеживать их с помощью оптического потока. Более того, при сопоставлении / отслеживании этих наблюдаемых ключевых точек с разных позиций природа этих алгоритмов может приводить к ошибкам неправильной ассоциации данных, поэтому обычно впоследствии применяется другой алгоритм для удаления возможных выбросов, которые потенциально могут распространять дополнительную ошибку на наши оценки, например консенсус случайной выборки (RANSAC).

Еще одно важное соображение заключается в том, что если мы будем отслеживать каждую важную точку каждого изображения, мы потребляем огромное количество памяти, включая большое количество избыточной информации. По соображениям эффективности, как правило, только подмножество всех наблюдаемых изображений, эти «ключевые кадры» выбираются алгоритмом выбора, при этом сопоставляя и отслеживая наблюдаемые особенности только между ключевыми кадрами. Простой алгоритм выбора ключевого кадра состоит в том, чтобы брать каждый 5-й или 10-й кадр, но другие методы включают добавление ключевого кадра только в том случае, если изображение достаточно изменилось по сравнению с предыдущим (например, измерение параллакса или расстояние, на которое перемещаются ключевые точки).

Кроме того, мы могли рассчитать преобразование между двумя последовательными облаками точек (например, регистрацию облака точек с помощью алгоритма Iterative Closest Point (ICP)), чтобы локализовать траекторию агента.

Кроме того, мы можем использовать более низкоразмерное представление функций, обнаруженных на изображении, вместо их полного описания, например, с помощью методов «Сумка визуальных слов» (DBoW), которые создают словарь возможных функций и преобразуют изображение в вектор. формируется комбинацией возможных функций (или «слов» в словаре), встречающихся для более сжатого представления. Затем это можно использовать для распознавания / перемещения места и закрытия цикла.

Серверная часть

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

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

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

Набор датчиков: моно, стерео, RGB-D, IMU

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

Монокуляр SLAM предполагает использование одной камеры в качестве входа для соответствующих алгоритмов SLAM. Это страдает проблемами масштаба, то есть с точки зрения монокулярной системы SLAM мы не могли бы отличить размер обычного дома от кукольного домика, если бы камера была масштабирована соответствующим образом. Эта проблема масштаба может быть решена различными способами, например хорошая процедура инициализации или использование известной длины объекта или реального расстояния. Хотя устранение этих недостатков может быть более утомительным с алгоритмической точки зрения. Наличие одного датчика - очень простое и элегантное решение с точки зрения аппаратного обеспечения и архитектуры робота. Некоторые известные примеры - MonoSLAM, ORB-SLAM и LSD-SLAM.

Из набора «n» наблюдаемых точек (в данном случае 4 на доме) в исходном положении (с красного изображения) мы перемещаемся по сцене и захватываем второе изображение (выделено зеленым). Используя алгоритмы сопоставления, мы можем найти точки, наблюдаемые на первом изображении на втором, и использовать эту информацию для определения движения камеры (одометрия) и структуры сцены (трехмерные координаты наблюдаемых точек). Structure from Motion (SfM) - еще одна известная область, во многом похожая на Monocular SLAM. Увидев, насколько переместилась ключевая точка между двумя кадрами, мы можем вычислить внешнее преобразование камеры во 2-м кадре.

Мы обнаружили, что одна из наших RGB-камер имела очень маленькое поле зрения (FoV) по горизонтали 69,4 градуса, что потенциально могло привести к потере отслеживания при слишком быстром движении. Большее поле зрения теоретически позволяет отслеживать одни и те же ключевые точки даже после более длительных перемещений. В будущем мы также будем экспериментировать с камерами с гораздо более широким полем обзора, такими как камера «рыбий глаз», которая наблюдает за большей площадью в данный момент и, следовательно, потенциально может облегчить нам жизнь, отслеживая наблюдаемую сцену на более высоких скоростях, чем камера с более узким полем зрения. разрешать.

Стереозрение предполагает использование двух камер для определения структуры сцены. Одновременное получение двух изображений с разных известных позиций дает значительные преимущества. Например, в монокулярном SLAM сопоставление происходит между двумя изображениями в разное время, что означает, что за это время любой объект в сцене мог переместиться, что полностью испортило бы расчет визуальной одометрии, тогда как в стереозрении сопоставление выполняется между изображения, снятые одновременно, т. е. движение не требуется. Тем не менее, стерео SLAM и фактически большинство SLAM по-прежнему будут иметь эту «проблему с динамическими объектами», поскольку им все равно придется отслеживать одни и те же функции, взятые в нескольких кадрах. Популярные стерео SLAM - это VINS-Fusion или SOFT-SLAM.

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

Пассивный vs активный. Стереозрение не только должно использовать пассивные камеры RGB для расчета карты несоответствия, но также возможно сделать активное стерео. Активное стерео проецирует световые лучи на мир и, используя шаблоны деформации, может помочь повысить точность глубины. Подробнее о выпрямлении и активном против пассивного стерео здесь.

RGB-D SLAM обычно означает, что на вход системы SLAM поступают как цветные изображения, так и изображения глубины. Глубина может быть достигнута за счет использования коммерческой камеры глубины, которая обычно содержит стереокамеру, но детали того, как это извлекается и оптимизируется, оставлены внутренним устройствам камеры глубины. RGB-D SLAM может рассчитывать плотные карты, то есть которые включают все видимые пиксели, благодаря информации о глубине этих пикселей. По сравнению с редкими функциями, упомянутыми выше (то есть небольшим количеством ключевых точек), это представляет собой обилие информации, которую можно использовать и отображать на плотной карте. В следующем блоге мы рассмотрим RTAB-Map (архитектура, показанная ранее), которая представляет собой отличную систему SLAM RGB-D, но другие известные примеры включают KinectFusion и Kintinuous.

Блоки инерциальных измерений (IMU) обычно содержат как акселерометр, так и гироскоп (а иногда и магнитометр). В IMU, содержащемся в D435i, первая измеряет ускорение, вторая угловую скорость и обе измеряют 3 степени свободы (DoF), чтобы сформировать 6 степеней свободы в целом в этом IMU с 6 степенями свободы. Возможны многие другие варианты, например Включенный магнитометр сделает его 9 степенями свободы, а более простые IMU с 3 степенями свободы часто используются в автономных транспортных средствах.

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

Основное использование IMU заключается в вычислении ориентации робота с высокой частотой на основе необработанных данных. Например, в нашем D435i акселерометр может быть установлен на 250 Гц (250 измерений в секунду), а гироскоп на 200 Гц, а фильтр (например, фильтр Калмана или дополнительный фильтр) может использоваться для необработанных данных для расчета ориентации IMU.

Когда вы добавляете IMU в систему VO, это называется Визуальная инерциальная одометрия (VIO). Есть также много подходов (слабосвязанных и сильносвязанных), которые могут выводить локализацию почти без дрейфа, если вы выберете и тщательно настроите правильную систему VIO. Мы рекомендуем статью Сравнительное сравнение алгоритмов визуально-инерционной одометрии монокуляра для летающих роботов для обзора основных VIO или SLAM, использующих IMU. В следующем блоге мы поговорим о некоторых замечательных системах VIO, таких как VINS-Mono и ROVIO.

Все фанатики SLAM, вероятно, мечтают об окончательной системе SLAM, которая может справиться с любой ситуацией (слабое освещение, низкая текстура, быстрое движение, замыкание петли, окклюзии, динамические объекты и сцены) и при этом быть невероятно надежной. Мы называем это мистическое мифическое существо «Паркур SLAM».

Хотя это может быть чистая фигня и просто нелепая мечта, алгоритмы, подходящие для быстрых дронов, такие как эти системы VIO, приближаются к требованиям к скорости и гибкости. Так что, может быть, одним из них может быть Parkour SLAM, который мы ищем, или, может быть, в другой день в будущем наступит SLAM нашей мечты. В четвертой части этой серии блогов мы попытаемся найти алгоритм SLAM для уличных ежей, неустанно тестировать его, задавая технические вопросы, и присудить одному миллионеру SLAMdog миллион долларов.

Основанные на функциях vs Прямые

С точки зрения революции глубокого обучения (DL), которая доминировала в компьютерном зрении с 2012 года, легко ввести в заблуждение тот факт, что большинство SLAM используют «классические» детекторы ключевых точек или функций (например, SIFT, ORB, FAST, углы Харриса) . Это удивительно, учитывая всю шумиху вокруг DL и хорошие результаты. Так почему нет глубокого SLAM?

Во-первых, важно отметить, что в «классических» конвейерах классификации дескрипторы ключевых точек использовались в качестве этапа разработки функций до того, как для вывода класса использовался типичный классификатор, например машина опорных векторов (SVM). Эта парадигма была полностью разрушена DL, но главный вывод заключается в том, что ключевые точки и дескрипторы ключевых точек различны: дескрипторы ключевых точек - это векторы значений, которые описывают статистические свойства патча изображения с центром в ключевой точке, ключевые точки относятся к самим точкам, то есть к их местоположению. .

Ключевые точки здесь очень распространены и интуитивно полезны, поскольку SLAM находит геометрические отношения и положения трехмерных точек, которые представляют эти обнаруженные и отслеживаемые двумерные ключевые точки. Собственно, именно этим и занимается VSLAM.

SLAM, вероятно, значительно улучшится с добавлением использования DL - для обнаружения ключевых точек, для семантики или, возможно, сквозного SLAM. Однако классические детекторы функций в настоящее время очень хорошо себя чувствуют. Чтобы узнать больше о том, как DL и SLAM могут помочь друг другу, посетите отличный блог Томаша Малисевича Будущее SLAM в реальном времени и глубокого обучения против SLAM.

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

Есть много вариантов прямых методов. Например, мы могли бы использовать разреженные точки в Прямая разреженная одометрия (DSO). В документе DSO приводится хорошее сравнение всех четырех комбинаций: плотный + прямой, плотный + непрямой, разреженный + прямой, разреженный + косвенный. Мы рекомендуем вам проверить это, особенно если вы сочтете это запутанным, как это сделали мы.

Еще одна известная статья Полуплотная визуальная одометрия (SVO) представляет собой смесь как функциональных, так и прямых методов. Это означает, что он отслеживает только пиксели с высоким градиентом от краев и углов (с использованием прямой фотометрической ошибки), но полагается на основанные на элементах методы для совместной оптимизации структуры и движения. Из-за этих комбинаций он считается полупрямым.

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

Заключение

Подводя итог, мы обсудили все, начиная от мотивации картографирования, картографирования в моделировании и заканчивая тем, как локализация и картографирование отчаянно нуждаются друг в друге (SLAM); и многие связанные поля (например, визуальная одометрия, SfM), а также оси вариации между различными алгоритмами SLAM (например, их передняя и задняя части, набор датчиков и т. д.). Не только это, но и конкретные используемые методы, например прямые и основанные на объектах, разреженные карты / облака точек или плотные, и есть ли в этих системах глобальная оптимизация и замыкание цикла. Чтобы проиллюстрировать, как разные SLAM могут различаться, вы можете найти сравнение между многими известными SLAM в таблице ниже.

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

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

Но самое интересное еще впереди! В следующем выпуске C2C (#cuplife) мы покажем наш выбор и оценку ряда современных систем SLAM, включая некоторые алгоритмы, которые мы тестировали и в которых мы видим будущее этой области. Будьте на связи!