Доклады второго ROS Meetup по навигации роботов

aw0ncx1kgk0pdhvybndppyxlfxc.jpeg


30 ноября 2019 прошёл 2-й ROS Russian MeetUp, организатор — Лаборатория робототехники Сбербанка, собравший больше 200 ROS-разработчиков. В этом материале мы сделали подборки части интересных выступлений с этого MeetUp.
Совсем скоро, 18 апреля, состоится очередной ROS MeetUp, ещё более масштабный и интересный! Коронавирус не позволяет нам встретиться очно, но ничто не мешает нам собраться на онлайн-конференции! Детали по трансляции будут разосланы зарегистрировашимся участникам митапа. Приглашаем всех коллег поприсутстовать в качестве слушателей, спикеров и участников конкурса. Участие бесплатное, регистрироваться тут. И напоминаем, что найти единомышленников по разработке на ROS в России, узнать последние ROS-новости можно в нашем телеграм-канале ROS Russia community. Полный анонс с программой и часть докладов прошлого митапа мы уже публиковали, а сегодня поделимся еще тремя интереснейшими докладами.

Итак, поехали!

«Локализация робота по ARUCO маркерам»


Автор доклада: Алексей Будяков

→ Слайды презентации

Этот доклад детально рассматривает одну из важных составляющих подсистемы навигации — определение местоположения по маркерам.

Во введении освещены основные принципы и понятия методов компьютерного зрения, позволяющих осуществлять навигацию мобильного робота по фидуциарным маркерам: специальным изображениям, предназначенными для распознавания в качестве реперных точек. Они обычно имеют высокую контрастность сами по себе и на любом возможном фоне, оптимизированы для распознавания при сканировании под углом и при плохом освещении. В качестве маркеров можно применять примитивные логотипы (например, «шашечки» на бортах летательных аппаратов), готовые системы кодирования данных (DataMatrix, QR), однако в робототехнике применяются специально разработанные системы маркеров, чаще всего в виде чёрно-белых изображений. Одной из них является ArUco, которая позволяет создавать пиксельные маркеры с несколькими значениями гранулярности (от 4×4 до 7×7) и, в отличие от QR-кода, распознавание которого занимает несколько десятков миллисекунд, позволяет с минимальными вычислительными затратами находить и детектировать маркер. В докладе разобран путь от обнаружения маркера на изображении до вычисления позиции робота относительно маркера, рассмотрены преимущества использования модуля распознавания ArUco маркеров aruco_marker, входящую в популярную библиотеку методов компьютерного зрения OpenCV. Мы постарались выстроить доклад так, чтобы он давал общее понимание процесса навигации по маркерам без углубления в математику, плюс к тому из него можно извлечь ссылки на методы популярных библиотек, реализующих тот или иной метод, используемый в навигации.

«Обзор планировщика пути Timed Elastic Band»


Автор доклада: Иван Корнев

→ Слайды презентации

Целью доклада было не только рассказать о принципе работы локального планировщика TimedElasticBand, но и сравнить его с другим популярным ROS планировщиком — DynamicWindowApproach, поскольку он входит в состав навигационного стека MoveBase, и установлен как планировщик по умолчанию в стеке навигации для turtlebot3. Именно с этим планировщиком новички, как правило, знакомятся в первую очередь.

Содержание доклада:

  1. Краткий обзор навигационного стека MoveBase, объясняющий принцип его работы. Будет полезен тем, кто ранее не имел дел с этим пакетом, но хочет в нём разобраться или понять, какую роль в нём выполняет локальный планировщик.
  2. Обзор локального планировщика Dynamic Window Approach (далее — DWA). Рассказано об алгоритме DWA, лежащем в основе этого планировщика. Произведен анализ его преимуществ и недостатков. Стоит отметить, что в выступлении было сказано об отсутствии возможности объезжать динамические препятствия, что является правдой лишь наполовину. На текущий момент написаны несколько статей, в которых описано расширение этого алгоритма для учета динамических препятствий. Однако, реализация локального планировщика DWA на ROS не включает в себя эти расширения алгоритма, поэтому динамические препятствия считаются статичными в каждый момент времени. Именно из-за отсутствия этих расширений в реализации среди недостатков было указана невозможность учета динамики препятствий.
  3. Обзор локального планировщика TimedElasticBand (далее — TEB). Рассказано о принципе работы этого метода. Был сделан акцент на двух отличительных особенностях этого локального планировщика:

    — возможность учёта динамических препятствий, информация о которых (их форма и скорости) должна публиковаться в отдельный топик
    — подключение одного из нескольких плагинов, объединяющих точки на карте (карта представляет собой матрицу точек, каждой из которых присваивается значение от 0 до 255, свидетельствующее о безопасности нахождения робота в этой точке, известно в ROS как Costmap) со значением 255 (значение в 255 свидетельствует о наличии препятствия в этой точке) в полигоны. Таким образом, объединяя соседствующие занятые точки, разработчики хотели снизить вычислительную нагрузку при расчёте локальной траектории. Пока не понятно, удалось ли им это сделать эффективно, поскольку операция объединения точек в полигоны также требует вычислительных мощностей и времени. Произведён анализ преимуществ и недостатков этого локального планировщика. Одним из самых серьёзных недостатков TEB является его прожорливость в плане вычислительных ресурсов, особенно это заметно при попытке одновременного использования всех возможностей планировщика.

  4. Сравнительный анализ этих планировщиков с подведением результатов в таблице. Названия основных статей по алгоритмам DWA и TEB не приводятся, поскольку их можно найти на главной странице этих планировщиков в ROS Wiki.

