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

Роботы в облаках: совмещение 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.

Поведенческие факторы ранжирования и их влияние на SEO: взгляд изнутри

Поведенческие факторы ранжирования и их влияние на SEO: взгляд изнутри

Редакция блога продолжает цикл образовательных SEO-статей. Сегодня вместе с SEO-специалистом REG.RU Евгением Сметаниным мы расскажем, что такое поведенческие факторы ранжирования,...
Read More
Безвозмездно, то есть даром: что можно получить бесплатно в REG.RU

Безвозмездно, то есть даром: что можно получить бесплатно в REG.RU

В REG.RU мы постоянно работаем над развитием и улучшением сервисов, и на первое место всегда ставим заботу о клиентах. У...
Read More
Domains weekly: неудавшийся захват Domovoy.ru, гранты от ICANN и домен, приносящий богатство

Domains weekly: неудавшийся захват Domovoy.ru, гранты от ICANN и домен, приносящий богатство

Сегодня поделимся новостями о том, как сеть супермаркетов не смогла заполучить желаемый домен, почему в Китае ценятся числовые адреса и...
Read More
Шпаргалка по Python для Django

Шпаргалка по Python для Django

В Python очень много полезных функций, библиотек и других элементов, перечислить которые в одном материале очень сложно. Мы поделимся базовой...
Read More
Domains weekly: безопасное инвестирование, открытие зоны .NEW и блокчейн‑домены

Domains weekly: безопасное инвестирование, открытие зоны .NEW и блокчейн‑домены

Дайджест домейнера с новостями о безопасном способе инвестирования в домены, политике ICANN в отношении доменных споров, открытии общедоступной регистрации .NEW...
Read More
Как подготовить и провести вебинар на любую тему: стратегия из 8 шагов от REG.RU

Как подготовить и провести вебинар на любую тему: стратегия из 8 шагов от REG.RU

Харизматичный спикер, интересная тема, качественная презентация, внимательные слушатели — что же ещё нужно для хорошего вебинара? В этом материале мы...
Read More
Domains weekly: популярные ccTLDs в России, 17‑летняя ошибка Microsoft и уязвимости аукционных доменов

Domains weekly: популярные ccTLDs в России, 17‑летняя ошибка Microsoft и уязвимости аукционных доменов

Сегодня расскажем о том, как изменился рынок доменных имён в 2019 году, какие национальные домены кроме .RU и .РФ используют...
Read More
10 фишек Облачных серверов REG.RU

10 фишек Облачных серверов REG.RU

Если вы выбрали для своего проекта VPS, то наверняка знаете об их особенностях. Но что, если мы скажем, что Облачные...
Read More
Настраиваем шифрование жесткого диска, чтобы избежать утечек данных

Настраиваем шифрование жесткого диска, чтобы избежать утечек данных

В каждой компании есть сотрудники, которые хранят на рабочем компьютере конфиденциальную информацию, и её утечка может оказаться катастрофой. Среди таких...
Read More
Domains weekly: отказ в зоне .INTERNET, «собачья» прибыль и дроп домена Google

Domains weekly: отказ в зоне .INTERNET, «собачья» прибыль и дроп домена Google

ICANN вновь и вновь отказывает индийской компании в делегировании зоны .INTERNET, собака вдохновила хозяина на домен стоимостью полмиллиона долларов, Google...
Read More