1. Создание пакета для ROS
Описание: В этом уроке описывается использование roscreate-pkg для создания нового пакета, и rospack для перечисления зависимостей пакета.
1.1 roscreate
Прежде чем создать пакет, давайте посмотрим, как работает утилита roscreate-pkg.
Эта утилита создает новый пакет ROS. Все пакеты ROS содержат набор схожих файлов: манифесты, CMakeLists.txt, mainpage.dox, и Makefile. roscreate-pkg берёт на себя большую часть утомительных задач, которые нужно выполнить при создании нового пакета вручную, и тем самым устраняет распространённые ошибки, вызванные ручным созданием файлов сборки и манифестов.
Чтобы создать новый пакет в текущем каталоге нужно выполнить команду:
$ roscreate-pkg [package_name]
Также сразу можно указать зависимости этого пакета:
$ roscreate-pkg [package_name] [depend1] [depend2] [depend3]
1.2 Создание нового пакета ROS
Теперь, перейдём в наш домашний каталог или каталог проекта и создадим наш пакет под названием beginner_tutorials. Наш тестовый пакет будет зависеть от std_msgs, roscpp, и rospy, которые являются общими пакетами ROS.
Обратите внимание, что каталог с установленной ROS, вероятно, защищен от записи, но в любом случае, неразумно изменять базовую систему без особых причин. Вместо этого, вам следует создать новый каталог в своей домашней директории и добавить его в ROS_PACKAGE_PATH, как это будет показано ниже, и создавать дополнительные пакеты уже там. Прописывание дополнительного пути в начале ROS_PACKAGE_PATH заставит все утилиты rosbash, такие как roscd, искать пакеты сначала по этому пути, прежде чем переходить к следующему каталогу по списку (дефолтный каталог обычно оставляют в списке последним).
$ cd ~/ $ mkdir ros_tutorials $ export ROS_PACKAGE_PATH=~/ros_tutorials:$ROS_PACKAGE_PATH
Обратите внимание, что экспорт в ROS_PACKAGE_PATH произведённый командой выше, должны быть выполнен при каждом открытии нового терминала (если только вы не измените ваш файл .bashrc чтобы он делал это автоматически).
Теперь перейдём в каталог ~/ros_tutorials и создадим там наш первый пакет:
$ cd ~/ros_tutorials $ roscreate-pkg beginner_tutorials std_msgs rospy roscpp
Вы увидите что-то вроде:
Created package directory /home/noonv/ros_tutorials/beginner_tutorials Created include directory /home/noonv/ros_tutorials/beginner_tutorials/include/beginner_tutorials Created cpp source directory /home/noonv/ros_tutorials/beginner_tutorials/src Created package file /home/noonv/ros_tutorials/beginner_tutorials/Makefile Created package file /home/noonv/ros_tutorials/beginner_tutorials/manifest.xml Created package file /home/noonv/ros_tutorials/beginner_tutorials/CMakeLists.txt Created package file /home/noonv/ros_tutorials/beginner_tutorials/mainpage.dox Please edit beginner_tutorials/manifest.xml and mainpage.dox to finish creating your package
Вы можете потратить пару минут и посмотреть содержимое файла beginner_tutorials/manifest.xml. Манифест играет важную роль в ROS, так как он определяет, как пакеты собираются, выполняются и документируются.
Теперь давайте убедимся, что ROS может найти свой новый пакет. Часто бывает полезным вызвать rospack профиля после внесения изменений в директориях своего проекта, чтобы новые каталоги были корректно найдены:
$ rospack profile $ rospack find beginner_tutorials YOUR_PACKAGE_PATH/beginner_tutorials
Если это не сработало, значит ROS не может найти свой новый пакет. Обычно проблема кроется в ROS_PACKAGE_PATH. Обратитесь к инструкции по установке из SVN или из пакетов, в зависимости от того, как вы установили ROS. Если вы создали или добавили пакет, который находится за пределами существующих путей в ROS_PACKAGE_PATH, вы должны изменить свою переменную окружения ROS_PACKAGE_PATH, чтобы включить в неё новый каталог.
Попробуем перейти в каталог нашего пакета.
$ roscd beginner_tutorials $ pwd YOUR_PACKAGE_PATH/beginner_tutorials
1.3 Зависимости пакета первого порядка
При использовании roscreate-pkg, мы указали несколько зависимостей нашего пакета. Это зависимости первого порядка, теперь мы можем их посмотреть с помощью утилиты rospack.
$ rospack depends1 beginner_tutorials std_msgs rospy roscpp
Как вы можете видеть, rospack вывел список тех же зависимостей, которые были заданы в качестве аргументов при запуске roscreate-pkg. Эти зависимости пакета хранятся в файле манифеста. Взгляните на файл манифеста.
$ roscd beginner_tutorials $ cat manifest.xmlbeginner_tutorials noonv BSD http://ros.org/wiki/beginner_tutorials
1.4 Косвенные зависимости пакета
В большинстве случаев, зависимость также будет иметь свои собственные зависимости. Например, rospy зависит от других пакетов.
$ rospack depends1 rospy roslib roslang
Пакет может иметь довольно много косвенных зависимостей. К счастью, rospack может рекурсивно определить все вложенные зависимости.
$ rospack depends beginner_tutorials genmsg_cpp roslib std_msgs roslang rospy xmlrpc++ rosconsole roscpp
1.5 Клиентские библиотеки ROS
Вы можете быть удивлены, что rospy и roscpp зависят от других пакетов, как это видно по предыдущему примеру. Дело в том, что rospy и roscpp являются клиентскими библиотеками (Client Libraries). Клиентские библиотеки позволяют различным языкам программирования, общаться через ROS. rospy — это клиентская библиотека для Python, а roscpp — это клиентская библиотека для C++.
1.6 Обзор
Перечислим команды, с которыми мы познакомились:
roscreate-pkg = ros + create-pkg: генерирует все файлы, необходимые для создания пакета ROS
rospack = ros+pack(age): предоставляет информацию, связанную с пакетами ROS
rosstack = ros+stack: предоставляет информацию, связанную со стеками ROS
Далее: Сборка пакета ROS
Ссылки
http://www.ros.org/wiki/ROS/Tutorials/CreatingPackage
Руководства
http://www.ros.org/wiki/ROS/Tutorials
0 комментариев на «“ROS — Урок 3 — Создание пакета для ROS”»
великолепно написано, но не понятно с какой целью столько сложностей