[Documentation] [TitleIndex] [WordIndex

Capire i ROS Services e Parameters

Descrizione: Questo tutorial introduce i ROS services e parameters, oltre all'uso dei seguenti strumenti da command line: rosservice e rosparam.

Livello Tutorial: PRINCIPIANTE

Prossimo Tutorial: Usare rqt_console e roslaunch

Supponendo che il tuo turtlesim_node è ancora in esecuzione dall'ultimo tutorial, diamo un'occhiata a quali servizi turtlesim offre:

ROS Services

Services sono un altro modo con cui i nodi possono comunicare tra di loro. Services permettono ai nodi di inviare una request e ricevere un response.

Usare rosservice

rosservice può facilmente collegare il ROS's client/service framework con i services. rosservice ha molti comandi che possono essere usati sui topics, come mostrato sotto:

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

Il comando list ci mostra che il turtlesim node offre nove services: reset, clear, spawn, kill, turtle1/set_pen, /turtle1/teleport_absolute, /turtle1/teleport_relative, turtlesim/get_loggers, e turtlesim/set_logger_level. Ci sono anche due services relativi al nodo indipendente rosout: /rosout/get_loggers e /rosout/set_logger_level.

Diamo un'occhiata più da vicino al clear service usando rosservice type:

rosservice type

Uso:

rosservice type [service]

Scopriamo di che tipo è il clear service:

$ rosservice type clear

Questo service è vuoto, questo significa che quando si fa la service call, essa non prende argomenti (i.e. essa non invia dati quando crea una request e non riceve dati quando riceve un response). Chiamiamo questo service usando rosservice call:

rosservice call

Uso:

rosservice call [service] [args]

Qui la chiameremo senza argomenti perché il service è del tipo vuoto:

$ rosservice call clear

Questo fa cosa noi ci aspettiamo, ovvero azzera il background del turtlesim_node.

Diamo un'occhiata al caso in cui il service ha argomenti dando un'occhiata all'informazione per il service spawn:

$ rosservice type spawn| rossrv show

Questo service ci permette di creare una nuova tartaruga in una determinata locazione e orientamento. Il campo name è opzionale, quindi cerchiamo di non dare un nome alla nostra tartaruga e lasciamo che turtlesim crei un nome per noi.

$ rosservice call spawn 2 2 0.2 ""

La service call restituisce il nome della tartaruga creata di recente

Ora il nostro turtlesim dovrebbe mostrare questo:

Usare rosparam

rosparam ti permette di memorizzare e manipolare dati sul ROS Parameter Server. Il Parameter Server può memorizzare integers, floats, boolean, dictionaries, e liste. rosparam usa il YAML markup language per la sintassi. In casi semplici, YAML sembra molto naturale: 1 è un integer, 1.0 è un float, one è una stringa, true è un boolean, [1, 2, 3] è una lista di integers, e {a: b, c: d} è un dictionary. rosparam ha molti comandi che possono essere usati sui parameters, come mostrato sotto:

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

Diamo un'occhiata a quali parameters si trovano attualmente sul param server:

rosparam list

$ rosparam list

Qui possiamo vedere che il turtlesim node ha tre parameters sul param server per il background color:

Cambiamo uno dei valori del parameter usando rosparam set:

rosparam set e rosparam get

Uso:

rosparam set [param_name]
rosparam get [param_name]

Qui cambieremo il red channel del background color:

$ rosparam set background_r 150

Questo cambia il valore del parameter, ora noi dobbiamo chiamare il clear service affinché la modifica del parameter abbia effetto:

$ rosservice call clear

Ora il nostro turtlesim mostrerà questo:

Ora diamo un'occhiata ai valori degli altri parameters sul param server. Prendiamo il valore del green background channel:

$ rosparam get background_g

Possiamo anche usare rosparam get / per mostrare i contenuti dell'intero Parameter Server.

$ rosparam get /

Potresti voler memorizzare questo in un file, in modo che tu possa ricaricarlo in futuro quando vuoi. Questo è facile, basta usare rosparam:

rosparam dump e rosparam load

Uso:

rosparam dump [file_name]
rosparam load [file_name] [namespace]

Qui scriviamo tutti i parameters al file params.yaml

$ rosparam dump params.yaml

Puoi anche caricare questi yaml files dentro nuovi namespaces, e.g. copy:

$ rosparam load params.yaml copy
$ rosparam get copy/background_b

Ora che hai capito come ROS services e params lavorano, proviamo ad usare rqt_console e roslaunch


2019-10-19 12:46