Articolo
Nome: HULK
(agosto-novembre 2003)
Costruito con profilati in alluminio ad elle e basette millefori come base. Usa due motori con scatola di demoltiplica della Solarbotics comandati da un mucchietto di neuroni interconnessi tra loro. Il circuito parte da quello progettato da Wilf Rigter, poi stravolto fino all'inverosimile quando mi sono accorto che i relè assorbivano troppo per essere comandati direttamente dai sensori ad infrarosso o dall'uscita di un buffer di tipo AC (i più potenti come corrente di uscita). Anche io ovviamente ho sostituito i sensori meccanici con sensori ad infrarosso, ma di tipo QRB1134.
Da qui è nato il primo robot beam programmabile per minisumo.
Minisumo Beam Programmabile
( Domenico Mancini d.mancini@tiscali.it )
1. Schema elettrico
fig.1 Schema elettrico del minisumo beam con programmazione sinaptica.
2. Descrizione
Il minisumo di cui si vede sopra lo schema elettrico è stato progettato secondo i dettami della filosofia beam, cercando di innovare questa con una concezione meno "spinale" e più "cerebrale".
Cosa intendo con questo ?
Un classico robot beam è il walker. Il walker è formato da due o più motori montati sul corpo e collegati meccanicamente alle gambe. Questi motori vengono comandati da un microcore, formato da quattro neuroni Nv collegati ad anello in cui circola un impulso. Questo impulso fa si che i motori vengano comandati alternativamente ed in sequenza così da far avere al walker l'andamento tipico di un insetto.
Il microcore può essere quindi considerato come un midollo spinale dove viaggia un impulso nervoso. L'impulso nervoso dà ai motori il comando del movimento secondo dei canoni prestabiliti e non modificabili senza una pesante modifica a livello hardware. Non c'è quindi un potere decisionale che governa il robot. Anche nel walker con sensori di contatto che permettono allo stesso di evitare gli ostacoli con cui viene in contatto, viene cambiato solamente il percorso dell'impulso per un tempo prestabilito.
Il minisumo ovviamente viaggia su ruote, quindi non è applicabile il concetto di midollo spinale come serie chiusa o aperta di neuroni. Si può però applicare il concetto di arco riflesso per cui ad un impulso in ingresso ai neuroni corrisponde una risposta specifica. Questo è il concetto che ho usato in questo progetto, non limitandolo però ad una architettura rigida e non modificabile.
Il circuito elettrico può essere suddiviso in quattro parti disposte verticalmente a strati sovrapposti.
Il primo strato, quello più in alto, è la parte di potenza. Il circuito è formato dai motori, dai rispettivi relè di comando e dallo stabilizzatore a 5 volt che alimenta sia i motori sia l'integrato della parte sensori. A destra è visibile il circuito di ritardo che alimenta i motori dopo 5 secondi dall'avvio. I motori sono stati alimentati a 5 volt con la stessa tensione dei micrologici perchè essendo la loro tensione nominale 3.5Vcc non avrebbero retto ad una tensione superiore.
Sotto a questo c'è la parte di controllo formata da otto neuroni concatenati tra loro per formare due stadi, uno sinistro e uno destro che comandano i rispettivi motori. Descriviamo quindi solo una sezione, quella di sinistra.
Il neurone di base è Q2 collegato in uscita al relè RL1 e con l'ingresso applicato direttamente alla sua uscita. In questo modo funziona da timer, per cui all'accensione attiva il relè per il tempo dato dalla costante RC, do R è in questo caso la giunzione BE del transistor Q2. Dopo questo tempo torna allo stato di riposo con il condensatore C1 carico (lo stesso vale per la sezione di destra). A questo punto il robot con i relè allo stato di riposo viaggia in avanti.
Se l'uscita del neurone Q2 viene portata a massa, questo provocherà l'attivazione del relè RL1 che invertirà il senso di rotazione del motore corrispondente facendo girare il robot a sinistra. Questo succederà per il tempo in cui viene posto a massa l'uscita del neurone più il tempo di carica di C1.
Questa
funzione è svolta dai
neuroni Q3 e Q4. La differenza tra i due è che Q3 attiva in
neurone Q2 mentre
Q4 attiva sia il neurone Q2 sia il neurone Q7
facente parte della sezione di destra. Abbiamo quindi due situazioni:
il tempo dato dal condensatore C1. Questo provocherà l'inversione di rotazione del motore di sinistra per un tempo determinato (il robot gira a sinistra).
- Attivazione di Q4: RL1 e RL2 vengono messi a massa per il tempo in cui Q4 viene attivato, poi rimangono a massa per il tempo dato dai rispettivi condensatori C1 e C2. Poichè i due condensatori non vengono scaricati alla stessa tensione, i tempi residui di attivazione dei relè saranno differenti. Questo provocherà l'inversione di marcia di entrambi i motori per il tempo in cui è presente l'impulso su Q4. Poi il primo continuerà la rotazione inversa per il tempo t1 dato da C1, che è lungo. L'altro continuerà la rotazione inversa per il tempo t2 dato da C2, che è corto (il robot fa marcia indietro e poi gira a sinistra).
Le stesse situazioni valgono specularmente per la sezione di destra.
Sotto questa sezione c'è il connettore sinaptico a cui è dedicato il capitolo seguente. Esso serve per creare i collegamenti tra i neuroni sensori, formati dal sensore vero e proprio e dal rigeneratore di segnale (tipo Nu) e i neuroni effettori che abbiamo descrito sopra.
L'ultimo strato, quello più in basso, è lo strato dei neuroni sensori. Questi sono formati dal sensore ottico tipo QRB1134 e da un neurone tipo Nu formato da una RC (in cui la C è la capacità di ingresso dell'inverter) e da un inverter tipo 74AC14 o meglio 74HC14. Nel caso di segnale molto disturbato all'ingresso del neurone, applicare un condensatore da 100nF tra l'ingresso e la massa dell'inverter.
3. Programmazione sinaptica
Come si può vedere dallo schema elettrico del minisumo, c'è una netta ed apparentemente inspiegabile separazione tra la zona sensori ottici (in basso) ela parte minisumo vera e propria (in alto al di sotto della zona di potenza che include relè, motori e stabilizzatore a 5Vcc).
Questo perchè si è scelto di non penalizzare il progetto fornendolo delle sole funzionalità di base (come evita il bordo-ring, attacca l'avversario, ecc.) per mezzo di collegamenti fissi tra sensori e motori. Questo tipo di approccio infatti, pur essendo efficace, potrebbe rivelarsi troppo rigido in eventuali combattimenti contro robot programmabili tipo MarkIII(c).
E'
stata scelta
quindi
una via intermedia tra la
programmazione fissa e quella software, che avrebbe richiesto
un
microcontrollore. La programmazione è perciò di tipo
hardware per mezzo di sinapsi.
Cosa è una sinapsi? La sinapsi è il collegamento che c'è tra due neuroni e che avviene tra il dendrite del neurone ricettore e l'assone del neurone trasmettitore.
Nel nostro caso la sinapsi tra il neurone trasmettitore (sensore ottico) ed il neurone ricettore (transistor) è costituita da un collegamento semplice oppure un diodo se più trasmettitori vanno ad un ricettore oppure nel caso più elaborato da una memoria RAM statica da 256 byte.
3.1 La matrice di programmazione
Il connettore sinaptico è un comune zoccolo a 16 pin, otto per gli ingressi e otto per le uscite. I segnali sono quelli riportati nella tabella sottostante.
Tabella 1
Possiamo descrivere il connettore sinaptico come una matrice bidimensionale alla stregua di una scacchiera o meglio la mappa della battaglia navale.
Abbiamo quindi le righe che rappresentano i sensori (i numeri da 1 a 8) e le colonne che rappresentano le risposte preprogrammate dei neuroni effettori (le lettere da A ad H). Per collegare l'uscita del neurone sensore e l'ingresso del neurone effettore (creare la sinapsi) dovremo unire un numero ad una lettera. La “X” nella congiunzione della riga con la colonna rappresenta la sinapsi, il collegamento fisico che effettueremo tra i due neuroni.
Il collegamento sinaptico viene descritto come 1A oppure 5D, andando nel verso del segnale (non A1 e D5).
Tabella 2
Facendo fede alle note sullo schema elettrico possiamo vedere che la sinapsi in 2D significa che quando verrà attivato il sensore anteriore destro il robot effettuerà la manovra di marcia indietro e svolta a sinistra così da non fuoriuscire dal bordo del ring e rientrare in gara.
Analogamente la sinapsi 1E significa che quando verrà attivato il sensore anteriore sinistro il robot effettuerà la manovra di marcia indietro e svolta a destra.
Dal punto di vista del collegamento fisico questo significa che bisognerà collegare con un filo elettrico il pin D con il pin 2 del connettore sinaptico ed anche il pin E con il pin 1.
Questo vale fintanto che il collegamento e uno a uno. Nel caso di unione tra due neuroni sensori ed uno effettore, i collegamenti vanno effettuati con un diodo (diodo sinaptico) così da non far interferire tra di loro le due uscite dei neuroni sensori.
Vediamo l'esempio della tabella sottostante:
Tabella 3
In questa tabella abbiamo aggiunto una nuova funzionalità. Supponiamo infatti che per qualche motivo il robot durante un disimpegno dal bordo ring faccia marcia indietro (che è temporizzata) andando di nuovo a superare il bordo ring. Se continuasse la marcia indietro, si troverebbe butttato di nuovo fuori del ring perdendo la gara.
Le doppie sinapsi 7BG e 8BG collegando i sensori posteriori, fanno sì che l'azione di retromarcia venga inibita ed il robot ritorni a marciare in avanti.
Se collegassimoi tre punti insieme, metteremmo in sovrapposizione i due ingressi B e G per cui se ci fosse un altro collegamento sinaptico 6B, automaticamente porterei il segnale anche a G, cosa che non voglio. Userò quindi dei diodi sinaptici com enello schema sottostante così da far viaggiare il segnale in una sola direzione, da 7 a B e da 7 a G inibendo il collegamento da B a G e viceversa.
Vediamo sotto l'equivalente hardware della tabella 3.
Possiamo comunque sostituire i due collegamenti diretti con due diodi.
Un ultimo esempio di programmazione sinaptica:
Tabella 3
In questo caso abbiamo inserito un ipotetico sensore che alla sua ativazione fa fare retromarcia al robot. Questo per far notare la infinita programmabilità del circuito. Unico limite è l'azionamento sequenziale di più di due risposte. Ma a questo si può rimediare tramite un sequencer che può essere facilmente implementato tramite una catena di neuroni (chain network) opportunamente temporizzata le cui uscite vengono collegate ai neuroni effetori tramite altre sinapsi.
-
Il neurone temporizzatore
Qualcuno si sarà chiesto: ma a che servono i neuroni temporizzatori?
Semplice, a prolungare una azione oppure come in questo esempio ad eseguirne una dopo l'altra. Analizziamo la tabella sinaptica:
Vediamo le connessioni partendo dallo stimolo, che in questo caso è il sensore anteriore destro “1”.
Il sensore si attiva, manda il comando su D attivando la sequenza retromarcia + svolta a Sx.
Lo stesso stimolo viene riportato indietro al neurone temporizzatore 3sec (notare la sinapsi -X che indica il diodo montato in senso inverso e quindi in questo caso la sinapsi diventa D5). Lo stimolo viene negato dal neurone invertitore (sinapsi 63)
Una volta negato viene inviato alla sequenza C (sinapsi 4C) che prolungherà l'inversione di marcia del motore sinistro.
Con questo stratagemma avremo due eventi (sequenza D e sequenza C) sovrapposti uno all'altro. Questo provocherà la marcia indietro del robot e la successiva svolta, superiore a 90- della sequenza D, data dal prolungamento della sequenza C). In questo modo potremo avere due differenti comportamenti a seconda che venga attivato il sensore di destra o quello di sinistra.
L'attivazione del neurone temporizzatore si ottiene effettuando il ponticello tra i contatti C e T.
-
Varianti
E' possibile, qualora non si usi il neurone temporizzatore, utilizzare lo stesso come ingresso semplice per sensore. Per fare questo occorre spostare il ponticello dai contatti T e C ai contatti C e S , in questo modo si escluderà il condensatore elettrolitico di temporizzazione e si inserirà il resistore di pullup.
Se si utilizza il neurone temporizzatore come ingresso sensori, si avrà a disposizione un ulteriore ingresso bruto per i sensori ( SPARE_SENSOR ) che corrisponderà al punto “5” della matrice sinaptica. Questo ingresso potrà essere collegato verso la +5V con un interruttore o sensore a contatti o qualsiasi altro tipo che possa pilotare l'ingresso dei transistor ( ON = bassa resistenza, OFF = resistenza infinita ). Usando per questo ingresso una ampolla al mercurio potremo avere un semplice misuratore di inclinazione per poter contrastare un eventuale ribaltamento del robot con apposite manovre.
Anche il neurone invertitore può essere usato come ingresso sensori. Il suo ingresso è il Test Point TP4, mentre l'ingesso sensori del neurone temporizzatore è il Test Point TP6.
4. Appendice
La foto vista dall'alto del robot minisumo completa con accanto sulla destra il programmatore sinaptico fuori dalla sua sede naturale, lo zoccolo sinaptico. In questa versione si possono avere più programmatori sinaptici intercambiabili, ognuno con le sue funzioni e quindi con il proprio schema comportamentale. In una versione successiva verrà presentato un programmatore sinaptico con memoria RAM che permetterà una programmazione realmente "al volo" tramite microswitch.
Sono stati evidenziati i neuroni effettori (i transistor tutti in fila), il connettore sinaptico ed i neuroni sensori (il circuito integrato). Negli angoli in basso si intravedono i sensori ad infrarosso.
5. Copyright under GNU Free Documentations License
Copyright (c) 2003, Domenico Mancini
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Fundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentations License".
GNU Free Documentations License
Il documento GNU FDL, disponibile sul sito http://www.gnu.org anche in versione italiana, è parte integrante di questo documento e ne contiene i termini di utilizzo.
PROGETTO in formato PDF
FILMATO in formato DiVX
All news