[Documentation] [TitleIndex] [WordIndex

Capire i ROS Topics

Descrizione: Questo tutorial introduce i ROS topics, oltre all'uso dei seguenti strumenti da command line: rostopic e rqt_plot.

Livello Tutorial: PRINCIPIANTE

Prossimo Tutorial: Capire i ROS services e i parametri

Setup

roscore

Cominciamo assicurandoci di aver avviato roscore in un nuovo terminale:

$ roscore

Se hai lasciato roscore in esecuzione dall'ultimo tutorial, potresti ottenere questo messaggio di errore:

Va bene. Un solo roscore necessita di essere avviato.

turtlesim

Per questo tutorial useremo anche turtlesim. Per favore, esegui in un nuovo terminale:

$ rosrun turtlesim turtlesim_node

turtle keyboard teleoperation

Avremo anche bisogno di qualcosa per guidare la tartaruga in giro. Per favore, esegui in un nuovo terminale:

$ rosrun turtlesim turtle_teleop_key

Ora puoi utilizzare i tasti freccia della tastiera per guidare la tartaruga in giro. Se non puoi guidare la tartaruga, seleziona la finestra del terminale del turtle_teleop_key per assicurarti che i tasti che digiti siano registrati.

Ora che puoi guidare la tua tartaruga in giro, diamo un'occhiata a quello che succede dietro le quinte.

ROS Topics

I nodi turtlesim_node e the turtle_teleop_key sono in comunicazione tra loro su un ROS Topic. turtle_teleop_key sta publishing (pubblicando) le combinazioni dei tasti su un topic, mentre turtlesim subscribes (iscrive) allo stesso topic di ricevere le combinazioni dei tasti. Usiamo rqt_graph per mostrare i nodi e i topic attualmente in esecuzione.

Nota: Se stai usando electric o precedenti, rqt non è disponibile. Usa invece rxgraph.

Usare rqt_graph

rqt_graph crea un graph dinamico di quello che sta succedendo nel sistema. rqt_graph è parte del rqt package. A meno che tu non l'abbia già installato, esegui:

rimpiazzando <distro> con il nome della tua distribuzione ROS (fuerte, groovy, etc.)

In un nuovo terminale:

$ rosrun rqt_graph rqt_graph

Vedrai qualcosa simile a:

rqt_graph_turtle_key.png

Se posizioni il tuo mouse sopra /turtle1/command_velocity esso evidenzierà i nodi del ROS (qui blu e verde) e i topics (qui rosso). Come puoi vedere, i nodi turtlesim_node e turtle_teleop_key stanno comunicando sul topic chiamato /turtle1/command_velocity.

rqt_graph_turtle_key2.png

Introduzione rostopic

Il rostopic tool ti permette di ottenere informazioni riguardo i ROS topics.

Puoi usare l'opzione help per vedere quali sub-commands sono disponibili per rostopic

$ rostopic -h

Usiamo alcuni di questi topic sub-commands per esaminare turtlesim.

Usare rostopic echo

rostopic echo mostra i dati pubblicati su un topic.

Uso:

rostopic echo [topic]

Diamo un'occhiata ai dati pubblicati sul topic /turtle1/command_velocity per mezzo del nodo turtle_teleop_key, in un nuovo terminale (non lavora con hydro):

$ rostopic echo /turtle1/command_velocity

Se stai usando ROS Hydro, prova:

$ rostopic echo /turtle1/cmd_vel

Probabilmente non vedrai nulla perché nessun dato è in corso di pubblicazione sul topic. Facciamo pubblicare i dati da turtle_teleop_key premendo i tasti freccia. Ricorda che se la tartaruga non si sta muovendo, devi selezionare nuovamente il terminale del turtle_teleop_key.

Ora dovresti vedere il seguente quando premi il tasto freccia SU:

O in hydro:

linear:
  x: 2.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
---
linear:
  x: 2.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
---

Ora diamo un'occhiata di nuovo a rqt_graph (potrebbe essere necessario fare un refresh del ROS graph). Come puoi vedere, rostopic echo, mostrato qui in rosso, ora è anche subscribed (iscritto) al topic turtle1/command_velocity.

rqt_graph_echo.png

Usare rostopic list

rostopic list restituisce un elenco di tutti i topic attualmente subscribed to e published.

Cerchiamo di capire di quale argomento il sub-command list ha bisogno. In un nuovo terminale esegui:

$ rostopic list -h

Per rostopic list usiamo l'opzione verbose:

$ rostopic list -v

Questo mostra un verbose list di topics per publish to e subscribe to e il loro tipo.

ROS Messages

La comunicazione sui topics avviene con l'invio di ROS messages tra i nodi. Affinché il publisher (turtle_teleop_key) e il subscriber (turtlesim_node) possano comunicare, il publisher e il subscriber devono inviare e ricevere lo stesso "message type" (tipo di messaggio). Questo significa che un tipo di topic è definito dal message type pubblicato su quello. Il message type inviato su un topic può essere determinato usando rostopic type.

Usare rostopic type

rostopic type ritorna message type di qualsiasi topic in corso di pubblicazione.

Uso:

rostopic type [topic]

Prova (non per hydro):

$ rostopic type /turtle1/command_velocity

In hydro, prova:

$ rostopic type /turtle1/cmd_vel

Possiamo guardare i dettagli del messaggio usando rosmsg (non per hydro):

$ rosmsg show turtlesim/Velocity

In hydro:

$ rosmsg show geometry_msgs/Twist

Ora che noi sappiamo che tipo di messaggio turtlesim si aspetta, possiamo pubblicare i comandi alla nostra tartaruga:

rostopic continuato

Ora che abbiamo conosciuto i ROS messages, usiamo rostopic con i messaggi.

Usare rostopic pub

rostopic pub pubblica i dati su un topic attualmente reso operativo.

Uso:

rostopic pub [topic] [msg_type] [args]

Esempio (non per hydro):

$ rostopic pub -1 /turtle1/command_velocity turtlesim/Velocity  -- 2.0  1.8

Esempio per hydro:

$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

Il comando precedente invierà un singolo messaggio a turtlesim dicendogli di muoversi con una linear velocity di 2.0, e un angular velocity di 1.8 .

Questo è un esempio piuttosto complicato, cosi diamo un'occhiata in dettaglio ad ogni argomento.

Avrai notato che la tartaruga ha smesso di muoversi; questo perché la tartaruga richiede un flusso costante di comandi a 1 Hz per mantenere il movimento. Noi possiamo pubblicare un flusso costante di comandi usando il comando rostopic pub -r (non per hydro):

$ rostopic pub /turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0  -1.8

Per hydro:

$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

Questo pubblica i "velocity commands" a un ritmo di 1 Hz sul velocity topic.

Possiamo anche vedere cosa sta succedendo in rqt_graph, il nodo rostopic pub (qui in rosso) sta comunicando con il nodo rostopic echo (qui in verde):

rqt_graph_pub.png

Come puoi vedere, la tartaruga sta eseguendo un cerchio continuo. In un nuovo terminale, possiamo usare rostopic echo per vedere i dati pubblicati dal nostro turtlesim:

Usare rostopic hz

rostopic hz riporta il ritmo con il quale i dati sono pubblicati.

Uso:

rostopic hz [topic]

Vediamo quanto velocemente il turtlesim_node sta pubblicando /turtle1/pose:

$ rostopic hz /turtle1/pose

Vedrai:

Ora possiamo dire che il turtlesim sta pubblicando dati sulla nostra tartaruga ad un ritmo di 60 Hz. Possiamo anche usare rostopic type in congiunzione con rosmsg show per ottenere informazioni approfondite su un topic (non per hydro):

$ rostopic type /turtle1/command_velocity | rosmsg show

In hydro:

rostopic type /turtle1/cmd_vel | rosmsg show

Ora che abbiamo esaminato i topics usando rostopic, usiamo un altro tool per vedere i dati pubblicati dal nostro turtlesim:

Usare rqt_plot

Nota: Se stai usando electric o precedenti, rqt non è disponibile. Usa invece rxplot.

rqt_plot mostra uno "scrolling time plot" dei dati pubblicati sui topic. Qui noi useremo rqt_plot per tracciare i dati che vengono pubblicati sul topic /turtle1/pose. Prima di tutto, avvia rqt_plot digitando in un nuovo terminale

$ rosrun rqt_plot rqt_plot

Nella nuova finestra che dovrebbe apparire, un text box in alto a sinistra ti dà la possibilità di aggiungere qualsiasi topic al plot (trama). Digitando /turtle1/pose/x sarà messo in evidenza il tasto più, precedentemente disabilitato. Premilo e ripeti la stessa procedura con il topic /turtle1/pose/y. Ora vedrai la posizione x-y della tartaruga riportata sul grafico.

rqt_plot.png

Premendo il tasto meno, mostra un menu che ti permette di nascondere il topic specificato dal plot. Nascondendo entrambi i topic che hai appena aggiunto, e aggiungendo /turtle1/pose/theta, risulterà nel plot mostrato nella figura successiva.

rqt_plot2.png

E' tutto per questa sezione. Usa Ctrl-C per killare i terminali del rostopic ma mantieni il tuo turtlesim in esecuzione.

Ora che hai capito come lavorano i ROS topics, diamo un'occhiata a come services e parameters lavorano.


2019-10-19 12:46