Note: This tutorial assumes that you have completed the previous tutorials: Comprendiendo Tópicos ROS. |
Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. |
Comprendiendo Servicios (Services) y Parametros (Parameters) ROS
Description: Este tutorial es introductoria de Servicios ROS como tambien asi de parámetros (Parameters), utilizando las herramientas de linea de comando rosservice y rosparam.Tutorial Level: BEGINNER
Next Tutorial: Using rqt_console and roslaunch
Contents
Suponiendo que tu turtlesim_node todavía se está ejecutando desde el último tutorial, veamos qué servicios proporciona turtlesim:
Servicios ROS (ROS Services)
Los servicios son otra forma en que los nodos pueden comunicarse entre sí. Los servicios permiten a los nodos enviar una solicitud (request) y recibir una respuesta (response).
Usando rosservice
rosservice puede plegarse fácilmente al marco de cliente / servicio de ROS con servicios (ROS service). rosservice tiene muchos comandos que se pueden usar en los servicios, como se muestra a continuación:
Uso:
rosservice list print information about active services rosservice call call the service with the provided args rosservice type print service type rosservice find find services by service type rosservice uri print service ROSRPC uri
rosservice list
$ rosservice list
El comando list (lista) nos muestra que el nodo turtlesim proporciona nueve servicios: reset, clear, spawn, kill, turtle1/set_pen, /turtle1/teleport_absolute, /turtle1/teleport_relative, turtlesim/get_loggers y turtlesim/set_logger_level. También hay dos servicios por separado y relacionados con el nodo rosout: /rosout/get_loggers y /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
Veamos más de cerca el servicio clear usando rosservice type:
rosservice type
Uso:
rosservice type [service]
Let's find out what type the clear service is:
$ rosservice type /clear
std_srvs/Empty
Este servicio está vacío, esto significa que cuando se realiza la llamada al servicio este no toma argumentos (es decir, no envía datos cuando realiza una solicitud y no recibe datos cuando recibe una respuesta). Llamemos a este servicio usando rosservice call:
rosservice call
Uso:
rosservice call [service] [args]
Aquí llamaremos sin argumentos porque el servicio es de tipo empty (vacío):
$ rosservice call /clear
Esto hace lo que esperamos, borra el fondo del turtlesim_node.
Ahora mediante la observación de la información del servicio engendrado, veamos el caso en el que el servicio tiene argumentos:
$ rosservice type /spawn | rossrv show
float32 x float32 y float32 theta string name --- string name
Este servicio nos permite engendrar una nueva tortuga en una ubicación y orientación determinadas. El campo de nombre es opcional, así que no le demos un nombre a nuestra nueva tortuga y dejemos que turtlesim cree uno para nosotros.
$ rosservice call /spawn 2 2 0.2 ""
La llamada al servicio regresa con el nombre de la tortuga recién creada.
name: turtle2
Ahora nuestro turtlesim debería verse así:
Usando rosparam
rosparam le permite almacenar y manipular datos en el Parameter Server de ROS. El servidor de parámetros puede almacenar enteros, flotantes, booleanos, diccionarios y listas. rosparam usa el lenguaje de marcado YAML para la sintaxis. En casos simples, YAML parece muy natural: 1 es un número entero,1.0 es un flotante, one es una cadena, true es un booleano, [1, 2, 3] es una lista de enteros y {a: b, c: d} es un diccionario. rosparam tiene muchos comandos que se pueden usar en los parámetros, como se muestra a continuación:
Uso:
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
Veamos qué parámetros se encuentran actualmente en el servidor de parámetros:
rosparam list
$ rosparam list
Aquí podemos ver que el nodo turtlesim tiene tres parámetros en el servidor de parámetros para el color de fondo:
/rosdistro /roslaunch/uris/host_nxt__43407 /rosversion /run_id /turtlesim/background_b /turtlesim/background_g /turtlesim/background_r
Cambiemos uno de los valores de los parámetros usando rosparam set:
rosparam set y rosparam get
Uso:
rosparam set [param_name] rosparam get [param_name]
Aquí cambiará el canal rojo del color de fondo:
$ rosparam set /turtlesim/background_r 150
Esto cambia el valor del parámetro, ahora tenemos que llamar al servicio clear para que el cambio de parámetro surta efecto:
$ rosservice call /clear
Ahora nuestro turtlesim se ve así:
Ahora veamos los valores de otros parámetros en el servidor de parámetros. Obtengamos el valor del canal de fondo verde:
$ rosparam get /turtlesim/background_g
86
También podemos usar rosparam get / para mostrarnos el contenido de todo el servidor de parámetros.
$ rosparam get /
rosdistro: 'noetic ' roslaunch: uris: host_nxt__43407: http://nxt:43407/ rosversion: '1.15.5 ' run_id: 7ef687d8-9ab7-11ea-b692-fcaa1494dbf9 turtlesim: background_b: 255 background_g: 86 background_r: 69
Es posible que desee almacenar esto en un archivo para poder volver a cargarlo en otro momento. Esto es fácil usando rosparam:
rosparam dump y rosparam load
Uso:
rosparam dump [file_name] [namespace] rosparam load [file_name] [namespace]
Aquí escribimos todos los parámetros en el archivo params.yaml
$ rosparam dump params.yaml
Incluso puede cargar estos archivos yaml en nuevos espacios de nombres, p. Ej. copy_turtle:
$ rosparam load params.yaml copy_turtle $ rosparam get /copy_turtle/turtlesim/background_b
255
Ahora que comprende cómo funcionan los servicios y parámetros de ROS,tratemos de usar rqt_console y roslaunch