ROS - Introduzione

L’acronimo ROS, ovvero Robot Operating System, individua uno standard de facto per la «prototipazione» e lo sviluppo di software per applicazioni di robotica. Questo presenta diversi livelli di astrazione software alle risorse hardware robotizzate.

Ciò consente agli sviluppatori di software di approcciarsi alla programmazione hardware di basso livello in maniera più semplice.

Tuttavia, lo sviluppo delle applicazioni lato client richiede una piena comprensione e padronanza di ROS e della robotica, il che non è semplice per i non-ROS utenti e per principianti.

Con l’emergere dell’Internet of Things (IoT), inoltre, c’è un crescente interesse nel fornire interfacce web che consentano agli utenti di accedere a Internet senza problemi.


Robot Operating System, pertanto, è un framework open source, contrariamente a quanto si potrebbe dedurre dal nome che gli è stato assegnato. Esso permette di sviluppare software per la robotica. La distribuzione utilizzata per questo progetto è la
Kinetic versione 1.12.14 LTS.


ROS mette a disposizione degli sviluppatori diverse funzionalità: astrazioni hardware, controllo di dispositivi a basso livello, comunicazione tra nodie gestione dei pacchetti. Fornisce anche tool e librerie per ottenere, costruire, scrivere ed eseguire codice tra più computer.

Concetti di base del ROS

Il sistema ROS si basa sul concetto di grafico computazionale, che rappresenta la rete di processi ROS (potenzialmente distribuiti attraverso varie macchine). I concetti fondamentali, su cui si basa l’architettura ROS, sono i seguenti:

  • Master: questo elemento ha il compito di orchestrare i nodi ad esso connessi gestendone l’esecuzione parallela e la comunicazione tra di
    loro. Senza la presenza del core, i nodi non potrebbero individuarsi reciprocamente, scambiarsi messaggi o invocare servizi.
  • Nodi: il processo in ROS viene definito nodo, il quale è responsabile dell’esecuzione dei calcoli e dell’elaborazione dei dati raccolti dai sensori. Si tratta di un eseguibile, generato da un insieme di codici sorgente, che fa parte di un package. Un nodo ROS utilizza le librerie dedicate
    per comunicare sia con gli altri nodi che con il core. Può, altresì, leggere o pubblicare su un topic ed inoltre è in grado di fornire o richiedere
    servizi.
  • Messaggi: i nodi comunicano tra di loro mediante i messaggi. Un messaggio è una struttura dati che assomma a sé diversi campi (con
    opportuni tipi). Sono supportati i tipi primitivi: integer, floating point, boolean, etc. I messaggi possono includere arbitrariamente strutture e
    array.
  • Topic: i messaggi vengono scambiati mediante il sistema di comunicazione publish/subscribe. Un nodo invia un messaggio pubblicandolo su  un dato topic. Il topic è un identificatore del contenuto del messaggio.
    Un nodo che, invece, è interessato ad un certo tipo di dato, si sottoscrive all’appropriato topic. Possono essere utilizzati più publishers e
    subscribers per un singolo topic, ed un unico nodo può pubblicare o sottoscrivere più topic.
  • Servizi: il sistema di comunicazione request/reply viene realizzato mediante l’utilizzo di servizi, i quali vengono definiti da una coppia di
    strutture di messaggi: uno per la richiesta ed uno per la risposta. A differenza dei topic, che implementano uno scambio asincrono, i servizi
    vengono offerti da un nodo server, mentre un nodo client lo utilizza sfruttando il paradigma delle chiamate di procedura remote.
    Bags: sono dei formati per il salvataggio dei messaggi ROS. Sono un meccanismo importante per la memorizzazione dei dati, come quelli
    provenienti dai sensori, i quali possono risultare difficili da ricavare ma sono tuttavia necessari per lo sviluppo e il testing degli algoritmi.