Установка ROS Hydro

Воробьев В.В., Моисеев А.И.
22.08.2014
Установка ROS
Рабочий отчет RWR-2014-05-02.3
Содержание
Установка ROS Hydro .............................................................................................................. 2
Установка ROS Indigo .............................................................................................................. 4
Создание рабочего окружения ............................................................................................. 4
Написание первой программы под ROS.............................................................................. 5
Примеры взаимодействующих программ............................................................................ 9
Приложение 1. Что такое ROS. Основные понятия .............................................................. 11
Приложение 2. Создание загрузочной флешки USB под Windows...................................... 12
Приложение 3. Установка Kubuntu........................................................................................ 14
Приложение 4. Импорт пакета ROS в среду разработки QtCreator...................................... 16
Источники............................................................................................................................... 18
RWR-2014-05-02.3
1
Установка ROS Hydro
В этом разделе описывается установка ROS Hydro в дистрибутивах, использующих
пакетную базу Ubuntu.
Оригинальный источник: http://wiki.ros.org/hydro/Installation/Ubuntu
Шаг 1. Определите версию пакетной базы, которую использует ваш дистрибутив. ROS
Hydro поддерживает версии Precise (соответствует Ubuntu 12.04, выпуск с длительным
сроком поддержки), Quantal (12.10) и Raring (13.04).
Получить информацию о версии установленной системы можно с помощью
команды:
lsb_release -a
Шаг 2. Добавление репозитория ROS выполняется с помощью одной из ниже
перечисленных команд, после чего потребуется ввод пароля суперпользователя.
Ubuntu 12.04 (Precise):
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu precise
main" > /etc/apt/sources.list.d/ros-latest.list'
Ubuntu 12.10 (Quantal):
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu quantal
main" > /etc/apt/sources.list.d/ros-latest.list'
Ubuntu 13.04 (Raring):
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu raring
main" > /etc/apt/sources.list.d/ros-latest.list'
Шаг 3. Добавьте сертификат для проверки подлинности пакетов в репозитории:
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
Шаг 4. Обновите список доступных для загрузки пакетов:
sudo apt-get update
Шаг 5. Установите необходимые пакеты.
Мета-пакет ros-desktop-full содержит большинство основных библиотек и утилит,
таких как ros-comm, rviz, rqt, библиотеки и узлы для навигации, компьютерного
зрения, симуляции и др. Установка выполняется командой:
sudo apt-get install ros-hydro-desktop-full
Примечание. Эта процедура занимает достаточно много времени. При установке на
все вопросы отвечайте «да» (y).
Опционально. Для установки минимального набора компонентов (только система
сборки, пакетный менеджер, средства коммуникации, без библиотек и GUIутилит):
RWR-2014-05-02.3
2
sudo apt-get install ros-hydro-ros-base
Опционально. Поиск остальных пакетов в репозиториях осуществляется с
помощью утилиты apt-cache:
apt-cache search "часть имени искомого пакета"
Шаг 6. Перед запуском приложений ROS необходимо инициализировать систему
контроля зависимостей rosdep:
sudo rosdep init && rosdep update
Шаг 7. Установленное окружение ROS необходимо зарегистрировать в командной
оболочке:
source /opt/ros/hydro/setup.bash
Выполнение данной команды сохраняет эффект только в рамках активной сессии. Для
того, чтобы она выполнялась при открытии каждой новой сессии, добавьте ее в конец
файла .bashrc (расположен в корне домашней директории) с помощью любого
текстового редактора, либо с помощью команды:
echo "source /opt/ros/hydro/setup.bash" >> ~/.bashrc
Для проверки активности рабочего окружения ROS в текущей сессии, можно
проверить, определены ли переменные среды:
export | grep ROS
На экран должны быть выведены значения переменных ROS_ROOT,
ROS_PACKAGE_PATH и других:
[email protected]:~$ export | grep ROS
declare -x ROSLISP_PACKAGE_DIRECTORIES=""
declare -x ROS_DISTRO="hydro"
declare -x ROS_ETC_DIR="/opt/ros/hydro/etc/ros"
declare -x ROS_MASTER_URI="http://localhost:11311"
declare -x ROS_PACKAGE_PATH="/opt/ros/hydro/share:/opt/ros/hydro/stacks"
declare -x ROS_ROOT="/opt/ros/hydro/share/ros"
Опционально: Для того, чтобы переменные среды ROS существовали в рамках сессии
рабочего окружения KDE, необходимо поместить подобную команду в файл с
расширением .sh и разместить его в ~/.kde/env, только вместо setup.bash необходимо
использовать setup.sh.
Шаг 8. Опционально. Для установки некоторых пакетов может потребоваться
утилита rosinstall. Ее установка выполняется аналогично установке ROS и системных
пакетов.
Например:
sudo apt-get install python-rosinstall
RWR-2014-05-02.3
3
Установка ROS Indigo
Здесь все аналогично.
Оригинальный источник: http://wiki.ros.org/indigo/Installation/Ubuntu
Вкратце, шаги установки выглядят так:
Шаг 1. Определение версии пакетной базы.
lsb_release –a
Шаг 2. Добавление репозитория ROS:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" >
/etc/apt/sources.list.d/ros-latest.list'
Шаг 3. Добавление сертификата:
wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O | sudo apt-key add -
Шаг 4. Обновление списка доступных для загрузки пакетов:
sudo apt-get update
Шаг 5. Установка пакетов (длительная процедура).
sudo apt-get install ros-indigo-desktop-full
Шаг 6. Инициализация системы контроля зависимостей rosdep:
sudo rosdep init
rosdep update
Шаг 7. Установка окружения ROS:
echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc
Шаг 8. Опционально. Установка утилиты rosinstall:
sudo apt-get install python-rosinstall
Создание рабочего окружения
Для размещения собственных проектов рекомендуется создавать отдельное рабочее
пространство. Это позволяет не пересекаться с рабочим пространством, установленным из
бинарных пакетов.
Шаг 1. В командной оболочке перейдите в директорию, в которой хотите разместить свое
RWR-2014-05-02.3
4
рабочее окружение. Убедитесь в том, что у вас достаточно прав для работы с этой
директорией.
Шаг 2. Создайте корневую директорию рабочего окружения (она может иметь любое имя,
в данном случае это my_ros_workspace), а затем внутри нее директорию с названием
src. Это действие можно выполнить одной командой:
mkdir -p my_ros_workspace/src
Шаг 3. Перейдите в свежесозданную директорию и инициализируйте рабочее
пространство:
cd my_ros_workspace/src
catkin_init_workspace
Шаг 4. После этого рабочее окружение можно собрать, вернувшись в его корень (в
данном случае – в директорию my_ros_workspace):
cd ..
catkin_make
Шаг 5. После сборки в директории появятся каталоги build и devel. Директория devel
содержит файл setup.bash, назначение и принцип использования которого
аналогичны файлу, описанному в п. 7 «Установка ROS» (см. выше):
source devel/setup.bash
Как и в прошлом случае, для автоматической регистрации окружения в командной
оболочке, необходимо добавить обработку этого файла в конец .bashrc. Путь до
setup.bash должен быть абсолютным (в последнем примере он является
относительным к рабочем каталогу my_ros_workspace):
echo "source <путь до рабочего
окружения>/my_ros_workspace/devel/setup.bash" >> ~/.bashrc
Например:
echo "source ~/my_ros_workspace/devel/setup.bash" >> ~/.bashrc
Написание первой программы под ROS
Шаг 1. Перейдите в созданную на прошлом этапе директорию рабочего окружения:
cd my_ros_workspace/src
Шаг 2. Запустите утилиту создания проекта с указанием названия пакета и списком
зависимостей. Для проекта на языке C++ стоит указать в зависимостях библиотеку roscpp,
реализующую взаимодействие с другими процессами по протоколам ROS, а также
std_msgs для передачи базовых типов данных:
RWR-2014-05-02.3
5
catkin_create_pkg my_package roscpp std_msgs
В созданной директории (зайти в my_package: cd my_package) будут находиться
файлы package.xml и CMakeLists.txt. (не путать с CMakeLists.txt, который
расположен в корне рабочего пространства). Параметры пакета изменяются через
них.
[email protected]:~/my_ros/src$ catkin_create_pkg my_package roscpp std_msgs
Created file my_package/package.xml
Created file my_package/CMakeLists.txt
Created folder my_package/include/my_package
Created folder my_package/src
Successfully created files in /home/robolab/my_ros/src/my_package. Please adjust the values in
package.xml.
[email protected]:~/my_ros/src$ ls
CMakeLists.txt my_package
[email protected]:~/my_ros/src$ cd my_package
[email protected]:~/my_ros/src/my_package$ ls
CMakeLists.txt include package.xml src
Шаг 3. В файле package.xml напишите небольшое описание того, что пакет должен
делать. Описание располагается внутри тега <description>.
Редактируем файл package.xml с помощью текстового редактора, например, с
помощью vim:
vim package.xml
В файле CMakeLists.txt, который находится в src/my_package, задекларируйте
исполняемый файл с указанием единиц трансляции, из которых он будет
линковаться. В качестве заготовок в нем уже содержаться закомментированные
строки. Найдите закомментированный вызов процедуры add_executable и
расскомментируйте его:
## Declare a cpp executable
add_executable(my_package_node src/my_package_node.cpp)
Эта функция собирает исполняемый файл my_package_node из файла
my_package_node.cpp, расположенного в src.
Также раскомментируйте строку с подключением каталогов с заголовочными
файлами:
## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(include)
Для связывания библиотек раскомментируйте данную заготовку:
## Specify libraries to link a library or executable target against
target_link_libraries(my_package_node ${catkin_LIBRARIES} boost_math
RWR-2014-05-02.3
6
opencv_core)
Шаг 4. Создайте указанные в параметрах add_executable() файлы с вашей программой –
для примеров выше это будет файл my_package_node.cpp в директории src. Ниже
приведен пример программы, отправляющей в топик сообщения с типом
std_msgs::String и текстами «hello world 1», «hello world 2» и далее с частотой 10
герц:
#include <ros/ros.h>
#include <std_msgs/String.h>
#include <sstream>
int main(int argc, char **argv)
{
/* Инициализация узла с именем по-умолчанию my_node */
ros::init(argc, argv, "my_node");
ros::NodeHandle n;
/* Создание топика с названием my_topic, второй параметр * объем кэша отправки (кол-ве элементов) */
ros::Publisher chatter_pub =
n.advertise<std_msgs::String>("my_topic", 256);
/* "Умный" delay */
ros::Rate loop_rate(10);
int count = 0;
while (ros::ok())
{
std_msgs::String msg;
std::stringstream ss;
ss << "hello world " << count;
msg.data = ss.str();
/* Макрос для вывода информации в отладочную консоль */
ROS_INFO("%s", msg.data.c_str());
/* Отправка сообщения в топик */
chatter_pub.publish(msg);
/* Проведение одной итерации цикла обработки событий
* (таких, как входящие сообщения, запросы и т.д.) */
ros::spinOnce();
/* "Умный" delay */
loop_rate.sleep();
++count;
}
return 0;
}
Шаг 5. Скомпилируйте созданную программу. Для этого необходимо вернуться в корень
рабочего пространства (в примере: директория my_ros_workspace) и запустить
оттуда систему сборки catkin:
RWR-2014-05-02.3
7
catkin_make
Примечание. При этом собираются все пакеты в рабочем пространстве с проверкой
зависимостей.
Если компиляция прошла успешно, программу можно запускать с помощью
утилиты rosrun. Только для начала необходимо запустить мастер-сервер ROS
(желательно в отдельной терминальной сессии – например, в новом окне консоли):
roscore
[email protected]:~$ roscore
... logging to /home/robolab/.ros/log/1834a378-6a34-11e3-9166-0013d40547e9/roslaunch-robolabdesktop-7393.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://robolab-desktop:52570/
ros_comm version 1.9.50
SUMMARY
========
PARAMETERS
* /rosdistro
* /rosversion
NODES
auto-starting new master
process[master]: started with pid [7407]
ROS_MASTER_URI=http://robolab-desktop:11311/
setting /run_id to 1834a378-6a34-11e3-9166-0013d40547e9
process[rosout-1]: started with pid [7420]
started core service [/rosout]
RWR-2014-05-02.3
8
После этого запускаем нашу программу в том самом рабочем терминале, где мы
были сначала. Первым параметром rosrun выступает название пакета,
содержащего программу, вторым – имя исполняемого файла:
rosrun my_package my_package_node
Примечание. Возможно, придётся перезапускать консоль.
Шаг 6. Контролировать работу процессов можно с помощью различных команд (в новой
консоли):

