Я начинаю цикл статей о практическом использовании ROS на Raspberry Pi для роботехнических проектов в связке с Arduino. Данный цикл имеет следующую структуру:
- Установка и настройка рабочего окружения
- Компьютерное зрение с RPi Camera Board
- Управление роботом с клавиатуры с помощью teleop
- Управление роботом с помощью игрового контроллера PS3 Dualshock
Кому интересно, прошу под кат.
В первой статье цикла я расскажу об установке необходимых модулей ROS и настройке рабочего окружения на Raspberry Pi для выполнения конкретных задач с использованием ROS. Поскольку в предыдущей статье я подробно описал процедуру установки ROS и настройки окружения для Raspberry Pi с установленной системой Raspbian версии Wheezy в данной статье я расскажу о подводных камнях при установке и настройке ROS на Raspbian версии Jessie. Также отмечу, что в предыдущей статье для тестирования я использовал Raspberry Pi модели B, тогда как во время написания данной статьи я выполнял эксперименты на Raspberry Pi версии B+. Основное отличие версии B+ от B заключается в количестве имеющихся USB портов на плате (в модели B их два, в модели B+ их четыре) и поддержке карт microSD (в модели B+ слот для SD карт заменен на слот для microSD карт). Я рекомендую использовать модель B+ поскольку вам потребуются порты USB для подключения источника питания, платы Arduino и, возможно, также для подключения клавиатуры и мыши (если вы будете работать на Raspberry Pi локально, не через SSH по сети).
Установка ROS Indigo
Небольшой совет: для более комфортной работы с ROS на Raspberry Pi лучше ипользовать microSD карту 16 Гб или больше. При использовании карты с 8 Гб у меня после установки ROS Comm, всех необходимых библиотек для компьютерного зрения и различных драйверов для внешних устройств на карте осталось меньше 1 Гб свободного места. На карте 16 Гб после установки аналогичных пакетов я имел 7 Гб свободного места. Рекомендую устанавливать версию ROS Comm, а потом при необходимости установить нужные пакеты для ROS (я покажу как это делается далее в статье).
Инструкции по установке ROS Indigo на Raspberry Pi доступны на сайте. Обратите внимание, что нужно выполнять команды, предначенные для вашей версии Rasbian (Jessie в моем случае).
При выполнении финальной компиляции ./src/catkin/bin/catkin_make_isolated может появится ошибка при компиляции компонента roscpp с подобным выводом:
CMakeFiles/Makefile2:308: recipe for target 'CMakeFiles/roscpp.dir/all' failed
make[1]: *** [CMakeFiles/roscpp.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
Проблема заключается в нехватке swap раздела на SD карте. Необходим swap раздел размером 1 Гб. Установить нужный swap можно следующим образом. Сначала выделим место под swap:
dd if=/dev/zero of=/swap bs=1M count=1024
Сформатируем новый раздел для swap:
mkswap /swap
Сообщим системе, что она может использовать новый раздел под swap:
swapon /swap
Для автоматического включения swap на нашем разделе после ребута пропишем правило в /etc/fstab:
/swap none swap sw 0 0
После этого просто заново запустите процедуру установки.
Установка дополнительных пакетов ROS
Установим все необходимые пакеты ROS, которые нам потребуются в дальнейшем для различных задач. Пакеты можно установить с помощью скрипта rosinstall. Установка займет несколько часов.
Нам будут нужны следующие пакеты:
- cv_bridge используется для преобразования изображений OpenCV в формат ROS Image и наоборот
- image_transport предназначен для подписки и публикации изображений в ROS, скрыто реализует сжатие изображений для их более быстрой транспортировки
- joystick_drivers предоставляет аппаратную поддержку игровых контроллеров типа PS3 Dualshock
- rqt_image_view — это графическая программа для визуализации RGB изображений, публикуемых в топик
- rqt_graph используется для визуализации схемы вычислительного графа ROS (показывает все активные узлы и топики и связи между ними)
- rqt_plot — это графическая утилита для визуализации значений, публикуемых в топик в виде графика
- teleop_twist_keyboard предоставляет пользовательский интерфейс для управления роботом с помощью нажатия клавиш на клавиатуре
Выполните следующие команды для установки всех пакетов:
$ rosinstall_generator ros_comm cv_bridge image_transport joystick_drivers rqt_image_view rqt_graph rqt_plot teleop_twist_keyboard --rosdistro indigo --deps --wet-only --exclude roslisp --tar > indigo-custom_ros.rosinstall
$ wstool merge -t src indigo-custom_ros.rosinstall
$ wstool update -t src
$ rosdep install --from-paths src --ignore-src --rosdistro indigo -y -r --os=debian:jessie
$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/indigo
Настройка рабочего окружения для работы с Arduino
Разблокировка последовательных портов в Raspbian версии Jessie несколько отличается от описанной в предыдущей статье.
Дело в том, что файл /etc/inittab отсутствует в Raspbian Jessie. inittab был частью sysvinit, которая в версии Jessie была заменена на systemd. serial getty сейчас является обычным сервисом. Поэтому нам нужно будет отключить сервис serial getty:
$ sudo systemctl stop serial-getty@ttyAMA0.service
Процедура отключения отладочного логирования на последовательный порт остается без изменений как в Raspbian версии Wheezy — редактируется файл /boot/cmdline.txt как это описано в предыдущей статье.
Установка rosserial_arduino выполняется по схеме из предыдущей статьи.
На этом установка основных модулей платформы ROS и настройка рабочей среды закончена. Пора приступать к конкретным задачам. Продолжение следует…
Комментарии (8)
iliasam
10.01.2016 22:34+2Между прочим, ROS нормально работает на Orange Pi PC (которая стоит 15$). Удалось даже hector_slam прямо на Orange Pi запустить.
Сам ROS ставил по методике с сайта.vovaekb90
12.01.2016 14:07Интересная плата. Вы пробовали на нем 3D зрение или ориентацию робота?
iliasam
12.01.2016 14:34Пока только hector_slam, получающий данные от самодельного сканирующего дальномера. 3D зрение, как мне кажется, является слишком сложной задачей для любых современных ARM процессоров.
Vasyutka
11.01.2016 01:04+2Тут в действительности вопросов в том, как CV уталкивать в вычислительные возможности rPi. Это кудаааа серьезнее «Установка и настройка рабочего окружения», «Управление роботом с клавиатуры с помощью teleop», «Управление роботом с помощью игрового контроллера PS3 Dualshock». Возможно, что это профессионально-болезненное :). ZlodeiBaal о том же. ИМХО совсем простые задачи на rPi разрешаются, но SLAM и контроль за положением робота в пространстве — это уже за гранью rPi
ZlodeiBaal
Пока ничего не делали?
ROS всё же тяжёлый фреймворк. Большая часть того что я видел на Ютубе выглядит достаточно уныло.
vovaekb90
Не совсем понял вопроса.
ZlodeiBaal
На RP сделать через ROS хоть что-то сложно из-за того, что алгоритмы не оптимальны. Любые алгоритмы для робототехники или для 3D ориентации жрут очень много проца. А желательно даже видюхи. А на RP производительности почти нет. Все проекты которые я видел на Ютубе с RP+ROS ползают со скоростью улитки.
Любопытно, как вы планируете преодолевать данные проблемы. Есть ли мысли как заставить ROS работать шустро. Или же вы делаете какой-то проект, не завязанный на производительность?
vovaekb90
Честно говоря, я не задумывался о производительности. Я изучаю возможности использования ROS на RP и пока ограничился простыми задачами. Думаю, что некоторые задачи вполне осуществимы на RP. Есть еще RP 2 с 1Гб RAM. Хочу также на нем попробовать.
Я думал о технологиях типа компьютерного зрения с 3D камерами или использование лазера на RP. В интернете писали, что сенсоры типа Kinect совершенно непригодны для RP.