Unmanned guided veicle

 

 

Home

Immagini e Video

Motori a passo

Visione Artificiale

Schede di controllo

 

  Interfacciamento e software di gestione

 

Come in tutti i sistemi computerizzati anche l’elaboratore possiede dei dispositivi di I/O per lo scambio di dati in genere. Per il trasferimento di dati da e verso il PC esistono diversi dispositivi, come ad esempio il bus ISA, la porte seriale, quella parallela, ecc.. Tra i dispositivi di trasmissione dati presenti, si è scelto di utilizzare la porta parallela  per il trasferimento di dati da e verso il calcolatore. Si è optato verso tale direzione poiché sia il bus ISA che la porta seriale presentano notevoli complicazioni a livello hardware per la loro gestione. Il primo perchè la costruzione di una scheda di interfacciamento ISA sarebbe risultata troppo onerosa ed improponibile visto i mezzi a disposizione per la realizzazione. La porta seriale è stata scartata poiché nascevano complicazioni in particolare per quanto riguarda l’inserimento di convertitori seriale-parallelo, ciò considerando che il robot  è stato progettato per l’interfacciamento con una logica parallela, in altre parole ogni azione è gestita e scandita dalla lettura o scrittura di 1 Byte da parte del calcolatore. La porta parallela è quella più comunemente usata per l’interfacciamento di un PC con periferiche esterne. Essa è composta da 4 linee di controllo, 5 linee di stato e 8  linee dati e permette l’ingresso fino a 8 bit o l’uscita di 12 bit.

           

·    8 pin di uscita identificati come DATA Port

·    5 pin d’ingresso, di cui uno invertente, denominati  STATUS Port

·    4 pin, di cui tre invertenti, denominati CONTROL Port

·    i rimanenti 8 pin sono connessi a massa

 

Utilizziamo tre segnali d’uscita dal PC per il controllo dei motori a passo, due segnali in uscita per gestire l’avvicinamento e la presa della sfera ed un segnale in ingresso proveniente dal microcontrollore per effettuare la sincronizzazione dei dispositivi. I segnali generati per il movimento del carrello, sono un segnale di clock attraverso il pin 1 e due segnali per il verso di rotazione degli assi dei due motori, attraverso i pin 2 e 3 rispettivamente per il motore destro e sinistro. Con livello logico alto su questi pin, viene imposto un senso di rotazione che permette al carrello di muoversi in avanti. Con valore logico alto sul pin 2 e basso sul pin 3, i motori compiranno lo stesso numero di passi, ma in verso opposto permettendo la rotazione del carrello sul proprio asse verso destra, mentre con valore logico basso sul pin 2 e alto sul pin 3 avviene la rotazione inversa. I pin 4 e 5 sono rispettivamente stati denominati IN_PC ed PC_OK il primo se alto comunica al robot l’avvenuta lettura del livello logico fornito dal calcolatore, mentre il secondo fornisce l’abilitazione per la cattura o meno della sfera. C’è inoltre da dire che il segnale di clock dei motori viene inserito come ingresso di una porta AND della serie 74ls08, in tale modo utilizzando come altro ingresso un’uscita del microcontrollore si può gestire l’arresto dei motori semplicemente portando l’uscita del controllore allo zero logico. Per chiarezza vengono riportati lo schema a blocchi realtivo alla procedura di arresto:

                              

             Software di gestione

 Per generare dei segnali di controllo attivabili da routine valide in ambiente MATLAB è stato necessario progettare attraverso il compilatore della Borland, C++  delle  funzioni,  successivamente compilate per essere rese valide nell’ambiente di lavoro utilizzato e capaci di imporre o leggere uno stato logico da ogni singolo pin della porta parallela. Inoltre è stata prestata  particolare attenzione alla scelta della soluzione ottimale dal punto di vista della logica e la sequenzialità con la quale effettuare l’algoritmo di ricerca e di avvicinamento alla sfera

