ROS - Урок 7 - Сервисы ROS и их параметры


Содержание

1. Сервисы ROS и их параметры (ROS Services and Parameters)

Описание: Данный урок знакомит с сервисами ROS и их параметрами, а также с использованием утилит командной строки rosservice и rosparam.

Предполагается, что ваш turtlesim_node, с предыдущего урока, по-прежнему работает, давайте посмотрим на то, какие сервисы предоставляет turtlesim:

2. Сервисы ROS

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

2.1 rosservice

rosservice может легко подключаться к клиентско-срвисному фреймворку ROS. У rosservice есть много подкоманд, которые могут быть использованы, как показано ниже:

Использование:
rosservice args	print service arguments
rosservice call	call the service with the provided args
rosservice find	find services by service type
rosservice info	print information about service
rosservice list	list active services
rosservice type	print service type
rosservice uri	print service ROSRPC uri


2.1.1 rosservice list

$ rosservice list


Подкоманда list показывает нам, что узел turtlesim предоставляет девять служб: reset, clear, spawn, kill, turtle1/set_pen, /turtle1/teleport_absolute, /turtle1/teleport_relative, turtlesim/get_loggers, и turtlesim/set_logger_level. Есть также две услуги, связанные с отдельным узлом rosout: /rosout/get_loggers and /rosout/set_logger_level.

/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/spawn
/teleop_turtle/get_loggers
/teleop_turtle/set_logger_level
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level


Давайте посмотрим более внимательно на службу clear с помощью команды rosservice type:

2.1.2 rosservice type

Использование:
rosservice type [service]


Давайте выясним, какой тип у сервиса clear:

$ rosservice type clear

std_srvs/Empty


Этот сервис является пустым, это означает, что сервис вызывается без приёма каких-либо аргументов (т. е. он не отправляет никаких данных при принятии запроса и не получает никаких данных при получении ответа). Давайте вызовем этот сервис с помощью команды rosservice call:

2.1.3 rosservice call

Использование:
rosservice call [service] [args]


Здесь мы будем вызывать сервис без аргументов, потому что тип сервиса пустой:
$ rosservice call clear


Команда делает то, что мы и ожидаем, она очищает фон turtlesim_node.



Давайте рассмотрим случай, когда сервис принимает аргументы, давайте посмотрим на сервис(srv) для spawn:
$ rosservice type spawn | rossrv show

float32 x
float32 y
float32 theta
string name
---
string name


Этот сервис позволяет нам порождать новых черепах в заданном месте и с заданной ориентацией. Поле имени не является обязательным, так что не будем давать нашим новым черепахам имя и пусть turtlesim создаст для нас ещё одну черепаху.

$ rosservice call spawn 2 2 0.2 ""


Вызов сервиса возвращает нам имя вновь созданной черепахи
name: turtle2


Теперь, наш turtlesim должен выглядит следующим образом:



2.2 rosparam

rosparam позволяет хранить и управлять данными на Сервере Параметров ROS (ROS Parameter Server). Сервер Параметров может хранить целые числа, float, boolean, словари и списки. rosparam использует для синтаксиса язык разметки YAML. В простых случаях, YAML выглядит очень естественно: 1 — целое, 1.0 — float, one — строка, true — boolean, [1, 2, 3] — список целых чисел, и {a: b, c: d} — словарь. У rosparam есть много подкоманд, которые могут быть использованы, как показано ниже:

Использование:
rosparam set            set parameter
rosparam get            get parameter
rosparam load           load parameters from file
rosparam dump           dump parameters to file
rosparam delete         delete parameter
rosparam list           list parameter names


Давайте посмотрим на то, какие параметры в настоящее время хранятся на Сервере Параметров:

2.2.1 rosparam list

$ rosparam list


Здесь мы можем видеть, что узел turtlesim для цвета фона имеет три параметра на Сервере Параметров:
/background_b
/background_g
/background_r
/roslaunch/uris/host_noonv__38243
/run_id


Давайте поменяем значение одного параметра, используя команду rosparam set:

2.2.2 rosparam set и rosparam get

Использование:
rosparam set [param_name]
rosparam get [param_name]


Здесь будет меняться красный канал цвета фона:

$ rosparam set background_r 150


Это приводит к изменению значения параметра, но теперь мы должны вызвать сервис clear чтобы изменения параметра вступили в силу:

$ rosservice call clear


Теперь, наш turtlesim выглядит следующим образом:



Теперь, давайте посмотрим на значения других параметров на Сервере Параметров. Давайте узнаем значение зелёного канала фона:

$ rosparam get background_g 

86


Мы также можем использовать rosparam get /, чтобы показать нам содержание всего Сервере Параметров.

$ rosparam get /

background_b: 255
background_g: 86
background_r: 150
roslaunch:
  uris: {host_noonv__38243: 'http://noonv:38243/'}
run_id: e07ea71e-98df-11de-8875-001b21201aa8


Вы можете сохранить эти значения в файл, так что вы сможете перезагрузить его в другое время. Это легко реализуется использованием команды rosparam:

2.2.3 rosparam dump и rosparam load

Использование:
rosparam dump [file_name]
rosparam load [file_name] [namespace]


Здесь мы запишем все параметры в файл params.yaml
$ rosparam dump params.yaml


Вы даже можете загрузить эти YAML файлы в новое пространство имён (namespaces), например, copy:
$ rosparam load params.yaml copy
$ rosparam get copy/background_b

255


Ссылки
www.ros.org/wiki/ROS/Tutorials/UnderstandingServicesParams
  • 0
  • 27 июля 2011, 08:02
  • noonv

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

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

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