L'algoritmo di esplorazione presentato è stato implementato in C++ e compilato tramite il compilatore GCC. Il supporto grafico, necessario per la visualizzazione delle mappe durante l'esecuzione del programma, è stato affidato al programma GNUPLOT. Tramite quest'ultimo è stato possibile seguire tutti i passi di costruzione sia delle mappe parziali, sia di quelle globali. È stato possibile inoltre verificare visivamente l'efficacia sia dell'algoritmo di riallineamento, sia della tecnica di clustering. Ogni snapshot, proiettata a video durante l'esecuzione del programma, è salvata anche su file in formato Postscript, in modo da poter effettuare un confronto tra le mappe ottenute da diverse prove di esplorazione. Per ogni processo esplorativo viene inoltre tenuta traccia degli spostamenti successivi effettuati dal robot all'interno dell'ambiente.
Il metodo proposto è stato testato sul robot mobile MORO2 del laboratorio di Robotica e Intelligenza Artificiale (AIRLAB).
Il robot impiegato è basato su una piattaforma Robuter
,
dotata del sistema operativo real-time Albatros e controllata
tramite un computer con processore Pentium II e sistema operativo GNU/Linux.
La base mobile usata consiste in un veicolo a quattro ruote, con due ruote motrici
posteriori indipendenti e due rotelle anteriori folli. La rotazione del robot avviene
mediante un sistema di differential drive.
Un laser SICK LMS200 è stato impiegato per effettuare le scansioni dell'ambiente,
posto a un'altezza di circa 50 cm dal suolo, sulla parte anteriore della piattaforma Robuter
. Nelle prove effettuate lo scanner laser è stato impostato con un risoluzione angolare di
grado e un'apertura angolare di
gradi. Il range del laser, inizialmente posto
a
metri, è stato fatto variare durante gli esperimenti, al fine di poter capire come
il suo valore potesse influire sul processo di esplorazione;
per evitare il problema delle misure fuori scala sono stati scartati i punti
a distanze maggiori o uguali al range in uso.
In Figura 4.1 è possibile osservare un'immagine del robot mobile MORO2
in uno degli ambienti di prova (AIRLAB) e del laser SICK LMS200 posto nella parte anteriore
della piattaforma mobile.
La comunicazione tra le parti che compongono il robot mobile avviene nel modo seguente:
i dati delle scansioni vengono passati al programma di esplorazione
tramite la seconda porta seriale, che collega lo scanner laser con l'elaboratore.
La prima porta seriale viene utilizzata per inviare comandi di movimento alla piattaforma
Robuter
e ottenere dai sensori le informazioni odometriche.
Per inviare i comandi alla piattaforma mobile vengono utilizzate delle procedure scritte
in C, che permettono di leggere dati e scrivere comandi sulla porta seriale.
Durante lo sviluppo di questa tesi è stata implementata una di queste procedure,
chiamata odom_rob, necessaria
per rilevare le informazioni odometriche. Questa procedura si occupa di
attivare il sistema odometrico, far muovere il robot e misurare lo spostamento effettuato.
Il movimento può essere una rotazione o una traslazione. Per far raggiungere al robot
una certa posizione si impartisce prima un comando di rotazione e poi uno di traslazione.
odom_rob prende come parametri in ingresso
il modo, che indica se il movimento da effettuare è una rotazione o una traslazione
e un valore che indica il valore dello spostamento che si vuole impartire al robot.
Le unità di misura del valore di spostamento sono radianti per le rotazioni
e metri per le traslazioni.
La procedura restituisce due variabili che rappresentano i valori misurati di rotazione
e traslazione ottenute dall'apparato odometrico.
Ogni volta che si rende necessario uno spostamento del robot,
odom_rob esegue i seguenti passi: