ROS — Урок 10 — Создание ROS msg и srv



Содержание

1. Создание ROS msg и srv

Описание: В этом уроке рассказывается, как создавать и собирать файлы сообщений (msg) и сервисов (srv), а также про инструменты командной строки: rosmsg, rossrv, roscp и rosmake.

1.1 Введение в msg и srv

* msg: файлы сообщений (msg) — это простые текстовые файлы, которые описывают поля ROS-сообщения. Они используются для генерации исходного кода для сообщений на разных языках.
* srv: srv файл описывает сервис. Он состоит из двух частей: запрос и ответ.

Файлы msg хранятся в директории msg каталога пакета, а srv файлы, соответственно, хранятся в директории srv.

msg файлы — это простые текстовые файлы с полем типа и полем имени в строке. Типы полей, которые можно использовать:

* int8, int16, int32, int64 (plus uint*)
* float32, float64
* string
* time, duration
* other msg files
* variable-length array[] and fixed-length array[C] 

Существует также специальный тип в ROS: Заголовок(Header), заголовок содержит временные метки и координационную информацию, которая обычно используются в ROS. Вы часто будете встречать, что в первой строчке msg-файла идёт Header header.

Пример msg, который использует использует Заголовок(Header), строчный примитив и два других msg-файла:

  Header header
  string child_frame_id
  geometry_msgs/PoseWithCovariance pose
  geometry_msgs/TwistWithCovariance twist

srv файлы такие же, как и msg файлы, но они состоят из двух частей: запрос и ответ. Две части, разделяются линией ‘—‘. Пример srv файла:

int64 A
int64 B
---
int64 Sum

В приведенном выше примере, A и В — это запрос, а Sum — это ответ.

1.2 Создание msg

Давайте создадим новый msg в пакете, который был создан на предыдущем уроке.

$ roscd beginner_tutorials
$ mkdir msg
$ echo "int64 num" > msg/Num.msg

Теперь, нам необходимо убедиться, что msg-файл превращается в исходный код на C++, Python-е и других языках:

Для этого, откройте CMakeLists.txt в вашем любимом текстовом редакторе и удалите # ,чтобы раскомментировать следующую строчку:

#rosbuild_genmsg()

1.3 rosmsg

Вот и всё, что нужно сделать, чтобы создать msg. Давайте удостоверимся, что ROS может видеть его с помощью команды rosmsg show.

Использование:

$ rosmsg show [message type]

Пример:

$ rosmsg show beginner_tutorials/Num

Вы должны увидеть:

int64 num

В этом примере, передаваемый параметр сообщения состоит из двух частей:

* beginner_tutorials — пакет, в котором определено сообщение
* Num — Имя сообщения

Если вы не можете вспомнить, в каком пакете содержится нужное сообщение (msg), то можно просто опустить имя пакета. Например:

$ rosmsg show Num

Результат:

[beginner_tutorials/Num]:
int64 num

1.4 Создание srv

Теперь, в этом же пакете, попробуем создать сервис (srv):

$ roscd beginner_tutorials
$ mkdir srv

Вместо того, чтобы создавать определения нового сервиса (srv) вручную, мы можем скопировать существующие определения сервиса из другого пакета.

1.5 roscp

roscp — это очень полезная утилита командной строки для копирования файлов из одного пакета в другой.

Использование:

$ roscp [package_name] [file_to_copy_path] [copy_path]

Попробуем скопировать определение сервисов из пакета rospy_tutorials:

$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv

Теперь, нам необходимо убедиться, что srv файл превращаются в исходный код на C++, Python-е и других языках:

Для этого, откройте CMakeLists.txt в вашем любимом текстовом редакторе и удалите # ,чтобы раскомментировать следующую строчку:

#rosbuild_gensrv()

1.6 rossrv

Вот и всё, что нужно сделать, чтобы создать сервис (srv). Давайте удостоверимся, что ROS может его видеть, с помощью команды rossrv show.

Использование:

$ rossrv show 

Пример:

$ rossrv show beginner_tutorials/AddTwoInts

Вы увидите:

int64 a
int64 b
---
int64 sum

Теперь, когда мы внесли изменения в наш пакет, необходимо, собрать наш пакет снова

$ rosmake beginner_tutorials

1.7 Получение справки

Мы уже познакомились с некоторыми утилитами ROS. Запоминать какие аргументы требуются разным командам — трудно и не нужно. Большинство утилит ROS содержат небольшую справочную информацию по использованию.

Попробуйте:

$ rosmsg -h

Вы должны увидеть список различных подкоманд rosmsg:

Commands:
	rosmsg show     Show message description
	rosmsg md5      Display message md5sum
	rosmsg package  List messages in a package
	rosmsg packages List packages that contain messages

Также можно получить справку по подкомандам:

$ rosmsg show -h

Пример, аргументов, которые необходимы для rosmsg show:

Usage: rosmsg show [options] 

Options:
	-h, --help  show this help message and exit
	-r, --raw   show raw message text, including comments

1.8 Обзор

Перечислим команды, с которыми мы познакомились:

* rospack = ros+pack(age) : предоставляет информацию, связанную с пакетами ROS
* rosstack = ros+stack : предоставляет информацию, связанную со стеками ROS
* roscd = ros+cd : изменения текущего каталога пакета или стека
* rosls = ros+ls : показывает список файлов в ROS пакете
* roscp = ros+cp : копирует файлы из/в пакет ROS
* rosmsg = ros+msg : предоставляет информацию, связанную с определениями сообщений ROS
* rossrv = ros+srv : предоставляет информацию, связанную с определения сервисов ROS
* rosmake = ros+make : собирает (компилирует) пакет ROS

Ссылки
http://www.ros.org/wiki/ROS/Tutorials/CreatingMsgAndSrv


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

Arduino

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

Разделы

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

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

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

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