Создание пакета
Создание простого пакета
На данный момент мы познакомились с файловой структурой пакетов и научились их устанавливать.
В этой главе мы научимся самостоятельно создавать собственные ROS пакеты.
В принципе, создать пакет можно и "руками" правильно написав файлы CMakeLists.txt и package.xml. Но проще это все делать при помощи утилиты catkin_create_pkg,она сама создаст необходимые файлы и директории и пропишет зависимости.
Все операции с пакетами мы будет производить в нашей рабочей директории catkin_ws
Перейдем в директорию, где расположены исходники пакетов
cd ~/catkin_ws/src
И теперь создадим наш пакет, где my_first_package - это название нашего первого пакета
catkin_create_pkg my_first_package
===
Created file my_first_package/package.xml
Created file my_first_package/CMakeLists.txt
Successfully created files in /home/cola/catkin_ws/src/my_first_package. Please adjust the values in package.xml.
Мы увидим, что созданы все минимально необходимые файлы.
ls my_first_package
===
CMakeLists.txt package.xml
Далее мы можем его установить в нашу систему, выполнив catkin_make
cd ../
catkin_make --pkg=my_first_package
Проверим, что ROS правильно видит наш новый пакет
rospack find my_first_package
===
/home/cola/catkin_ws/src/my_first_package
Мы видим, что ROS правильно смог найти новый пакет, значит он установлен в системе верно.
Работа с зависимостями
Обычно при создании пакета мы уже знаем, какие пакеты ROS нам понадобятся. Для того, чтобы нам в ручном режиме не редактировать файлы описания настроек пакета package.xml и CMakeLists.txt, нам проще сразу создать пакет, указав все зависимости.
Синтаксис создания пакета с указанием зависимостей
catkin_create_pkg [package_name] [depend1] [depend2] [depend3]
Создадим пакет my_package указав зависимости std_msgs, rospy ,actionlib_msgs, message_generation, message_runtime
cd ~/catkin_ws/src
catkin_create_pkg my_package std_msgs rospy actionlib_msgs message_generation message_runtime
При создании пакета мы указали зависимости, которые мы будем использовать в работе в следующих главах, поэтому сейчас не так важно, что они все делают.
Мы можем увидеть, что в новом пакете в файле package.xml появились новые строчки описания зависимостей
<build_depend>actionlib_msgs</build_depend>
<build_depend>message_generation</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<build_export_depend>actionlib_msgs</build_export_depend>
<build_export_depend>rospy</build_export_depend>
<build_export_depend>std_msgs</build_export_depend>
<exec_depend>actionlib_msgs</exec_depend>
<exec_depend>message_runtime</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>
Также в файле CMakeLists.txt появились новые команды сборки
find_package(catkin REQUIRED COMPONENTS
actionlib_msgs
message_generation
message_runtime
rospy
std_msgs
)
Соберем наш новый пакет
cd ~/catkin_ws
catkin_make --pkg=my_package
Проверим список зависимостей пакета
rospack depends my_package
===
catkin
genmsg
gencpp
geneus
gennodejs
genlisp
genpy
message_generation
cpp_common
rostime
roscpp_traits
roscpp_serialization
message_runtime
std_msgs
actionlib_msgs
rosbuild
rosconsole
rosgraph_msgs
xmlrpcpp
roscpp
rosgraph
ros_environment
rospack
roslib
rospy
Мы видим явно больше зависимостей, чем мы указали при создании пакета. Но на самом деле мы увидели полный список всех необходимых пакетов. Включая зависимости к тем пакетам, которые мы выбрали при создании.