Створення роботів за допомогою ROS (Robot Operating System)
Щодня ми бачимо різноманітні відео з роботами, які стрибають, бігають чи виконують різні трюки. Можна навіть купити робота-пилотяга для прибирання своєї домівки. Роботи поступово, але неухильно стають невіддільною частиною нашого життя.
Мене звати Андрій, я екс-голова відділу розробки програмного забезпечення Shadow Robot Company (однієї з найдавніших робокомпаній Великої Британії), архітектор вбудованих приладів компанії GlobalLogic, а також співзасновник спільноти ROS Ukraine. У статті ви дізнаєтеся, які технології використовують під час розробки сучасних роботів. Я також поділюсь цікавинками зі світу робототехніки.
А ще у статті ви знайдете поради, як розпочати свою подорож у захопливий світ робототехніки. Стаття розрахована на широке коло читачів, що люблять пізнавати нове.
Цифрові (?) технології
Уже майже два десятиліття своєї професійної кар’єри я присвятив автоматизації. Весь цей час, окрім останніх п’яти років, мою роботу спрощено можна було б описати так:
- генерування звітів, що зменшують паперообіг у природі;
- оптимізацію кількості клацань мишкою і клавішами користувачем;
- інтеграцію процесів між різними відділами корпорації;
- допомогу людині в прогнозуванні майбутнього чи веденні обліку.
У всіх цих випадках ініціатором взаємодії безпосередньо чи опосередковано була людина; споживачем результатів також була людина. Тобто в цій системі людина була альфою і омегою. Наочно це можна описати простою діаграмою.
Рисунок 1
Хоча система брала на себе «важку роботу» планування, кінцевим виконавцем усе ж таки залишалася людина.
Це саме стосується нашого побуту. Проникність технологій, таких як інтернет, електронні листи, соціальні мережі, розумні телефони, з кожним днем зростає. Такі проєкти, як StarLink від SpaceX, покликані поглибити поширення інтернету й супутніх технологій у світі.
60 супутників Starlink, готових до виведення на орбіту. Джерело: Вікіпедія
Проте такі сервіси, як доставляння їжі, транспортування, ремонт автомобіля тощо, досі не автоматизовані й не виходять за рамки рисунку 1. І якщо захочеться придумати ще один сервіс в еру цифрових технологій, то це означатиме, що з’явиться ще одна професія чи спеціалізація для людей.
«І що тут поганого?» — запитаєте. Загалом нічого. Та завжди є кілька запитань, що їх кожен ставить собі перед тим, як впустити незнайому людину до себе додому чи сісти в її машину. І недаремно останніми роками суспільство шоковане повідомленнями про злочини, вчинені водіями Uber, що скористалися довірою клієнтів. Це саме стосується і водіїв Uber, які стали жертвами клієнтів.
Також є певні завдання по господарству чи у квартирі, які, здавалось би, треба автоматизувати, як-от: прибирання в приміщенні, прибирання снігу (напівавтоматизований приклад з Тернополя), підмітання подвір’я, боротьба з бур’янами, допомога при транспортуванні важких предметів і т. і. Звичайно, для цих завдань можна найняти людину. Але мені, як справжньому автоматизаторові, такий варіант не до вподоби.
Shadow Robot Company
Близько п’яти років тому я вирішив спробувати розширити свої навички й навчитися автоматизувати наш «аналоговий» світ.
Завдяки моїм навичкам автоматизатора «цифрового» світу мені вдалося влаштуватися на роботу в компанію Shadow Robot Company. Ось кілька цікавинок про цю компанію:
- штаб-квартира розміщена в Лондоні (Велика Британія);
- одна з найстаріших британських робокомпаній;
- перша назва мала бути «Люцифер» (було б оригінально говорити людям, що я працюю на «Люцифері» або на Люцифера);
- роборука, створена на Shadow, стала першою у світі людиноподібною рукою, здатною взяти й підняти пінту (близько пів літри) пива;
Більше цікавинок можна прочитати в цій статті засновника компанії Річарда Ґрінгіла.
Ще одним цікавим фактом є те, що в той час, коли я прийшов у Shadow, компанія якраз завершувала роботу над проєктом автоматизації роботи шеф-кухаря. Ідея доволі проста. Ви завантажуєте рецепти, один раз записані професійним шеф-кухарем, і робот з високою точністю відтворює ці рецепти на вашій кухні скільки завгодно разів. Як це відбувається, можете побачити на відео.
За більш як чотири роки роботи з Shadow вдалося прилучитися до автоматизації різних сфер людської діяльності, зокрема сільського господарства, догляду за старшими людьми, зварювання, напівавтономної віддаленої присутності в шкідливому для людини середовищі тощо.
Robot Operating System
Багато компаній (включно з моїм попереднім роботодавцем) використовують ROS (Robot Operating System) для розробки своїх роботів. Цей набір бібліотек створили понад 10 років тому студенти-робототехніки для того, щоб не переписувати ті самі речі.
Тепер це доволі відома у світі система, і над версією ROS 2 співпрацює низка провідних організацій, а в Technical Steering Committee (TSC) входять такі відомі компанії, як Amazon, Intel, Microsoft, Toyota.
Спостережливі читачі також зауважили, що до переліку ввійшли два з трьох великих гравців у бізнесі хмарних платформ, а третій гравець — Google — теж не стоїть на місці, як зазначає ця стаття. До цієї теми ми повернемося пізніше.
Отже, ROS забезпечує апаратну абстракцію, драйвери пристроїв, бібліотеки, візуалізатори, передачу повідомлень, керування пакетами й багато іншого. Оскільки роботи, яких будували десятиліття тому, були вкрай ненадійними, систему проєктували так, щоб відмова одного з вузлів не зупинила роботу всього робота. Тому ядро системи побудоване навколо обміну повідомлень між вузлами, які нічого не знають один про одного. Все, що відомо — це назва каналу обміну повідомленнями, його формат і тип виклику.
Приклад підсистем робота
Є три типи виклику:
- Звичайний відправник і отримувач (publisher — subscriber). Відправник надсилає своє повідомлення отримувачеві й не чекає на відповідь, а просто й далі виконує своє завдання. Наприклад, камера може публікувати фото з частотою 30 Гц.
- Виклик сервісу (service). У цьому випадку відправник зацікавлений в отриманні відповіді на свій запит і очікує відповіді. Наприклад, сервіс із пошуку найкоротшого шляху на мапі з точки А в точку В.
- Сервіси зі зворотним зв’язком (action server), що працюють як другий тип з можливістю отримання зворотного зв’язку про стан виконання завдання. Наприклад, сервіс завантаження файлу в хмарне сховище може повертати відсоток пересланих даних щосекунди.
З чого почати
Загалом повний цикл розробки робота доволі складний і охоплює розробку механіки, електроніки та програмного забезпечення. Проте можна скористатися різними варіантами, щоб сконцентруватися над найцікавішими чи найважливішими для конкретних завдань частинами.
Один з найпростіших способів почати працювати з роботами — узяти за основу робота з готовою електронікою і механікою та додавати до нього функційність. Для навчальних цілей можна вибрати офіційного робота для вивчення ROS TurtleBot 3. Великий перелік роботів, що підтримують ROS, можна знайти тут.
Другий варіант — купити готове рішення для частини робота, наприклад роборуки для робокухні від Shadow чи роборуку для українсько-американського робота для прибирання офісних вбиралень, а іншу частину робота доробити самостійно або зінтегрувати зі ще одним готовим роботом.
Наступні варіанти вимагатимуть більше роботи в кожному напрямку: механіці, електроніці та програмному забезпеченні в різних комбінаціях і на ваш вибір.
Безплатні книжки й ресурси для глибшого вивчення ROS:
Як будують роботів з ROS
Загалом розробка робота починається з програми CAD (computer-aided design). Найпопулярнішою серед розробників роботів є SolidWorks. Останнім часом у спільноті розробників роботів з відкритим кодом також набуває популярності OnShape (онлайн-CAD, безплатний для відкритих моделей). Розробка електроніки для робота також проводиться в Altium.
Процес розробки мобільного робота
Наступна фаза розробки полягає у створенні URDF (Unified Robot Description Format) робота. URDF містить інформацію про вигляд, межі робота (для розрахунку колізій) і фізичні властивості (маса, інерція, вузли). Завдяки SolidWorks to URDF Exporter можна згенерувати URDF із CAD-моделі.
Звичайно, для людей, що ніколи не стикалися зі створенням моделей у CAD-програмах чи проєктуванням електроніки, перший пункт видається цілим новим непізнаваним світом, який їм треба освоїти. Проте завдяки ROS, його на перших порах можна оминути й зайнятися розробкою симульованої моделі робота. Це дозволить перевірити алгоритми завчасно, до появи фізичного робота. Стосовно вигляду робота, то URDF відмінно працює з примітивами, такими як прямокутний паралелепіпед, циліндр і куля. Відповідно можна створити першу «грубу» модель робота й спробувати налаштувати регулятори (controllers) у симуляції.
Робот Leobot складається з примітивних фігур (крім коліс Ілона)
Далі вибираємо, які регулятори потрібні для робота. Наприклад, для робота з двома моторами й колесами плюс третім пасивним колесом, що обертається в усі сторони (як в офісному кріслі), можна використати диференціал. Для цього можна скористатися готовим регулятором з підсистеми ROS Control.
Ці дії вже були виконані під час виготовлення таких роботів, як TurtleBot3 та інших (з підтримкою ROS). Тому працюючи з ними, ви зможете зосередитися на розробці високорівневих алгоритмів поведінки, зокрема автономної навігації. А для людей, що не хочуть витрачати кілька сотень доларів на навчального робота, є інший шлях. Завдяки ROS можна запустити симуляцію комерційно доступних роботів і на них випробовувати свої алгоритми. Зокрема, є доступна симуляція для TurtleBot3, а також Atlas від Boston Dynamics, як і для більшості роботів, що підтримують ROS.
Звичайно, симуляція далеко не ідеально передає природу середовища, та певний клас завдань симулюється досить гарно, як-от навігація згенерованим приміщенням.
Симуляція Leobot і Львівської національної галереї мистецтв імені Бориса Возницького в середовищі Gazebo
Одну з найглибших інтеграцій з ROS має симулятор Gazebo. До того ж Gazebo безплатний і має відкритий код. Та це не єдиний симулятор, інтегрований з ROS, і відповідно до своїх потреб і фінансових можливостей можна підібрати продукт, що задовольнятиме вимоги для певного класу завдань. Ще одним цікавим розширенням Gazebo є gzWeb, який дозволяє показувати симуляцію у веббраузері.
Симуляція Leobot і Львівської національної галереї мистецтв імені Бориса Возницького в середовищі GzWeb
Далі, зверху вже створеного функціонала, можна додавати навігацію. Навігаційна підсистема ROS завдяки підбору параметрів дозволяє налаштувати алгоритми побудови мап, пошуку (локалізації) робота на мапі, переміщення з точки А в точку Б на мапі.
Усі ці речі можна налагодити й налаштувати, а також створити набір інтеграційних тестів, що виконуватимуться на сервері автоматично. Зокрема, можна випробувати робота в симульованих приміщеннях перед тим, як його тестувати в «аналоговому» світі.
Для контролю моторів фізичного робота переважно додатково використовують мікроконтролер(и). Мікроконтролер можна під’єднати через UART і кабель USB до TTL. Для цього можна використати підсистему ROS, що має назву rosserial.
Звичайно, це був лише стислий огляд процесу розробки роботів. Кожен крок розгортається в низку завдань, які треба виконати. Безперечно, частину кроків можна оминути, якщо купити вже готового робота з підтримкою ROS або завантажити відкритий код робота та його симуляції.
ROS Ukraine
Найліпший спосіб щось вивчити чи зробити — зібрати гурт однодумців і вибрати собі цікаве завдання. Майже три роки тому ми заснували спільноту ROS Ukraine, головна мета якої — популяризувати робототехніку й автоматизацію з використанням ROS в Україні.
Проєкт, над яким тепер працює ROS Ukraine, називається LeoBot і має відкритий код з ліцензією MIT. Це — робот-аватар, майже як в однойменному фільмі. Користувач, завдяки розумному телефону, Google Cardboard, Bluetooth-джойстику й інтернету, може «переноситися» в тіло робота й бачити його «очима», чути «вухами», говорити. Робота можна використовувати для відвідувань картинних галерей, музеїв, палаців, конференцій тощо в різних частинах світу, не виходячи зі своєї домівки.
Стереозображення з Leobot у симуляції Львівської національної галереї мистецтв імені Бориса Возницького
Завдяки середовищу Docker, симуляцію Leobot і Львівської національної галереї мистецтв імені Бориса Возницького можна запустити на широкому спектрі операційних систем, як-от: Ubuntu, RHEL, Debian, Windows і MacOS. Для тих, хто хоче спробувати запустити це середовище, документація доступна тут (для MacOS мала б спрацювати версія для Windows, але це неперевірене припущення). Docker дозволяє за мінімальних зусиль почати експериментувати з роботом.
Оскільки роботи — це доволі складна й комплексна галузь, то на проєкті знайдеться робота спеціалістам різного профілю. Частина завдань стосується Web і NodeJs, JavaScript. Інший рівень завдань пишеться на Python із застосуванням машин станів, низький рівень використовує C/С++. Також не бракує завдань з машинного зору й навчання, доповненої реальності тощо. Якщо вас цікавить участь у такому проєкті — приєднуйтеся до Facebook-групи ROS Ukraine.
Глобальна картина
Світ налаштовується на четверту індустріальну революцію. Цікаво, що стаття у вікіпедії не містить ніяких прямих згадок про роботів. Проте виробники роботів ретельно готуються до нової революції. З’являються цілі нові класи роботів.
Зокрема, на відео зображено робота, якого ми на Shadow Robot Company зібрали на замовлення компанії «Беко» для реклами нової кавоварки. Це кобот компанії Universal Robots UR5.
Коботи, на відміну від традиційних роботів, можуть працювати пліч-о-пліч з людиною на заводі; і їм не треба клітки для того, щоб вберегти людину від травм. На заводах четвертої індустріальної революції люди працюватимуть разом з коботами або керуватимуть ними. Нові класи роботів вимагають нового програмного забезпечення, що робитиме їх «розумнішими»; ідеться не лише про алгоритми машинного навчання, а й інші методи, яких у робототехніці не бракує. Зокрема, це планування траєкторій, маршрутів, уникнення перешкод, побудова мап, орієнтування по мапі тощо.
Як я вже згадував раніше, ключові гравці на ринку хмарних рішень активно беруть участь у розробці рішень для роботів наступних поколінь. ROS відіграє роль платформи, навколо якої будуються такі рішення. Ось кілька сервісів, що пропонують хмарні компанії:
Україна, на жаль, поки що не в перших лавах розробників роботів. Є низка причин, чому так відбувається, але як наслідок ми не отримуємо замовлень на розробку роботів. А як немає замовлень, то немає потреби в спеціалістах. А коли немає достатньої кількості спеціалістів, то не буде й замовлень.
Один з варіантів виходу з цього замкненого кола — створювати клуби робототехніків. Саме такою ініціативою і є ROS Ukraine.
Як прилучитися
Якщо ви запалилися ідеєю створити корисного для себе чи інших робота й хочете поспілкуватися з однодумцями, то найлегший спосіб здійснити це — прилучитися до Facebook-групи ROS Ukraine. Там ми ділимось останніми новинами зі світу робототехніки та ROS, станом справ з Leobot і обговорюємо цікаві теми.
Також
Підсумки
Роботи дедалі більше входять у наше повсякденне життя. Є низка причин, чому людство й далі застосовує ці рішення і чому, зокрема, чергова індустріальна революція залежатиме саме від них. Це світова тенденція, за якою ми можемо спостерігати осторонь або ж прилучитися до неї (на рівні хобі чи професійно).