REPORT ROBOCUP 2012 UNDER 19 CLASSE RESCUE B SQUADRA MarconiRovereto COMPONENTI: Paolo Chistè: Programmatore Giovanni Cocchiara: Programmatore Niccolò Pederzini: Meccanico Istituto I.T.I G. Marconi Classe 4B Informatica e 3B Mecatronica Prefazione La squadra è stata riunita dal professore Federico Bertolli,che ha scelto i membri della squadra tra i partecipanti al corso di robotica organizzato dalla scuola. La robotica è stata scelta dalla scuola come occasione per fondere assieme diverse materie, tra cui l informatica, la meccanica, la matematica e l elettronica. La robotica è infatti una materia molto traversale ; per questo la decisione di avere nella squadra una parte meccatronica ed una informatica, così da conciliare teoria e pratica.
SPIEGAZIONE CODICE E LOGICA DEL ROBOT L NXT, il mattoncino intelligente che controlla il robot, può essere programmato in molti modi. L ambiente di sviluppo grafico standard dell NXT è utilissimo dal punto di vista didattico, tuttavia limita il controllo sul robot, quindi non è adatto ai nostri scopi. La squadra ha quindi deciso di utilizzare il linguaggio NXC ( Not Exactly C) che permette di programmare il robot tramite una sintassi simile al C. L NXC è scaricabile gratuitamente ( assieme ad un utile ambiente di sviluppo) da SourceForge. In seguito abbiamo analizzato i compiti di un robot Rescue, che sono: Inseguimento linea Gestione Interruzione linea Aggiramento ostacolo Ricerca lattina Posizionamento lattina Questi compiti sono complicati se affrontati tutti assieme; per questo abbiamo utilizzato la filosofia top-down, che consiste nello scomporre ogni problema in sottoproblemi più facilmente risolvibili; mettendo assieme le soluzioni dei sottoproblemi si ottiene la soluzione al problema di partenza. Ogni compito del robot è stato attentamente analizzato e trasformato in un automa a stati finiti; dopodiché tale automa è stato tradotto in codice NXC. ORGANIZZAZIONE DEI TASK I vari problemi richiedono che il robot si comporti in maniera diversa a seconda del contesto; ad esempio, ritrovare la linea ha un significato diverso se stiamo curvando o se stiamo evitando un ostacolo. Realizzare ciò in un solo blocco di codice sarebbe difficile e macchinoso; si è quindi deciso di utilizzare più task.un task è un serie di istruzioni utilizzate per risolvere uno specifico problema;più task possono essere eseguiti assieme (multitasking). Quando il robot si trova davanti a una particolare situazione, chiude il task corrente e avvia il successivo; visto che ogni task ha uno
spazio riservato nella memoria del robot, non si rischiano conflitti e comportamenti anomali. Di seguito abbiamo la spiegazione dettagliata degli algoritmi utilizzati dai task: Inseguimento linea(linefollower) L'algoritmo di inseguimento linea sfrutta due sensori di luce posizionati nella parte anteriore del robot, adiacenti fra loro e rivolti verso il basso. Questi sensori rilevano l'intensità luminosa riflessa dal pavimento restituendo un numero intero che risulterà maggiore in presenza di un colore chiaro e minore con un colore scuro. L idea alla base dell inseguimento sta nel comprendere se la linea si trova a destra o a sinistra del robot e farlo sterzare di conseguenza. Per realizzare questo comportamento si è pensato e disegnato l automa a stati finiti nella figura. Una volta compreso il problema e trovato tale ASF si è passati alla sua implementazione vera e propria con il codice di Errore. L'origine riferimento non è stata trovata.. Vengono sfruttate due variabili per tenere traccia dello stato dell automa nel quale si trova il robot e in ogni stato si intraprendono i dovuti azionamenti dei motori. Assieme a questo task è sempre in esecuzione un altro task, che si occupa di attivare il task della interruzione linea quando capisce di aver perso la linea. Interruzione linea (BrokenLine) Il robot si riposiziona dritto rispetto alla linea, e poi si muove avanti scansionando l area con un movimento a spazzola, fino a quando non ritrova la linea.
Aggiramento Ostacolo (ObstacleAvoid) Questo task viene attivato quando il sensore di distanza rileva una distanza davanti a sè minore di 20 cm. Il robot ruota prima di 45 gradi a destra, poi 45 gradi a sinistra; il robot confronta le distanze, come si vede nella figura.in questo modo riesce a capire da quale parte può passare e da quale part e si trova il muro. A questo punto, si riposiziona davanti all ostacolo, ruota di 90 gradi, va avanti di 10 cm, quindi ruota di nuovo a 90 gradi. Controlla se alla sua sinistra (o destra) c è un ostacolo, quindi riprende a muoversi, fino a quando non vede più l ostacolo o ritrova la linea. Ricerca lattina (SaveCan) La ricerca della lattina viene attivata quando il valore rilevato dai sensori di luce supera una certa soglia; questo vuol dire che abbiamo superato la striscia argentata che delimita l entrata della zona di ricerca. Il robot si muove avanti fino a trovare il muro; poi scansiona la stanza come in figura; quando rileva un ostacolo che non è un muro attiva il codice per prendere la lattina: il motore della pinza viene fatto andare avanti; quando le ganasce si chiudono la pinza inizia a sollevarsi. Discriminazione tra muro e lattina
Movimento del robot durante la ricerca della lattina Posizionamento lattina (SaveCan) Il robot procede in avanti fino a incontrare il muro, poi gira di 90 gradi e va avanti fino a quando non incontra un angolo della stanza Il robot tiene il sensore di distanza basso, e si muove lungo il muro. Quando incontra un ostacolo (ovvero, il muro oppure la piattaforma) si muove come in figura: A questo punto, confronta le distanze che ha misurato; se la distanza centrale è maggiore di quella degli estremi quello che ha davanti è un angolo; se è minore, il robot ha la piattaforma davanti a sé. Se viene rilevato un angolo, il robot si gira di 90 gradi e riprende a muoversi; se viene rilevata la piattaforma, il robot va avanti verso la piattaforma e rilascia la lattina, concludendo la gara. MECCANICA E FUNZIONAMENTO La costruzione del robot si basa sul principio se non c è, non si rompe. Abbiamo limitato al minimo il numero di componenti, escludendo soluzioni meccaniche magari più semplici da realizzare ma meno robuste all atto pratico. Schema dei componenti principali del robot
DISPOZIONE DEI COMPONENTI E DISTRIBUZIONE DEL PESO I motori sono stati messi nella parte posteriore del robot, in modo da spostare tutto il peso sul retro. In questo modo, il peso del è sufficientemente spostato indietro in modo da riuscire a sollevare la lattina, ma non troppo per evitare di ribaltarsi durante la salita. TRASMISSIONE La trasmissione si basa su un sistema a quattro ruote motrici; ad ogni motore sono assegnate due ruote(vedi sopra): L idea è di muovere entrambe le ruote da un lato, mentre quelle sul lato opposto ruotano in senso contrario; in questo modo possiamo far ruotare il robot su se stesso pur rimanendo fermi in un punto. Questo è lo stesso principio dei bobcat, le famose miniruspe a quattro ruote. ENCODING Tutti e tre i motori del robot sono dotati di encoder ottico. Rilevatore ottico
Un encoder ottico si basa su ingranaggio bucherellato assieme ad un illuminatore ed un sensore IR contrapposti. Quando l ingranaggio ruota su di un buco, il raggio raggiunge il sensore e invia un segnale. L encoder interpreterà questo segnale come una rotazione di 1, 2, 10 gradi.. Questo fatto è sfruttato dal nostro programma per conoscere con precisione il movimento effettuato dal robot,convertendo i giri del motore in giri delle ruote. PINZA Uno dei maggiori problemi è stato capire come azionare la pinza avendo un solo motore a disposizione. La questione è stata risolta creando una pinza che quando viene alzata automaticamente stringe le chele, mentre quando viene abbassata le chele si allargano. SENSORI Il nostro robot riesce a funzionare utilizzando solamente 3 sensori: due di luminosità riflessa per seguire la linea ed un sensore di distanza per rilevare gli ostacoli lungo il suo cammino. Inizialmente era stato considerato anche un bumper, poi scartato per problemi di dimensioni. SENSORE DI LUCE Il sensore di luce è composto da una foto resistenza e da un led rosso. Una foto resistenza è un componente che varia la sua resistenza a seconda della quantità di luce che la colpisce. Il sensore si basa su questo per restituire un valore a 8 bit che va da 0(oscurità totale) a 1024 ( questo viene poi interpretato dall NXT come un valore da 0 a 100). LED(Foto Diodo) Foto Resistenza
Il sensore può rilevare la luce ambientale oppure la luce riflessa. Nel primo caso il sensore legge direttamente il valore della foto resistenza; nel secondo caso il sensore accende il LED rosso e misura la quantità di luce rossa che viene riflessa. SENSORE DI DISTANZA Emettitore di ultrasuoni Rilevatore Il sensore di distanza utilizza gli ultrasuoni per rilevare la distanza dagli oggetti. Un occhio del sensore è l emettitore di ultrasuoni, l altro occhio è il rilevatore. L emettitore invia un segnale, che va avanti fino a rimbalzare su un oggetto. Torna indietro e viene rilevato dal rilevatore; il controller del sensore misura quindi la distanza basandosi sul tempo trascorso tra l invio ed il ritorno del segnale (tramite la classica formula Velocità * Tempo).