ROS — Урок 3 — Создание пакета для ROS



Содержание

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.xml



beginner_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”»

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение