ОглавлениеСоздание пакета ROSПримечание: Данное руководство написано для сборки пакетов с помощью catkin. Если для сборки вам необходимо использовать roscreate-pkg, то воспользуйтесь этим руководством.1
Примечание: Данное руководство написано для сборки пакетов с помощью catkin. Если для сборки вам необходимо использовать roscreate-pkg, то воспользуйтесь этим руководством.
Для того, чтобы называться пакетом Catkin, пакет должен отвечать ряду требований:
Простейший пакет может выглядеть так:
my_package/CMakeLists.txtpackage.xml
Рекомендуемый метод работы с catkin пакетами, это с использованием рабочего пространства catkin, но вы также можете создавать catkin пакеты отдельно. Обычно, рабочее пространство выглядит следующим образом:
workspace_folder/ -- WORKSPACEsrc/ -- SOURCE SPACECMakeLists.txt -- 'Toplevel' CMake file, provided by catkinpackage_1/CMakeLists.txt -- CMakeLists.txt file for package_1package.xml -- Package manifest for package_1...package_n/CMakeLists.txt -- CMakeLists.txt file for package_npackage.xml -- Package manifest for package_n
Перед тем как продолжить этот урок необходимо создать рабочее пространство catkin следуя инструкции.
Этот урок покажет, как использовать скрипт catkin_create_pkg для создания нового пакета catkin.
Перейдите а рабочее пространство catkin:
# You should have created this in the Creating a Workspace Tutorial$ cd ~/catkin_ws/src
Теперь используйте сценарий catkin_create_pkg для того, чтобы создать новый пакет под названием «beginner_tutorials» который зависит от std_msgs, roscpp и rospy:
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
В результате выполнения команды вы должны увидеть следующее:

Эта команда создаст папку beginner_tutorials которая содержит package.xml и CMakeLists.txt, которые будут частично заполнены информацией которую вы указали в качестве параметров для catkin_create_pkg.
catkin_create_pkg требует, чтобы вы задали package_name и список зависимостей, от которых будет зависеть этот пакет:
# This is an example, do not try to run this# catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
catkin_create_pkg имеет расширенные функциональные возможности, которые описаны в catkin/commands/catkin_create_pkg.
Теперь вы должны собрать пакеты в рабочем пространстве catkin:
$ cd ~/catkin_ws$ catkin_make
Результат должен быть примерно таким:

После того как рабочее пространство будет построено в каталоге будет создана структура аналогичная /opt/ros/$ROSDISTRO_NAME.
Для того, чтобы добавить рабочее пространство в ваше ROS окружение необходимо выполнить команду source:
$ source ~/catkin_ws/devel/setup.bash
При использовании catkin_create_pkg ранее, были указаны некоторые зависимости пакетов. Это и есть зависимости первого порядка.
$ rospack depends1 beginner_tutorials

Как вы можете видеть, команда rospack показала те же зависимости, которые были использованы в качестве аргументов при запуске catkin_create_pkg. Эти зависимости для пакета хранятся в файле package.xml:
$ roscd beginner_tutorials$ cat package.xml

Как видите в файле присутствуют следующие строки:
<package>...<buildtool_depend>catkin</buildtool_depend><build_depend>roscpp</build_depend><build_depend>rospy</build_depend><build_depend>std_msgs</build_depend>...</package>
Во многих случаях зависимости будут также иметь свои собственные зависимости. Например, rospy имеет несколько зависимостей.
$ rospack depends1 rospy

Пакет может иметь несколько косвенных зависимостей. К счастью rospack может рекурсивно определить все вложенные зависимости.
$ rospack depends beginner_tutorials

Эта часть урока будет рассматривать каждый файл, созданный catkin_create_pkg и описывать, каждую строку в этих файлах и, как вы можете настроить их под ваш пакет.
Сгенерированный package.xml должен находиться в вашем новом пакете. Теперь давайте рассмотрим package.xml и подправим некоторые элементы, на которые нужно обратить ваше внимание.
В первую очередь обновите описание:
<description>The beginner_tutorials package</description>
Изменить описание можно на любое, но по традиции предложение должно быть коротким и описывать назначение пакета.
Далее рассмотрим тег описывающий создателя пакета:
<!-- One maintainer tag required, multiple allowed, one person per tag --><!-- Example: --><!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> --><maintainer email="user@todo.todo">user</maintainer>
Это необходимый и важный тег в package.xml, потому что это позволяет другим узнать, к кому обращаться по поводу пакета. По крайней мере, необходимы данные одного человека ведущего разработку данного пакета, но можно добавить и несколько, если хотите. Также обязательно должно быть заполнено поле с email:
<maintainer email="you@yourdomain.tld">Your Name</maintainer>
Далее идет тег с лицензией, который также необходимо заполнить:
<!-- One license tag required, multiple allowed, one license per tag --><!-- Commonly used license strings: --><!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 --><license>TODO</license>
Вы должны выбрать лицензию и заполнить этот тег. Вот список некоторых лицензии используемых с открытым исходным кодом BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, и LGPLv3. Вы можете прочитать о некоторых из них в Open Source Initiative. Для этого урока мы будем использовать лицензию BSD, потому что основные компоненты ROS используют ее:
<license>BSD</license>
Следующий набор тегов это описание зависимостей пакета. Зависимости можно разделить на build_depend, buildtool_depend, run_depend, test_depend. Для получения более подробной информации об этих тегах обратитесь к документации по Catkin Dependencies. И так мы задали std_msgs, roscpp и rospy в качестве аргументов для catkin_create_pkg, поэтому зависимости будут выглядеть следующим образом:
<!-- The *_depend tags are used to specify dependencies --><!-- Dependencies can be catkin packages or system dependencies --><!-- Examples: --><!-- Use build_depend for packages you need at compile time: --><!-- <build_depend>genmsg</build_depend> --><!-- Use buildtool_depend for build tool packages: --><!-- <buildtool_depend>catkin</buildtool_depend> --><!-- Use run_depend for packages you need at runtime: --><!-- <run_depend>python-yaml</run_depend> --><!-- Use test_depend for packages you need only for testing: --><!-- <test_depend>gtest</test_depend> --><buildtool_depend>catkin</buildtool_depend><build_depend>roscpp</build_depend><build_depend>rospy</build_depend><build_depend>std_msgs</build_depend>
Все наши перечисленные зависимости были добавлены в build_depend за нас, в buildtool_depend добавлены зависимости по умолчанию в catkin. Также мы хотим, чтобы все наши зависимости были доступны во время сборки и во время выполнения, поэтому мы добавим тег run_depend для каждой из них:
<buildtool_depend>catkin</buildtool_depend><build_depend>roscpp</build_depend><build_depend>rospy</build_depend><build_depend>std_msgs</build_depend><run_depend>roscpp</run_depend><run_depend>rospy</run_depend><run_depend>std_msgs</run_depend>
Окончательный package.xml, будет выглядеть так:

Подробно настройку CMakeLists.txt можно посмотреть в документации.