rosnode list
Выводит на экран список активных процессов-узлов.
[email protected]:~$ rosnode list
/my_node
/rosout

rostopic list
Вывод на экран списка всех топиков.
[email protected]:~$ rostopic list
/my_topic
/rosout
/rosout_agg

rostopic echo <имя топика>
Вывод на экран в реальном времени приходящих в топик сообщений.

rosnode kill <имя узла>
Завершение работы указанного процесса.
[email protected]:~$ rosnode kill my_node
killing /my_node
killed
Примеры взаимодействующих программ
/* Пример программы, посылающей сообщения в топик*/
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>
int main(int argc, char **argv)
{
ros::init(argc, argv, "talker");
ros::NodeHandle n;
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter",1000);
ros::Rate loop_rate(10);
int count = 0;
while(ros::ok())
{
std_msgs::String msg;
std::stringstream ss;
ss << "hello world "<< count;
msg.data = ss.str();
ROS_INFO("%s", msg.data.c_str());
chatter_pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
++count;
}
return 0;
RWR-2014-05-02.3
9
}
/* Пример программы, читающей сообщения из топика*/
#include "ros/ros.h"
#include "std_msgs/String.h"
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
ROS_INFO("I heard: [%s]", msg->data.c_str());
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "listener");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
ros::spin();
return 0;
}
Примечание
Большое число часто используемых библиотек устанавливается системным
пакетным менеджером в качестве зависимостей во время установки ROS (Boost, Assimp,
PCL и др.). Часть библиотек (например, OpenCV), нужно устанавливать отдельно (ROS
локально устанавливает OpenCV определенной версии для своих нужд). Например,
установка OpenCV из репозитория осуществляется командой:
$ sudo apt-get install libopencv-dev
Или можно воспользоваться утилитой muon.
Не поленитесь сделать это, несмотря на то, что ROS Hydro, вроде бы, имеет в
своем составе кучу библиотек, тот же OpenCV. Однако эти библиотеки используются для
“внутренних нужд” ROS, поэтому рассчитывать на них не стоит.
RWR-2014-05-02.3
10
Приложение 1. Что такое ROS. Основные понятия
ROS (Robot Operating System) представляет собой надстройку над ОС, которая
позволяет эффективно разрабатывать системы управления роботами. По сути, ROS — это
набор из различных сервисов и библиотек, таких как:
 OpenCV — библиотека, содержащая алгоритмы компьютерного зрения и
