Добрый день, уважаемые читатели Хабра!
Я начинаю цикл статей о практическом использовании ROS на Raspberry Pi для роботехнических проектов в связке с Arduino. Данный цикл имеет следующую структуру:
  1. Установка и настройка рабочего окружения
  2. Компьютерное зрение с RPi Camera Board
  3. Управление роботом с клавиатуры с помощью teleop
  4. Управление роботом с помощью игрового контроллера 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)


  1. ZlodeiBaal
    10.01.2016 19:51
    +2

    Пока ничего не делали?
    ROS всё же тяжёлый фреймворк. Большая часть того что я видел на Ютубе выглядит достаточно уныло.


    1. vovaekb90
      10.01.2016 23:56

      Не совсем понял вопроса.


      1. ZlodeiBaal
        11.01.2016 00:09
        +3

        На RP сделать через ROS хоть что-то сложно из-за того, что алгоритмы не оптимальны. Любые алгоритмы для робототехники или для 3D ориентации жрут очень много проца. А желательно даже видюхи. А на RP производительности почти нет. Все проекты которые я видел на Ютубе с RP+ROS ползают со скоростью улитки.
        Любопытно, как вы планируете преодолевать данные проблемы. Есть ли мысли как заставить ROS работать шустро. Или же вы делаете какой-то проект, не завязанный на производительность?


        1. vovaekb90
          12.01.2016 14:01

          Честно говоря, я не задумывался о производительности. Я изучаю возможности использования ROS на RP и пока ограничился простыми задачами. Думаю, что некоторые задачи вполне осуществимы на RP. Есть еще RP 2 с 1Гб RAM. Хочу также на нем попробовать.
          Я думал о технологиях типа компьютерного зрения с 3D камерами или использование лазера на RP. В интернете писали, что сенсоры типа Kinect совершенно непригодны для RP.


  1. iliasam
    10.01.2016 22:34
    +2

    Между прочим, ROS нормально работает на Orange Pi PC (которая стоит 15$). Удалось даже hector_slam прямо на Orange Pi запустить.
    Сам ROS ставил по методике с сайта.


    1. vovaekb90
      12.01.2016 14:07

      Интересная плата. Вы пробовали на нем 3D зрение или ориентацию робота?


      1. iliasam
        12.01.2016 14:34

        Пока только hector_slam, получающий данные от самодельного сканирующего дальномера. 3D зрение, как мне кажется, является слишком сложной задачей для любых современных ARM процессоров.


  1. Vasyutka
    11.01.2016 01:04
    +2

    Тут в действительности вопросов в том, как CV уталкивать в вычислительные возможности rPi. Это кудаааа серьезнее «Установка и настройка рабочего окружения», «Управление роботом с клавиатуры с помощью teleop», «Управление роботом с помощью игрового контроллера PS3 Dualshock». Возможно, что это профессионально-болезненное :). ZlodeiBaal о том же. ИМХО совсем простые задачи на rPi разрешаются, но SLAM и контроль за положением робота в пространстве — это уже за гранью rPi