Практическое использование ROS на Raspberry Pi — часть 1

    Добрый день, уважаемые читатели Хабра!
    Я начинаю цикл статей о практическом использовании 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 и настройка рабочей среды закончена. Пора приступать к конкретным задачам. Продолжение следует…
    Метки:
    • +10
    • 14,5k
    • 8
    Поделиться публикацией
    Похожие публикации
    Комментарии 8
    • +2
      Пока ничего не делали?
      ROS всё же тяжёлый фреймворк. Большая часть того что я видел на Ютубе выглядит достаточно уныло.
      • 0
        Не совсем понял вопроса.
        • +3
          На RP сделать через ROS хоть что-то сложно из-за того, что алгоритмы не оптимальны. Любые алгоритмы для робототехники или для 3D ориентации жрут очень много проца. А желательно даже видюхи. А на RP производительности почти нет. Все проекты которые я видел на Ютубе с RP+ROS ползают со скоростью улитки.
          Любопытно, как вы планируете преодолевать данные проблемы. Есть ли мысли как заставить ROS работать шустро. Или же вы делаете какой-то проект, не завязанный на производительность?
          • 0
            Честно говоря, я не задумывался о производительности. Я изучаю возможности использования ROS на RP и пока ограничился простыми задачами. Думаю, что некоторые задачи вполне осуществимы на RP. Есть еще RP 2 с 1Гб RAM. Хочу также на нем попробовать.
            Я думал о технологиях типа компьютерного зрения с 3D камерами или использование лазера на RP. В интернете писали, что сенсоры типа Kinect совершенно непригодны для RP.
    • +2
      Между прочим, ROS нормально работает на Orange Pi PC (которая стоит 15$). Удалось даже hector_slam прямо на Orange Pi запустить.
      Сам ROS ставил по методике с сайта.
      • 0
        Интересная плата. Вы пробовали на нем 3D зрение или ориентацию робота?
        • 0
          Пока только hector_slam, получающий данные от самодельного сканирующего дальномера. 3D зрение, как мне кажется, является слишком сложной задачей для любых современных ARM процессоров.
    • +2
      Тут в действительности вопросов в том, как CV уталкивать в вычислительные возможности rPi. Это кудаааа серьезнее «Установка и настройка рабочего окружения», «Управление роботом с клавиатуры с помощью teleop», «Управление роботом с помощью игрового контроллера PS3 Dualshock». Возможно, что это профессионально-болезненное :). ZlodeiBaal о том же. ИМХО совсем простые задачи на rPi разрешаются, но SLAM и контроль за положением робота в пространстве — это уже за гранью rPi

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.