Часть 2.1.3 Создание пакета ROS — TechCave

ОглавлениеСоздание пакета ROSПримечание: Данное руководство написано для сборки пакетов с помощью catkin. Если для сборки вам необходимо использовать roscreate-pkg, то воспользуйтесь этим руководством.1

Часть 2.1.3 Создание пакета ROS

Робототехника

Часть 2.1.3 Создание пакета ROS

Оглавление

Создание пакета ROS

Примечание: Данное руководство написано для сборки пакетов с помощью catkin. Если для сборки вам необходимо использовать roscreate-pkg, то воспользуйтесь этим руководством.

1. Из чего состоит пакет Catkin?

Для того, чтобы называться пакетом Catkin, пакет должен отвечать ряду требований:

  1. Пакет должен содержать Catkin совместимый файл package.xml
    1. Этот package.xml файл содержит метаинформацию о пакете
  2. Пакет должен содержать файл CMakeLists.txt, который использует Catkin. Метапакеты Catkin должны иметь  файл CMakeLists.txt определенного шаблона
  3. Не должно быть более одного пакета в каждой папке
    1. Это не означает, что не должно быть вложенных пакетов

Простейший пакет может выглядеть так:

  • my_package/CMakeLists.txtpackage.xml

2. Пакеты в рабочем пространстве Catkin

Рекомендуемый метод работы с 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 следуя инструкции.

3. Создание пакета 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.

4. Сборка рабочего пространства Catkin

Теперь вы должны собрать пакеты в рабочем пространстве catkin:

$ cd ~/catkin_ws$ catkin_make

Результат должен быть примерно таким:

После того как рабочее пространство будет построено в каталоге будет создана структура аналогичная /opt/ros/$ROSDISTRO_NAME.

Для того, чтобы добавить рабочее пространство в ваше ROS окружение необходимо выполнить команду source:

$ source ~/catkin_ws/devel/setup.bash

5. Зависимости пакета

5.1 Зависимости первого порядка

При использовании 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>

5.2 Косвенные зависимости

Во многих случаях зависимости будут также иметь свои собственные зависимости. Например, rospy имеет несколько зависимостей.

$ rospack depends1 rospy

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

$ rospack depends beginner_tutorials

6. Настройка пакета

Эта часть урока будет рассматривать каждый файл, созданный catkin_create_pkg и описывать, каждую строку в этих файлах и, как вы можете настроить их под ваш пакет.

6.1 Настройка package.xml

Сгенерированный package.xml должен находиться в вашем новом пакете. Теперь давайте рассмотрим package.xml и подправим некоторые элементы, на которые нужно обратить ваше внимание.

6.1.1 Тег description

В первую очередь обновите описание:

<description>The beginner_tutorials package</description>

Изменить описание можно на любое, но по традиции предложение должно быть коротким и описывать назначение пакета.

6.1.2 Тег maintainer

Далее рассмотрим тег описывающий создателя пакета:

<!-- 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>

6.1.3 Тег license

Далее идет тег с лицензией, который также необходимо заполнить:

<!-- 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>

6.1.4 Тег dependencies

Следующий набор тегов это описание зависимостей пакета. Зависимости можно разделить на 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>

6.1.5 Получившийся package.xml

Окончательный package.xml, будет выглядеть так:

6.2 Настройка CMakeLists.txt

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

[wiki.ros.org]

Оглавление

11:02
1238

Нет комментариев. Ваш будет первым!

Авторизация

Пользователи

Георгiй Москвитинъ
Andpyxa Tutunnik
Andrey_fox
Jane linch
genagy
Pasha Radiuk
KotikBSD
Эрик Имашев
Амир Исмагилов