📖
Arduino + ROS
  • О методичке
  • 1 Введение в ROS
    • Проблемы современной робототехники
    • История ROS
    • Что такое ROS, основные задачи
    • Устройство мобильного робота
    • Почему Linux для роботов?
    • Подготовка рабочего места
  • 2 Linux. Основы командной строки.
    • Команды терминала Linux
    • Протокол SSH
    • Пользователи и их права
  • 3 Основы ROS
    • Введение
    • Базовые понятия ROS
    • Сообщения
    • Topic
    • Service
    • Action
    • Стандарты ROS
    • Установка и запуск ROS
    • Практика с Turtlesim
  • 4 Работа с Arduino
    • Arduino и ROS
    • Создание издателя
    • Создание подписчика
Powered by GitBook
On this page
  • Описание формата сервиса
  • Консольная утилита rosservice
  • rosservice call
  • rosservice list
  • rosservice type
  1. 3 Основы ROS

Service

PreviousTopicNextAction

Last updated 3 years ago

Модель коммуникации в режиме Сервис представляет собой двунаправленную синхронную связь между клиентом (Service Client), создающим запрос, и сервером (Service Server), отвечающим на запрос. Синхронность в данном случае означает, что если наша программа отправит запрос, то до получения ответа от сервера программа находится в этой точке и ожидает результат.

Данный способ удобно использовать для периодической передачи данных или когда существует потребность в синхронной связи (режим запрос-ответ).

Сервер отвечает только тогда, когда есть запрос (Service Request) и клиент, который может получить ответ (Service Response). В отличие от модели работы с топиками, модель сервис работает с "одноразовыми" соединениями. Поэтому, когда цикл запрос и ответ завершен, соединение между двумя нодами будет прервано.

Описание формата сервиса

В файле описания сервиса первая часть (до разделителя ---) - это описание сообщения запроса, далее описание сообщения ответа.

Например srv/AddToInts.srv

uint32 x

uint32 y

---

uint32 sum

При этом, имя файла AddToInts.srv соответствует имени Сервиса AddToInts.

Консольная утилита rosservice

Для отладки и тестирования сервисов ROS существует специальная консольная утилита rosservice:

rosservice call Выполнение запроса к серверу
rosservice find Поиск сервиса по типу
rosservice info Выводит информацию о сервисе
rosservice list Выводит список запущенных сервисов
rosservice type Выводит тип сообщений используемый сервисом
rosservice uri  Выводит RPC URL сервиса

Примеры использования rosservice:

rosservice call

Вызов сервиса service_name c аргументами service-args:

rosservice call /service_name service-args

Вызов сервиса my_service с аргументами 1 и 2:

rosservice call /my_service 1 2

Для сложных сообщений аргументы с параметрами возможно писать в YAML синтаксисе, например:

rosservice call /my_service "{x: 1, y: 2}"

rosservice list

rosservice list

Выводит список активных сервисов.

rosservice type

rosservice type /service_name

Выводит тип обрабатываемого сообщения.

$ rosservice type my_service | rossrv show

result:
int64 x
int64 y
---
int64 sum

Пример выводит описание типа сообщения для сервиса.

Формат запроса и ответа задается специальным парным Сообщением (Message), в котором есть два сообщения: первое для запроса (Service Request), второе для ответа (Service Response). Файлы с описанием сервисов хранятся в директории srv и имеют расширение .srv Подробное описание файла доступно на странице wiki

Подробно об использовании YAML .

http://wiki.ros.org/rosbuild/srv
http://wiki.ros.org/ROS/YAMLCommandLine