Реализация SLAM у Qbo


Проект социального робота Qbo, очень интересен. Хотя бы тем, что является примером использования открытого ПО (ОС Linux и операционной системы для роботов — ROS).
А так же — наглядным примером использования и реализации различных методов робототехники.
Совсем недавно мы рассмотрели такое понятие, как SLAM. На примере робота пылесоса Neato XV-11, мы увидели, как работает SLAM на основании данных от лазерного дальномераодометрии). На примере же робота Qbo, можно рассмотреть реализацию визуального SLAM-а.

Одометрия Qbo

Qbo использует два двигателя (скорость вращения — 170 RPM (Revolutions Per Minute — оборотов в минуту)), а для получения обратной связи используется датчик угла поворота — поворотный энкодер.

Это стандартная практика для мобильных роботов.

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

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

Поэтому, обойтись одними энкодерами, обычно, не получается и используются методы комплексирования информации с разных датчиков робота (инерциальная система (IMU, ИНС), глобальная система позиционирования (GPS, ГЛОНАСС), лазерные дальномеры, система технического зрения).

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

SLAM у Qbo основывается на стереоскопическом зрении (в голове робота смонтированы две веб-камеры высокого разрешения) и получаемой одометрии.

Демонстрационное видео показывает полностью автономную навигацию Qbo по офису.
Синяя стрелка соответствует позиции робота, только на основании одометрии, а жёлтая стрелка показывает позицию робота, исправленную фильтром Калмана (Kalman filter). На изображениях, захваченных с веб-камер, зелёными кружками помечены ключевые точки, между которыми найдено соответствие (зелёная линия), и которые представляют место в трёхмерном пространстве. Эти точки добавляются в статусную матрицу фильтра Калмана для создания карты окружения.

Реализация SLAM у Qbo

Алгоритм SLAM-а, реализован у Qbo в виде трёх задач:
1. Первая задача заключается в вычислении движения робота. Для этого, используется драйвер робота, который посылает сообщение об одометрии.
2. Вторая задача заключается в обнаружении ключевых точек (особенностей — features) на последовательности изображений с камер и оценке своей позиции в трёхмерном пространстве:
Для детектирования ключевых точек, используется метод GoodFeaturesToTrackDetector из OpenCV. Затем, для найденных точек вычисляются SURF-дескрипторы, которые сопоставляются друг с другом OpenCV-методом BruteForceMatcher.

Так же, происходит отслеживание точек прорежено-итеративной пирамидальной версией оптического потока Лукаса-Канаде (Lucas-Kanade optical flow in pyramids). Это позволяет избежать поиска новых ключевых точек в областях где они уже отслеживается.

Т.о., Узел принимает Сообщение с синхронизированным изображением и отправляет Сообщение с облаком точек (PointCloud), содержащем позиции ключевых точек(особенностей), их ковариацию в трёх координатах и SURF-дескрипторы.

3. Третья задача заключается в осуществлении расширенного фильтра Калмана (Extended Kalman Filter) и алгоритма ассоциации данных, основанного на расстоянии Махаланобиса (Mahalanobis distance) от облака точек, которое видит робот и облака точек на карте.
Для этого, Узел считывает Сообщение одометрии и Сообщения PointCloud, а в качестве вывода, отправляет Сообщения об одометрии и PointCloud с позицией робота и ключевыми точками, включенными в карту.

Ссылки
SLAM, PID & ODOMETRY in Qbo
http://en.wikipedia.org/wiki/SURF
wiki: Lucas-Kanade Optical Flow Method
http://en.wikipedia.org/wiki/Point_cloud
http://en.wikipedia.org/wiki/Kalman_filter
http://en.wikipedia.org/wiki/Mahalanobis_distance

далее: Робот Qbo и 3D-сенсор Xtion Pro Live

По теме
Робот Qbo
Энкодер
SLAM
Визуальная одометрия


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение