Il problema della pianificazione del percorso per robot mobili è sempre stato oggetto di ricerca, sin dalle prime applicazioni della robotica. Oggi, con l'avvento dell'Industria 4.0, le ricerche si concentrano su sistemi autonomi capaci di pianificare in pochi istanti i percorsi per sistemi multi-robot utilizzando come unici feedback quello visuale, proveniente da sistemi di camere, e quello di bordo, attraverso la sensoristica del robot. L'articolo presenta il problema in scala ridotta affrontando il problema di pianificazione di percorso per un robot E-Puck, utilizzando come feedback visivo le immagini provenienti da una webcam e sintetizzando il problema di pianificazione attraverso l'ambiente di calcolo numerico MATLAB. L'articolo, scritto in chiave educational, affronta tutte le fasi della progettazione: dalla raccolta delle immagini sino alla loro elaborazione, passando dal partizionamento dello spazio alla formulazione del problema di planning, terminando con il modello e controllo del robot mobile.
Introduzione
I problemi di pianificazione di percorso sono da sempre di grande interesse nell'ambito della robotica, da quando sono stati realizzati i primi prototipi di robot mobili (ad esempio, quelli dotati di assi sterzanti o skid steering). Il problema di portarsi da un punto A ad un punto B può sembrare banale, ma così non è se al problema di navigazione si aggiunge la presenza di ostacoli (siano essi statici o dinamici) lungo il percorso oppure la presenza di vincoli sulla dinamica del veicolo (massima velocità o accelerazione) oppure quelli provenienti dalle specifiche di missione (il robot deve raggiungere l'obiettivo minimizzando tempo o distanza). Occorre, quindi, definire un approccio sistematico che consenta, ad esempio, attraverso la formulazione di un problema di ottimo, di definire il percorso che il robot dovrà seguire per soddisfare tutte le specifiche. Per quanto possa sembrare lontano e strano, problemi di questo tipo sono continuamente risolti ogni qualvolta cerchiamo un percorso attraverso uno dei servizi di localizzazione, come Google Maps e similari, oppure quando consultiamo l'applicazione dei trasporti pubblici, oppure quando il nostro robot domestico (ad esempio, iRobot) inizia le attività di pulizia. Molto spesso questi problemi vengono semplificati, evitando di considerare ostacoli o vincoli, o più semplicemente trasformando il problema di navigazione da 3 a 2 assi, ma la sostanza e l'approccio utilizzato, grosso modo, restano sempre gli stessi.
Con questi pochi e semplici concetti, l'articolo cerca di spiegare, su di una chiave educational, come è possibile formulare un problema di navigazione complesso per un piccolo robot mobile in presenza di ostacoli lungo il percorso, utilizzando come unici feedback quello visuale di una webcam e la sensoristica di bordo. Il tutto avviene con l'utilizzo di un semplice robot open-source conosciuto anche come E-Puck e del software di analisi numerica MATLAB. Per mantenere la trattazione breve, partiremo da alcuni assunti. Ad esempio, (i) di conoscere la posizione del drone al primo istante; (ii) di poter utilizzare un marker per riconoscere l'orientamento del drone (non utilizzeremo la sensoristica di bordo, ma la camera per questa operazione, questo per evitare la sintesi di osservatori di stato); (iii) non terremo in considerazione l'onere computazionale dell'algoritmo (tutto sarà eseguito a bordo di un PC, senza limiti di tempo per l'esecuzione della missione); (iv) che le dimensioni dell'area di lavoro siano tali da poter considerare trascurabili i vincoli energetici (la durata della batteria) del robot. Ovvero, che il robot riesca sempre a seguire il percorso pianificato. Nonostante queste "forti" limitazioni, l'approccio resta ugualmente valido ed affronterà tutti i passi di sviluppo che tipicamente si affrontano nella formulazione di questi problemi: dalla raccolta delle immagini sino alla loro elaborazione, passando dal partizionamento dello spazio alla formulazione del problema di planning, terminando con il modello e controllo del robot mobile.
Ma cosa significa impostare un problema di ottimo?
Il problema di pianificazione di percorso, molto spesso, si riconduce ad un problema di ottimo. Ma cosa significa impostare un problema di ottimo? Cerchiamo di rispondere a questa domanda evitando l'utilizzo di formalismi matematici inutili, mantenendo la trattazione semplice ma non troppo. Alla fine, siamo pur sempre appassionati di elettronica 😉 Ad ogni modo, nei riferimenti, sono presenti tutti i dettagli per chi volesse approfondire. Quando si affronta un problema di ottimo come prima cosa si parte dalla formulazione della cosiddetta funzione di costo. Ovvero, quell'indice (o la sua serie) di costo che si intende minimizzare. In maniera del tutto equivalente si può impostare il problema come uno di massimo, in cui l'indice di costo viene sostituito con uno di qualità. Definita la funzione, è necessario accompagnarla con quelli che sono i vincoli che possono riguardare area di lavoro, dinamica del veicolo, etc.
Per fare un esempio pratico, pensiamo ad un drone utilizzato nell'agricoltura di precisione. Il drone deve coprire la maggior area possibile minimizzando il tempo di navigazione a causa della durata delle batterie. La funzione di costo, in questo caso, sarà la distanza, mentre il vincolo del problema sarà il tempo a disposizione per coprire l'area. Passando ora da una descrizione grossolana ad una più fine, un problema di ottimizzazione è il problema di trovare la migliore soluzione tra tutte le soluzioni possibili. La forma normale di un problema di ottimizzazione è:
dove f(x) è la funzione obiettivo o di costo, g(x) sono i vincoli di disuguaglianza, mentre con h(x) si indicano i vincoli di uguaglianza, rispetto alla variabile di decisione x. Per convenzione, dato che si cerca di minimizzare la funzione obiettivo o di costo, si parla di problema di minimizzazione. Ovviamente, nel caso in cui f(x) sia un indice di qualità, avremmo un equivalente problema di massimo.
Definizione del problema
Come anticipato nell'introduzione, l'obiettivo dell'articolo è quello di sintetizzare un problema di pianificazione di percorso per un robot mobile utilizzando come sorgenti di informazione le immagini provenienti da una webcam e la sensoristica a bordo del robot. Come prima cosa occorre definire l'area di lavoro delineandone le dimensioni, che devono essere coerenti con quelle del robot. In Figura 1 è riportata l'area di lavoro per il problema in esame, il cui set up sperimentale è composto da un personal computer (un Intel i3 di quinta generazione), su cui gireranno l'algoritmo di Computer Vision (necessario per il riconoscimento degli ostacoli e la posizione del robot) nonché quello per il calcolo del percorso e per il controllo del robot (una volta trovato il percorso ottimo, un algoritmo di controllo automatico regola le velocità dei motori per spostare il robot dal punto iniziale a quello finale).
Il feedback visivo è fornito da una semplice webcam per PC su di una struttura in legno che guarda l'intero scenario dall'alto in una posizione centrale. L'area di lavoro è costituita da lavagna con sfondo nero su cui si muove il robot. Gli ostacoli, invece, sono simulati con dei semplici pezzi di carta bianca. La webcam è una Logitech Webcam C170, con una risoluzione di 640 x 480 px. La bassa risoluzione della camera non influenza il riconoscimento degli ostacoli o del robot. È possibile difatti regolare la precisione dell'algoritmo semplicemente con la distanza della camera dalla base.
E-Puck robot
Definito lo scenario nonché il problema di pianificazione, passiamo alla descrizione del robot. Per il caso di interesse è stato utilizzato un robot E-Puck (Figura 2). Si tratta di un robot mobile open-source e open-hardware dalle molteplici funzionalità, utilizzato in contesti educational e come strumento di prototipazione rapida. La ricca sensoristica di bordo composta da 2 porte micro-USB, uno speaker, LED di stato RGB, WiFi e Bluetooth LE, lettore di schede Micro-SD (utile per lo storage dei log) ed una IMU su due assi, pone come unico limite di utilizzo la fantasia dell'utilizzatore.
Il robot è stato sviluppato dall'Ecole del Polytechnique Federale de Lausanne (EPFL) in Svizzera per scopi di ricerca, ed in particolare per studiare lo swarm di sistemi multi-robot, ma poi è diventato famoso tra le comunità di sviluppatori per la flessibilità ed il suo essere completamente open source. Il cuore di questo robot è un microcontrollore dsPIC 30F6014A a 16-bit, con una frequenza di clock a 64 MHz, che include 8 kb di RAM ed una memoria ROM da 144 kb. Il robot è alimentato da una batteria agli ioni di litio che assicura una autonomia di più di 20 minuti. La comunicazione avviene attraverso un'interfaccia Bluetooth LE ed attraverso un cavo seriale RS232. Ancora, il robot è dotato anche di sensori infrarossi lungo la sua circonferenza che gli consentono l'implementazione di semplici algoritmi di obstacle avoidance (per evitare gli ostacoli). I motori che regolano il movimento sono degli step motors (motori passo-passo). Questo consente di controllare, con una certa precisione, non solo la velocità, ma anche la direzione. Inoltre, attraverso l'ausilio di poche semplici regole odometriche, si può addirittura stimare la posizione del robot nel piano fondendo gli input provenienti dal sensore inerziale. Ovviamente, questa stima avrà tanto più senso quanto più piccoli saranno gli spostamenti del veicolo, e quindi è possibile trascurare eventuali fenomeni di deriva. Infine, il firmware è rilasciato sotto licenza open-source e reso disponibile su GitHub. Questo consente di entrare all'interno di ogni sua parte, modificando il comportamento del robot adattandolo alle esigenze d'uso. L'ambiente di programmazione usa il C, e questo facilita notevolmente le cose perché consente di utilizzare un paniere non da poco di librerie e tool per le cose più disparate. L'ambiente di sviluppo è fornito dalla Microchip e prende il nome di MPLAB.
Acquisizione immagini ed elaborazione
Definiti scenario e piattaforma, si può passare all'elaborazione delle immagini per la gestione del feedback visivo. Ovvero, la definizione degli algoritmi di computer vision che consentono l'individuazione degli ostacoli e il riconoscimento della posizione del robot. Per la loro esecuzione utilizzeremo l'ambiente numerico MATLAB che dispone, attraverso il Computer Vision System Toolbox, di una semplice interfaccia di comunicazione USB per l'acquisizione delle immagini e la loro elaborazione. In Figura 3 è riportato uno snapshot catturato dalla camera in cui si vede il drone E-Puck fermo nella sua posizione iniziale ed alcuni ostacoli emulati attraverso l'utilizzo di semplici fogli di carta bianca. A breve capiremo il perché del bianco, e come è trasformare questa informazione per l'algoritmo di pianificazione. Dalla figura è evidente, inoltre, il marker posizionato sul robot, utilizzato per semplicità per individuare l'orientamento del robot all'interno dell'area di lavoro, utilizzando come origine del sistema di riferimento l'angolo in alto a destra dell'immagine, in cui l'asse X punta verso est e l'asse Y punta verso sud. [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2874 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.