Articolo

10.05.2009

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
Wall-G.pdf



APPROFONDIMENTI






Questo sito fa uso di cookies. Se non sei daccordo con l'uso di questi non proseguire la navigazione in questo sito. http://www.aboutcookies.org

All news

Google site search
imageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimage

Top Ten
wall-G cacciatore1 cora servolin beaminpillole teoservi cosasonoidatasheet easybotchassis basetondaperrobot identificazionedeitransistor
TECHNO-RING










gammitalia.org



Locations of visitors to this page


Do NOT follow this link or you will be banned from the site!Do NOT follow this link or you will be banned from the site!