«Eurobot: планирование пути робота»


Авторы выступления: Георгий Щукин, Станислав Киселев

→ Слайды презентации

Вице-чемпионы России, команда SETup, поддерживаемая Лабораторией робототехники Сбербанка, рассказывают о своей собственной навигационной системе. Процесс разработки описан в большой статье.

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

Сегодня мы попробуем проехать из точки А в точку Б, не проехав при этом по хвосту котика, заснувшего на полу. В частности объясним, как мы строим маршрут и управляем скоростью робота, а также расскажем, как запустить всё на своем компьютере».

image

Попытка обойтись малой кровью


При решении такой задачи можно взять уже готовый материал, написанный профессионалами, тогда мучений и изобретения очередного «велосипеда» не будет. Мы использовали омниколесную платформу, поэтому хоть и была попытка использовать готовый local planer от ROS, но по ряду причин сочли это неперспективным.

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

Важно упомянуть, что ROS пакеты чаще всего тестируются на двухколесных платформах. Мы оптимизировали сборку системы для омниколёс (такой робот называется голономным: в любой момент времени он может двинуться в любом направлении) за счёт увеличения доступного угла поворота при движении до 360 градусов. Нам показалось, что это грязный хак, но другие варианты не были универсальными. Стандартный planner оказался слишком тяжеловесным и имел много параметров, которые нам бы никогда не понадобились

Global planner


Первое, что мы решили доработать из навигационных пакетов, — сделали свой __global planner__ на основе алгоритма theta*. Если говорить кратко, то это модифицированный A*. Так же, как и обычно, известная карта разбивается растровым способом на сетку из элементов (нод); планировщик постоянно выполняет поиск родительской node, к которой можно доехать напрямую, т.е. на пути к которой отсутствуют препятствия. Это позволяет строить удобные пути и сглаживать их. Далее они передаются в local planner.

image
Сравнение A* и theta*

Local planner


Локальный планировщик работает по методу градиентного спуска в потенциальном поле. В качестве входной информации используется путь из global planner. Кроме того, в local planner существуют внутренние сервисы для выбора режима построения пути. Доступны два режима работы: режим смещения точек по градиенту, использующий многократный проход по карте, а также режим смещения, при котором непосредственно вычисляется приращение по двум координатам, и точка перемещается на край безопасной зоны.

В итоге мы приняли решение использовать градиентный спуск в потенциальном поле на основе пути из global planner 'а. Получился легковесный и относительно простой алгоритм, который полностью устроил нас по качеству получаемого пути, времени работы и количеству потребляемой оперативной памяти (в районе 100–150 мб), что в несколько раз меньше, чем получалось на первых итерациях разработки со стандартными пакетами.

image
Пример смещения пути local planner’ом

Trajectory regulator


Последний, но не менее важный элемент навигационного стека — это trajectory regulator. Он отвечает за преобразование пути из local planner в траекторию и выдаёт значения мгновенной скорости для текущего шага. Первой итерацией на пути к новому «траекторнику» был алгоритм замены вектора, к которому движется робот. Он назначался как сумма векторов к трём последующим нодам с разными коэффициентами. Второй итерацией было написание фильтра Minimum Jerk через построение полинома 5-ой степени, где координаты x и y зависят от времени доезда до каждой из точек.

image
На рисунке представлен график зависимости одной из координат от времени, а также скорость по данной координате

Если вам интересна разработка роботов, робототехнических модулей или программных компонентов, вы хотите показать свои разработки или просто пообщаться с единомышленниками, — добро пожаловать на наш следующий online ROS Meetup 18 апреля!

Авторы статьи: Альберт Ефимов, Алексей Бурков, Александр Богословский, Олег Уржумцев

© Habrahabr.ru