обработки изображений;
 PCL — библиотека для работы с облаками 3D-точек;
 Ogre — объектно-ориентированный графический движок с открытым исходным
кодом;
 Orocos — библиотека для управления роботами.
и т.д.
Также в ROS входят драйверы для различных манипуляторов и сенсоров (включая
Microsoft Kinect). Основополагающим преимуществом, отличающим ROS от других
наборов библиотек, является клиент-серверная архитектура ROS — разработчики
реализовали механизм пересылки сообщений между различными объектами, возможность
построения распределенных систем и предоставление «brige'ей» к языкам С++ и Python.
Основные понятия
Пакет (package). Наименьшая единица файловой системы (ФС). Представляет
собой директорию, содержащую в себе какие-либо данные, библиотеки, исполняемые и
конфигурационные файлы и т.д. и т.п., логически объединенные в какой-то полезный
модуль. Цель такого структурирования — повышение удобства и возможности
повторного использования.
В свою очередь, пакеты объединяются в стеки.
Узел — это запущенный процесс, который умеет общаться с другими процессами.
Шина — именованный канал, соединяющая различные узлы.
Узлы и шины формируют асинхронный механизм обмена данными.
RWR-2014-05-02.3
11
Приложение 2. Создание загрузочной флешки USB под
Windows
Для запуска Ubuntu (KUbuntu) с USB следует использовать накопитель объемом
минимум 2GB. Далее следует скачать и установить USB-установщик. Например, с сайта
pendrivelinux.com (http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/).
Скачать программу вроде Universal-USB-Installer-1.9.5.1.exe, следовать простейшим
инструкциям:
1. Выбрать подходящий вариант (KUbuntu, Ubuntu Desktop Edition и проч.) из списка.
2. Нажать 'Browse' и открыть загружаемый ISO-файл.
RWR-2014-05-02.3
12
3. Выбрать USB-устройство и нажать 'Create'.
Примечание. Иногда созданию загрузочного устройства могут мешать антивирусы (тот
же AVAST может реагировать на этот процесс неадекватно). Тогда рекомендуется
антивирус временно отключить.
Источники:
http://www.ubuntu.com/download/desktop/create-a-usb-stick-on-windows
http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/
RWR-2014-05-02.3
13
Приложение 3. Установка Kubuntu
Шаг 1. Скачиваем Kubuntu с официального сайта http://www.kubuntu.org/news/12.04release и жмем “Download an image” (Рис.1).
Рис. 1.
Шаг 2. Жмем “DownLoad Kubuntu” (Рис. 2)
Рис. 2.
Шаг 3. Жмем “Begin 32-bit (recommended) download” (Рис. 3).
Рис. 3.
Шаг 4. Записываем скачанный образ Kubuntu на флешку.
RWR-2014-05-02.3
14
Шаг 5. Не вынимая флешки (!!!), перезагружаем компьютер и заходим в BIOS; для этого
нажимаем кнопку del несколько раз во время загрузки компьютера. (До появления
загрузочного экрана Windows или любой другой установленной операционной
системы)
Шаг 5. В BIOS'е выбираем вверху вкладку Boot. Если флешка не была вынута, то будет
видна вкладка Hard Disk Drives. (Если ее нет, вставьте флешку, перезагрузите
компьютер и снова войдите в BIOS). Выбираем ее и во вкладке 1-st Drive меняем
устройство, которое было указано в нем (Жесткий диск) на флешку (Выбираем имя
флешки).
Шаг 6. Во вкладке Boot выбираем Boot Device Priority и в 1-st Boot Device также
указываем флешку.
Шаг 7. Нажимаем F10 и Ok. (Выходим и сохраняем изменения).
Шаг 8. После перезагрузки компьютера вы увидите установочный экран Kubuntu.
Нажимаем F2 и выбираем русский язык (на самом деле, лучше - английский).
Жмем 'Запустить Kubuntu'.
Шаг 9. После загрузки выбираем 'Установить Kubuntu', затем 'Продолжить'. Ставим
галочку в меню 'Вручную' и выбираем 'Продолжить'.
Шаг 10. Выбираем свободную область и создаем 3 раздела с помощью кнопки 'Add':

