Cominciamo il nostro viaggio con un articolo di introduzione a ROS.

Robot Operating System, è un insieme di framework open-source con un’attivissima comunità di sviluppatori provenienti sia dall’ambito industriale che accademico per la programmazione di robot.

Sviluppato all’Università di Standford da Willow Garage nel 2007, si è evoluto diventando un punto di riferimento per la comunità scientifica e non solo.

Una volta imparato ad usare efficientemente questo tool, sarai in grado di sviluppare applicazioni robotiche in brevissimo tempo e con ottimi risultati.

Come ogni cosa, ovviamente, è necessario innanzitutto apprendere la basi.

Con la prossima serie di articoli dedicati a questo strumento, porrai le basi per una robusta conoscenza di ROS e delle librerie di cui si compone.

ROS e Lego

ROS supporta una serie di piattaforme che vanno dalle più sofisticate a quelle rivolte ad un pubblico più vasto come Lego Mindstorms.

Non reinvetare la ruota!

Ogniqualvolta si presenta la necessità di affrontare un progetto, la tentazione può essere sempre quella di sviluppare tutto da zero.
Ciò implica un notevole dispendio di tempo ed energie nel tentativo di  produrre codice relativo a funzionalità di bassissimo livello, con risultati che spesso non sono soddisfacenti.

ROS, si pone l’obiettivo di realizzare le parti di basso livello per permettere allo sviluppatore di concentrarsi su funzionalità più specifiche e avanzate.

Il risultato sono tempi di sviluppo più bassi e quantità di bug ridotte in quanto è possibile attingere da codice sviluppato e mantenuto da centinaia di sviluppatori sparsi per il globo.

Nodi e Librerie

A questo proposito, la comunità che ha lavorato intorno a questo strumento ha permesso lo sviluppo di robuste librerie che risolvono tanti dei problemi più comuni.

Oltre che darci una mano dal punto di vista dello sviluppo di funzionalità, ROS ci viene in aiuto anche per quanto riguarda l’architettura del progetto.

Se hai già avuto modo di cimentarti in qualche sviluppo, ti sarai certamente reso conto che più componenti vai aggiungendo più diventa difficile mantenere il codice ben organizzato e scalabile. Il risultato spesso è che aggiungere anche solo un altro componente e integrarlo in quanto già fatto diventa un grosso problema.

In questo senso ROS guida lo sviluppatore strutturare il codice attraverso il concetto di nodo.

Un nodo si occupa di gestire la logica di funzionamento di una determinata parte del progetto.
Ciascun nodo poi può comunicare con gli altri tramite strumenti nativi che il framework mette a disposizione.

Un Esempio di Nodo

Prendiamo ad esempio un progetto di un braccio antropomorfo.
Svilupparlo implica la definizione di diversi nodi che andranno ciascuno a gestire una parte specifica del complessivo:

Nell’esempio è necessario, tra le tante, sviluppare un nodo di trajectory planning, ovvero un blocco di codice che si occupa di calcolare le rotazioni che i diversi assi del braccio robotico dovranno effettuare per disegnare la giusta traiettoria e permettere all’end-effector di portarsi in posizione.

Realizzare una cosa del genere da zero significa spendere molto tempo occupandosi di problemi di cinematica inversa, pianificazione di traiettorie per evitare ostacoli, etc.

ROS, come accennato prima, mette a disposizione delle librerie plug&play che con pochi passi ti permetteranno di utilizzare uno dei tanti nodi di trajectory planning già sviluppati e testati.

Oltre a questo, l’organizzazione in nodi e il fatto che questi siano completamente indipendenti rispetto al mondo esterno farà sì che il codice si mantenga ben strutturato e diviso così da rendere semplice l’eventuale integrazione di altri dispositivi.

ROS è Language Agnostic!

Per terminare la nostra carrellata di caratteristiche di questo framework non possiamo non accennare al fatto che ROS è language agnostic.

Cosa significa?
In ROS ciascuno dei nodi dell’esempio precedente può essere sviluppato in un linguaggio diverso.

Ciò è possibile semplicemente perchè i communication tools usati per connettere i vari nodi tra di loro non dipendono da alcun linguaggio specifico.
Attualmente i linguaggi supportati sono Python, C++, Lisp, Java e Lua.

Nei nostri articoli ci concentreremo principalmente su Python e C++.
Passiamo dunque a preparare l’ambiente su cui andare poi ad installare ROS!