Esplora E-book
Categorie
Esplora Audiolibri
Categorie
Esplora Riviste
Categorie
Esplora Documenti
Categorie
DEGLI
S TUDI DI C AGLIARI
1. Un robot non pu` recar danno a un essere umano o n pu` permettere che, a causa del proprio mancato e o intervento, un essere umano riceva danno. 2. Un robot deve obbedire agli ordini impartiti dagli esseri umani, purch tali ordini non contravvengano e alla Prima Legge. 3. Un robot deve proteggere la propria esistenza, purch e questa autodifesa non contrasti con la Prima e con la Seconda Legge. (Manuale di Robotica, 56a Edizione - 2058 d.C.)
Indice
1 Introduzione 1 2 3 2 Robotica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . AGV Veicolo a guida automaticamente . . . . . . . . . . . . . . . . . . . . . Applicazioni AGVs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 6 7 9 9 12 12 13 15 15 16 16 16 17 18 18 19 19 22 24 25 27 27 28 28 33 35 37
Classicazione e analisi del robot 1 2 Robot mobili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modello cinematico 2.1 2.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Analisi dei vincoli cinematici . . . . . . . . . . . . . . . . . . . . . . Calcolo del modello cinematico . . . . . . . . . . . . . . . . . . . . .
Logistica di supporto 1 2 PICAXE Experimenter Board (AXE090) . . . . . . . . . . . . . . . . . . . . PICAXE Micro-Robot (AXE120) . . . . . . . . . . . . . . . . . . . . . . . . 2.1 2.2 Sensoristica supportata dal Micro-Robot . . . . . . . . . . . . . . . . . Sensore di Luminosit` (AXE121) . . . . . . . . . . . . . . . . . . . . a Sensori di distanza . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ultrasonic Range Finder (SRF004/SRF005) . . . . . . . . . . . . . . . Sensore di contatto (AXE122) . . . . . . . . . . . . . . . . . . . . . . 3 4 5 PICAXE Connect Board (AXE210) . . . . . . . . . . . . . . . . . . . . . . . ZigBee Protocol (802.15.4) . . . . . . . . . . . . . . . . . . . . . . . . Microcontrollori PICAXE-18/18X . . . . . . . . . . . . . . . . . . . . . . . . Richiami di programmazione BASIC . . . . . . . . . . . . . . . . . . PICAXE Programming Editor . . . . . . . . . . . . . . . . . . . . . . . . . .
Un caso pratico 1 2 Descrizione Problematica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Simulazione MatLab del task . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 2.2 3 Descrizione dellalgoritmo di Line Following . . . . . . . . . . . . . . Codice MatLab dellalgoritmo di Line Following . . . . . . . . . . . . Codice della simulazione MatLab del task completo . . . . . . . . . . Montaggio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Indice 4 Implementazione su microcontrollori PICAXE . . . . . . . . . . . . . . . . . 4.1 Implementazione BASIC veicolo Pant-E . . . . . . . . . . . . . . . . . Pseudocodice veicolo Pant-E . . . . . . . . . . . . . . . . . . . . . . . Codice BASIC Pant-E AXE120 . . . . . . . . . . . . . . . . . . . . . Codice BASIC Pant-E AXE210 . . . . . . . . . . . . . . . . . . . . . 4.2 Implementazione BASIC veicolo Wall-E . . . . . . . . . . . . . . . . Pseudocodice veicolo Wall-E . . . . . . . . . . . . . . . . . . . . . . . Codice Wall-E AXE210 . . . . . . . . . . . . . . . . . . . . . . . . . Codice Wall-E AXE120 . . . . . . . . . . . . . . . . . . . . . . . . . Conclusioni A Replicatore di movimenti attraverso comunicazione ZigBee 1 2 Montaggio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Implementazione BASIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 Implementazione BASIC veicolo Master . . . . . . . . . . . . . . . . Codice Master AXE120 . . . . . . . . . . . . . . . . . . . . . . . . . Codice Master AXE210 . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Implementazione BASIC veicolo SLAVE . . . . . . . . . . . . . . . . Codice Slave AXE120 . . . . . . . . . . . . . . . . . . . . . . . . . . Codice Slave AXE210 . . . . . . . . . . . . . . . . . . . . . . . . . . Elenco delle Figure Bibliograa
3 39 39 39 40 41 42 42 42 42 44 45 46 47 47 48 48 49 49 49 51 53
Capitolo 1 Introduzione
1 Robotica
La parola robotica proviene dal ceco robota, dove ha il si` gnicato di lavoro pesante o lavoro forzato.La robotica e una scienza che studia i comportamenti degli esseri intelligenti, cerca di sviluppare delle metodologie che permettano ad una macchina (robot), dotata di opportuni dispositivi atti a percepire lambiente circostante ed interagire con esso quali sensori ` e attuatori, di eseguire dei compiti specici. E una disciplina relativamente nuova, che affonda le sue radici nellantico desiderio delluomo di costruire strumenti che possano liberarlo da compiti troppo faticosi, noiosi o pericolosi. Anche se la ro` botica e una branca dellingegneria in essa conuiscono gli studi di molte discipline sia di natura umanistica come biologia, siologia, linguistica e psicologia che scientica quali automazione, elettronica, sica, informatica, matematica e meccanica. La robotica proprio in virt` della sua natura interdisciplinare trova applicazioni in moltepliu ci contesti, questo ha fatto s` che nascessero varie sotto-discipline fra le quali per` raramente o esiste una netta linea di demarcazione. Arte robotica: Robotica utilizzata sia per creare nuove forme di espressione artistica sia per imitare e riprodurre le forme artistiche gi` esistenti come i robot progettati per a dipingere o per suonare uno strumento musicale analizzando in tempo reale uno spartito. Biorobotica: Robot usati in campo medico. Domotica: Automazione applicata allambiente domestico, tra gli sviluppi a breve termine pi` interessanti ci sono le tecnologie di aiuto in casa ai portatori di handicap mentali o u sici. Microrobotica: Si occupa dello studio e della diffusione di piccoli robot a basso costo utilizzati per scopi educativi o ludici. Robotica biomedicale: Ramo della robotica molto vasto comprende diversi tipi di robot; si va infatti dai robot capaci di assistere il medico durante le operazioni chirurgiche a quelli che tramite tecnologie di telepresenza permettono al medico di operare a distanza. Rientrano nella categoria anche le sosticate apparecchiature per analisi biologiche utilizzate nei laboratori.
1.1 Robotica
Robotica di intrattenimento: Si occupa delle tecnologie utilizzate nei parchi tematici, nei musei o negli effetti speciali cinematograci per intrattenere ed educare grandi quantit` di pubblico; un esempio di utilizzo sono gli audioanimatroni spesso utilizzati a per riprodurre le fattezze di personaggi fantastici o di specie animali oggi estinte come i dinosauri. Robotica evoluzionistica: Metodologia che attraverso lo studio di algoritmi evolutivi tenta di realizzare robot sempre pi` versatili in modo da rendere meno essenziale il supporto u umano. Robotica marina: Si tratta di una branca in via di espansione per le numerose applicazioni di tipo industriale (principalmente legate al settore petrolifero), scientico, archeologico e militare. ` Robotica militare: Anche se la fantascienza e ricca di riferimenti a robot utilizzati in ambito militare nel pratico questi sono utilizzati pi` che altro con scopi di ricogniziou ne e vigilanza fra i quali troviamo ad esempio gli aerei privi di equipaggio detti droni. ` Questo tipo di veicoli e s` controllato a distanza da personale apposito ma in caso di emergenza pu` anche compiere diversi compiti in totale autonomia permettendo la ricoo gnizione di teatri di guerra pesantemente difesi senza mettere a repentaglio vite umane. Altro esempio di robotica militare sono i robot articieri che sono in grado, grazie al numeroso set di strumenti di cui sono muniti, di compiere analisi su un ordigno esplosivo ed eventualmente neutralizzarlo a distanza riducendo drasticamente i rischi per gli articieri. Robotica sociale: Cerca di sviluppare tecnologie che rendano i robot sempre pi` capici u di interagire e comunicare con gli esseri umani in modo autonomo. Robotica spaziale: Anche se sviluppa tecnologie e metodiche destinate allimpiego di robot fuori dallatmosfera terrestre questo settore della robotica ha raggiunto dei risultati utili anche in campi che esulano dalla ricerca spaziale. Esempi di questi robot sono le sonde esplorative impiegate in diverse missioni sui pianeti del sistema solare ma anche robot pi` tradizionali come il famoso braccio manipolatore dello Space Shuttle o quello u di sembianze umane destinato alla ISS che verr` utilizzato in sostituzione degli astronauti a nelle attivit` extraveicolari. a ` Meccatronica: E la scienza che studia il modo di far interagire tre discipline, quali la meccanica, lelettronica, e linformatica al ne di automatizzare i sistemi di produzione semplicando il lavoro umano. La meccatronica nasce dalla necessit` di creare un knowa how nellambito della modellistica, simulazione e prototipazione dei sistemi di controllo, orientandosi prevalentemente ai sistemi di controllo del movimento, deniti come Motion Control. I principali campi di applicazione sono la robotica, lautomazione industriale, lautomotive e gli azionamenti elettrici. Lingegnere meccatronico o lesperto di settore si occupa principalmente di progettare e realizzare sistemi di controllo automatico utilizzando come strumenti di lavoro sia software di sviluppo quali Matlab/Simulink sia centraline elettroniche per limplementazione del sistema reale e la verica del funzionamento realtime. Il classico sistema di controllo meccatronico pu` essere rafgurato da un anello o ` chiuso, retroazione feedback, ed e costituito da diversi blocchi principali: limpianto da controllare (es. un motore elettrico), lattuatore dellimpianto (es. elettronica di potenza), il controllore dellimpianto, progettato in ambiente di simulazione e implementato su centralina (DSP - Digital Signal Processor), inne il sensore, che misura uno stato del sistema (es. la velocit` di rotazione del motore). a ` Robotica industriale: Il campo industriale e sicuramente quello in cui i robot hanno trovato maggiore diffusione: il loro impiego nelle catene di montaggio ha permesso alle aziende di abbattere notevolmente i costi accelerando e migliorando la produzione.
` Fra i robot pi` utilizzati dallindustria vi e il braccio robotico o robot manipolatore, cou struito a imitazione del braccio umano ma spesso dotato di pi` gradi di libert` : e una u a ` macchina molto versatile che si presta a svariate mansioni tra cui verniciatura, saldatura o montaggio. Interessante notare come questa tipologia di macchine sia spesso utilizzata per produrre altri robot simili rendendo le speculazioni fatte dalla fantascienza sulle macchine autoreplicanti un discorso molto pi` vicino alla nostra quotidianit` . u a
3 Applicazioni AGVs
` Il line follower e intorno a noi! In che senso? Nella vita reale di tutti i giorni tutti quanti abbiamo visto almeno una volta un line follower, nessuno ci fa caso ovviamente, nessuno si domanda per esempio quale il meccanismo che muove certi macchinari che trasportano scatoloni allinterno di supermercati o magazzini. Un esempio di questa tipologia di robot sono gli AGVs, (Automatic Guided Vehicles) prodotti da un azienda chiamata Transbotics situata a Charlotte in North Carolina, ed utilizzati per la prima volta nel 1972 dalla Volvo. Questi veicoli son programmati per trasportare materiale seguendo sempre la stessa routine con particolare facilita. Durante il processo di trasporto l AGVs trasmette informazioni circa lo stato del sistema, tracciamento dellinventario, e sistema di controllo per il sistema di invio e smistamento oggetti. Un sistema AGV comprende uno o pi` tipi di veicoli (con diverse congurazioni di guida) per u muovere materiale automaticamente, seguendo un percorso predenito. ` Unaltra azienda che produce gli AGVs e la Egemin Automation, i loro prodotti sono usati da molte industrie dei pi` svariati settori: u ` Cibo e bevande: tipicamente e riferito a quel settore/industria specializzato nella fabbricazione e distribuzione di cibo e bevande consumabili. I veicoli automatiz zati della Egemin sono equipaggiati per trasportare carichi di birra, cereali, snack, tabacco, ecc.; per agganciare i carichi, per lo stoccaggio, e il rimorchio.
Mail delivery: nel 1976 la Egemin introdusse MailMobile, il primo veicolo guidato ottico che copre il gap tra la velocit` della spedizione e la stazione di lavoro compua terizzata, con molto dispendio di energia. La gestione di ` ` MailMobile e essibile ed a basso costo, ed e la miglior alternativa al metodo manuale. Funziona grazie ad un percorso fosforescente applicato nel pavimento, il percorso ` e stimolato da luci ultraviolette e da sensori fotoelettrici. ` Ovviamente non pu` operare se il percorso e spento, se o non sotto gestione manuale.
` Farmaceutico: la serie Egemin farmaceutica e fabbricata in accordo con lo standard ISO 9000. Materiali che pos` a sono essere trasportati con semplicit` , il design e come sempre amico dellutente, in modo da permettergli di fare operazioni complicate in modo semplice. Carta e Stampe: anche nel campo della carta vengono uti` lizzati questi veicoli, il risultato e stato una diminuzione del 39% degli infortuni sul lavoro (a persone od ogget ti) ed una diminuzione del 25% del costo dovuto a tali infortuni. Sono necessari meno impiegati per soddisfare le richieste dei clienti e i danni ai prodotti sono stati eliminati. Tessile: i veicoli Egemin rispondono perfettamente anche alle speciche delle industrie tessili, in quanto abbassano in maniera efciente il costo del trasporto. Tali veicolo sono usati nelle industrie produttrici di tessuti di tipo na turale o sintetico. Inoltri questi macchinari svolgono anche operazioni di tessitura quali, girare lo spago, intrecciarlo, irradiarlo, ecc. facendo risparmiare allazienda che li utilizza un buon numero di manodopera. Come gi` accennato, i luoghi di impiego degli AGV, oltre a quelli gi` descritti, sono appaa a rentemente inniti, in quanto le capacit` di trasporto merci possono variare da qualche chilo a sino a qualche centinaia di tonnellate, infatti, verso ne del 20secolo, lAGV ha trovato largo impiego anche nei porti, per lo spostamento di Container, basti pensare che solo nel porto di Rotterdam, vengono utilizzati gi` pi` di 100 AGV. Visto il largo utilizzo, e limportanza che a u ` assume nei processi automatizzati, con la seguente, si e deciso di eseguire uno studio dal lato della Robotica Industriale di questi sistemi.
1 Robot mobili
` La caratteristica dei robot mobili e la presenza di una base semovente che consente al robot di spostarsi liberamente nellambiente in cui deve operare. Questi robot sono infatti utilizzati ` prevalentemente in applicazioni di servizio, nelle quali un mobilit` ampia ed autonoma e un a ` requisito fondamentale. Dal punto di vista meccanico, un robot mobile e costituito da uno o pi` u corpi rigidi dotati di un sistema di locomozione. In questa descrizione rientrano le due seguenti principali categorie. I robot mobili su ruote. I robot mobili su gambe. Nel seguito ci si limiter` a considerare i veicoli su ruote che costituiscono la grande maggioranza a dei robot mobili nelle applicazioni. Questi sono generalmente costituiti da un corpo rigido (base o chassis) e da un sistema di ruote che lo movimentano rispetto al suolo. Alla base base possono inoltre essere collegati mediante giunti rotoidali altri corpi rigidi (rimorchi) anchessi dotati di ` ruote. Lelemento meccanico fondamentale di questi robot e appunto la ruota. Esistono tre tipi di ruote convenzionali, mostrate in Figura 2.1 dove vengono anche indicate le icone che verranno utilizzate nel seguito per rappresentarle. La ruota ssa pu` ruotare intorno ad un asse passante per il centro della ruota e normale al o piano che la contiene, mantenendo costante il proprio orientamento rispetto allo chassis, ` al quale e completamente solidale. ` La ruota orientabile ha due assi di rotazione. Il primo e quello di una ruota ssa, mentre il ` secondo e verticale e passa per il centro della ruota. Ci` consente alla ruota di modicare o il proprio orientamento rispetto a quello dello chassis. La ruota eccentrica (spesso indicata con il termine inglese caster) ha due assi di rotazione ma quello verticale non passa per il centro della ruota, da cui dista di una quantit` ssa a offset. Questa disposizione fa si che la ruota si allinei automaticamente e rapidamente con la direzione nella quale viene spinto lo chassis. Questo tipo di ruota ha dunque la funzione di fornire un punto di appoggio per il bilanciamento statico senza inuenzare in alcun modo la mobilit` della base. a
10
Figura 2.1: I tre tipi di ruote convenzionali con le relative icone. La variet` di strutture cinematiche che si possono ottenere utilizzando le tre ruote fondamentali a ` e notevole. Nel seguito esamineremo le pi` rilevanti. u ` Iniziamo col presentare il veicolo a trazione differenziale, questo e caratterizzato da due ruote sse il cui asse di rotazione coincide e una o pi` ruote eccentriche, tipicamente di dimensioni u ridotte, che hanno lo scopo di di mantenere il robot in equilibrio statico (Figura 2.2(a)). Le due ruote sse sono controllate separatamente, nel senso che le relative velocit` di rotazione a ` possono essere imposte arbitrariamente, mentre il caster e passivo. Questo robot pu` ruotare sul o posto (cio` senza muovere il centro dellasse delle ruote) se le velocit` angolari delle due ruote e a sono uguali e contrarie. ` Un veicolo che ha mobilit` analoga al precedente e quello a trazione sincronizzata (Figua ` ra 2.2(b)). Esso e dotato di tre ruote orientabili allineate comandate in modo solidale da due soli motori attraverso un accoppiamento meccanico. Il primo motore controlla la rotazione delle ruote attorno allasse orizzontale, e fornisce dunque la trazione al veicolo, mentre il secondo motore controlla la rotazione delle ruote intorno allasse verticale, e ne determina dunque lorientamento. Si noti che lorientamento dello chassis non cambia durante il moto. ` Un altra tipologia di veicolo e quella di tipo triciclo (Figura 2.2(c)) in cui vi sono due ruote sse sullasse posteriore e una ruota orientabile in posizione anteriore che funge da sterzo. ` Altra variante di robot mobile e ovviamente quello tipo automobile (Figura 2.2(d)) che ha due ruote sse sullasse posteriore e due orientabili su quello anteriore. Anche in questo caso, un motore fornisce la trazione, che pu` essere sia anteriore che posteriore, e un altro varia lorieno tamento delle ruote anteriori rispetto al veicolo. Va detto inoltre che per evitare lo slittamento, le ruote anteriori devono avere uno orientamento diverso tra di loro quando il veicolo curva: in par` u ` ticolare la ruota e pi` sterzata di quella rispetto a quella esterna. Questo e garantito dallutilizzo di un particolare dispositivo detto sterzo di Ackermann. Inne, si consideri il robot in Figura 2.2(e)), che ha tre ruote eccentriche disposte normalmente in posizione simmetrica. Le velocit` di trazione delle tre ruote sono comandate indipena ` dentemente. Questo veicolo e a differenza dei precedenti, omnidirezionale: esso pu` muoversi o istantaneamente in qualsiasi direzione cartesiana, nonch riorientarsi sul posto. e Dopo questa classicazione possiamo dire che i nostri veicoli PICAXE 120 possono essere identicati come dei robot a trazione differenziale, dove per` risulta assente la terza ruota eccentrica o che invece viene sostituita da due tacchi sulla parte anteriore che permettono comunque il bilanciamento della struttura; infatti il suo baricentro risulta comunque interno al rettangolo di supporto denito dai punti di contatto delle ruote e dei tacchi con il suolo.
11
(a)
(b)
(c)
(d)
(e)
12
2 Modello cinematico
Analizziamo ora nel dettaglio la la struttura cinematica del nostro robot a trazione differenziale, pi` precisamente ci riferiremo a lui come un uniciclo a trazione differenziale (Figura 2.3) in u quanto caratterizzato da due motori indipendenti e due ruote sse.
Figura 2.3: Coordinate generalizzate per un uniciclo a trazione differenziale su un piano. ` dove appunto q C e lopportuno vettore appartenente allo spazio delle congurazioni C 1 che rappresenta sistemi meccanici le coordinate generalizzate del nostro veicolo nel piano sagittale dove poggia, ovvero
T
q=
x y
(2.3)
dove in particolare la coppia (x, y) rappresenta la coppia di coordinate cartesiane del punto ` medio dellasse delle ruote, mentre e lorientamento delle ruote.
` Dove si e fatta lipotesi semplicativa che lo spazio delle congurazioni C coincida con n . In realt` la a ` corrispondenza tra spazio delle congurazioni e spazio euclideo e valida solo localmente, ad ogni gli sviluppi che presenteremo saranno comunque validi.
1
13
` A questo punto e bene precisare che non sempre un sistema di vincoli cinematici del tipo T A (q) q = 0 come ad esempio il vincolo (2.2), possa essere integrato e fornire un insieme di vincoli olonomi, ovvero vincoli legati ad accoppiamenti meccanici tra i vari corpi del siste` ma. Mentre e vero il viceversa, ovvero lesistenza di k vincoli olonomi, cio` vincoli che possono e essere ricondotti alla forma hi (q) = 0 con i = 1, . . . , k < n (2.4)
Se quindi tali vincoli non sono integrabili si parla di vincoli anolonomi. Per comprendere appieno questa differenza si consideri un singolo vincolo Pfafano aT (q) q = 0 ` se esso e olonomo, pu` essere integrato e scritto nella forma o h (q) = c (2.7) (2.6)
dove h/q = (q)aT (q), con il fattore di integrazione (q) = 0 e c semplice costante di integrazione. Di conseguenza, si ha una perdita di accessibilit` nello spazio delle congurazioni, a ` poich il moto del sistema meccanico in C e connato a una particolare supercie di livello e della funzione scalare h. Tale supercie che dipende dalla congurazione iniziale q0 attraverso il valore di c = h(q0 ) ha dimensione n 1. Se invece il vincolo (2.4) fosse anolonomo, si avrebbe che le velocit` generalizzate sarebbero effettivamente vincolate ad appartenere a un a sottospazio di dimensione n 1, e cio` lo spazio nullo della matrice aT (q). Daltra parte per` , e o il fatto che il vincolo non sia integrabile implica che non esiste alcuna perdita di accessibilit` a in C per il sistema. In altri termini anche se il vincolo ha ridotto il numero di gradi di libert` a a n 1, il numero di coordinate generalizzate non pu` essere in alcun modo diminuito, nemmeno o localmente. Ora non rimane che valutare in quale categoria di vincoli rientra il nostro vincolo (2.2), do` ve per` osservando la Figura 2.3 e facile intuire che questo vincolo sia anolonomo in quanto o non comporta alcuna perdita di accessibilit` nello spazio delle congurazioni2 . Tale vincolo di a rotolamento infatti indica esclusivamente che la velocit` lineare del punto (x, y) non pu` avea o re componenti lungo la direzione normale al piano sagittale su cui poggia, mentre la velocit` a rotazionale attorno allasse verticale risulta libera.
q=
j=1
2
gj (q)uj = G(q)u
con m = n k
(2.8)
Esiste ovviamente anche un metodo formale per la valutazione dei vincoli cinematici, ma per non appesantire ` troppo la trattazione questo e stato omesso.
14
` dove k e il numero di vincoli Pfafani mentre G(q) rappresenta una base del N (AT (q))3 . Os` servando inoltre la (2.6) possiamo inoltre aggiungere che tale modello e rappresentativo di un ` sistema privo di deriva in quanto si ha q = 0 quando lingresso e nullo. ` La scelta dei campi vettoriali di ingresso g1 (q), . . . , gm (q) e quindi di G(q) non e ovviamente unica. Di conseguenza le componenti del vettore u possono assumere signicati diversi. In generale per` e possibile scegliere la base in modo che le componenti uj siano legate direttamente o` agli ingressi di controllo effettivamente disponibili. A questo punto sulla base delle considerazioni fatte e preso il vincolo di rotolamento (2.2) vediamo che le colonne della matrice cos 0 G(q) = g1 (q) g2 (q) = sin 0 (2.9) 0 1
nella gli ingressi v e hanno una chiara interpretazione sica. Si noti per` che in realt` i nostri o a ingressi di controllo sono le velocit` di rotazione della ruota destra e sinistra, che indicheremo a ` rispettivamente con R e L , per cui mediante semplici considerazioni e possibile ricavare le relazioni biunivoche tra R e L e la velocit` lineare del punto medio dellasse delle ruote e a quella angolare del robot v= r (R + L ) 2 = r (R + L ) d (2.11)
costituiscono per ogni q, una base dello spazio nullo della matrice associata al vincolo Pfafano. ` Per cui il modello cinematico delluniclo riferito al punto medio dellasse delle due ruote e perci` o x cos 0 (2.10) y = sin v + 0 0 1
` ` dove r e il raggio delle ruote e d e la distanza tra i centri delle stesse. Quindi il modello cinematico del biciclo a trazione differenziale una volta applicate le (2.11) diventa x y =
r cos 2 r sin 2 r d
r cos 2 r sin 2 r d
R L
(2.12)
In algebra lineare il nucleo di una matrice AT (q) si indica con N (AT (q)) e costituisce linsieme di vettori q tali che AT (q) = 0.
e sulla sensoristica supportata dai Micro-Robot. Nel corso di questo capitolo descriveremo tali prodotti cosi da fornire una idea di massima di tali prodotti.
` PICAXE e un marchio registrato della Microchip Technology Inc. I prodotti PICAXE sono distribuiti dalla ` Revolution Education Ltd. Revolution Education non e in alcun modo legata a Microchip Technology Inc.
16
17
radiazione, come ad esempio nei dispositivi per eseguire operazioni di Line-Following. Un Line Follower consiste, generalmente, di un sensore di luce ed un LED a infrarossi. Lavora illuminando una supercie con luce infrarossa, il sensore poi raccoglie le radiazioni dei raggi riessi ed in base alla loro intensit` determina la riessivit` della supercie in questione. La luce coa a lorata nel pavimento, sar` maggiormente riessa rispetto ad eventuali luci scure, apparendo pi` a u luminosa al sensore. Si pu` utilizzare un line follower per aiutare un robot a navigare allinterno o di un determinato percorso o in qualsiasi altra applicazione in cui occorre distinguere tra 2 alti contrasti su una supercie. ` Vediamo ora di entrare pi` nel dettaglio sul funzionamento del nostro dispositivo AXE121 che e u ` appunto un dispositivo di line-following a tre sensori. Sulla base di quanto detto e facile capire che dai sensori rileviamo una misura di tipo analogico, cio` le sue uscite coprono un detere minato range di valori continuo, ad esempio tra 0 a 5 Volt. Questa misura viene quindi letta direttamente dal PIC16F676 che sta sul dispositivo ed interpretata come una misura tipo digitale tra 0 a 255 livelli. Sulla base di questa conversione, il microcontrollore confronter` il livello a di luce misurato con delle soglie pressate e sulla base di queste restituir` una uscita in binaria a con livelli di tipo TTL, una per ogni sensore. Tali uscite verranno poi associate a tre ingressi diversi del microcontrollore che sta sulla scheda del micro-robot ed in base a tali letture ed allalgoritmo in esso inserito, il robot sar` in grado a in eseguire dei movimenti in maniera autonoma2 . In Figura 3.4 presentiamo la scala di conversione della misura rilevata dal fotodiodo e come il microcontrollore la interpreta. Possiamo inoltre aggiungere che lo spessore minimo in grado di ` essere rilevato da questa tipologia di fotodiodi e di 0.25 inch.
Figura 3.4: Scala di conversione digitale della misura rilevata dal fotodiodo.
3.2.2 Sensori di distanza Ultrasonic Range Finder (SRF004/SRF005) I sonar utilizzano impulsi acustici chiamati trigger e i loro echi per misurare la distanza dagli oggetti. Nota la velocit` di propagazione del a suono in un dato mezzo (per esempio, aria o ac` qua), la distanza da un oggetto e proporzionale allintervallo di tempo che londa acustica impiega a percorrere in tragitto sensore-oggettosensore, comunemente chiamato tempo di volo. Per cui tale distanza viene valutata mediante la seguente relazione d0 = cs tv 2 (3.1) Figura 3.5: Fronte SRF004.
18
` dove cs e la velocit` del suono e tv il tempo di a volo. I sensori SRF004/SRF005 sono realizzato mediante trasduttori piezoelettrici ed utilizza sensori distinti in trasmissione e ricezione. LSRF004 presenta dei range di portata nominale che consentono di rilevare oggetti posti sino a 2 metri di distanza, mentre lSRF005 che arriva ad sino a 3 metri, mentre entrambi consentono di discriminare distanze minime non inferiori a 3 centimetri. Lavorano alimentati da una tensione di 5V e presentano una serie di ingressi e uscite, schematizzati in Figura 3.6. Nel nostro lavoro abbiamo utilizzato il sensore SRF004 e lo abbiamo collegato al Micro-Robot AXE120 in modo tale che, grazie al microcontrollore presente in questultima scheda fosse possibile generare impulsi di Trigger di opportuna durata (non inferiore ai 10 sec) da inviare al sensore e ricevere da questo lecho dal quale il nostro microcontrollore valutando la sua durata sar` in grado di valutare tali distanze. a ` In Figura 3.7 e riportato un semplice diagramma temporale che permette facilmente di capire il suo principio di funzionamento.
Sensore di contatto (AXE122) Si tratta di un sensore di tipo passivo, utilizzato come sensore di prossimit` o di ne corsa, a basato sul principio che, non appena un oggetto va a sbattere contro i contatti del sensore, questultimo apre o chiude un circuito, come un semplice interruttore, a seconda della congu` razione che si e adottato, se di tipo normalmente aperto o normalmente chiuso. La chiusura (o ` lapertura) del circuito fornir` al circuito cui e collegato un segnale di tipo ON/OFF, che cona ` sentir` di stabilire se il sensore e, o meno, in prossimit` di un eventuale oggetto. a a
19
` E possibile collegare due sensori di contatto al singolo ingresso, ma e difcile rilevarli in modo preciso (sono necessari accorgimenti software).
20
ZigBee Router (ZR): questi dispositivi agiscono come router intermedi passando i dati da e verso altri dispositivi. ZigBee End Device (ZED): includono solo le funzionalit` minime per dialogare con il a suo nodo parente (Coordinator o Router), non possono trasmettere dati provenienti da altri dispositivi; sono i nodi che richiedono il minor quantitativo di memoria e quindi risultano spesso pi` economici rispetto ai ZR o ai ZC. u
(a)
(b)
(c)
Figura 3.9: Architetture ZigBee: a) mesh; b) ad albero; c) many to one e source routing. Riferendoci ai layer della pila ISO/OSI che schematizza i protocolli attraverso i quali viene ridotta la complessit` implementativa di un sistema di comunicazione per il networking, possiaa mo dire che a livello di data link le reti ZigBee possono essere beacon enabled e non-beacon ` enabled. Dove il beacon e un pacchetto inviato in polling (a turno) su tutta la rete dal nodo master a tutti gli slave a turno, ad indicare la propria disponibilit` a ricevere. a Nelle reti non-beacon-enabled (cosi come nelle beacon-enable),viene utilizzato un meccanismo di accesso al canale di tipo CSMA/CA. In questo tipo di reti i ZR solitamente tengono i loro ricevitori sempre attivi, e ci` provoca un consistente consumo di energia. In o pratica queste reti sono miste: alcuni dispositivi sono costantemente pronti a ricevere, mentre altri si limitano a trasmettere in presenza di uno stimolo esterno. Nelle reti beacon enabled gli ZR trasmettono periodicamente dei beacon per confermare la loro presenza agli altri nodi. Tra un beacon e laltro i nodi possono cambiare modalit` per risparmiare energia, abbassando il duty cycle. Operazioni a basso duty cya cle, con lunghi intervalli di beacon, richiedono meccanismi di timing preciso, pi` difcili u e costosi da realizzare.
21
Mentre a livello sico possiamo dire che nella banda a 2.4 GHz, dove abbiamo lavorato, sono previsti 16 canali ZigBee da 5 MHz ciascuno e che in tale banda viene utilizzata una modulazio` ne O-QPSK (QPSK con offset). Il data rate over-the-air3 e di 250 kbps per canale nella banda 2.4 GHz, mentre i livelli di potenza trasmessa si aggirano intorno ai 0 dBm (1 mW). Inoltre le distanza raggiungibili con questi dispositivi possono variare tra 10 e 75 metri a seconda dellambiente. Rifacendoci ora alla board AXE210 equipaggiata con un modulo XBee (Figura 3.10) possiamo dire che questa scheda necessita di una alimentazione di 4.5V (3xAA) e consente una trasmissione bidirezionale con una analoga AXE210. LAXE210 oltre al modulo XBee per funzionare deve ospitare a seconda della congurazione desiderata o un microcontrollore PICAXE della serie 18 o un chip MAX3232 che consente il collegamento tra la board ed un PC. Osservando Figura 3.11 e Figura 3.12 possiamo meglio comprendere come il modulo XBee comunica rispettivamente o con il PIC serie 18 o con linterfaccia MAX3232. La scheda inoltre presenta tre ` LED a cui e associato un preciso signicato ` RSSI che indica se il modulo XBee e in fase di ricezione ` STATUS che indica se il modulo XBee e attivo o in sleeping ` IND che indica se il modulo XBee e associato ad un altro modulo o se sta trasmettendo ` ` ` E importante inoltre e precisare che per poter instaurare una comunicazione tra due board e necessario eseguire la procedure di inizializzazione sui moduli XBee presente in [9], nella quale attraverso lXBee Setup Menu del Programming Editor PICAXE, collegando le schede AXE210 al PC si va ad impostare sui moduli XBee il rate ed il canale di lavoro cosi che i moduli possano riconoscersi4 . Nel nostro lavoro abbiamo instaurato una comunicazione point-to-point del tipo PICAXE-toPICAXE, ovvero equipaggiando entrambe le board di un PICAXE-18X. Nonostante ci` e stato o` molto utile in fase di testing sui codici da noi inseriti sui microcontrollori delle board eseguire anche connessioni del tipo PICAXE-to-Computer, per testare cosa effettivamente il lato trasmittente inviava Computer-to-PICAXE, per testare cosa effettivamente il lato ricevente riceveva ` Per fare questi test e stato ancora utilizzato il Programming Editor messo a disposizione dalle PICAXE ed in particolare linterfaccia seriale presente in P ICAXE > T erminal.
3 4
In linea daria in caso di spazio libero. LXBee Setup Menu consente anche di congurare in maniera avanzata i moduli.
22
4 Microcontrollori PICAXE-18/18X
Per microcontrollore PICAXE si intende un microcontrollore economico (basato sul chip PIC) di tipo ash in grado di essere riprogrammato per un numero illimitato di volte senza lausilio ` di software costosi o programmatori elettronici esterni. Punto di forza di questi chip e che il linguaggio attraverso il quale sono programmati, ovvero il BASIC, il cui tempo di apprendimento ` e di gran lunga inferiore rispetto a linguaggi come C o Assembly e per questo sono consigliati ad utenti alle prime armi. Nel nostro lavoro sono stati utilizzati microcontrollori PICAXE-18 (PIC16F627A) per i veicoli AXE120 e microcontrollori PICAXE-18X (PIC16F688) sulle board AXE210. Rispettivamente in Figura 3.14 e Figura 3.15 possiamo osservare rispettivamente le proprie caratteristiche. Unico ` punto dolente di questi chip e che ha creato non pochi problemi e stata la ridottissima capacit` a
23
della memoria EEPROM 5 che determinava quindi limpossibilit` di programmarli con codici di a dimensioni maggiori di 128 byte per il 18 e di 256 per il 18X. Per quanto riguarda invece la loro programmazione sia la board AXE120 che la AXE210 presentavano un socket stereo da 3.5mm che permetteva di collegare ogni board al proprio PC attraverso lopportuno cavo AXE0276 .
EEPROM: Electrically Erasable Programmable Read-Only Memory. Il cavo AXE027 permette di collegare qualsiasi board PICAXE al proprio PC attraverso una semplice porta ` USB, in alternativa per PC provvisti di porta seriale e possibile utilizzare il cavo AXE026.
6
24
Figura 3.16: Schema elettrico per interfacciare qualsiasi board PICAXE ad PC. In Figura 3.16 riportiamo lo schema elettrico che permette tale collegamento, risulta interessante sottolineare il fatto che i microcontrollori vengano programmati attraverso un semplice jack audio da 3.5mm ed un opportuna interconnessione di resistenze per regolare i livelli di tensione. A questo punto per completare la conoscenza su questa tipologia di chip di fare un breve ` riassunto di quella che e la programmazione BASIC su microcontrollori PICAXE. Richiami di programmazione BASIC ` Il BASIC (Beginners All purpose Symbolic Instruction Code) e un linguaggio ad alto livello sviluppato a partire dal 1963 nellUniversit` di Dartmouth per il calcolatore GE-225, si diffea renzi` subito dalla maggior parte dei linguaggi suoi coetanei enfatizzando la semplicit` duso o a piuttosto che la potenza espressiva. Con gli anni il BASIC ha subito notevoli evoluzioni e cambiamenti, diventando un linguaggio strutturato con potenzialit` molto simili a quelle di altri linguaggi evoluti ed al giorno doggi ina ` sieme al C ed al Pascal e uno dei linguaggi pi` utilizzati per la programmazione dei PICmicro. u ` La programmazione in BASIC e molto simile per costrutti e gestione del usso di esecuzione ` allAssembly, infatti lesecuzione del programma e di tipo sequenziale, con la possibilit` di etia ` chettare porzioni di codice con delle etichette (label) alle quali e possibile arrivare con semplici comandi di salto (goto). Di seguito presentiamo due semplici script BASIC che permette il controllo della terza uscita di un microcontrollore PICAXE18 alla quale se fosse collegato un LED sarebbe possibile accenderlo e spegnerlo con una frequenza di 1 Hz. symbol LED = 3 <symbol> Permette di assegnare un nome ad un
main: high LED pause 1000 low LED pause 1000 goto main ingresso, uscita, o registro del PIC. Label assegnato al task. <high> porta a livello logico alto una uscita. <pause> comando di attesa in msec. <low> porta a livello logico BASSO una uscita.
main: let pins=%00000100 <let> Permette di assegnare un valore allingresso, uscita o registro che prende come argomento. pause 1000 let pins=%00000000 <pins> identifica tutte le 8 uscite del PIC. <%> indica che gli stiamo assegnando un valore in binario, si usa invece <$> per lesadecimale. pause 1000 goto main
25
` La differenza tra i due e che il primo pilota solo la terza uscita (3) del PIC, mentre il secondo tutte ed otto (pins) contemporaneamente. Per quanto riguarda le strutture di controllo disponibili, oltre al gi` citato goto sono disponibili tutti i principali costrutti della programmazione come ad a esempio cicli for, strutture if-else e select-case. Nella parte dedicata ai codici sviluppati per far realizzare ai nostri veicoli il task previsto si potr` osservare limplementazione di tali a strutture.
26
28
un immagine bitmap monocromatica contenente il percorso su cui eseguire il following e suc` cessivamente si e convertita limmagine indicizzata prodotta [X, map], in formato RGB1 con listruzione
pista = ind2rgb(X,map);
` dove pista e una matrice n x m x 3, dove n ed m sono altezza e larghezza in pixel dellimmagine, mentre i tre livelli di profondit` corrispondo rispettivamente ai tre livelli di colore RGB. a Una volta creato il nostro spazio operativo che possiamo vedere come una griglia, notiamo che ` a su di essa e gi` presente un sistema di riferimento intrinseco, in quanto ogni coppia di indici (i, j) sulla matrice identicano un pixel diverso. Per cui ssata la terna di rifermento O0 x0 y0 z0 sulla griglia (vedi Figura 4.2), avremo che ad ogni posizione assunta dal veicolo corrisponder` una coppia di indici che univocamente ne a 2 identicano il pixel su cui si trova . In Figura 4.1 sono riportati due possibile percorsi su cui eseguire linseguimento di linea, men` tre in Figura 4.2 e riportata una schematizzazione della posizione del veicolo nella matrice di pixel rappresentante il nostro spazio operativo. Vediamo ora come rappresentare il veicolo nel nostro script. Come gi` accennato, questo verr` a a rappresentato come un corpo rigido la cui posizione sar` identicata dal suo baricentro; sapa ` piamo anche che solidale ad esso e montato un line-follower a tre sensori e che la posizione ` ` di questi rispetto alla mappa e fondamentale per eseguire il following, per cui si e deciso di rappresentare questa struttura rigida come in Figura 4.3. Di seguito possiamo vedere il codice MatLab relativo alla realizzazione del veicolo; il veicolo ` e realizzato da quattro elementi RGB di dimensione 4x4 tre rossi rappresentativi dei sensori, ` mentre un quarto relativo al baricentro del veicolo. Inoltre dato che il veicolo e in grado di
` Si e deciso di utilizzare il formato RGB anzich lavorare in scala di grigi perch come vedremo pi` avanti sar` e e u a necessario colorare dei pixel sulla pista. 2 ` Si noti che il veicolo viene rappresentato come un corpo rigido la cui posizione e identicata dalle coordinate del suo baricentro.
1
29
(a)
(b)
Figura 4.2: Rappresentazione della posa iniziale del veicolo sulla terna di riferimento.
Figura 4.3: Rappresentazione del veicolo. muoversi ed assumere diverse orientazioni sulla griglia sar` necessario ssare un sistema di a riferimento O1 x1 y0 z1 sul suo baricentro (vedi Figura 4.2); le coordinate dei sensori nel codice che segue sono appunto espresse su tale riferimento3 .
%%% Matrice 4x4 inizializzata a zero sensore=zeros(4,4,3); macchina=zeros(4,4,3); for i=1:4 for j=1:4 %%% Sensore: colore ROSSO sensore(i,j,1)=1; %%% Macchina: colore BLU macchina(i,j,3)=1; end
` Poich la struttura e completamente connata sul piano (x, y), in tutta la trattazione le coordinate relative e ` allasse z sono state omesse, in quanto tale coordinata e utilizzata solo come asse di rotazione.
30
Fatte queste premesse vediamo ora di focalizzare la nostra attenzione sullalgoritmo proposto. Con riferimento alla Figura 4.2 si ha che le coordinate del veicolo rispetto alla terna di riferimento O0 x0 y0 z0 possono essere espresse dal vettore P osCar, il cui estremo rappresenta lorigine del riferimento solidale al veicolo O1 x1 y1 z1 , inoltre con semplici considerazioni geometriche si possono ricavare le posizioni dei sensori rispetto alla terna di riferimento con la semplice relazione
0 p0 = o0 + R1 p1 1
(4.1)
dove p0 e p1 rappresentano il medesimo punto rispettivamente nel sistema di riferimento O0 x0 y0 z0 ed O1 x1 y1 z1 , o0 e il vettore che rappresenta lorigine della terna 1 rispetto alla 0 ed 1 ` 0 R1 rappresenta la matrice di rotazione della terna 1 rispetto alla 0, da notare che nel nostro caso sar` una Rz , dove lasse z risulta uscente dal piano del foglio ed ovviamente posizionato sula a terna 1. Quindi la (4.1) rappresenta la trasformazione di coordinate (traslazione + rotazione) di un vettore applicato da una terna ad un altra. Per cui sulla base della (4.1) e di come sono stati scelti i riferimenti possiamo esprimere le coordinate del veicolo e dei sensori sulla terna di riferimento come posCar 0 posSensDes0 posSensCen0 posSensSin0 = = = = posCar + Rz ()step posCar + Rz ()SensDes1 posCar + Rz ()SensCen1 posCar + Rz ()SensSin1
(4.2)
Osservando la (4.2) notiamo la presenza di due nuove variabili che precedentemente non erano ancora state menzionate, ovvero e step. Questa coppia di valori avr` un ruolo fondamentale a nellalgoritmo in quanto rappresentano rispettivamente lorientazione del veicolo nella griglia rispetto alla posizione di partenza ed il passo del veicolo quando questo esegue movimenti traslatori4 . Passiamo ora al cuore dellalgoritmo, lidea di base consiste nel controllare se nel punto in cui ` sono i sensori, espressi ovviamente nella terna di riferimento e presente il percorso o meno. ` In particolare se nella posizione del sensore centrale e presente il percorso, ovvero il pixel ` con le coordinate con le coordinate attuali del sensore sulla mappa e impostato a zero (cio` e ` e nero), allora il veicolo si muove in avanti di una quantit` pari a step con lorientazione a che gi` possedeva, altrimenti se tale pixel risulta ad uno (cio` e bianco), allora si effettua una a e` rotazione sul proprio asse di un certo angolo ssato5 nella direzione opposta a quella del sensore ` laterale che si trova attualmente sulla pista. Se dopo questa rotazione il sensore centrale non e 6 ancora tornato sulla pista viene rieseguita tale procedura . Nel caso in cui invece tutti e tre i ` sensori dovessero stare fuori dalla dalla pista, si e fatto in modo che il veicolo si fermi in quanto
In pratica la coppia [, step] permetter` alla struttura rappresentante il veicolo di compiere movimenti rotoa traslatori. 5 Langolo di scansione pu` essere scelto a piccolo a piacere, da notare per` che minore sar` tale rotazione, o o a maggiore sar` il numero di rotazioni e quindi di passi da compiere per riportare il sensore centrale sulla pista. a 6 Facciamo presente che gli algoritmi di line-following a tre sensori sono spesso implementati dando priorit` al a sensore centrale ed in particolare il veicolo procede in avanti solo se il sensore centrale risulta sul path, mentre i due laterali sono utilizzati per eseguire le correzioni sulla traiettoria.
4
31
` ` signicherebbe o che e arrivato in una ipotetica zona di scarico o che ha perso il percorso; e bene quindi evitare angoli di scansione troppo grandi perch altrimenti si correrebbe il rischio e ` di portare il veicolo fuori dal path. Nel nostro algoritmo e stato scelto per langolo di scansione un valore pari a 30. Mostriamo ora mediante rappresentazione omogenea come vengono aggiornate le coordinate del vettore posizione rappresentativo del veicolo e dei suoi sensori per tre passi consecutivi riportati in Figura 4.4.
(a)
(b)
(c)
32
Partiamo dalla situazione in Figura 4.4(a) dove il baricentro del veicolo si trova nel punto posCar 0 = [35, 467]T 7 , mentre i sensori in base alle (4.2) si trovano in posSensDes0 = [27, 477]T posSensCen0 = [35, 477]T posSensSin0 = [43, 477]T
(4.3)
A questo punto poich il sensore centrale risulta sul percorso (vedi Figura 4.4(a)), allora per e quanto detto in precedenza il veicolo potr` avanzare di una quantit` pari a step in base alla a a seguente relazione
0 posCar1 1
= A0 1
step 1
0 Rz () posCar1 0T 1
step 1
[35, 467]T 1
(4.4)
dove A0 rappresenta la nostra matrice di trasformazione omogenea e rappresenta lattuale 1 orientazione del veicolo, inizialmente nulla. Con lo stesso procedimento vengono aggiornate anche le coordinate dei sensori, che ora varranno rispettivamente posSensDes0 1 posSensCen0 1 posSensSin0 1 = A0 () 1 SensDes 1 SensCen 1 SensSin 1 = [27, 477]T 1 [35, 477]T 1 [35, 477]T 1
A0 () 1
(4.5)
A0 () 1
e che ovviamente coincidono con i valori riportati in Figura 4.4(b). Ora ci troviamo nella situazione riportata in Figura 4.4(b), dove ora per` posSensCen risulta fuori dal percorso; sulla o base di quanto detto per` essendo posSensSin sulla mappa, avremo che il veicolo ruoter` o a sul posto di 30 verso sinistra. Ora gli elementi costitutivi del nostro veicolo avranno le seguenti coordinate posSensDes0 1 posSensCen0 1 posSensSin0 1 = A0 ( ) 1 SensDes 1 SensCen 1 SensSin 1 = [33, 480]T 1 [40, 476]T 1 [47, 472]T 1
= A0 ( ) 1
(4.6)
= A0 ( ) 1
dove rappresenta lattuale orientazione del veicolo sulla griglia e vale a questo passo = 30. Si noti nelle precedenti relazioni, ovvero (4.4), (4.5) e (4.6) tutte le coordinate sono state
Si noti che i sensori cos` come il baricentro sono rappresentati come elementi quadrati composti da 4x4 pixel, ma effettivamente abbiamo fatto in modo di lavorare come se fossero costituiti da un solo pixel (ovviamente uno di quelli pi` interni), per questo motivo abbiamo fornito una sola coppia di coordinate per elemento anche se in u realt` dovrebbero essere 16. a
7
33
arrotondate allintero pi` vicino, dato che tali valori devono rappresentare delle coordinate il su u una griglia discretizzata in pixel. Mostriamo ora una espressione pi` compatta per esprimere ad esempio la posizione di tali u elementi costituenti il veicolo. Prendiamo ad esempio il sensore centrale, possiamo vedere che sue le coordinate dopo le due iterazione appena descritte possono essere espresse come segue posSensCen0 1 = A0 A1 A2 1 2 3 SensCen1 1 = (4.7) =
0 Rz () posCar1 0T 1
Rz (0) step 0T 1
Rz () 30 0T 1
SensCen1 1
Ovvero attraverso il prodotto di pi` matrici di trasformazione omogenee una per ogni operau ` zione. Si noti che questo risultato non dovr` stupirci in quanto e noto che le matrici di trasfora mazione omogenee, cos` come le matrici di rotazione permettendo di descrivere trasformazioni consecutive di coordinate eseguendo semplici prodotti tra matrici, in cui ogni una di queste lega la descrizione di un punto nella terna i alla descrizione dello stesso punto nella terna i 1. Osservando la (4.7) notiamo che per descrivere la posizione del sensore sono necessarie tre matrici, in quanto la prima descrive il punto di partenza del sensore in terna di riferimento, la seconda implementa la traslazione, mentre la terza la rotazione di 30. Se ad esempio avessimo compiuto n passi, sarebbero state necessarie n + 1 matrici e cosi via. ` Di seguito e riportato lalgoritmo completo per eseguire il line-following sul percorso assegnato, importante sottolineare che per funzionare correttamente il baricentro del veicolo deve trovarsi gi` sulla pista, proprio come spesso avviene nella realt` . Tale script inoltre permette la creazione a a di un piccolo video, in quanto ad ogni passo del ciclo f or principale vengono creati dei frame con la posizione del veicolo sulla pista relativamente a quella iterazione. Successivamente con il comando moovie vengono fatti scorrere tali fotogrammi dando origine ad un vero e proprio video. In Figura 4.5 sono invece riportate tutte le correzioni eseguite dallalgoritmo per compiere il following del path, per eseguire tale graco bisogna semplicemente eliminare il commento al comando subito prima del ciclo f or principale e commentare listruzione subito la stampa di sensori sui frame. Codice MatLab dellalgoritmo di Line Following
clear all, close all, clc; %%% Anonimus function Rz=@(in)[cos(in) -sin(in); sin(in) cos(in)]; UpDateCoord=@(POScar, THETA, SENSOR)... round(POScar+Rz(THETA)*SENSOR); %%% Carichiamo la pista desiderata %%% Pista 1 % posCar = [35 191]; % [X,map]= imread(mappa1.bmp); %%% Pista 2 posCar = [198 206]; [X,map]= imread(mappa4.bmp); pista = ind2rgb(X,map); %%% Istanziamo le immagini del sensore e del baricentro della macchina. %%% Sono rappresentati da due immagini espresse come matrici 3x3 RGB. sensore=zeros(4,4,3);
34
XAxis
YAxis
Figura 4.5: Correzioni sulla traiettoria eseguita dal veicolo per seguire il percorso.
macchina=zeros(4,4,3); for i=1:4 for j=1:4 %%% Diamo al Sensore il colore ROSSO sensore(i,j,1)=1; %%% Diamo al Baricentro della macchina il colore BLU macchina(i,j,3)=1; end end %%% Posizioni dei sensori rispetto al Baricentro della macchina SensCen = [ 0 10]; SensSin = [ 8 10]; SensDes = [-8 10]; %%% Orientazione macchina e passo di simulazione theta = 0 ; step=[0 7];
%%% Algoritmo di Line Following %% %%% Togliere il commento per visualizzare le traiettorie. % pista_frame=pista; %% for n=1:200 %%% Aggiornamento Cordinate della macchina e dei sensori sullimmagine. %%% Dato che lavoriamo sui pixel dellimmagine, questi vanno %%% arrotondati ad un valore intero. posSensCen = UpDateCoord(posCar,theta,SensCen); posSensDes = UpDateCoord(posCar,theta,SensDes); posSensSin = UpDateCoord(posCar,theta,SensSin); %%% Commentare se si desidera visualizzare le traiettorie. pista_frame=pista; %%% Disegna i sensori ed il baricentro della macchina for i=1:4 for j=1:4 for k=1:3 pista_frame( posCar(1)-2+i, posCar(2)-2+j, k) = macchina(i,j,k); pista_frame( posSensCen(1)-2+i, posSensCen(2)-2+j, k ) = sensore(i,j,k);
35
36
%%% Variabili di controllo waitWallE=0; broughtItem=0; endSimu=0; %%% Algoritmo di Line Following %%% Togliere il commento per visualizzare le traiettorie. % pista_frame=pista; for n=1:400 %%% Aggiornamento Cordinate della macchina e dei sensori sullimmagine. posSensCen1 = UpDateCoord(posCar1,theta1,SensCen1); posSensDes1 = UpDateCoord(posCar1,theta1,SensDes1); posSensSin1 = UpDateCoord(posCar1,theta1,SensSin1); posSensCen2 = UpDateCoord(posCar2,theta2,SensCen2); %%% Commentare se si desidera visualizzare le traiettorie. pista_frame=pista; %%% Disegna i sensori ed il baricentro della macchina for i=1:4 for j=1:4 for k=1:3 %%% Macchina1 pista_frame( posCar1(1)-2+i, posCar1(2)-2+j, k) = macchina(i,j,k); pista_frame( posSensCen1(1)-2+i, posSensCen1(2)-2+j, k ) = sensore(i,j,k); pista_frame( posSensDes1(1)-2+i, posSensDes1(2)-2+j, k ) = sensore(i,j,k); pista_frame( posSensSin1(1)-2+i, posSensSin1(2)-2+j, k ) = sensore(i,j,k); %%% Macchina2 pista_frame( posCar2(1)-2+i, posCar2(2)-2+j, k) = macchina(i,j,k); pista_frame( posSensCen2(1)-2+i, posSensCen2(2)-2+j, k ) = sensore(i,j,k); end end end if(endSimu==0) if(waitWallE==0) %%%%%%%%%%%%%%%%%%%%%Algoritmo di Line Follo%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if ( pista(posSensCen1(1), posSensCen1(2),1) == 0 ) posCar1=UpDateCoord(posCar1,theta1,step); else % [sensore destro, sensore sinistro]=[21 20] tmp=[ pista(posSensDes1(1), posSensDes1(2),1), pista(posSensSin1(1), posSensSin1(2),1)]; checkTMP=21*tmp(2)+20*tmp(1); switch (checkTMP) %%% Il sensCen ` gi` sul bianco!!!! e a case 1 % sensDes sul bianco e sensSin sul nero %%% Gira a destra theta1=theta1-deg2rad(30); % 30 gradi case 2 % sensDes sul nero sensSin sul bianco %%% Gira a sinistra theta1 = theta1+deg2rad(30); % 30 gradi %case 3 % sensDes sul bianco e sensSin sul bianco otherwise display(Fermati); if(broughtItem==0) display(Pant-E si ferma ed avvisa Wall-E) waitWallE=1; else endSimu=1; end end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% else if( broughtItem==0) if ( pista(posSensCen2(1), posSensCen2(2),1) == 1 ) posCar2=UpDateCoord(posCar2,theta2,step); else display(Wall-E ` arrivato ed avvisa Pant-E) e broughtItem=1 end else theta1=theta1+deg2rad(180);
4.3 Montaggio
waitWallE=0; end end end imshow(pista_frame); [frameCorrente, mappa] = gray2ind(pista_frame,256); frames(n) = im2frame(frameCorrente, mappa); display(n) % Stampa numero iterazione corrente end title(Line Following Racetrack), xlabel(Y-Axis), ylabel(X-Axis); movie(gca,frames,1,5,[0,0,0,0]);
37
3 Montaggio
Prima di passare alla descrizione del codice BASIC per implementare il caso duso descritto ` alla sezione precedente, e utile spendere qualche parola per la denizione del progetto a livello ` stato necessario infatti, a seguito dellassemblaggio dei due Microrobot, di eseguire un sico. E collegamento sico tra le board AXE120 e AXE210 dei singoli veicoli. Questo perch , per denire il comportamento dei due microrobot, era necessario utilizzare due e board, una dedita alla gestione delle funzionalit` di base, quali lavvio dei motori e la gestione a degli input/output forniti per i diversi sensori collegati nelle rispettive macchinine (AXE120), ed una seconda che si occupasse della gestione della comunicazione tra i Robot board (AXE210). Il problema nasceva dal fatto che non era possibile utilizzare un unica board che gestisse I/O, avvio, comando dei motori e comunicazione, in quanto sia AXE120 che AXE210 sono delle schede prestampate con un numero denito e limitato di ingressi/uscite. ` Oltre a questo, vi si aggiungeva il fatto che la piedinatura del modulo ZigBee non e a passi ` standard, di conseguenza vi e la necessit` di un modulo di adattamento nel caso si volesse a trasferire su un unica basetta millefori i diversi elementi contenuti sia nella board AXE120 che ` in quella AXE210. La soluzione quindi e stata quella di collegare tramite resistenze da 15% i diversi I/O ancora disponibili e di creare una comunicazione seriale tra le board. ` La scelta delle resistenze, al posto dei semplici li, si e resa necessaria per il fatto che, trat` tandosi di comunicazioni seriali, e necessario, afnch la comunicazione sia il pi` possibile e u pulita, con la minor degradazione di segnale, valutare alcune problematiche, quali i problemi di compatibilit` Elettromagnetica (EMC), che sono la causa dei disturbi elettrici di provenienza a esterna che degradano il segnale. ` Infatti, tra i problemi di compatibilit` legato al collegamento tra due circuiti stampati, vi e il a problema della diafonia in un cavo schermato (Cross-Talk), che si pu` generare tra due cavi o ` vicini di un circuito o di un apparato elettronico. La causa di questo tipo di disturbi e dovuta ad un campo elettromagnetico variabile che pu` indurre, in un cavo vicino, una differenza di o potenziale e quindi una corrente indotta spuria. ` Questo fenomeno e particolarmente indesiderato nel campo delle comunicazioni quando si usano cavi elettrici per trasportare dati o segnali (voce, video etc). Se i cavi non sono opportunamente schermati, si possono generare dei disturbi sui livelli di tensione che possono generare errori nellapparato ricevente, con conseguente perdita di dati, o peggioramento della qualit` a della comunicazione. Queste problematiche sono invece assenti con lutilizzo della bra ottica e delle relative comunicazioni ottiche. ` Un altro campo in cui questo effetto ha rilevanza e nella progettazione e fabbricazione dei circuiti integrati in tecnologie submicrometriche (es. 65 nm). A causa della grande densit` di a componenti elettronici che si raggiunge in questi dispositivi, e alle distanze ridottissime, gli effetti di Cross-Talk sono da tenere in attenta considerazione durante la progettazione. Tra le
4.3 Montaggio
38
` diverse soluzioni, vi e quella di amplicare il segnale e di effettuare una separazione in banda ` tra il segnale effettivo e il segnale di rumore. Di conseguenza, si e reso necessario lutilizzo di resistenze in modo da non avere un abbattimento del segnale, sicuramente indotto dallutilizzo di cavi di rame semplici che presentano resistenze interne sicuramente minori. ` Un ulteriore problema in fase di montaggio e stato quello della scelta dei diversi ingressi e delle diverse uscite da utilizzare. Infatti, come abbiamo discusso precedentemente, il numero di I/O sulle board risulta essere limitato e visto il numero di sensori utilizzati per la prova pratica, gli ingressi e le uscite disponibili per la comunicazione risultavano essere decisamente limitate. Di seguito, vengono mostrati in Figura 4.6 e Figura 4.7 gli schemi di collegamento utilizzati tra le schede dei veicoli AXE120 e le schede di comunicazione AXE210 rispettivamente per il veicolo denominato Pant-E e per il veicolo Wall-E.
Figura 4.6: Schema circuitale del collegamento tra AXE120 e AXE210 sul veicolo Pant-E.
39
Figura 4.7: Schema circuitale del collegamento tra AXE120 e AXE210 sul veicolo Wall-E.
then
40
41
Reinizializza la macchinetta riportandola nella posizione originaria e spegni i motori stop_def: let pins = %10000000 Gira su se stessa in senso antiorario pause 1500 per 1.5 secondi let pins = %00000000 Fermati stop Sottoroutine per i comandi di movimento del Line Follower go_f: let pins = %10100000 Vai avanti goto main go_l: let pins = %00100000 goto main go_r: let pins = %10000000 goto main Vai a destra Vai a sinistra
42
43
goto lp1
` Non appena e stato rilevato loggetto, torna in zona di Carico stopit: let pins = %01010000 Torna indietro pause 1000 let pins = %00000000 stop stop
Conclusioni
` In questa attivit` di sperimentazione si e cercato di realizzare un tipico esempio di collaboraa zione tra macchine diverse, per far ci` si sono equipaggiati due microrobot AXE120 con dio ` versi sensori e con moduli di comunicazione XBee e si e fatto in modo che questi compissero un semplice task tipico dei sistema stoccaggio, in particolare la gestione di una situazione di carico/scarico merci. ` ` Come e facile intuire il lavoro e stato piuttosto articolato, come si pu` facilmente capire da o queste pagine, nelle quali abbiamo cercato di riportare fedelmente gli stessi percorsi logici che abbiamo dovuto fare per portare a termine gli obbiettivi pressati. ` Si e partiti dalla identicazione e classicazione del robot fornitoci, sino alla messa in opera di quanto progettato, passato per diversi step, che vanno dalla modellazione in MatLab di un problema reale quale il line-following, allo studio del protocollo di comunicazione ZigBee, sino a problematiche prettamente pratiche quali la compatibilit` elettromagnetica, la programmazioa ne di circuiti integrati programmabili quali i PICAXE protocolli di comunicazione seriale ed ovviamente la sensorizzazione dei nostri robot, fulcro di questo lavoro. Per questi motivi lesperienza, a tratti traumatica per via delle diverse problematiche sorte in ` corso dopera e da considerarsi pi` che positiva, in quanto ci ha permesso di confrontarci con u concetti, componenti ed apparecchiature che sino ad ora conoscevamo solo perch lette sui libri, e ma che per il back-ground di un ingegnere riteniamo pi` che fondamentali e sopratutto ci ha u permesso di sviluppare una maggiore propensione al problem-solving tipica dellingegneria e che purtroppo in ambiente accademico si tende a trascurare.
A.1 Montaggio
46
In Figura A.1 presentiamo il grafo della macchina a stati implementata sul PICAXE-18X della board AXE210 del veicolo Master, dove come si pu` notare le transizioni avvengono esclusio vamente se il sistema viene sollecito da un segnale impulsivo EN che si comporta da trigger e poi sulla base del valore assunto dal segnale in, rappresentato da una coppia di segnali in logica binaria, decide verso quale nuovo stato recarsi e quindi quale action eseguire. Importante sottolineare il fatto che se lautoma ricevesse contemporaneamente al segnale di trigger una combinazione di ingressi in tale da avere teoricamente un cappio sullo stato corrente la macchina a stati comunque non verrebbe sollecitata da tale evento e quindi ovviamente non ripeter` a laction associata a tale locazione1 .
1 Montaggio
Bench questo secondo task non sia stato implementato sui veicoli, ma solo nellambiente di e simulazione, proponiamo comunque un possibile schema di collegamento tra le schede dei veicoli AXE120 e le schede di comunicazione AXE210 rispettivamente per il veicolo Master e per il veicolo Slave, rispettivamente in Figura A.2 e Figura A.3.
Figura A.2: Schema circuitale del collegamento tra AXE120 e AXE210 sul veicolo Master.
` In pratica e come se tale comportamento non sia permesso ed infatti per questo motivo nella macchina a stati di Figura A.1 i cappi non sono stati rappresentati.
1
47
Figura A.3: Schema circuitale del collegamento tra AXE210 e AXE120 sul veicolo Slave.
2 Implementazione BASIC
Di seguito sono riportati i codici rispettivamente del veicolo Master e del veicolo Slave, attraverso i quali verranno programmati i microcontrollori delle due board, rispettivamente un PICAXE-18 per lAXE120 e un PICAXE-18X per lAXE210.
48
buggy forward + TX Aspettiamo 10msec prima di mettere basso il segnale di sincronismo buggy Left + TX
buggy forward + TX
buggy halt + TX
symbol in=b6 symbol state=b8 symbol state_next=b9 high 7 state=H main: if pin2=0 then goto main in=pins & %00000011 select case state case H goto case F goto case R goto case L goto endselect
CheckState: if state=state_next then goto main state=state_next serout 7, T2400,("#", state,CR,LF) pause 1000 goto main AssignNextState: select case in case %00000000 0 state_next=H goto CheckState case %00000001 1 state_next=F goto CheckState case %00000010 2 state_next=R
49
` Il programma e in attesa di un comando proveniente dalla board in ricezione. Sulla base del comando ricevuto opta per lopportuno comando ai motori.
let pins = %00000000 case "F" let pins = %10100000 case "R" let pins = %01100000 case "L" let pins = %10010000 else let pins = %00000000 endselect goto main
Il comando sar` caratterizzato da due bytes rappresentati in ascii, il primo sar` un # che verr` interpretato a a a come un carattere di controllo, mentre il secondo rappresenta il comando vero e proprio e verr` salvato nel registro a b0 . Se il comando ricevuto non presenta come primo byte il carattere # il usso del programma non prosegue e la board continua a rimanere in attesa di un comando valido. 3 Anche in questo passo il comando sar` costituito da due bytes, uno di controllo e laltro relativo al comando. a
50
3.10 AXE210 equipaggiato con un modulo RF XBee. . . . . . . . . . . . . . . . . 3.11 AXE210 - PICAXE Circuit. . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.12 AXE210 - MAX3232 Circuit. . . . . . . . . . . . . . . . . . . . . . . . . . . 3.13 Pinout PICAXE-18/18X. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.14 Caratteristiche PICAXE-18 (PIC16F627A). . . . . . . . . . . . . . . . . . . . 3.15 Caratteristiche PICAXE-18X (PIC16F688). . . . . . . . . . . . . . . . . . . . 3.16 Schema elettrico per interfacciare qualsiasi board PICAXE ad PC. . . . . . . . 3.17 Screenshot dellinterfaccia di simulazione del PICAXE Programming Editor. . 3.18 Screenshot del PICAXE Programming Editor. . . . . . . . . . . . . . . . . . . 4.1 4.2 4.3 4.4 4.5 4.6 4.7 Due possibili percorsi su cui eseguire il line-following. . . . . . . . . . . . . . Rappresentazione della posa iniziale del veicolo sulla terna di riferimento. . . . Rappresentazione del veicolo. . . . . . . . . . . . . . . . . . . . . . . . . . . Diverse tipologie di robot mobili. . . . . . . . . . . . . . . . . . . . . . . . . . Correzioni sulla traiettoria eseguita dal veicolo per seguire il percorso. . . . . . Schema circuitale del collegamento tra AXE120 e AXE210 sul veicolo Pant-E. Schema circuitale del collegamento tra AXE120 e AXE210 sul veicolo Wall-E.
Elenco delle gure A.2 Schema circuitale del collegamento tra AXE120 e AXE210 sul veicolo Master. A.3 Schema circuitale del collegamento tra AXE210 e AXE120 sul veicolo Slave. .
52 46 47
Bibliograa
[1] B. Siciliano, L. Sciavico, L.Villani, G. Oriolo (2008). Robotica - Modellazione, pianicazione e controllo, Terza edizione McGraw-Hill. [2] Wikipedia. ZigBee, http://it.wikipedia.org/wiki/ZigBee. [3] PICAXE. PICAXE EXPERIMENTER BOARD (AXE090), http://www.rev-ed.co.uk/picaxe/. [4] PICAXE. PICAXE MICRO-ROBOT (AXE120), http://www.rev-ed.co.uk/picaxe/. [5] PICAXE. PICAXE Line Follower Kit (AXE121), http://www.rev-ed.co.uk/picaxe/. [6] PICAXE. PICAXE Bumper Switch Kit (AXE122), http://www.rev-ed.co.uk/picaxe/. [7] PICAXE. ULTRASONIC RANGE SENSOR (SRF004), http://www.rev-ed.co.uk/picaxe/. [8] PICAXE. ULTRASONIC RANGE SENSOR (SRF005), http://www.rev-ed.co.uk/picaxe/. [9] PICAXE. PICAXE CONNECT (AXE210), http://www.rev-ed.co.uk/picaxe/. [10] PICAXE. PICAXE AND XBEE TUTORIAL, http://www.rev-ed.co.uk/picaxe/. [11] PICAXE. PICAXE Manual 1, picaxe manual1.pdf. [12] PICAXE. PICAXE Manual 2, picaxe manual2.pdf. [13] PICAXE. PICAXE Manual 3, picaxe manual3.pdf. [14] M. Liberti. Dispense del corso Compatibilit` Elettromagnetica, Universit` La a a Sapienza. [15] A. Pisano (2009). Appunti delle lezioni, Robotica Industriale .