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 <service type>

Пример:
$ 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] <message type>

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

Ссылки:
www.ros.org/wiki/ROS/Tutorials/CreatingMsgAndSrv
  • 0
  • 27 февраля 2011, 11:06
  • noonv

Комментарии (1)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.