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.
Для бизнеса маркетплейс ― это неисчерпаемый источник клиентов, рекламная витрина и партнер, который может забрать…
Валидация играет ключевую роль в обеспечении качества и надежности продуктов. Она помогает компаниям не только…
К 2024 году интернет-магазины набрали большую популярность: большинство людей совершали онлайн-покупки хотя бы один раз…
Мир вокруг нас меняется быстрее, чем когда-либо. Алгоритмы, которые еще вчера были научной фантастикой, сегодня…
Коммерческое предложение — это ключевой инструмент, который позволяет компаниям представлять свои товары и услуги потенциальным…
В кейсе рассказываем, как маркетинговое агентство DIY Service автоматизировало подбор и передачу кандидатов на вакансии…