Раздел под систему: Размер около 15 Гб, Use as: ext4, Mount point: /
Жмем 'Ок'.

Раздел под Swap: Размер около 2Гб, Use as: раздел подкачки
Жмем 'Ок'.

Раздел /home: Размер около 20 Гб, Use as: ext4, Mount point: /home
Жмем 'Ок'.
Шаг 11. Выбираем 'Установить сейчас', затем 'Продолжить' и 'Продолжить'.
Шаг 12. Вести имя учетной записи и пароль и выбрать 'Продолжить'.
Шаг 13. Ждем, пока программа установит Kubuntu.
RWR-2014-05-02.3
15
Приложение 4. Импорт пакета ROS в среду разработки
QtCreator
Интегрированная среда разработки QtCreator обладает всем необходимым
функционалом для ведения разработки интегрированных в ROS приложений. Среда
полностью поддерживает системы сборки cmake и catkin.
QtCreator должен запускаться из среды, в которой объявлены переменные среды
ROS. Для этого необходимо либо настроить окружение рабочего стола на обработку
файлов setup.*sh, либо настроить ярлык приложения, либо запускать QtCreator из bash (в
этом случае будут использованы переменные, ранее добавленные в .bashrc).
Пример порядка импорта проекта
Шаг 1. Запустить QtCreator из bash: в терминале выполнить команду qtcreator.
Примечание: Если при установке ROS был выполнен опциональный пункт в шаге 7,
то переменные среды будут доступны в рабочем окружении, что позволяет запускать
QtCreator его средствами.
Шаг 2. Файл > Открыть файл или проект... (File > Open file or project) или Ctrl + O.
Шаг 3. Выберите файл CMakeLists.txt из папки пакета (важно не перепутать с
CMakeLists.txt в корне рабочего окружения).
Шаг 4. В диалоге выбора (рис. а) директории для сборки выбрать директорию
build/<имя пакета> из корневой директории рабочего окружения. Далее/Next.
а)
б)
Шаг 5. В следующем диалоге (рис. б) предпочтительно указать в качестве аргумента
CMake определение
-DCATKIN_DEVEL_PREFIX=<путь до директории devel рабочего окружения>.
RWR-2014-05-02.3
16
После этого выполняйте Run CMake. Если при оформлении пакета не было допущено
ошибок, CMake должен выполниться успешно, после чего станет доступна кнопка
Finish.
RWR-2014-05-02.3
17
Источники
Официальный сайт ROS http://www.ros.org/wiki/
Документация http://wiki.ros.org/
Русскоязычная документация по ROS http://robocraft.ru/page/robotics/#ROS
Документация по топикам http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics
Официальный сайт Kubuntu http://www.kubuntu.org/
Официальный сайт Lubuntu http://lubuntu.net/
Шпаргалка по ROS Hydro http://clearpath.wpengine.netdna-cdn.com/wpcontent/uploads/2014/01/ROS-Cheat-Sheet-Landscape-v2.pdf
Воробьев В.В., Моисеев А.И. Установка ROS // Рабочий отчет RWR-2014-05-02.3, -М.:
Robofob Lab, 2014
RWR-2014-05-02.3
18