Mex Function

 Per quanto riguarda il trasferimento delle informazioni verso il circuito di controllo sono stati adoperati 6 bit di controllo del DataPort che forniscono dei segnali compatibili allo standard TTL. Per gestire il valore logico di questi bit nasce l’esigenza di possedere una funzione valida in ambiente Matlab che imponga  il valore logico alto o basso dei corrispettivi pin’s utilizzati. Tali routine create adottando funzioni di I/O gia fornite dalle librerie standard del C++, in particolare le funzioni:

 

void Outp (unsigned int,int)

                       usata per la scrittura di 1 Byte sulla porta

 

int Inp (unsigned int)

per la lettura di 1 Byte dalla porta

 

Tali funzioni valide però in ambiente DOS sono state compilate seguendo gli standard definiti nella API (Application Program Interface) guide del Matlab, per renderle valide in tale ambiente.

 

           Funzione di gestione degli algoritmi di controllo

 

Abbiamo disposto tutte le chiamate alle sottofunzioni in questo file che le gestirà secondo cicli ripetuti fino alla fine dell’esperimento.

Prima di entrare nel ciclo vero e proprio saranno settati alcuni parametri che dipenderanno dalle condizioni ambientali e dal tipo di esperimento. Si  procederà dunque con lo scegliere la velocità che dovrà avere il robot durante la fase d’avvicinamento, per poi gestire automaticamente la procedura d’aggancio, una volta rilevato l’oggetto col sensore di prossimità posto a bordo.

La condizione d’uscita del ciclo vero e proprio è rappresentata da un bit di controllo, memorizzato in un’apposita variabile, che sarà normalmente basso e verrà alzato solo in caso di avvenuta procedura d’aggancio della sfera. Il primo passo di ogni ciclo consiste nell’effettuare l’acquisizione e l’elaborazione di un’immagine dalla telecamera posta a bordo del robot, operazione che si ottiene richiamando la funzione imm_binaria.m. A tal proposito si potrà effettuare la scelta del metodo per il settaggio del livello di soglia che servirà a binarizzare l’immagine in uscita dalla suddetta funzione passando come unico valore zero, se si vorrà sfruttare la procedura manuale, o uno, per quella automatica.

A questo punto saranno richiamate le funzioni progettate specificatamente per l’esperienza da svolgere, che sono state precedentemente analizzate nella sezione dedicata all’Image Processing. In particolare, dopo ogni acquisizione di un’immagine, sarà effettuata la chiamata alla funzione trovacerchi.m, che effettua la ricerca di un cerchio nella scena memorizzata, ed in caso di rilevazione di un unico oggetto che risponda alle caratteristiche richieste, secondo l’algoritmo implementato, sarà fornito in uscita il centro di tale circonferenza e la sua area.

In questo primo caso si procederà col richiamare le funzioni che permettono l’allineamento e l’avvicinamento alla sfera individuata. Stessa procedura si effettuerà in caso le sfere rilevate siano più di una, caso sperimentalmente di difficile evenienza, a causa di un fortuito gioco di ombre o all’effettiva presenza di oggetti sferici non perfetti introdotti per testare la stabilità dell’algoritmo. E’ stata, infatti, definita un’opportuna variabile, quality, che permette, in caso che più di un oggetto riesca a superare i parametri che gli permettono di essere riconosciuto come sfera, di fornire le grandezze in uscita dell’oggetto che più assomiglia ad una sfera e di restituire in uscita un warning, che avvisi della situazione anomala venutasi a creare.

Nel caso in cui non sia individuata alcuna sfera, si è deciso di ripetere l’acquisizione due volte sulla stessa scena, a causa della bassa qualità della telecamera usata, per permettere all’immagine di stabilizzarsi e di avere possibilità di scelta su due campioni. Si è osservato sperimentalmente che questo tipo di gestione non pregiudica in modo significativo la velocità dell’algoritmo.

