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

в 15:14, , рубрики: arduino, Raspberry, Raspberry Pi, robotics, ROS, rosserial, робототехника

Добрый день, уважаемые читатели !
Я начинаю цикл статей о практическом использовании 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 и настройка рабочей среды закончена. Пора приступать к конкретным задачам. Продолжение следует…

Автор: vovaekb90

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js