Создание пакета для Raspberry PI
Что такое пакет ROS
Одна из базовых сущностей ROS - это пакет. В пакете объединяются все файлы, программы и другие ресурсы, которые необходимы для автономной работы. Единый формат и требования к пакетам, дают всем возможность скачивать и запускать пакеты, созданные другими разработчиками. При создании пакета, нужно указать все необходимые внешние зависимости. Такой подход позволяет автоматически устанавливать все необходимые зависимости при разворачивании пакета.
Зависимости - это программы, библиотеки, конфигурационные файлы и т.д. (часто сторонних разработчиков), которые не поставляются вместе с пакетом, но требуют предварительной установки для корректной работы пакета.
Ранее мы писали скрипты, просто в окружении пользователя. Но если мы хотим распространять и делиться результатом своего труда, нам необходимо "правильно" оформить свой код -- создать собственный пакет.
Создание пакета
На Raspberry нашего робота все пакеты ROS установлены из исходных кодов, и находятся в директории catkin_ws/src. Все наши пакеты, нам необходимо хранить в этой же директории.
Создание готовой файловой структуры пакета, можно выполнить при помощи утилиты catkin_create_pkg. Выполним команду.
cd ~/catkin_ws/src
catkin_create_pkg my_first_package rospy roscpp message_generation message_runtime
Created file my_first_package/CMakeLists.txt
Created file my_first_package/package.xml
Created folder my_first_package/include/my_first_package
Created folder my_first_package/src
Successfully created files in /home/cola/catkin_ws/src/my_first_package. Please adjust the values in package.xml.
В параметрах мы указываем первым полем имя создаваемого пакета, далее идет перечисление пакетов которые необходимы для правильной работы (зависимости). Пакеты rospy и roscpp необходимы нам для компиляции и запуска программ. Пакеты message_generation и message_runtime мы будем использовать в этом уроке далее.
Если мы хотим создать пакет не на роботе, а на компьютере, то нам необходимо учесть ряд отличий.
- Нам необходимо работать в директории
catkin_ws/src. - На компьютере установлен дистрибутив Ubuntu, и ROS из системных пакетов. Поэтому в папке
catkin_ws/srcнаходятся только пользовательские пакеты. В то время как на Raspberry в папкеcatkin_ws/srcнаходятся все установленные в системе пакеты.
Сейчас мы создали пустой пакет. Он состоит из "пустой" структуры директорий и двух файлов с описанием пакета.

В файле package.xml содержится описание пакета и описание зависимостей. Вы можете отредактировать этот файл, и добавить информацию о авторе и описание содержания пакета.
Файл CMakeLists.txt содержащий инструкцию по "сборке" пакета. Например какие файлы необходимо компилировать, какие переписать в системные папки и тому подобные инструкции сборщика. Именно на основе этого файла, происходит установка вашего пакета.
Создание исполняемого файла
Для "наполнения" пакета, давайте перепишем файл base-ros/lesson2/temp_topic_publisher.py из нашего первого задания в директорию src нашего нового пакета.
cp base-ros/lesson2/temp_topic_publisher.py catkin_ws/src/my_first_package/src/temp_topic_publisher.py
Ранее мы запускали наши скрипты как python3 имя файла. Но в рамках пакета, программа должна "запускаться самостоятельно", а не через вызов python.
Мы можем выставить на наши файлы специальные атрибуты, и наши python программы начнут запускаться как и обычные программы Linux.
chmod a+x catkin_ws/src/my_first_package/src/temp_topic_publisher.py
Также необходимо проверить, что мы указали каким интерпретатором "запускать" наш скрипт. Для этого в начала python программы должна быть строчка указывающая путь к python интерпретатору.
#!/usr/bin/env python3
После выполнения этих условий мы можем запускать python скрипт как обычную программу.
cd catkin_ws/src/my_first_package/src/
./temp_topic_publisher.py