Пакеты в ROS. Установка и сборка. Утилита Catkin.

Пакет (Package)

Пакет является одной из основных единицей ROS. Любое приложение в ROS оформляется в пакет, в котором определяются: конфигурация, необходимые программы, зависимости от других пакетов ROS, системные зависимости.

Работа с пакетами ROS очень похожа на работу с пакетами linux. Пакет ROS можно поставить готовым из репозитория пакетов, так и скачать и скомпилировать из исходных кодов.

В данный момент написано и доступно для использования более 6000 пакетов. Около 3000 пакетов доступны для установки через пакетный менеджер apt

Поиск пакетов ROS лучше начинать на сайте http://wiki.ros.org/

Структура пакета

Пакет ROS содержат множество различных файлов. Для того, чтобы было проще ориентироваться с файлами любого пакета, сообщество разработчиков рекомендует использовать единообразную файловую структуру пакета:

  • bin/ Директория, в которой хранятся скомпилированные программы
  • include/ Директория содержит файлы с заголовками (headers) библиотек
  • launch/ Директория для хранения файлов конфигурации запуска .launch
  • msg/ Директория для сообщений (для топиков)
  • src/ Директория для хранения исходников программ (в том числе и скриптов)
  • srv/ Директория для хранения сообщений для использования Сервисами (Services)
  • CMakeLists.txt: Файл форматы Cmake с инструкциями для установки пакета
  • package.xml Файл "манифест" для описания пакета

С точки зрения "системы пакетов" самый важный файл в структуре -- это файл package.xml. Именно в нем описано описание пакета, что делает "обычную" директорию с файлами, именно пакетом.

Также в этом файле описаны все необходимые "внешние" зависимости, необходимые для работы. Если пакет установлен "верно", это гарантирует, что нам не нужно самим разбираться с дополнительными "установками".

Минимально в файле должно находиться описание следующих полей:

<name> - Название пакета
<version> - Версия пакета
<description> - Описание пакета
<maintainer> - Авторы пакета
<license> - Описание лицензии

Самый простой файл package.xml может выглядеть так

<package format="2">
  <name>foo_core</name>
  <version>1.2.4</version>
  <description>
  This package provides foo capability.
  </description>
  <maintainer email="ivana@osrf.org">Ivana Bildbotz</maintainer>
  <license>BSD</license>
</package>

Для описания зависимостей в файл могут быть добавлены параметры (xml теги)

buildtool_depend - Зависимости от системы "сборки"
depend - Зависимости  необходимые для всех случаев использования (сборка, запуск, тестирование и тд)
build_depend - Зависимости необходимые при "сборке" пакета
exec_depend - Зависимости необходимые при запуске пакета 
test_depend - Зависимости необходимые при запуске тестов

Не слишком сложный файл package.xml

<package format="2">
  <name>foo_core</name>
  <version>1.2.4</version>
  <description>
    This package provides foo capability.
  </description>
  <maintainer email="ivana@willowgarage.com">Ivana Bildbotz</maintainer>
  <license>BSD</license>
  <url>http://ros.org/wiki/foo_core</url>
  <author>Ivana Bildbotz</author>
  <buildtool_depend>catkin</buildtool_depend>
  <depend>roscpp</depend>
  <depend>std_msgs</depend>
  <build_depend>message_generation</build_depend>
  <exec_depend>message_runtime</exec_depend>
  <exec_depend>rospy</exec_depend>
  <test_depend>python-mock</test_depend>
  <doc_depend>doxygen</doc_depend>
</package>

Более подробно можно посмотреть на странице Manifest

Установка пакета ROS из репозитория

Если мы используем дистрибутив линукс семейства Ubuntu, то сообщество разработчиков ROS уже подготовило за нас основные пакеты, и мы можем просто установить их утилитой apt. Именно таким способом мы и устанавливали "весь" ROS ранее.

Посмотреть уже установленные пакеты ROS можно командой

apt list --installed | grep ros-noetic

Поиск пакета ROS

apt seach ros-noetic-Имя

Если вы нашли пакет pkg_name на wiki, то скорее всего в системе apt будет назваться ros-noetic-pkg_name

Установка нового пакета происходит стандартным способом

sudo apt install ros-noetic-pkg_name

Установка пакетов и исходного кода

Если пакет ROS доступен только в виде исходного кода, то мы тоже можем его установить (для этого чаще используют формулировку "собрать") на свой компьютер и начать его использовать.

