Negli articoli precedenti abbiamo visto come sia facile e veloce installare ROS e creare un workspace per cominciare a programmare il nostro robot. Oggi vediamo come scrivere il primo nodo in assoluto, utilizzando 2 dei linguaggi di programmazione supportati dal framework di sviluppo: Python e C++.

Prima di proseguire nella lettura dell’articolo, se non l’avessi già fatto, ti consiglio di leggere questo articolo in cui spiego come creare un workspace da zero in ROS.

Nodo ROS in Python

Per cominciare, raggiungiamo la cartella del nostro package creato precedentemente e generiamo una cartella scripts:

Copy to Clipboard

All’interno di questa cartella verranno posizionati tutti i nodi che servono.

A tal proposito, generiamo il nostro primo nodo python e apriamolo con i seguenti comandi:

Copy to Clipboard

Il codice che dobbiamo scrivere all’interno dello script è molto semplice:

Copy to Clipboard

Come puoi notare, lo script che ti propongo non fa granchè: dopo aver importato la libreria Python per ROS, inizializza il nodo assegnandogli un ID, che è necessario sia univoco tra i nodi che lancerai, stampa una stringa a console di inizio script e dopo un secondo ne ristampa un’altra di terminazione per poi chiudersi.

Per poterlo lanciare, è prima necessario lanciare il nodo master. Per fare questo, apri un altro terminale e digita il seguente comando:

Copy to Clipboard

A questo punto, torniamo al terminale dove abbiamo creato lo script visto poco fa e dalla cartella scripts lanciamo il comando:

Copy to Clipboard

Congratulazioni! Hai appena eseguito il tuo primo nodo ROS scritto in Pyhton!

Nodo ROS in C++

E’ arrivato il momento di scrivere il nostro nodo in C++. Dalla nostra cartella di progetto raggiungiamo la cartella src e creiamo un nuovo sorgente C++:

Copy to Clipboard

Similmente a quanto visto in precedenza, ecco la controparte in C++:

Copy to Clipboard

Poiché non è possibile eseguire un programma C++ senza compilazione, è necessario tornare indietro di un livello nelle nostre cartelle e aprire il file CMakeLists.txt:

Copy to Clipboard

Nel file che si apre coesistono diverse sezioni, quella che interessa a noi in questo momento riporta la seguente dicitura:

Declare a C++ executable
## With catkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don’t collide
# add_executable(${PROJECT_NAME}_node src/macheronte_tutorial_node.cpp)

Subito sotto a questo blocco, aggiungiamo un comando che permetterà a ROS di compilare il nodo C++ appena inserito:

Copy to Clipboard

Salviamo il file e torniamo alla cartella principale:

Copy to Clipboard

Così facendo eseguiamo una compilazione generale del progetto specifico.
Ovviamente, ogniqualvolta si aggiunge o si modifica un sorgente C++, sarà necessario rieseguire una compilazione generale del progetto, seguendo i passi visti.

Dunque, se tutto è andato a buon fine dovresti vedere una serie di messaggi di conferma sul terminale:

E’ giunto il momento di lanciare il nostro nodo C++, raggiungiamo quindi la cartella di progetto contenuta in devel, qui troverai l’eseguibile che ROS ha generato a compilazione terminata:

Copy to Clipboard

Come visto nell’esempio per Python, dopo aver avuto l’accortezza su un nuovo terminale di lanciare il noto roscore, è possibile eseguire il nodo con il seguente comando bash:

Copy to Clipboard

Conclusioni

In questo articolo abbiamo visto come creare i nostri primi nodi sfruttando la caratteristica language agnostic che rende ROS uno strumento programmabile in diversi linguaggi. La differenza principale tra Python e C++ è la parte di compilazione che è presente solo nel secondo e che comporta alcuni semplici accorgimenti per permettere a ROS di generare gli eseguibili.