e
Робототехника — одна из самых популярных и прогрессивно развивающихся отраслей. Ролики Boston Dynamics на YouTube собирают миллионы просмотров. Если вы давно хотели собрать собственную робособаку Spot, но не знали, с чего начать — вам на помощь придёт облачная робототехника, Jupyter и ROS. В этой статье мы расскажем, как исследователям удалось совместить эти инструменты в удобном интерфейсе для более быстрой разработки программ, управляющих роботами.
Jupyter пользуется большой популярностью в data science, но пока еще не находит широкого применения в робототехнике. Не так давно сотрудниками компании Quantstack была выпущена первая версия пакета jupyter-ros — набора интерактивных виджетов Jupyter, аналогичных по своим возможностям Qt и Rviz. Поскольку облачная робототехника начинает активно развиваться, эти инструменты могут очень пригодиться разработчикам.
Исторически сообщество ROS пользуется средствами Qt для создания пользовательских интерфейсов. На сегодняшний день блокнот Jupyter и фреймворк ipywidgets предлагают убедительную по нескольким причинам альтернативу:
— Код и интерфейс не разделены, оба находятся в одном блокноте.
— Доступно создание сложных виджетов с использованием браузерных технологий: от JavaScript-слайдеров до 3D с WebGL и потокового видео в реальном времени с WebRTC.
— Поддержка любого веб-браузера, нет привязки к Linux.
— Не нужно компилировать Qt-приложения.
— Не требуется локальный запуск. Приложения могут работать на удалённом сервере без какой-либо ручной настройки или установки.
Однако ROS не очень хорошо взаимодействует с Jupyter. Библиотека rospy по сути является многопоточной (каждый новый подписчик ROS-топика создаёт новый поток). Если возникнет необходимость вывести отладочные сообщения, то Jupyter напечатает их в области вывода активной ячейки блокнота, превратив её в огромное нагромождение текста. И остановка печати логов будет довольно проблематичной.
Поэтому и был создан jupyter-ros. Это набор плагинов для экосистемы Jupyter, позволяющий с лёгкостью работать с ROS.
Когда вы подписываетесь на топики с помощью jupyter-ros, функция возвращает ipywidget с кнопкой запуска / остановки и выделенной областью для вывода отладочной информации. То есть, весь вывод из потока подписчика перенаправляется в эту ячейку, и вы получаете полный контроль над ним. Можно в любое время остановить и перезапустить процесс.
Если вы вызываете функцию издателя (publisher) в jupyter-ros, то виджет генерируется автоматически в зависимости от спецификации сообщения. Например, поле String становится виджетом ввода текста, а Float32 превращается в слайдер.
Ещё одна интересная функция: построение графиков прямо в процессе работы программы, похожее на rqt-plot. Для этого используется инструмент bqplot. С помощью jupyter-ros можно автоматически отобразить на графике необходимые данные из сообщений.
Большинство роботов — трёхмерные, поэтому нам нужна визуализация! В ROS на данный момент используется Rviz, очень мощный инструмент для работы с объёмными объектами.
Некоторые функции RViz уже были перенесены в браузер в программе RobotVebTools. Взяв за основу их впечатляющую работу, разработчики из Quantstack выпустили первую версию виджетов ROS3D Jupyter. С их помощью можно визуализировать различные типы данных: лазерное сканирование, траектории движения и 3D-модели роботов.
Благодаря ipywidgetification вы можете создавать сложные визуализации прямо в браузере без JavaScript и свободно размещать их в JupyterLab.
В облачной робототехнике часть программного обеспечения для одного или нескольких роботов выполняется на мощных компьютерах в дата-центрах. Jupyter и JuputerLab являются идеальными кандидатами для разработки такого ПО. Клиентские программы роботов смогут работать в едином удобном интерфейсе без необходимости устанавливать дополнительные расширения или запускать определённую операционную систему (разные версии ROS обычно совместимы с разными Ubuntu). Это даёт простор для возможностей: с JupyterLab и jupyter-ros можно даже запустить Docker-контейнер на облачных серверах.
Например, если вам нужно обрабатывать много данных, поступающих с датчиков, или отрисовывать массивные карты — на наших серверах стоят мощные GPU NVIDIA Tesla V100, с которыми эти задачи будут выполняться гораздо быстрее.
Продемонстрируем, как использовать jupyter-ros на сервере.
Для начала нам понадобится настроенная среда ROS. Для удобства будем использовать готовый docker-образ.
1. Загрузим и запустим ROS-образ с поддержкой CUDA — для этого понадобится nvidia-docker. Мы будем использовать последнюю версию ROS.
docker pull ros
nvidia-docker run -p 8888:8888 -it ros
2. Выполним скрипт, который автоматически настроит среду:
./ros_entrypoint.sh
3. Теперь установим pip, Jupyter и необходимые для jupyter-ros пакеты следующими командами:
apt update
apt install python3-pip -y
pip3 install jupyter bqplot pyyaml ipywidgets jupyros rospkg
pip3 install jupyter_contrib_nbextensions && jupyter contrib nbextension install
jupyter nbextension enable --py --sys-prefix widgetsnbextension
jupyter nbextension enable --py --sys-prefix jupyros
6. Запустим Jupyter:
jupyter notebook --allow-root --ip=0.0.0.0 --no-browser --NotebookApp.token=''
1. Для начала клонируем репозиторий jupyter-ros в домашнюю папку.
cd /home
git clone <a href="https://github.com/RoboStack/jupyter-ros.git">https://github.com/RoboStack/jupyter-ros.git</a>
Репозиторий успешно клонирован:
2. Проверим работу jupyter-ros на примере ROS 3D Grid.ipynb. Файл находится в папке jupyter-ros/notebooks.
Необходимо запустить процессы ROS с помощью команды roscore. Вернёмся в терминал Jupyter:
3. Теперь откроем и запустим файл:
Видим, что 3D-сетка успешно отображается.
В конечном счете выбор всегда за вами. Ребрендинг Рег.ру лишь закрепил то, что рынок уже показал: вы можете строить инфраструктуру самостоятельно, а можете сразу получить работающий бизнес-результат через Рег.решения, сосредоточившись на задачах роста. Вместо одного универсального подхода теперь есть два понятных маршрута — и Рег.ру поддерживает каждый из них.
Если раньше робототехника преимущественно развивалась в военной промышленности, то теперь она проникает и в другие отрасли. Машины научились не только удерживать равновесие и танцевать, но и помогать в бытовых делах, доставлять посылки и следить за состоянием здоровья людей. Роботы исследуют местность, где не может находиться человек — взять хотя бы марсоходы или ликвидаторы, разбиравшие радиоактивные завалы в Чернобыле, о которых умолчали в популярном сериале. Облачная робототехника должна стать мощным толчком в развитии технологий, позволяющих внедрять искусственный интеллект в системы управления роботами и существенно ускорять их разработку.
Примеры использования и исходный код jupyter-ros можно найти на GitHub.
С оригинальной статьёй можно ознакомиться в блоге Jupyter.
Что такое корнер в торговле и бизнесе, зачем он нужен бренду, чем отличается от островка…
Что такое НТО, чем нестационарная торговая точка отличается от стационарной, какие требования действуют, где можно…
Разбираем, что такое контракт, чем он отличается от договора, в каких случаях его заключают и…
Рассказываем, что такое рынок простыми словами: разбор определения, видов рынка и принципов его работы. Понятные…
Разбираемся, как рассчитывается индекс RTS, что он показывает и чем отличается от индекса МосБиржи. (далее…)
Разбираем, как рассчитывается стоимость инвестиционного пая, что он означает и как инвестор получает доход. (далее…)