Такая операция сложнее, чем использование установка через apt, но позволяет устанавливать любые пакеты, а не только те, которые уже были "собраны" заранее.

Убедитесь, что вы "правильно" установили ROS Установка и запуск ROS, выполнили часть "Настройка рабочего окружения" http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment

Если все выполнено правильно, то у вас в домашней директории пользователя должна быть директория catkin_ws

Зайдем в директорию, где должны находиться исходные коды пакетов

cd ~/catkin_ws/src

Для демонстрации мы будем устанавливать наш тестовый пакет https://github.com/voltbro/ros_book_samples

Получим исходный код пакета

git clone https://github.com/voltbro/ros_book_samples

У нас должны получиться директория ros_book_samples с исходниками пакета.

Мы может "собрать" конкретно наш пакет командой

catkin_make --pkg=ros_book_samples

После этого мы увидим процесс сборки и установки пакета в систему. При сборке демонстрационного пакета будут добавлены новые типы сообщений, которые добавились с пакетом.

[  0%] Built target std_msgs_generate_messages_cpp
[  0%] Built target _ros_book_samples_generate_messages_check_deps_Barometer
[  0%] Built target _ros_book_samples_generate_messages_check_deps_DoDishesResult
[  0%] Built target actionlib_msgs_generate_messages_cpp
[  0%] Built target _ros_book_samples_generate_messages_check_deps_DoDishesActionFeedback
[  0%] Built target _ros_book_samples_generate_messages_check_deps_DoDishesFeedback
[  0%] Built target _ros_book_samples_generate_messages_check_deps_AddTwoInts
[  0%] Built target _ros_book_samples_generate_messages_check_deps_DoDishesActionGoal
[  0%] Built target _ros_book_samples_generate_messages_check_deps_DoDishesActionResult
[  0%] Built target _ros_book_samples_generate_messages_check_deps_DoDishesAction
[  0%] Built target _ros_book_samples_generate_messages_check_deps_DoDishesGoal
[  0%] Built target std_msgs_generate_messages_nodejs
[  0%] Built target actionlib_msgs_generate_messages_nodejs
[  0%] Built target std_msgs_generate_messages_lisp
[  0%] Built target actionlib_msgs_generate_messages_lisp
[  0%] Built target std_msgs_generate_messages_eus
[  0%] Built target actionlib_msgs_generate_messages_eus
[  0%] Built target std_msgs_generate_messages_py
[ 20%] Built target ros_book_samples_generate_messages_cpp
[ 20%] Built target actionlib_msgs_generate_messages_py
[ 37%] Built target ros_book_samples_generate_messages_nodejs
[ 57%] Built target ros_book_samples_generate_messages_eus
[ 77%] Built target ros_book_samples_generate_messages_lisp
[100%] Built target ros_book_samples_generate_messages_py
[100%] Built target ros_book_samples_generate_messages

Также мы можем пересобрать сразу все пакеты нашей рабочей директории командой

catkin_make

После сборки пакета проверим правильность его установки, например, командой

roscd ros_book_samples

Команда должны выполнится без ошибок, а мы должны перейти в директорию ~/catkin_ws/src/ros_book_samples

Установка пакета ROS из исходников завершена. Обычно для установки более сложный примеров разработчики формируют полные инструкции о том, как установить их пакет.

Утилита catkin

catkin это модуль, который служит для "сборки" пакетов. "Сборкой" называют ряд определенный действий по установке пакета в систему. Это могут быть операции копирования файлов, компиляция программ (например для языка С), генерации сообщений и т.д.

Для описания необходимый операция по установке, используется стандарт CMake (Cross Platform Make), а сама последовательность операций описана в файле CMakeLists.txt.

Стандарт CMake был изменен в ROS для создания системы сборки, более специфичной для нужд ROS, так появился catkin, который стал стандартом для ROS, начиная с версии Groovy

Навигация по файлам пакетов ROS

В ROS есть несколько консольных утилит, которые могу упростить навигацию по файлам разных пакетов.

Наиболее часто используемые утилиты rospack,rospcd, rosls

Например если мы хотим найти директорию с установленным пакетом turtlesim

rospack find turtlesim

То мы получим директорию установки пакета /opt/ros/noetic/share/turtlesim

Получить список файлов пакета rosls turtlesim

rosls turtlesim
===
cmake  images  msg  package.xml  srv

Перейти в директорию пакета

roscd turtlesim
pwd

Мы увидим, что находимся в директории пакета /opt/ros/noetic/share/turtlesim

results matching ""

    No results matching ""