Progetto Artificial Intelligence
Università degli studi di Messina
Robybot
realizzato da: Alessandro Gemma
3 luglio 2002
a.a.2001/2002
PROGETTAZIONE
La prima fase del nostro progetto ci ha visti impegnati nella costruzione del robot :
1. Due motori collegati a due ruote anteriori
2. Una ruota posteriore che ruota attorno ad un asse
3. Un sensore di contatto annesso a due baffi posti nella parte anteriore del robot
4. Un motore per il braccio costruito per trascinare gli oggetti
5. Un sensore di luce
in più una piccolissima parte estetica, infatti Robybot ha anche 2 occhietti neri e due antenne.
Scelta dell'ambiente e programmazione
Dopo aver sogliato e controllato che i sensori funzionassero e che il firmware fosse stato caricato correttamente
nell' RCX abbiamo deciso in quale ambiente avrebbe dovuto lavorare il nostro robot prendendo spunto da
Braccobaldo.
Robybot si muove su un percorso contrassegnato da una linea nera di nastro isolante su un piano di colore
bianco. Il percorso è intervallato da 6 stazioni di carta di alluminio rilevate dal sensore luminoso.
Attraverso un beacon seriale carichiamo i file delivery. nqc e delivery. pl nell'RCX e facciamo partire il run
(premendo un pulsante verde posto sopra l'RCX).
Il robot parte dalla stazione n.2 con direzione (-1),ovvero guardando alla stazione precedente , giunge alla n.1
si porta in direzione (1) e attende istruzioni. A questo punto attraverso un' interfaccia comunichiamo con
Robybot indicando una stazione del percorso dove troverà l'oggetto da caricare e la stazione dove dovrà
scaricarlo secondo il comando +(n,m).
Una volta effettuate queste operazioni Robybot tornerà alla home ovvero la stazione n.1.
dettagli
Per programmare il robot abbiamo lavorato su Linux utilizzando i sorgenti delivery.nqc e delivery.pl (versione
3 ) di Braccobaldo.
Il sorgente delivery.nqc contiene funzioni scritte in linguaggio c che permettono al robot di aprire e chiudere il
braccio di azionare i motori per andare avanti o indietro , e delle macro che assumono i valori di sogliatura dei
sensori e valori di riferimento utilizzati all'interno delle funzioni.
Per il nostro robot abbiamo usato le funzioni di pickup() e putdown() che servono rispettivamente per caricare
l'oggetto e per scaricarlo.Poi vi è l'in_front_of_object () utile per posizionare l'agente di fronte all'oggetto,
abbiamo eliminato la mypanic() poiché recava problemi al nostro robot aggiungendo una funzione
touch() che definisce il funzionamento del baffo anteriore ovvero quando esso urta un ostacolo sulla pista il
Robybot và un pò indietro e cerca di rilevare la pista libera. Nel delivery.pl abbiamo modificato alcune azioni
esogene e le causes adattandole al nostro percorso e a Robybot.
Problemi
Quando abbiamo iniziato a programmare il nostro agente avevamo inserito un altro sensore di contatto che
avrebbe dovuto "riconoscere " l'oggetto da caricare e cosi' siamo andati a modificare il sorgente nqc
modificando la pickup() ma entrava in un loop infinito che "inebetiva" Robybot. Essendoci rimasto poco tempo
per terminare il progetto abbiamo dovuto rinunciare al secondo sensore.
Abbiamo avuto problemi anche con le batterie comprendendo che per una buona riuscita avrebbero dovuto
essere sempre cariche!!!!!!!!
Il beacon
La Lego ci ha fornito un beacon USB ma con esso si puo' solo programmare in Nqc, cosi' abbiamo
dovuto richiedere un beacon seriale poichè il nostro progetto si basava anche su una parte in Prolog.
Sulla questione del beacon USB ed in generale sulla programmazione Lego vi sono dei riferimenti nel sito
fornito da M.Pagnucco:
http://legousb.sourceforge.net/legousbtower/index.shtml .
Ringraziamenti
Vogliamo ringraziare Franco Salvetti per la sua disponibilità e i suoi consigli , il Prof. Alessandro Provetti che ci
ha permesso di realizzare questo progetto e poi un piccolo ringraziamento alla nostra amica Roberta Maisano
che è stata la nostra mascotte .