• Non ci sono risultati.

5.4

R.O.S. "Robot Operating System"

ROS è una collezione di strumenti, librerie e convenzioni creati per semplifi- care il compito di realizzare complessi e robusti sistemi robotici. Tali contenuti sono costituiti da alcune core features e dal frutto del lavoro della comunity di utilizzatori e sviluppatori, i quali, seguendo lo spirito open source del progetto, rendono disponibili le proprie soluzioni a molti problemi robotici, sotto forma di pacchetti facilmente utilizzabili da chiunque. Ciascun pacchetto ROS è una entità trasportabile e autonoma, con un proprio CMakeList e file .xml di configurazione, nel quale vengono espresse tutte le dipendenze da altri pacchetti. Descriveremo in seguito alcune delle risorse offerte da ROS di cui si è fatto ampio uso durante il progetto.

5.4.1

Infrastruttura di comunicazione

ROS permette di astrarre in modo molto efficacie la comunicazione tra entità software; queste possono essere oggetti, con l’accezione della sezione precedente, o processi, in ogni caso dal punto di vista ROS possiamo vederli come un nodo. I nodi possono avere la necessità di comunicare tra di loro. Questa azione viene semplificata in due passaggi: prima di tutto viene definita in modo inequivocabile la struttura dei dati che si vogliono condividere; questo viene fatto creando un file di testo con estensione .msg che contiene tutte le informazioni riguardo i dati da condividere, nome, numero e tipo. In secondo luogo viene creato un ambiente di supporto detto topic: un topic è un ambiente in cui sono note le caratteristiche dei dati da condividere, e nel quale tali dati vengono pubblicati da un nodo detto publisher. Qualunque nodo che sia a conoscenza di come i dati sono strutturati sul topic, può iscriversi al topic e leggere i dati in qualsiasi momento. Questo rende scrittura e lettura completamente disaccoppiate, permettendo di eseguire tali operazioni in modo asincrono, e senza che i nodi si interessino di chi sta leggendo o scrivendo i dati. Le informazioni sono in questo modo condivisibili con molti nodi contemporaneamente, e ognuno può usufruire dei dati quando lo necessita. Perchè un nodo, sviluppato in un pacchetto ROS, possa conoscere come sono strutturati i dati sul topic, basta aggiungere la dipendenza nei confronti del pacchetto nel quale sono dichiarati i file msg. Oltre

5.4. R.O.S. "Robot Operating System" 144

Figura 5.6: Infrastruttura di comunicazione

a scambiare informazioni potrei voler inviare delle richieste di eseguire qualche comando ad un altro nodo, ed eventualmente ricevere dei dati di risposta. In questo caso non si ricorre ai topic poichè richiesta e risposta presuppongono una correlazione temporale non lasciata al caso. Vengono creati dei file detti service con estensione .srv, dalla sintassi molto simile a quella dei messaggi che vengono pubblicati sui topic, nei quali viene specificata la struttura dati che compone la richiesta e la risposta (in sostanza l’unione di due messaggi). Un nodo offre un certo servizio implementato sotto un certo nome, un nodo cliente invia la richiesta di esecuzione di quel servizio e attende una risposta; questo meccanismo è chiamato service call. Le service call possono essere effettuate da qualsiasi nodo che abbia tra le dipendenze il pacchetto in cui sono definiti i file .srv. Questo potente strumento permette di collegare tutte le funzioni associate ad un certo oggetto, ad esempio uno dei nostri motori, ai service di un nodo. In questo modo un nodo cliente, ad esempio una interfaccia grafica, può inviare comandi al motore e ricevere dati di risposta in modo estremamente semplice. Un ultimo strumento che rientra nelle infrastrutture di comunicazione è il rosparam: ciascun oggetto possiede una grande quantità di parametri caratteristici, alcuni dei quali fissi, altri modificabili. Dichiarare il valore, almeno iniziale, di tali parametri all’interno del codice non solo è stilisticamente poco appropriato, ma obbliga ad entrare nel codice qualora ci siano da modificare dei valori. Rosparam permette di raccogliere tutti questi valori in un file con estensione .yaml che viene usato per caricare i dati su un parameter server. Il nodo incaricato di inizializzare l’oggetto in questione, potrà quindi servirsi di roslaunch per

5.4. R.O.S. "Robot Operating System" 145

scaricare i parametri dal server e utilizzarli per assegnare i valori ai parametri dell’oggetto. Chiaramente qualora si voglia modificare uno dei parametri basta aprire il file .yaml e fare le modifiche desiderate, senza mai entrare a contatto con il codice.

5.4.2

Librerie e strumenti per la robotica

Oltre a queste funzionalità di base, ROS fornisce una serie di strumenti specifici per la robotica. E’ il caso ad esempio della libreria tf, che raccoglie tutta una serie di funzioni di trasformazione per tradurre oggetti delle più comuni librerie usate in campo robotico, come Eigen e KDL, in messaggi gia predisposti. In questo modo è possibile, ad esempio, tradurre una posa espressa tramite un oggetto KDL::FrameAcc, in un message spedibile come richiesta in una service call. Questa forma di standardizzazione rappresenta oltre che una bella comodità, anche un potente strumento di riciclo del codice, rendendo compatibili metodi con input e output differenti.

Un altro utile strumento è il pacchetto ROS rqt. Si tratta di un pacchetto che contiene utilissimi strumenti per la progettazione di interfaccie grafiche. In questo ambiente di progettazione basato sulle Qt, abbiamo accesso a tutti i topic in uso e ai relativi dati pubblicati, con la possibilità di creare grafici in tempo reale e molto altro. Inoltre è possibile astrarre ancora maggiormente il meccanismo delle service call attraverso l’impiego di pulsanti e GUI interattive.

Documenti correlati