Создание пакета для 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 мы будем использовать в этом уроке далее.

Если мы хотим создать пакет не на роботе, а на компьютере, то нам необходимо учесть ряд отличий.

  1. Нам необходимо работать в директории catkin_ws/src.
  2. На компьютере установлен дистрибутив 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

results matching ""

    No results matching ""