
ROS-KUBUNTU-install
.pdfВоробьев В.В., Моисеев А.И.
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 и других:
robolab@robolab-desktop:~$ 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, который расположен в корне рабочего пространства). Параметры пакета изменяются через них.
robolab@robolab-desktop:~/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.
robolab@robolab-desktop:~/my_ros/src$ ls
CMakeLists.txt my_package
robolab@robolab-desktop:~/my_ros/src$ cd my_package robolab@robolab-desktop:~/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
robolab@robolab-desktop:~$ roscore
... logging to /home/robolab/.ros/log/1834a378-6a34-11e3-9166-0013d40547e9/roslaunch-robolab- desktop-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
Выводит на экран список активных процессов-узлов.
robolab@robolab-desktop:~$ rosnode list /my_node
/rosout
rostopic list
Вывод на экран списка всех топиков.
robolab@robolab-desktop:~$ rostopic list /my_topic
/rosout /rosout_agg
rostopic echo <имя топика>
Вывод на экран в реальном времени приходящих в топик сообщений.
rosnode kill <имя узла>
Завершение работы указанного процесса.
robolab@robolab-desktop:~$ 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 |