http://www.legomaindstorms.com/
Introduzione
Innovazioni rispetto ai Robot delle generazioni precedenti
Realizzazione del robot
Scelte di progetto e programmazione
Codice sorgente e commenti
Conclusioni
Il robot scorpion nasce dall’ idea di creare un automa in grado di muoversi indipendentemente all’ interno di un ring a forma di isola. La base dalla quale siamo partiti è stata l’ osservazione di quello che erano in grado di fare i robot della scorsa generazione, ovviamente per ciò che riguarda il movimento sulle diverse piste.
La nostra intenzione era quella di renderlo completamente indipendente dalla superficie sul quale si fosse trovato ma, dal punto di vista tecnico, avremmo avuto bisogno di più sensori per la gestione della localizzazione e quindi ci siamo concentrati sulla simulazione di un mondo simile ad un’ isola (che potrebbe essere il piano di un grattacielo) ragionando sostanzialmente su due tipi di ostacoli :
pareti : simulate con l’utilizzo di ruote ;
precipizi : rappresentati dal bordo del tavolo;
Il goal del Robot è quello di muoversi su di un piano seguendo la traccia nera che identifica un percorso stabilito e di muoversi liberamente ( a tentoni ) nel caso in cui il percorso non è più disponibile alla ricerca di una nuova pista (goal). Ovviamente la parte più interessane riguarda la gestione degli ostacoli e dei bordi del ring, che richiedono scelte di tipo logico e un comportamento intelligente.
L’idea innovativa del progetto ci ha permesso di migliorare a aumentare le capacità dei Robot creati. Alcune migliorie da noi apportate sono:
Utilizzo di un numero maggiore di sensori di input tramite un collegamento in parallelo (Noi ne abbiamo utilizzati 4 ma si potrebbe arrivare fino a 6)
Movimento indipendente dalla traccia nera.
Indipendenza dal contesto applicativo.
Controllo anti_strapiombo( controllo della presenza di strada davanti al robot prima di cominciare il movimento).
Scorpion ha avuto varie evoluzioni durante le fasi di costruzione e di test, alcune dovute all’ adattamento al tipo di problema ed altre strutturali per garantire robustezza e giusto comportamento.
Costruito con Lego Mindstorm, il robot ha come componente principale il blocco RCX che è in grado di gestire tre sensori di input e tre output, dove per input si intendono sensori di tatto,e luminosi, mentre l’ output gestisce in funzionamento di motori elettrici che garantiscono il movimento.
Durante la fase di progettazione e di realizzazione ci siamo resi conto che il limite del numero dei sensori di ingrasso poteva essere forzato utilizzando due sensori diversi sullo stesso input, e l’ abbiamo realizzato montando sull’ ingresso 2 sia un sensore luminoso che uno di tatto. Il funzionamento è garantito dal fatto che i sensori hanno range di valori diversi, più in particolare quello luminoso arriva a gestire valori ideali fino al 99, che poi realmente non superano mai il 70, mentre il sensore di tatto collegato in parallelo ci ritorna in caso di pressione il valore 100. Questo ci ha permesso di avere a disposizione quattro sensori di ingresso per la gestione del movimento che abbiamo organizzato in questo modo :
Sensore di tatto collegato ad un paraurti che permette di controllare la presenza di un ostacolo a sinistra.
Sensore luminoso utilizzato per la procedura che fa seguire la traccia nera e Sensore di tatto montato su u braccio che oscillando controlla la presenza di strada davanti al robot.
Sensore di tatto collegato ad un paraurti che permette di controllare la presenza di un ostacolo a destra.
Mentre per ciò che riguarda le tre uscite :
Motore collegato alle ruote di sinistra.
Motore per il movimento del braccio che supporta il sensore di tatto di controllo strada.
Motore collegato alle ruote di destra.
Non avendo modo di controllare il sollevamento completo del braccio, si è preferito utilizzare degli elastici per riportarlo nella posizione iniziale in modo da dover gestire solo la discesa.
La costruzione del Robot e lo sviluppo del software sono andati quasi di pari passo e quindi si può descrivere in maniera incrementale.
La prima fase è stata incentrata sulla gestione dei due sensori di tatto collegati ai paraurti (in quanto all’ inizio ancora non avevamo deciso di controllare anche la presenza della strada con il terzo sensore aggiuntivo) che venivano gestiti in maniera da evitare semplicemente l’ ostacolo arretrando e girando a destra o a sinistra a seconda del sensore sollecitato; successivamente il goal, che consiste nel raggiungimento della riga nera dopo aver attraversato la zona libera, ci ha convinti a creare per il Robot una bussola virtuale per tenere traccia della direzione principale da seguire in modo da effettuare le varie correzioni in maniera intelligente e cioè recuperando la direzione principale.
La fase successiva è stata l’introduzione del terzo sensore di
tatto che siamo riusciti a montare in parallelo a quello ottico già utilizzato
per la procedura di follow_Black. Il terzo sensore ci da la possibilità di
testare la presenza della strada davanti al robot in modo da evitare che esso
caschi dal ring e gestendo la correzione come nel caso di urto contro l’ ostacolo.
Le scelte fatte in sede di progettazione dell’ hardware hanno notevolmente influenzato anche l’ aspetto di programmazione che ha cambiato più volte il comportamenti del robot.
Il primo applicativo creato demandava alla parte Delivery.nqc il compito di seguire la traccia nera e di evitare gli ostacoli incontrati sul percorso libero, che poi però lo abbiamo eliminato perché pur funzionando benissimo non rispecchiava propriamente un comportamento intelligente in quanto eseguiva semplicemente delle routine di correzione; spostando questa parte all’ interno del Prolog siamo invece riusciti a dare al robot una direzione principale gestita dalla bussola, e ci sarebbe piaciuto anche poter tenere traccia del percorso seguito e della mappa degli ostacoli incontrati per poterle utilizzare in futuro per ripercorrere la stessa strada.
Il problema principale pero incontrato è stato quello di non riuscire a gestire con precisione i movimenti quindi la nostra idea è stata accantonata, pur restando il problema di gestire le correzioni nel modo più preciso possibile in modo da garantire il funzionamento della bussola. Per risolvere almeno in parte il problema abbiamo inventato una procedura si settaggio dei parametri di rotazione che viene effettuata immediatamente prima di entrare nella zona libera e che facendo una rotazione a piccoli passi fino a 90° setta correttamente i parametri e le temporizzazioni per le successive rotazioni di 45° in caso di correzione; tale procedura è utile per risolvere i problemi dettati da movimenti diversi dovuti alla carica delle batterie.
Per la gestione del Robot sono stati implementati due programmi:
Delivery.nqc vai a .. : che viene scaricato sul RCX e che gestisce i sensori segnalando al Prolog le varie situazioni.
Delivery.pl vai a .. : che va in esecuzione sul PC e che gestisce le azioni esogene che gli vengono comunicate tramite infrarosso.
Date le limitalte possibilità dell’RCX di gestire un elevato numero di input non è stato possibile implementare un sistema veramente intelligente per orientarsi sul piano, tuttavia sono stati ottenuti ottimi risultati.
Ulteriori sviluppi del robot SCORPION potrebbero essere:
gestione indipendente dei sensori di contatto destro e sinistro;
mappa del piano creata in tempo reale dal robot per localizzare gli ostacoli ;
gestione di una mappa dinamica (che può cambiare durante l’esecuzione);
aumentare la complessità della mappa;
parametrizzare le costanti del sensore luminoso per l’adattamento ai possibili cambiamenti nell’illuminazione dell’ambiente esterno;
integrare questo lavoro con l’utilizzo di reti neurali.