Поиск по сайту Поиск

Роботы в облаках: совмещение ROS и Jupyter

Робототехника — одна из самых популярных и прогрессивно развивающихся отраслей. Ролики Boston Dynamics на YouTube собирают миллионы просмотров. Если вы давно хотели собрать собственную робособаку Spot, но не знали, с чего начать — вам на помощь придёт облачная робототехника, Jupyter и ROS. В этой статье мы расскажем, как исследователям удалось совместить эти инструменты в удобном интерфейсе для более быстрой разработки программ, управляющих роботами.

Jupyter пользуется большой популярностью в data science, но пока еще не находит широкого применения в робототехнике. Не так давно сотрудниками компании Quantstack была выпущена первая версия пакета jupyter-ros — набора интерактивных виджетов Jupyter, аналогичных по своим возможностям Qt и Rviz. Поскольку облачная робототехника начинает активно развиваться, эти инструменты могут очень пригодиться разработчикам.

Animated GIF
Танцующий робот PR2 в браузере

Исторически сообщество ROS пользуется средствами Qt для создания пользовательских интерфейсов. На сегодняшний день блокнот Jupyter и фреймворк ipywidgets предлагают убедительную по нескольким причинам альтернативу:

— Код и интерфейс не разделены, оба находятся в одном блокноте.

— Доступно создание сложных виджетов с использованием браузерных технологий: от JavaScript-слайдеров до 3D с WebGL и потокового видео в реальном времени с WebRTC.

— Поддержка любого веб-браузера, нет привязки к Linux.

— Не нужно компилировать Qt-приложения.

— Не требуется локальный запуск. Приложения могут работать на удалённом сервере без какой-либо ручной настройки или установки.

Однако ROS не очень хорошо взаимодействует с Jupyter. Библиотека rospy по сути является многопоточной (каждый новый подписчик ROS-топика создаёт новый поток). Если возникнет необходимость вывести отладочные сообщения, то Jupyter напечатает их в области вывода активной ячейки блокнота, превратив её в огромное нагромождение текста. И остановка печати логов будет довольно проблематичной.

Jupyter-ros спешит на помощь

Поэтому и был создан jupyter-ros. Это набор плагинов для экосистемы Jupyter, позволяющий с лёгкостью работать с ROS.  

https://cdn-images-1.medium.com/max/800/1*35w3erSL2xz0mp9le6YNyg.png
Пример ROS.ipynb: подписка с помощью jupyter-ros создаёт интерактивный виджет

Когда вы подписываетесь на топики с помощью jupyter-ros, функция возвращает ipywidget с кнопкой запуска / остановки и выделенной областью для вывода отладочной информации. То есть, весь вывод из потока подписчика перенаправляется в эту ячейку, и вы получаете полный контроль над ним. Можно в любое время остановить и перезапустить процесс.

https://cdn-images-1.medium.com/max/800/1*yBgrLtyCGlaZcUQnFV9Jpg.png

Если вы вызываете функцию издателя (publisher) в jupyter-ros, то виджет генерируется автоматически в зависимости от спецификации сообщения. Например, поле String становится виджетом ввода текста, а Float32 превращается в слайдер.

Animated GIF
Прямая передача данных IMU из BBC micro:bit

Ещё одна интересная функция: построение графиков прямо в процессе работы программы, похожее на rqt-plot. Для этого используется инструмент bqplot. С помощью jupyter-ros можно автоматически отобразить на графике необходимые данные из сообщений.

Как насчёт 3D?

Большинство роботов — трёхмерные, поэтому нам нужна визуализация! В ROS на данный момент используется Rviz, очень мощный инструмент для работы с объёмными объектами.

Некоторые функции RViz уже были перенесены в браузер в программе RobotVebTools. Взяв за основу их впечатляющую работу, разработчики из Quantstack выпустили первую версию виджетов ROS3D Jupyter. С их помощью можно визуализировать различные типы данных: лазерное сканирование, траектории движения и 3D-модели роботов.

Благодаря ipywidgetification вы можете создавать сложные визуализации прямо в браузере без JavaScript и свободно размещать их в JupyterLab.

Jupyter, виджеты и облачная робототехника

В облачной робототехнике часть программного обеспечения для одного или нескольких роботов выполняется на мощных компьютерах в дата-центрах. Jupyter и JuputerLab являются идеальными кандидатами для разработки такого ПО. Клиентские программы роботов смогут работать в едином удобном интерфейсе без необходимости устанавливать дополнительные расширения или запускать определённую операционную систему (разные версии ROS обычно совместимы с разными Ubuntu). Это даёт простор для возможностей: с JupyterLab и jupyter-ros можно даже запустить Docker-контейнер на облачных серверах.

Например, если вам нужно обрабатывать много данных, поступающих с датчиков, или отрисовывать массивные карты — на наших серверах стоят мощные GPU NVIDIA Tesla V100, с которыми эти задачи будут выполняться гораздо быстрее.

Продемонстрируем, как использовать jupyter-ros на сервере.

Пример использования jupyter-ros

Для начала нам понадобится настроенная среда ROS. Для удобства будем использовать готовый docker-образ. 

Установка и настройка

1. Загрузим и запустим ROS-образ с поддержкой CUDA — для этого понадобится nvidia-docker. Мы будем использовать последнюю версию ROS. 

2. Выполним скрипт, который автоматически настроит среду:

3. Теперь установим pip, Jupyter и необходимые для jupyter-ros пакеты следующими командами:

6. Запустим Jupyter:

Запуск jupyter-ros

1. Для начала клонируем репозиторий jupyter-ros в домашнюю папку.

Репозиторий успешно клонирован:

2. Проверим работу jupyter-ros на примере ROS 3D Grid.ipynb. Файл находится в папке jupyter-ros/notebooks.

Необходимо запустить процессы ROS с помощью команды roscore. Вернёмся в терминал Jupyter:

3. Теперь откроем и запустим файл:

Видим, что 3D-сетка успешно отображается.

⌘⌘⌘

Если раньше робототехника преимущественно развивалась в военной промышленности, то теперь она проникает и в другие отрасли. Машины научились не только удерживать равновесие и танцевать, но и помогать в бытовых делах, доставлять посылки и следить за состоянием здоровья людей. Роботы исследуют местность, где не может находиться человек — взять хотя бы марсоходы или ликвидаторы, разбиравшие радиоактивные завалы в Чернобыле, о которых умолчали в популярном сериале. Облачная робототехника должна стать мощным толчком в развитии технологий, позволяющих внедрять искусственный интеллект в системы управления роботами и существенно ускорять их разработку.

Примеры использования и исходный код jupyter-ros можно найти на GitHub.

С оригинальной статьёй можно ознакомиться в блоге Jupyter.

Domains weekly: .РФ на страже русского языка, рост new gTLDs и пассивный доход от PORNO.COM

Domains weekly: .РФ на страже русского языка, рост new gTLDs и пассивный доход от PORNO.COM

В новой подборке новостей мы расскажем, как развивался русский язык вместе с зоной .РФ, что за риски таит в себе...
Read More
VPS нового поколения, ИИ, юникодные домены и мини‑сериал об админах: всё, что вы знали и чего могли не знать о REG.RU

VPS нового поколения, ИИ, юникодные домены и мини‑сериал об админах: всё, что вы знали и чего могли не знать о REG.RU

Ура-ура! 22 мая нам исполнилось 14 лет, и мы по-прежнему двигаемся только вперёд и становимся лучше. Мы решили поделиться с...
Read More
Domains weekly: старт .MEET от Google, годовой рост .RU и .РФ, вирусная реклама рэп‑альбома с new gTLDs

Domains weekly: старт .MEET от Google, годовой рост .RU и .РФ, вирусная реклама рэп‑альбома с new gTLDs

В новой еженедельной подборке новостей расскажем о старте регистраций в зоне  .MEET от Google, вирусной рекламной кампании нового рэп-альбома Future...
Read More
Как скорость загрузки страниц на мобильных устройствах влияет на посещаемость сайта

Как скорость загрузки страниц на мобильных устройствах влияет на посещаемость сайта

Поисковые системы уделяют большое внимание скорости загрузки сайтов с мобильных устройств, и этот фактор ранжирования становится всё более важным. В...
Read More
Популярные уязвимости сайтов: чем опасны и как их избежать

Популярные уязвимости сайтов: чем опасны и как их избежать

Для любого, кто управляет веб-сайтом, на первом месте должен стоять вопрос безопасности. Критические угрозы и уязвимости могут сильно ударить как...
Read More
Domains weekly: 10 лет .РФ, новый топ регистраторов в .COM и спор за ягодный домен

Domains weekly: 10 лет .РФ, новый топ регистраторов в .COM и спор за ягодный домен

В свежей подборке новостей расскажем о юбилее .РФ, отчёте ICANN о динамике регистраций в зоне .COM и неудачной попытке канадской...
Read More
С днём рождения, .РФ!

С днём рождения, .РФ!

В этом году кириллической национальной российской доменной зоне исполняется 10 лет. Мы решили вспомнить, как всё начиналось: в этом материале...
Read More
Domains weekly: стагнация ccTLD, конец страстей по .ORG и взлом клиентов GoDaddy

Domains weekly: стагнация ccTLD, конец страстей по .ORG и взлом клиентов GoDaddy

В сегодняшней подборке новостей расскажем, как изменилось число регистраций национальных доменов по сравнению с прошлым годом, чем закончилась сделка с...
Read More
Как поменять домен, чтобы сайт не просел в поисковой выдаче

Как поменять домен, чтобы сайт не просел в поисковой выдаче

Итак, вы решили изменить имя своего сайта после ребрендинга или просто выбрали более короткий домен. Но как при этом сохранить...
Read More
Domains weekly: Zoombombing, снижение доходов ICANN и зона .DEALER

Domains weekly: Zoombombing, снижение доходов ICANN и зона .DEALER

В сегодняшнем доменном дайджесте мы расскажем, что такое Zoombombing, какие прогнозы у ICANN по доходам на следующий год и почему...
Read More