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

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


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

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
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение