Articolo
Wall-G
(23.04.2009 Toro)Introduzione
Perché Wall-G ?
Non c'è stata una ragione particolare, ma dopo avergli visto muovere la testolina
alla prima accensione, mi è venuto in mente il robottino timido di Walt Disney e
lo ho chiamato così. G sta per grey :)
Wall-G non è un robot b.e.a.m. Per questa volta mi sono dedicato alla programmazione,
scegliendo però una demo-board ed un processore semplice e programmabile con un
linguaggio semplice: il Basic. Sempre per restare fedele alla filosofia b.e.a.m.
Descrizione del comportamento
Wall-G non ha una funzione precisa, almeno per il momento. Il suo scopo è
sopravvivere nel suo mondo ed aiutarmi a comprendere con il suo comportamento,
quali strategie adottare per permettergli di potersi muovere senza rimanere
impigliato in qualche pericoloso (per lui) groviglio di sedie o sotto un divano
o incastrato tra due mobili.
Il suo è un carattere mite e curioso allo stesso tempo. Passa il suo tempo a
vagare per casa alla ricerca della luce (è fototropico) che è il suo scopo primario.
Ma non deve essere troppo intensa, altrimenti si spaventa e si blocca.
Cerca con la testa una direzione con meno luce e vi si dirige alla ricerca di un
luogo in ombra (diventa fotofobico). Una volta trovato continua a muoversi finché
la luce non diventa così bassa da farlo fermare restando in uno stato di quiete.
Da questo stato si toglierà solo quando la luce ambiente diventerà sufficientemente
intensa. In questo caso ritornerà a muoversi, di nuovo alla ricerca di una fonte
luminosa. Periodicamente controllerà lo stato della sua batteria e se scarica si
porterà in uno stato di freeze in attesa di essere ricaricato. E' anche contento
quando trova la luce, infatti suona.
Schema
Wall-G usa come elettronica la Project Board CHI035 della Revolution Education Ltd equipaggiata di un controller Picaxe 18X dotato di 5 ingressi utili di 4 uscite di potenza a Fet e di 4 uscite derivate dal motor controller L293D che vengono usate per pilotare i due motori del robot. I motori sono dei MicroMotors da 75 rpm a 12V con una coppia massima di 2.55 Kg*cm ed un assorbimento massimo di 440 mA a 12V. Essendo però alimentati da una batteria a 6V tramite l'integrato L293D, ai suoi capi arrivano più o meno 4-4,5 Volt che sono però largamente sufficienti a spostare il robot. La velocità di crociera sarà però molto bassa. Sono stati usati perché avanzati dal vecchio chassis del robot Dobby.
Gli ingressi sono 5 di cui 2 usati in analogico. A questi due (in0 e in1) sono collegate due LDR, gli occhi di Wall-G. Gli altri tre ingressi (in2, in6, in7) sono collegati ai bumper ottici sinistro, destro e centrale. Gli ingressi in3 e in4 sono riservate alla programmazione del Picaxe 18X.
Le quattro uscite sono utilizzate così:
Out0 (conn. Test) è connessa al servo Hitech 3003 che è la testa del robot
su cui sono collegate le LDR per una “visione” differenziale.
Out1 è collegata ad un trasduttore acustico e serve ad esternare i propri
intenti (la musichetta all'atto dell'accensione) o le proprie emozioni (quando vede
troppa luce o quando di sveglia).
Out2/out3 sono collegate a due led rossi e danno la misura approssimativa
della quantità media di luce catturata dalle due LDR. Serve al solo scopo di
calibrazione delle costanti interne al programma. Danno una misura in codice binario
su due bit della misura effettuata dagli ADC interni al Picaxe (0-255). Per cui:
led1 = 0 led0 = 0 => 0-63
led1 = 0 led0 = 1 => 64-127
led1 = 1 led0 = 0 => 128-191
led1 = 1 led0 = 1 => 192-255
Layout della Picaxe Project Board
Schema dei collegamenti delle periferiche
Montaggio
Per l'assemblaggio di Wall-G sono state usate tutte parti riciclate, a cominciare
dalla base circolare in legno che è quella del vecchio Dobby.
La base è in legno ed ha il diametro di 25 cm. E' realizzata in legno compensato
da 4 mm di spessore. Sotto la base, tra due coppie di listelli da 2x2 cm vengono
ospitati due motori della Micromotors da 75 giri al minuto. I collegamenti verso
il ponte-H passano attraverso un foro centrale di 1 cm di diametro. Le ruote sono
Tamiya e sono montate sui motori tramite due mozzi adattatori in alluminio.
Posteriormente è montato un ruotino pivottante di quelli che si trovano nei vari
Brico. Anteriormente è presente uno stabilizzatore in legno ricavato dallo scasso
per l'alloggiamento delle ruote. Nella parte superiore della base sono alloggiati
la batteria da 6 volt, la Project Board, i sensori e la testa del robot. La testa
è realizzata con un servo Hitech S3003 con ai lati due tappi di pennarello bianco
opaco contenenti le due LDR per il tracking della luce.
Una nota particolare va fatta su questi due “occhi”. In origine avevo pensato a due
tubi nero opaco dove alloggiare le LDR ed avere una forte direzionalità.
Fortunatamente non sono riuscito a reperirli di diametro sufficiente a contenere
le LDR e così ho ripiegato sui tappi di pennarelli color bianco opaco. Questa è
stata una fortuna in quanto danno una “visione laterale” debole ma sufficiente a
direzionare preventivamente il robot verso la sorgente luminosa. Questo rende il
robot più “soft” nella ricerca della luce e più efficace poiché non ha bisogno di
avere la luce perfettamente allineata agli occhi per poterla vedere. Inoltre la
direzionalità degli occhi non ne risente in maniera particolare.
Ai lati, a ore 10, ore 12 e ore 2 sono presenti tre bumper a infrarossi dello
stesso tipo di quelli usati su Dobby (IS471F) con un range di rilevazione di circa
5 cm. Successivamente ne verrà applicato uno meccanico nel semicerchio anteriore,
per la rilevazione degli ostacoli bassi o invisibili agli infrarossi.
Logica di Programmazione
Il programma scritto in basic è abbastanza semplice da capire e sufficientemente
commentato. E' costituito da un ciclo principale contenente tre sottoprogrammi
che usano il polling per interrogare le periferiche.
Nell'ordine vengono interrogate le LDR, poi i sensori perimetrali. In apparenza
quindi la priorità sembrerebbe del sistema di tracking, invece no. Se un sensore
perimetrale viene attivato, il controllo passa immediatamente a questo e dopo
ritorna al sistema di tracking.
Da realizzare: Nel caso la batteria scenda al di sotto di un valore di sicurezza, il robot si fermerà, spegnerà tutti gli attuatori (motori, led, ecc.) e si metterà in modalità basso consumo in attesa di essere ricaricato. Al momento non è presente un sottoprogramma per la guida verso una stazione per la ricarica.
Listato del programma Basic
In testa al programma ci sono i commenti necessari a ricordare le funzioni dei
pin di ingresso, uscita e delle variabili (registri) interne al microcontroller
visto che le risorse sono limitate e vengono riutilizzate per più funzioni.
Segue il main-program che è composto da alcune istruzioni per la priorità delle
azioni e da tre chiamate a sottoprogrammi: tracking, bumper e antistallo. I primi
due sottoprogrammi sono abbastanza banali.
Il primo esegue il tracking di una fonte luminosa utilizzando due LDR collegate agli ingressi ADC del controller. Le due intensità vengono misurate e ne viene fatta la somma algebrica. In base al risultato viene decisa la direzione verso cui muoversi. Naturalmente è presente una isteresi variabile per evitare azioni incontrollate del sistema.
Il secondo esegue le operazioni anticollisione rispetto gli oggetti dell'ambiente. A questo scopo sono presenti tre bumper a luce infrarossa.
Il terzo verifica che non sia in stallo controllando che non ci siano state troppe oscillazioni gira-a-destra e gira-a-sinistra. Se ce ne sono state più di 5 suppone di essere andato in stallo ed esegue un dietrofront temporizzato e variabile a caso. Questo per evitare, in casi particolari, di ritornare di nuovo in stallo. La temporizzazione è resa variabile sommando alla parte fissa un valore di tempo determinato dalla istruzione “random”.
A seguire ci sono tutti i sottoprogrammi necessari al funzionamento. Da notare che in alcuni casi i due sottoprogrammi per luce e bumper possono entrare in conflitto tra di loro (es. luce a destra e bumper a destra o viceversa) per cui dopo “n” oscillazioni occorre effettuare una manovra di disimpegno anche se questa va a scapito dello scopo del robot e cioè ricercare la luce. Anche la quantità di luce ambiente varia il comportamento del robot in quanto con troppa luce le LDR vanno in saturazione e non raggiungono il loro scopo che è quello di decidere la direzione di ricerca (tracking).
[filmati e pdf]
38MB QuickTime |
9MB QuickTime |
29MB QuickTime |
10MB QuickTime |
25MB QuickTime |
15MB QuickTime |
Wall-G - Nuovo Programma
11MB QuickTime |
14MB QuickTime |
19MB QuickTime |
APPROFONDIMENTI
All news