ROS - самая популярная открытая робототехническая платформа в настоящий момент. Я и мои коллеги в Samsung Research - основные контрибьюторы Navigation2 Stack, важнейшего компонента ROS, который отвечает за движение роботов.
В этой статье я расскажу в целом о ROS, о разрабатываемом нами стеке и о том, как организована коллективная работа над проектом. В заключение - о нашем треке в школе разработчика COMMoN, которую мы со Стивом Масенски из Samsung Research America, лидером проекта ROS2 Navigation Stack, проведем в августе-сентябре этого года в рамках конференции Samsung Open Source Conference Russia. Участники школы получат шанс внести вклад в репозиторий стека и сделать свой коммит в известный проект. О школе есть отдельная более подробная хабрастатья.
Введение в ROS
ROS - это открытая платформа, которая позволяет удобно связывать между собой компоненты роботов различных конфигураций. Когда её создавали, задача была сделать универсальную архитектуру и объединить множество готовых наработок. И это вполне удалось: ROS стал самостоятельным популярным проектом, а в 2017 году вышла вторая стабильная версия ROS2.
ROS позволяет абстрагироваться от железа и не заострять внимание на контроллерах (этим занимаются драйверы). Это позволяет заниматься именно программированием роботов, то есть созданием алгоритмов для выполнения конкретных прикладных задач.
С точки зрения архитектуры — это устроено так. ROS состоит из независимых узлов, которые называются нодами (node), это аналог линуксовых “executables”. Между ними идут потоки данных - топики (topics). Нод внутри себя может содержать всё, что угодно, главное - чтобы у него был определенный ROS API.
ROS - проект, внутри которого у каждого пакета свои лицензии. Большинство из них под мягкими лицензиями Apache, MIT либо FreeBSD, которые позволяют делать форки и затем использовать программы в закрытых приложениях. Также есть отдельные алгоритмы под лицензиями LGPL и GPL.
На каких роботах запускается ROS?
ROS подходит для широкого спектра готовых роботов. Это роботы двигающиеся - как раз то, с чем мы работаем. Это промышленные роботы, например, манипуляторы. Это и домашняя техника, системы медобслуживания, роботы-доставщики на складах и на улице. Есть, например, ROS-Industrial - закрытое ответвление от классического ROS для промышленных применений. Даже NASA и та использует ROS в своих разработках.
У истоков ROS стояла компания Willow Garage. У них был классный робот PR2, была интересная акция с раздачей робота университетам, одиннадцать роботов были выданы бесплатно исследовательским командам по всему миру. И все эти команды учили робота чему-то новому, например, открывать пиво или сворачивать полотенца. Японцы сделали, чтобы робот спускался на лифте, забирал сэндвич в кафе и привозил его обратно сотруднику.
После ухода Willow Garage с арены, преемником проекта стала компания ROBOTIS, которая делает TurtleBot’ов. TurtleBot - это недорогой робот. Его можно себе позволить не только в рамках института, а и в заведениях попроще. Этот робот, как конструктор: колесная платформа собирается-разбирается, ее можно расширять. А еще для него полно 3D-принтов в открытом доступе. Мы их сами печатали, а потом ставили на них камеру от XBOX 360 Kinect, которой изначально не было в комплекте. В качестве основной системы стоит по умолчанию Raspberry Pi. Мы заменили ее на NVIDIA Jetson TX2 из-за требовательного к железу Visual SLAM. Выглядело всё как-то так:
ROS Navigation2 Stack
Я пришел в проект ROS в начале 2020 года и сейчас занимаюсь визуальным SLAM (метод одновременной локализации и построения карты, основанный на компьютерном зрении) в стеке Navigation2 или после ребрендинга - Nav2.
Что такое Nav2? Это то, что заставляет робота двигаться из точки “A” в точку “B” самостоятельно. Стек относится к мобильным роботам: это небольшие колесные, шагающие роботы или даже дроны. Наиболее распространена колесная платформа, поэтому чаще всего подразумеваются решения для нее.
Почему Nav2 называют стеком? Потому что он состоит из многих пакетов и программ, надстроенных друг над другом. Именно эти программы позволяют роботу двигаться, без них он не тронется с места. В ROS2 есть и другие компоненты, касающиеся движения, например, MoveIt - решение задачи перемещения манипулятора. Но Navigation2 Stack - одна из самых базовых подсистем, которая ставится вместе с ROS.
Набор задач, которые решает стек: картирование, локальное планирование пути с учетом динамических препятствий, глобальная планировка пути, задача хранения и загрузки карт, задача локализации. Как правило, речь не идет о навигации вне помещения: снаружи здания возникает проблема с большими картами - всё начинает тормозить, и нужно очень мощное железо, чтобы всё работало в реальном времени. Хотя, в последнее время идет развитие и в этом направлении, преимущественно в области навигации по GPS.
Программы стека могут быть использованы практически в любом роботе, качество стека Nav2 близко к продуктовому. На недавнем ROS2 Developer Day 2021 был показан очень неплохой пример: на основе нашего стека человек написал свой алгоритм, который позволял в симуляции управлять автономным автомобилем. В прошлом году прошел робо-марафон: 2 робота со стеком Nav2 на борту проехали 60км в общей сложности за 23 часа в оживленных холлах и в коридорах на перерывах в университете. И за это время не было ни одной экстренной остановки или столкновения!
А если вы хотите опробовать его на реальном роботе, то, к примеру, доступен в продаже Turtlebot3. На него можно установить весь стек Nav2 и робот будет работать, бегать по квартире или офису. Любой бот, который совместим с ROS2, то есть у него есть драйверы и более или менее поддержка в сообществе, может использовать все наши фишки прямо из коробки. Пример разнообразия роботов на картинке ниже:
Как организована работа над ROS2 Navigation Stack?
Лидер проекта Nav2 - Стив Масенски, он разработчик из Samsung Research America. Компания придает большое значение его работе, недавно он был награжден персональной наградой, как лучший руководитель. Со своей стороны, могу только подтвердить, что за 2 года у нас сложилась успешная коммуникация и мы сделали много полезных коммитов в этот репозиторий. Стив также член ROS2 Technical Steering Committee (TSC), то есть участвует в определении стратегии развития проекта в целом. Одним из показателей уровня работы сообщества Nav2 может служить награда ROS Awards, которую мы получили в этом году.
Как работает комьюнити Nav2? Стив, как основной мейнтейнер репозитория, каждые две недели организует общение: разработчики делятся идеями и проблемами, над которыми они сейчас работают. За время участия в проекте у меня сложилось впечатление, что кроме нас основные контрибьюторы Nav2 - это студенты, которые занимаются научной деятельностью и компании, среди которых немало тех, что работают на базе университетов. Компании, которые используют наш стек, очень разные, например, была одна, которая занимается сельскохозяйственными роботами.
С острыми конфликтами в сообществе я не сталкивался. Да, у каждого участника свои интересы, которые он продвигает и сложнейшая задача - собрать все это в слаженный “оркестр”. Однако, по-моему, Стив с ней вполне справляется. Кто-то занимается контроллерами, железо прикручивает, кто-то берется за что-то высокоуровневое. Бывает и так: пришел человек, сказал, что он сделает новый DDS (Data Distribution Service - транспортный уровень, отвечающий за передачу данных от одного нода к другому), и исчез. А жаль, сейчас есть три реализации DDS, и было бы круто, если бы появилась еще одна.
Кроме вышеупомянутых встреч наше комьюнити общается на канале Slack (аналог групп в VK), который делится по интересам. И конечно есть флудилка, где много юмора. Вообще, обстановка непринужденная, что только помогает работе.
Поддержка IT-гигантов во многом определила успех Nav2: сейчас основной контрибьютор Samsung, а ранее разработчики Intel вложились в переход с ROS1 на ROS2. Именно эти ребята полностью переделали и определили новую архитектуру второго навигационного стека:
Для новичков проекта архитектура может и непонятна, но на самом деле она не так сложна. А для тех, кто примет участие в предстоящей школе разработчика ROS, точно станет доступной. Давайте расскажу про школу подробнее.
О школе “COMMoN” и треке “ROS-Samsung”
16 августа 2021 года стартует онлайн школа Community of Open Source Newcomers (COMMoN) - онлайн школа для начинающих в Open Source community, которая будет работать в рамках конференции SOSCON Russia 2021.
Занятия в онлайн школе Community of Open Source Newcomers (COMMoN) продлятся с 16 августа до 10 сентября. Школу недавно анонсировали в этом блоге. В COMMoN будет три трека, я расскажу о “ROS-Samsung”, где я буду тренером.
Что будет в программе нашего трека? На первой неделе - серия лекций общего характера про Open Source (первые 2 дня), а затем мои лекции про ROS в целом и Nav2 в частности. Следующие три недели - работа над практическим заданием + онлайн-стендапы в конце каждой недели. Я буду курировать работу участников над кодом.
Кроме образовательной будет и соревновательная составляющая: по завершении я выберу три самых лучших и многообещающих коммита, а потом мы вместе с Стивом Масенски сделаем ревью кода и определим лучшее решение из трех. Основные критерии оценки: полезность для проекта, близость к продакшену, объем реализованной функциональности, качество кода. Победители по каждому треку будут объявлены и награждены в прямом эфире на закрытии конференции Samsung Open Source Conference Russia.
Какие задачи мы хотим предложить решать вместе с нами? Конечно те, которые актуальны для стека Nav2. Есть набор задач для исследований или практической пользы, и это не скучные багфиксы, а более интересное: попробовать новый планировщик пути, опробовать новый тип контроллера, реализовать фильтр частиц для 3D-карты, сделать планировщик на основе BT-Навигатора (Binary Tree). Есть и сложные задачи для опытных программистов. Все карты раскрывать не буду, поступайте и узнаете!
Работать будем в симуляторе Gazebo. Это довольно симпатичный 3D-симулятор, который постоянно развивается, позволяющий заменить реальное железо и хоть прямо сейчас сделать своего робота. Выглядит это примерно так:
Требования к участникам трека “ROS-Samsung”
Программа бесплатная, отбор конкурсный. Подать заявку могут все желающие. На мой трек я набираю группу из 20 человек.
Нужно зарегистрироваться на сайте конференции SOSCON Russia 2021, выбрать в форме участие в COMMoN, а затем, пройдя по ссылке в письме, выбрать трек и пройти тест. Срок прохождения теста - до 15-00 13 августа 2021 г. (время московское).
Кому будет легче пройти обучение по треку “ROS-Samsung”?
Тому, кто:
● хорошо знает С++, желательно 17-й стандарт;
● работает на Linux: хоть ROS и многоплатформенная система, но всё-таки большинство пользователей пользуется операционными системами семейства Linux;
● немного знает Python, потому что часть ROS написана на нем;
● умеет работать с Git/GitHub;
● и, главное, готов самостоятельно решать сложные задачи, чтобы начать путь в Open Source!
Глубинными знаниями физики наподобие теормеха обладать не нужно. Вещи, которые связаны, например, с трением, перекладываются на драйвер, а Navigation Stack - это уже нечто более высокого уровня, независимого от драйверов. В ROS вообще не так много физики, всё делается немного иначе. Например, не учитывается проскальзывание колес. Точнее, учитывается, но косвенным образом: если у робота проскальзывают колеса, а по одометру он стоит на месте, т.е. колеса крутятся, а картинка по камере или лазерному дальномеру не меняется, то Nav2 сам поймет, что робот никуда не двигается и скорректирует значение. Это решается не за счет физики, а алгоритмически.
Или другой пример, известная проблема киднеппинга: уборщица переставляет робота-пылесоса, причем еще и камеру закрывает в этот момент метлой. Получается, будто бы робот телепортировался в другой конец комнаты. Эта задача также решается в новейших подходах в Nav2! Я кстати, планирую ее затронуть на лекциях.
Заключение
Сейчас ROS/ROS2 - это самая популярная в мире открытая операционная система в робототехнике. Понятно, что есть NASA, автомобилестроение, множество производственных компаний, которые занимаются робототехникой и работают над своими закрытыми решениями. Но Open Source - это глобальный тренд, он завоевывает все большую часть рынка. Даже в NASA некоторые компоненты работают на основе нашего Navigation2 Stack.
Вы добрались до конца статьи! Буду очень рад, если в результате моего поста кто-то поступит в COMMoN и начнет карьеру в Open Source или в принципе заинтересуется проектом и станет контрибьютором ROS2 Navigation Stack.
Желаю удачи и всем спасибо за внимание!
P.S. Материалы для начального знакомства с ROS
С этих руководств я начинал знакомиться с ROS. Они на русском языке, достаточно подробные, правда немного устарели. http://robocraft.ru/page/robotics/#ROS
Обучающие материалы на сайте ROS2.
https://docs.ros.org/en/galactic/Tutorials.htmlК нашему Navigation2 Stack есть хорошие обучающие материалы на английском. Я частично их автор, а теперь ими занимаются коллеги из Samsung R&D Institute Philippines. Изначально мы вдохновлялись документацией MoveIt, и сейчас, кажется, уже и их переросли. Там всё очень просто и подробно, можно проходить их по шагам и с нуля всё понять.
https://navigation.ros.org/tutorials/index.htmlНеплохие обучающие материалы на сайте ROBOTIS. Я по ним разбирался с ROS1, когда только начинал в 2017 году. Поскольку они производители TurtleBot, там всесторонне описано как установить на него ROS, настроить Navigation2 Stack и т.д.
https://emanual.robotis.com/
Автор:
Алексей Мерзляков,
Старший инженер-программист,
Samsung R&D Institute Russia