Nella scorsa lezione abbiamo scritto un semplice Publisher in Python che pubblica dei numeri random ad una frequenza di 2 Hz.
Oggi facciamo un passo ulteriore e ci concentriamo sullo scrivere un Subscriber che si sintonizzi sul Publisher e ne intercetti i dati. Per rimanere allineati a quanto fatto la scorsa volta, anche in questo caso ci concentreremo sulla versione scritta in Python.
Scriviamo il Subscriber ROS in Python
Per semplicità partiamo sempre dal nostro ambiente di sviluppo generato durante una delle prime lezioni di questa serie di articoli e creiamo poi il nostro script, ovvero:
così facendo abbiamo creato lo script in cui andremo a definire come il nostro Subscriber, in questo esempio rappresentato come una televisione, si sintonizzerà al Publisher tv_channel_transmitter sviluppato nella scorsa lezione.
Andiamo adesso a definire il contenuto del nostro script:
Analizziamo lo Script
Come già detto nello scorso articolo, in caso in cui tu stessi usando ROS Noetic è necessario cambiare la prima riga in:
Dopo aver importato la libreria rospy e l’oggetto String che sappiamo essere trasmesso dal Publisher discusso nel precedente articolo, definiamo innanzitutto il nome del nodo (riga 10), per poi passare a creare il Subscriber nella riga 12.
Il Subscriber, per poter essere istanziato necessita di:
- Nome del Publisher a cui connettersi, sempre riferendoci allo scorso esempio tv_channel.
- Tipo di dato che viene inviato dal Publisher, String.
- Funzione di callback da chiamare ogniqualvolta un nuovo messaggio viene ricevuto dal Publisher.
Nella riga successiva, con il comando rospy.spin() ci sinceriamo che lo script resti attivo, insieme alla callback che vedremo tra poco, fino a quando il nodo non verrà terminato.
Per quanto riguarda la callback, questa viene definita nella righe 6 e 7.
Prende in ingresso un oggetto msg che in questo caso ci limitiamo semplicemente a stampare a schermo e che contiene i dati trasmessi dal Publisher.
Testiamo il Subscriber
Per testare il nostro Subscriber non ci resta che avviare innanzitutto il Publisher, per cui sempre dalla solita locazione:
Adesso, apriamo un altro terminale, sempre puntando alla stessa cartella dove abbiamo creato i nostri script, e lanciamo il seguente comando:
Se tutto è andato a buon fine, nell’ultimo terminale in cui abbiamo eseguito il Subscriber, vedremo i dati ricevuti dal Publisher stampati a schermo.
Conclusioni
In questo articolo abbiamo fatto un passo ulteriore e abbiamo scritto un nodo Subscriber capace di connettersi ad un Publisher e visualizzare i dati trasmessi.
Questo chiude il cerchio relativo all’argomento dei Topics.
Nelle prossime lezioni, affronteremo lo stesso discorso guardandolo però dal punto di vista del C++ e scrivendo quindi sia un Publisher che un Subscriber in questo linguaggio.
Scrivi un commento