Se a questo punto ancora non è stata individuata una sfera nel campo visivo, si procederà alla ricerca della stessa nello spazio attorno. Tra i tanti possibili movimenti di ricerca, si è deciso di fare cercare l’oggetto cercando prima in una direzione e poi nell’altra, perché nell’esperienza sarà possibile spostare la sfera, dal campo visivo della telecamera, sia a destra sia a sinistra. Ritenendo più opportuno provvedere all’inseguimento nel caso di spostamenti a velocità paragonabile a quella del robot, è stato giudicato sconveniente dovere effettuare un giro completo in una direzione errata, nel caso in cui la palla si fosse mossa nell’altra direzione, si seguirà dunque lo schema:

Schema di movimenti del robot per la ricerca della sfera

 

Si potrà far continuare la ricerca finché un oggetto sarà identificato come sfera, oppure applicare un sistema “watch dog timer” per interrompere la ricerca infruttuosa dopo un certo tempo, o un numero di giri stabiliti a priori.

Nel caso in cui sia presente una sfera, il robot procederà, secondo le modalità sopraesposte, all’avvicinamento fino ad una distanza di cattura.

Si è, a tal proposito, implementata una procedura automatica, trattata approfonditamente nella descrizione del file aggancio.m, che prevede il colloquio del computer con un microprocessore programmabile a bordo del robot, del tipo PIC16F84.

Se tale procedura andrà a buon fine, sarà restituito in uscita il bit memorizzato nella variabile “fine” eguale ad alto, che farà terminare l’esperimento. In caso di risposta negativa, cioè eguale a zero, vorrà dire che l’oggetto rilevato dal sensore non era una sfera e si dovranno perciò compiere delle manovre per evitare l’ostacolo.

 

          Sincronizzazione elaboratore-robot

         

Nonostante il sistema di avvicinamento alla sfera basato sull’area della stessa fornisca risultati di grande bontà si è reso necessario l’utilizzo di un microcontrollore che gestisse l’arresto del prototipo nel caso il target fosse pervenuto in prossimità dell’elettromagnete tra l’acquisizione di un frame e il successivo. Il microcontrollore utilizzato è stato opportunamente programmato per forzare il segnale di clock in ingresso alla scheda di controllo motori ad un livello logico basso in modo da arrestare il moto. Tale azione viene compiuta esclusivamente nel caso in cui il sensore di prossimità abbia rilevato un oggetto nel campo di cattura dell’elettromagnete. In seguito la combinazione logica degli altri segnali menzionati precedentemente in particolare OUT_PC e PC_OK provenienti dall’elaboratore indicano al robot se catturare o evitare l’oggetto.  

 

Sistema rilevazione ir

Alimentando il diodo emettitore con il segnale proveniente dall’oscillatore, la giunzione PN  emette dei quanti di luce alla lunghezza d’onda dell’infrarosso, di cui può essere rilevata la presenza e l’intensità con l’utilizzo di opportuni circuiti analogici. La struttura per il rilevamento viene mostrata nella seguente figura in cui si notano il diodo led (blu) ed il fototransistor (rosso)

 

 

 

 

 

 

 


Sistema di rilevazione

 

In tale modo si è in grado di rilevare la presenza di oggetti posti in prossimità del dispositivo basandosi sulla quantità dei raggi trasmessi che vengono riflessi dall’oggetto verso il rilevatore. Il rilevatore come detto è un transistor il cui piedini di base e collettore sono connessi da un fotodiodo o in alternativa è la giunzione b-e stessa attraverso procedimenti realizzati in fase di produzione a funzionare da fotodiodo, come in figura.

 

                                             Fototransistor

Se osserviamo il seguente circuito

Rilevatore a caduta resistiva

 

Si avrà che al variare della radiazione incidente sul transistor il potenziale di output si porterà tra livelli di tensione compresi tra circa 0 volt (interdizione del transistor)  e Vcc (saturazione del transistor) ovviamente con un certo ritardo di propagazione che non influisce sul corretto funzionamento del rilevatore essendo dell’ordine dei nSec. E’ stato utilizzato un resistore da 1k per prelevarvi la tensione proporzionale alla corrente Ie del fototransistor. La caduta di tensione sul resistore precedente viene confrontata da un comparatore che gestisce la logica ON-OFF, rispetto ad un opportuno riferimento.