Oggi, esistono solo due versioni del middleware ROS: ROS e ROS2. La prima versione di ROS è talvolta chiamata ROS1. In questo articolo chiameremo la prima versione “ROS” e la seconda versione “ROS2”.
Riteniamo importante, però, ricordare che ROS2 è attualmente in fase di sviluppo. Alcuni package sono già stati pubblicati, ma la maggior parte di essi non è ancora compatibile. Inoltre, alcune funzionalità di ROS2 non sono ancora disponibili.
Vi invitiamo a restare aggiornati sulle nuove funzionalità di ROS2 e di provarle in vista del rilascio di una versione stabile e completa.
Un passo indietro: che cos’è ROS?
Robot Operating System (ROS) è un insieme di librerie software e strumenti open-source che permettono di creare applicazioni robotiche. Dai driver agli algoritmi avanzati, e ai potenti strumenti di sviluppo, ROS ha quello che serve per il vostro futuro progetto di robotica.
Per maggiori informazioni, la lettura del nostro precedente articolo su ROS vi darà una panoramica di cos’è ROS, dei suoi protocolli di comunicazione e degli strumenti disponibili per ottimizzare i suoi sviluppi.
Per testare ROS2, innanzitutto sarà necessario installare Ubuntu (se non lo avete già fatto). Attenzione all’installazione della versione di Ubuntu, in funzione di quest’ultima, cambierà la distribuzione di ROS/ROS2:
Nei vari link sopra presenti, troverete altri tutorial per installare ROS.
Se volete provare delle versioni precedenti o più recenti, potrete utilizzare Docker images.
Docker ne semplifica la creazione, il deployment e l’esecuzione delle applicazioni utilizzando container. Questi ultimi permettono di impacchettare un’applicazione con le librerie e le altre dipendenze necessarie.
Docker funziona un po’ come una macchina virtuale. Ma invece di creare un intero sistema operativo virtuale, Docker consente alle applicazioni di utilizzare lo stesso kernel Linux del sistema su cui vengono eseguite. Un container Docker esegue un’immagine Docker, che è un file composto da diversi strati di librerie e dipendenze.
Vi consigliamo di lavorare con le immagini Docker di ROS2 durante i vostri test, per non rischiare di compromettere l’ambiente ROS. Una volta che il vostro computer funziona con Ubuntu e ROS è pronto all’uso, per iniziare potete andare sui tutorial ROS.
La storia di ROS per spiegare ROS2
L’ambiente ROS è stato sviluppato da Willow Garage per il suo robot PR2, un robot umanoide in grado di navigare autonomamente in un ambiente conosciuto.
In quel momento, i suoi creatori sapevano che il PR2 non sarebbe stato il solo robot sul mercato. Piuttosto che sviluppare un programma specifico per il PR2, decisero di implementare un software generico e adattabile, in modo da poterlo migliorare o modificare ulteriormente in seguito. Lavorarono quindi su un middleware, ROS, definendo livelli di astrazione utilizzabili anche per altri robot.
Per fare ciò, si basarono su alcune caratteristiche del robot PR2:
-
- Un solo robot
-
- Nessuna esigenza in tempo reale
-
- Eccellente connettività di rete
-
- Massima flessibilità (funziona ad esempio sia su basi mobili che su robot umanoidi)
Oggi ROS è utilizzato non solo per robot PR2 o robot simili, ma anche su robot mobili di qualsiasi dimensione: umanoidi, bracci industriali, robot mobili outdoor e veicoli aerei.
In seguito, ROS è stato adattato in altri ambiti, oltre alla comunità di ricerca accademica a cui era inizialmente destinato.
Sempre più robot basati su ROS vengono proposti sul mercato da produttori specializzati, e anche le agenzie governative stanno investendo su ROS per l’integrazione nei loro sistemi.
Tutti questi utenti hanno però finito per scontrarsi con i limiti di ROS, progettato in funzione delle caratteristiche del PR2 (vedi sopra). Motivo per il quale la comunità ha ritenuto opportuno sviluppare una piattaforma migliore, in grado di rispondere alle nuove esigenze dei robot:
-
- Flotte di robot che collaborano tra loro
-
- Software integrato su piccole schede elettroniche
-
- Sistemi in tempo reale
-
- Reti instabili
-
- Ambienti di produzione
Un’altra ragione per integrare ROS2 è quello di cogliere l’opportunità di migliorare le API orientate agli utenti. In tal modo, sarà possibile creare nuove API che incorporano il meglio dell’esperienza maturata dalla comunità con le API di prima generazione.
Perché non limitarsi a migliorare ROS?
I cambiamenti descritti sopra potrebbero effettivamente essere integrati nel nucleo del codice esistente. Questa opzione è stata infatti presa in considerazione, ma data la natura invasiva dei cambiamenti, modificare l’attuale sistema di ROS potrebbe causare gravi malfunzionamenti nelle applicazioni sviluppate dai numerosi membri della comunità.
Per questo motivo, ROS non dovrebbe subire variazioni, mentre ROS2 verrà costruito come un insieme di package che potranno essere installati in parallelo, senza interferire con ROS.
Chi dovrebbe passare a ROS2 fin da subito?
Ricercatori A meno che la pubblicazione non riguardi le prestazioni o le funzionalità di ROS2, sarebbe opportuno per il momento attenersi a ROS.
Studenti
Dovranno attualmente continuare a lavorare con ROS a causa della mancanza di package compatibili e della stabilità complessiva.
Tra non molto, ROS2 sarà pronto ad essere adottato su larga scala. ROS e ROS2 a loro volta condividono molteplici concetti, per questo sarà possibile sfruttare le conoscenze acquisite quando vi sarà il passaggio a ROS2.
Insegnanti
Al momento dovranno continuare ad insegnare ROS, restando aggiornati sulle novità di ROS2.
Tuttavia, si consiglia di familiarizzare con ROS2 almeno attraverso i vari tutorial disponibili, per essere pronti nel momento in cui sarà rilasciata la versione definitiva di ROS2. In termini di attrezzature, la piattaforma TurtleBot 3 potrebbe rappresentare un’opzione interessante, grazie alla sua compatibilità sia con ROS che con ROS2.
Ricercatori
A meno che la pubblicazione non riguardi le prestazioni o le funzionalità di ROS2, sarebbe opportuno per il momento attenersi a ROS.
Imprese
Dovrebbero seriamente prendere in considerazione il passaggio a ROS2 per ridurre la quantità di trasferimento di codice in futuro. Il progetto dovrebbe essere affidato a utenti esperti di ROS.
Produttori
È il momento giusto per cambiare. ROS2 Dashing è la prima versione LTS, quindi ora è possibile iniziare a portare i driver in tutta tranquillità.
Quali sono le differenze importanti tra ROS e ROS2
Applicazioni | ROS | ROS2 |
Piattaforme | Testato su Ubuntu Supportato anche su altre versioni di Linux e su OS X | Attualmente testato e supportato su Ubuntu Xenial, OS X El Capitan e Windows 10 |
C++ | C++03 // non sfrutta le funzionalità di C++11 nelle sue API | Utilizza principalmente C++11 Si è iniziato a utilizzare C++14 e si prevede l’uso di C++17 |
Python | Cible Python 2 | >= Python 3.5 |
Middleware | Formato di serializzazione personalizzato (protocollo di trasporto + meccanismo di discovery centralizzato) | Attualmente, tutte le implementazioni di questa interfaccia si basano sullo standard DDS |
Sincronizzazione del tempo e delle durate | I tipi di durata e tempo sono definiti nelle librerie clienti, codificati in C++ e Python | Questi tipi sono definiti come messaggi e sono quindi coerenti tra i diversi linguaggi di programmazione |
Componenti con ciclo di vita | Ogni nodo ha generalmente la sua funzione principale. | Il ciclo di vita può essere utilizzato da strumenti come roslaunch per avviare in modo deterministico un sistema composto da molti componenti |
Modello multi-thread | Il programmatore può scegliere solo tra esecuzione single-thread o multi-thread. | Sono disponibili modelli di esecuzione più raffinati e possono essere implementati facilmente esecutori personalizzati. |
Nodi multipli | Non è possibile creare più di un nodo all’interno di un singolo processo. | È possibile creare più nodi all’interno dello stesso processo |
roslaunch | I file roslaunch sono definiti in XML con capacità molto limitate. | I file di lancio sono scritti in Python, permettendo l’uso di logiche più complesse come le condizioni, ecc. |
DDS compatibili con ROS2
ROS2 utilizza un DDS (Data Distribution Service) per la pubblicazione e la sottoscrizione, al posto di un gestore di messaggi personalizzato. Questo migliora le prestazioni di trasmissione con gli aggiornamenti DDS. Poiché il DDS può influenzare il comportamento di ROS2, sarà necessario scegliere la versione più adatta alle specifiche del proprio progetto tra i diversi DDS esistenti.
Ecco alcune entità DDS:
-
- FastRTPS / eProsima
-
- Vortex OpenSplice / ADLINK Technology
-
- Connext / RTI
-
- CoreDX / Twin Oaks
-
- Cyclone DDS / Eclipse
Ulteriori informazioni sui DDS sono disponibili nell’articolo di Rover Robotics e su ROS2 on DDS (vedi sotto).
Gestione dei nodi in ROS2
Una delle caratteristiche principali introdotte in ROS2 è la gestione del ciclo di vita dei nodi, pensata per offrire un migliore controllo dello stato del sistema ROS.
Infatti, questa funzionalità permetterà a roslaunch di assicurarsi che tutti i componenti siano stati istanziati correttamente prima di autorizzare un componente a iniziare l’esecuzione del proprio comportamento.
Consentirà inoltre di riavviare o sostituire i nodi durante l’esecuzione.
Si tratta di una caratteristica essenziale per la sicurezza dei robot.
Implementazione di ROS2 – Piattaforma/Tutorial
Ogni robot e componente compatibile con ROS sarà compatibile con ROS2 non appena saranno disponibili i driver, i package e gli SDK per le implementazioni di ROS2.
Robotis è una delle prime aziende ad essersi lanciata in ROS2. In passato, i suoi esperti di robotica hanno sviluppato dei tutorial di qualità per l’apprendimento di ROS sul primo TurtleBot.
Con i TurtleBot 3 Burger e Turtlebot 3 Waffle Pi , Robotis ha lavorato su un tutorial per scoprire ROS2 e implementare la navigazione dei robot:
Robotis ha sviluppato il proprio package per il TurtleBot 3. Sul loro GitHub, hanno collegato pagine wiki e codice open source. Questo rende il TurtleBot 3 un’ottima piattaforma per imparare a usare ROS2, sia che siate principianti sia che siate sviluppatori esperti.
Se avete ancora a disposizione un TurtleBot 2, potete usare anche ROS2. Infatti, Robotics ha pubblicato una dimostrazione pratica di ROS2 per TurtleBot2 .
Come migrare da ROS a ROS2
Esistono due diversi tipi di migrazione dei pacchetti ROS:
-
- Migrare il codice sorgente di un pacchetto ROS esistente a ROS2 con l’intenzione che una parte significativa del codice sorgente rimanga identica o almeno simile;
-
- Implementare la stessa o simile funzionalità di un pacchetto ROS per ROS2, ma con l’ipotesi che il codice sorgente risulti significativamente diverso.
Attualmente il primo tipo di migrazione del codice sorgente è ancora molto poco documentato.
Si consiglia di consultare questo articolo che si concentra sul secondo caso e descrive i passaggi necessari da seguire per migrare un pacchetto ROS verso ROS2. Tuttavia, non si tratta di una guida passo-passo per la migrazione, ma piuttosto di una guida per utenti esperti.
Risorse per il middleware di ROS2
Desiderate maggiori approfondimenti?
Ecco alcune risorse utili per aiutarvi a fare il passo successivo!
Risorse Ufficiali
Tutorial per ROS2
L’azienda Rover Robotics lavora su ROS2 e ha pubblicato sul suo blog un tutorial sulle ultime novità per implementare la navigazione su ROS2. In questo articolo, troverete molte informazioni utili riguardanti gli ultimi malfunzionamenti di ROS2, i vantaggi e gli inconvenienti dei vari DDS, su come eseguire le dimostrazioni e altri consigli pratici.
Potete anche consultare il sito “The Construct”, dove sono stati pubblicati alcuni articoli sulla configurazione di ROS2.
Gazebo, il noto ambiente di simulazione, è disponibile su ROS2. Per ulteriori informazioni, consultare questo articolo.
Infine, è possibile consultare il sito GitHub di Gazebo.