Nella scorsa puntata, abbiamo approfondito il concetto di Publisher, Subscriber e Topic in ROS.

Abbiamo visto come questi elementi siano fondamentali per poter scrivere applicazioni ROS complete e modulari.

Oggi vediamo come scrivere un Publisher in ROS, partendo dal linguaggio Python.

Scriviamo il Publisher ROS in Python

Se hai avuto modo di seguire la serie di articoli che ti ho proposto via via nel tempo, avrai sicuramente già scritto il tuo nodo in Python e C++.

A questo punto, siamo certi di essere allineati sulla struttura delle cartelle che ti andrò a proporre in questo articolo.

Raggiungi la cartella di progetto creata negli articolo precedenti e crea un nuovo file eseguibile con estensione Python, ovvero:

Copy to Clipboard

Bene, come avrai intuito andremo a ricalcare l’esempio fatto nello scorso articolo, ovvero quello di un canale televisivo che trasmette dei dati.

Apri lo script Python appena creato con un editor di testo e digita il seguente codice:

Copy to Clipboard

La versione ROS installata nel mio computer è Melodic. In caso tu stessi usando Noetic, la stringa da scrivere nella riga 1 è:

#!/usr/bin/env python3

Analizziamo lo Script

Fermiamoci un secondo ad analizzare il codice.

Dalla riga 3 alla 5 importiamo i pacchetti fondamentali per l’esecuzione di questo script.

Nella riga 8 andiamo ad inizializzare il nodo assegnandogli un nome.

Successivamente settiamo la frequenza di lavoro del nodo a 2 Hz.

Nella riga 11 definiamo il nostro Publisher il quale non è altro che un oggetto che prende in ingresso 3 parametri:

  • Nome del Publisher: tv_channel nel nostro caso.
  • Tipo di oggetto pubblicato: in questo esempio pubblichiamo una stringa, ma potremmo pubblicare qualsiasi altra tipologia di dato.
  • Dimensioni del buffer: in questo modo assegniamo una dimensione ad un buffer che memorizza i dati pubblicati in caso di congestione della rete.

Nella restante parte dello script, andiamo a pubblicare (riga 16), alla frequenza definita in precedenza (riga 17), un numero randomico (riga 15).

Questo viene fatto fintanto che il nodo risulta essere in esecuzione (riga 14).

Se ti interessa approfondire altri tipi di dati supportati da ROS, fai riferimento alla documentazione ufficiale. Ad esempio, l’oggetto String usato nell’esempio si riferisce a questa pagina.

Testiamo il Publisher

Salvato lo script appena discusso, è giunto il momento di testarlo.

Nei prossimi articoli vedremo come scrivere un Subscriber in Python, oggi sorvoliamo questo dettaglio e concentriamoci solo sull’eseguire manualmente la procedura di lettura dei dati trasmessi.

Innanzitutto, apri un terminale e raggiungi la posizione dove hai salvato lo script tv_channel_tansmitter.py:

Copy to Clipboard

Da un altro terminale, possiamo verificare l’effettiva esecuzione del nodo in 2 modi:

  • attraverso il comando che lista i nodi attivi
Copy to Clipboard
  • attraverso il comando che lista i Topic attivi
Copy to Clipboard

Come puoi vedere, attualmente abbiamo il nodo tv_channel_transmitter in esecuzione il quale pubblica un topic denominato tv_channel.

Apri un altro terminale ed esegui il seguente comando:

Copy to Clipboard

Vedrai a questo punto una serie di stringhe stampate a schermo che non sono altro che i dati trasmessi dal nodo che abbiamo scritto.

Conclusioni

Ottimo, abbiamo fatto un passo ulteriore verso la comprensione degli strumenti offerti da ROS.

In questo articolo abbiamo approfondito il concetto di Publisher, scrivendone uno in Python e verificando, per ora manualmente, la corretta esecuzione.

Nel prossimo articolo vedremo come scrivere un Subscriber che possa usufruire dei dati trasmessi.