Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
30 ноября 2019 прошёл 2-й ROS Russian MeetUp, организатор — Лаборатория робототехники Сбербанка, — собравший больше 200 ROS-разработчиков. В этом материале мы сделали подборку наиболее интересных выступлений с этого MeetUp, посвящённых навигации роботов.
Совсем скоро, 18 апреля, состоится очередной ROS MeetUp, ещё более масштабный и интересный! Коронавирус не позволяет нам встретиться очно, но ничто не мешает нам собраться на онлайн-конференцию! Приглашаем всех коллег поприсутстовать онлайн в качестве слушателей и спикеров. Детали трансляции будут разосланы зарегистрировавшимся участникам, регистрация открыта, ссылка тут, участие бесплатное. И напоминаем, что найти единомышленников по разработке на ROS в России, узнать последние ROS-новости можно в нашем телеграм-канале ROS Russia community. Полный анонс с программой и часть докладов прошлого MeetUp мы уже публиковали, а сегодня поделимся ещё тремя интереснейшими докладами.
Итак, поехали!
“Локализация робота по ARUCO маркерам”
Автор доклада: Алексей Будяков
→ Слайды презентации
Этот доклад детально рассматривает одну из важных составляющих подсистемы навигации — определение местоположения по маркерам.
Во введении освещены основные принципы и понятия методов компьютерного зрения, позволяющих осуществлять навигацию мобильного робота по фидуциарным маркерам: специальным изображениям, предназначенными для распознавания в качестве реперных точек. Они обычно имеют высокую контрастность сами по себе и на любом возможном фоне, оптимизированы для распознавания при сканировании под углом и при плохом освещении. В качестве маркеров можно применять примитивные логотипы (например, «шашечки» на бортах летательных аппаратов), готовые системы кодирования данных (DataMatrix, QR), однако в робототехнике применяются специально разработанные системы маркеров, чаще всего в виде чёрно-белых изображений. Одной из них является ArUco, которая позволяет создавать пиксельные маркеры с несколькими значениями гранулярности (от 4*4 до 7*7) и, в отличие от QR-кода, распознавание которого занимает несколько десятков миллисекунд, позволяет с минимальными вычислительными затратами находить и детектировать маркер. В докладе разобран путь от обнаружения маркера на изображении до вычисления позиции робота относительно маркера, рассмотрены преимущества использования модуля распознавания ArUco маркеров aruco_marker, входящую в популярную библиотеку методов компьютерного зрения OpenCV. Мы постарались выстроить доклад так, чтобы он давал общее понимание процесса навигации по маркерам без углубления в математику, плюс к тому из него можно извлечь ссылки на методы популярных библиотек, реализующих тот или иной метод, используемый в навигации.
“Обзор планировщика пути Timed Elastic Band”
Автор доклада: Иван Корнев
→ Слайды презентации
Целью доклада было не только рассказать о принципе работы локального планировщика TimedElasticBand, но и сравнить его с другим популярным ROS планировщиком — DynamicWindowApproach, поскольку он входит в состав навигационного стека MoveBase, и установлен как планировщик по умолчанию в стеке навигации для turtlebot3. Именно с этим планировщиком новички, как правило, знакомятся в первую очередь.
Содержание доклада:
- Краткий обзор навигационного стека MoveBase, объясняющий принцип его работы. Будет полезен тем, кто ранее не имел дел с этим пакетом, но хочет в нём разобраться или понять, какую роль в нём выполняет локальный планировщик.
- Обзор локального планировщика Dynamic Window Approach (далее — DWA). Рассказано об алгоритме DWA, лежащем в основе этого планировщика. Произведен анализ его преимуществ и недостатков. Стоит отметить, что в выступлении было сказано об отсутствии возможности объезжать динамические препятствия, что является правдой лишь наполовину. На текущий момент написаны несколько статей, в которых описано расширение этого алгоритма для учета динамических препятствий. Однако, реализация локального планировщика DWA на ROS не включает в себя эти расширения алгоритма, поэтому динамические препятствия считаются статичными в каждый момент времени. Именно из-за отсутствия этих расширений в реализации среди недостатков было указана невозможность учета динамики препятствий.
- Обзор локального планировщика TimedElasticBand (далее — TEB). Рассказано о принципе работы этого метода. Был сделан акцент на двух отличительных особенностях этого локального планировщика:
— возможность учёта динамических препятствий, информация о которых (их форма и скорости) должна публиковаться в отдельный топик
— подключение одного из нескольких плагинов, объединяющих точки на карте (карта представляет собой матрицу точек, каждой из которых присваивается значение от 0 до 255, свидетельствующее о безопасности нахождения робота в этой точке, известно в ROS как Costmap) со значением 255 (значение в 255 свидетельствует о наличии препятствия в этой точке) в полигоны. Таким образом, объединяя соседствующие занятые точки, разработчики хотели снизить вычислительную нагрузку при расчёте локальной траектории. Пока не понятно, удалось ли им это сделать эффективно, поскольку операция объединения точек в полигоны также требует вычислительных мощностей и времени. Произведён анализ преимуществ и недостатков этого локального планировщика. Одним из самых серьёзных недостатков TEB является его прожорливость в плане вычислительных ресурсов, особенно это заметно при попытке одновременного использования всех возможностей планировщика. - Сравнительный анализ этих планировщиков с подведением результатов в таблице. Названия основных статей по алгоритмам DWA и TEB не приводятся, поскольку их можно найти на главной странице этих планировщиков в ROS Wiki.
“Eurobot: планирование пути робота”
Авторы выступления: Георгий Щукин, Станислав Киселев
→ Слайды презентации
Вице-чемпионы России, команда setUp, поддерживаемая Лабораторией робототехники Сбербанка, рассказывают о своей собственной навигационной системе. Процесс разработки описан в большой статье.
“Роботы ездят по ровному полю и большинство препятствий заранее известно, однако, коварные противники могут попытаться украсть ресурсы (да и мы не прочь иногда полакомиться парой десятков дополнительных баллов), при этом мы хотим проехать к желаемой точке как можно быстрее, не задев препятствий. С внешней камеры на поле мы получаем данные о положении противника и знаем, где он сейчас находится. Однако, мало знать его положение — нужно уметь использовать эту информацию.
Сегодня мы попробуем проехать из точки А в точку Б, не проехав при этом по хвосту котика, заснувшего на полу. В частности объясним, как мы строим маршрут и управляем скоростью робота, а также расскажем, как запустить всё на своем компьютере”.
Попытка обойтись малой кровью
При решении такой задачи можно взять уже готовый материал, написанный профессионалами, тогда мучений и изобретения очередного «велосипеда» не будет. Мы использовали омниколесную платформу, поэтому хоть и была попытка использовать готовый local planer от ROS, но по ряду причин сочли это неперспективным.
Из плюсов стандартного стека можно выделить наличие документации и возможность найти информацию на форумах. Подробнее можно почитать на официальном сайте с документацией.
Важно упомянуть, что ROS пакеты чаще всего тестируются на двухколесных платформах. Мы оптимизировали сборку системы для омниколёс (такой робот называется голономным: в любой момент времени он может двинуться в любом направлении) за счёт увеличения доступного угла поворота при движении до 360 градусов. Нам показалось, что это грязный хак, но другие варианты не были универсальными. Стандартный planner оказался слишком тяжеловесным и имел много параметров, которые нам бы никогда не понадобились
Global planner
Первое, что мы решили доработать из навигационных пакетов, — сделали свой __global planner__ на основе алгоритма theta*. Если говорить кратко, то это модифицированный A*. Так же, как и обычно, известная карта разбивается растровым способом на сетку из элементов (нод); планировщик постоянно выполняет поиск родительской node, к которой можно доехать напрямую, т.е. на пути к которой отсутствуют препятствия. Это позволяет строить удобные пути и сглаживать их. Далее они передаются в local planner.
Сравнение A* и theta*
Local planner
Локальный планировщик работает по методу градиентного спуска в потенциальном поле. В качестве входной информации используется путь из global planner. Кроме того, в local planner существуют внутренние сервисы для выбора режима построения пути. Доступны два режима работы: режим смещения точек по градиенту, использующий многократный проход по карте, а также режим смещения, при котором непосредственно вычисляется приращение по двум координатам, и точка перемещается на край безопасной зоны.
В итоге мы приняли решение использовать градиентный спуск в потенциальном поле на основе пути из global planner 'а. Получился легковесный и относительно простой алгоритм, который полностью устроил нас по качеству получаемого пути, времени работы и количеству потребляемой оперативной памяти (в районе 100-150 мб), что в несколько раз меньше, чем получалось на первых итерациях разработки со стандартными пакетами.
Пример смещения пути local planner'ом
Trajectory regulator
Последний, но не менее важный элемент навигационного стека — это trajectory regulator. Он отвечает за преобразование пути из local planner в траекторию и выдаёт значения мгновенной скорости для текущего шага. Первой итерацией на пути к новому «траекторнику» был алгоритм замены вектора, к которому движется робот. Он назначался как сумма векторов к трём последующим нодам с разными коэффициентами. Второй итерацией было написание фильтра Minimum Jerk через построение полинома 5-ой степени, где координаты x и y зависят от времени доезда до каждой из точек.
На рисунке представлен график зависимости одной из координат от времени, а также скорость по данной координате
Если вам интересна разработка роботов, робототехнических модулей или программных компонентов, вы хотите показать свои разработки или просто пообщаться с единомышленниками,— добро пожаловать на наш следующий online ROS Meetup 18 апреля!
Авторы статьи: Альберт Ефимов, Алексей Бурков, Александр Богословский, Олег Уржумцев