Progettazione del robot MINDSTORMS EV3

 Progettazione del robot
MINDSTORMS EV3
Anche quest’anno abbiamo deciso di usare un mattoncino LEGO MINDSTORMS EV3. Si tratta di un’evoluzione della versione precedente NXT 2.0, migliorata sotto diversi aspetti. Il chip del processore è un ARM9, la memoria interna è di 16 MB (NXT 2.0 aveva soltanto 256 KB), espandibile con scheda SD di capacità fino a 32 GB. Inoltre le porte per i motori sono 4, invece che 3. Il tutto comandato dal sistema operativo Linux, programmabile con il nuovo software EV3. PROGETTAZIONE MECCANICA
Il robot che abbiamo costruito è, nella versione base, abbastanza compatto. Abbiamo fatto questa scelta per garantire una migliore agilità nei movimenti sul tappeto e tra i vari oggetti delle missioni, che spesso lasciano poco spazio per seguire i percorsi. Abbiamo deciso di non usare i cingoli per riuscire a raggiungere una maggiore velocità e fluidità negli spostamenti. Il robot è stato progettato in modo tale da consentire l’aggiunta di parti mobili ausiliarie, tra cui bracci e supporti necessari per il completamento delle varie missioni. Queste parti verranno descritte in dettaglio più avanti. 1 MISSIONI SCELTE PER IL ROBOT GAME
Apertura della porta:​
alla fine della gara la porta deve essere sufficientemente aperta Comunità in apprendimento: la missione richiede che l’anello venga prelevato e che non sia a contatto in alcun modo con la missione Competizione robotica:​
il robot deve inserire l’inserto robotico nel braccio e rilasciare l’anello Usare i giusti sensi: questa missione consiste nel liberare l’anello tramite il movimento di una leva Comunicazione remota:​
il robot deve muovere verso sé stesso il gancio Motore di ricerca: il robot deve azionare una leva e prelevare l’anello del colore selezionato nel quadrato Apprendimento basato sul progetto: alla fine della gara il piatto della bilancia dovrà essere ricoperto di anelli. Il numero di anelli determina il punteggio Ingegneria inversa:​
consiste nel prelevare il cesto con all’interno un modello da riprodurre Adattamento a condizioni mutevoli:​
il modello deve essere ruotato di 90° Impegno: il robot deve muovere la parte gialla verso sud e ruotare il meccanismo per accumulare punti BRACCI E STRUMENTI AUSILIARI
Il robot è molto semplice nella sua struttura base, perché abbiamo previsto l’aggiunta di diversi bracci e piattaforme aggiuntive per il completamento delle missioni specifiche. Ad esempio, per un gruppo di missioni abbiamo aggiunto diverse appendici, per azionare leve durante il percorso (missioni “adattamento a condizioni mutevoli”, “impegno”, “comunicazione remota”, recupero “ingegneria inversa”), e il sensore ad ultrasuoni sulla destra per potersi regolare sulla base del bordo del tavolo. Il motore grande (ausiliario), che viene montato sulla parte frontale, è collegato ad una struttura che sostiene l’inserto per la missione “braccio robotico” e alcune appendici per prelevare gli anelli di varie missioni (“usare i giusti sensi”, “comunità in apprendimento”). Infine, l’ultimo braccio adoperato durante la gara è costituito da un motore grande dotato di un supporto usato per trasportare gli anelli per completare la missione “Apprendimento basato sul progetto”. Questo braccio è inoltre usato per abbassare la barra della missione “Apertura della porta” e per spingere la leva della missione “Motore di ricerca”. 2 SENSORI
Nella costruzione del robot abbiamo previsto l’inclusione di molti sensori, che hanno reso successivamente più facile lo sviluppo dello svolgimento delle missioni. I sensori ci consentono di ottenere una maggiore precisione in quanto il robot può adattarsi a riferimenti assoluti presenti sul tavolo di gara e non relativi come potrebbe essere il bordo del tavolo. Un sensore fornito dal kit EV3 che abbiamo sfruttato molto è il ​
giroscopio​
. Questo sensore riesce a rilevare i movimenti di rotazione del robot e a restituire un valore abbastanza preciso (+/­ 3 gradi). Il sensore è stato fissato sull’asse delle ruote motrici per garantire maggiore affidabilità nella misura dell’angolo di rotazione. Il giroscopio ci è tornato molto utile per correggere la traiettoria del robot, piuttosto imprecisa in alcune situazioni, e per un algoritmo di rotazione del robot su sé stesso. Inoltre, abbiamo imparato due accorgimenti da rispettare per l’uso del sensore, visti i problemi riscontrati inizialmente, anche da altre squadre con cui abbiamo collaborato: per fare in modo che il valore sia il più preciso possibile, ci siamo assicurati di collegare il cavo del sensore da robot fermo e su superficie piana e di effettuare un doppio reset del valore del giroscopio all’inizio dei nostri programmi. 3 Il robot è configurato con due ​
sensori di colore​
, usati per il riconoscimento del bianco, del nero, del rosso e del verde, che sono stati usati come riferimenti sul tappeto di gara per la correzione della posizione del robot in tre modalità: ● stop al rilevamento di un colore; ● algoritmo segui­linea proporzionale; ● posizionamento e aggiustamento sul bordo di una linea. 4 Infine, è stato implementato anche il ​
sensore ad ultrasuoni​
, che consente di rilevare la distanza di un ostacolo dal sensore. Così, siamo riusciti a fare in modo che il robot si sposti in linea retta prendendo come riferimento la distanza dal bordo del tavolo. Anche in questo caso la correzione è proporzionale alla differenza di distanza rilevata ad ogni misura. PROGRAMMAZIONE DEL ROBOT
Come anticipato prima, abbiamo sfruttato il sensore giroscopio per fare in modo che il robot segua una traiettoria rettilinea. Per raggiungere ciò, abbiamo realizzato un blocco personalizzato nell’editor di LEGO MINDSTORMS EV3, che si occupa di leggere il valore del giroscopio e di correggere la traiettoria ​
proporzionalmente all’errore che il robot sta commettendo. Il blocco viene poi inserito in un ciclo in modo da ottenere una correzione continua, finché necessario. Con il programma che segue, il robot si sposterà con potenza 50 con una traiettoria perfettamente rettilinea, fino a quando il sensore di colore non rileva il nero o un colore scuro. Abbiamo sfruttato il giroscopio anche in un altro caso, cioè la ​
rotazione del robot su sé stesso​
. Il blocco personalizzato che abbiamo creato consente di far ruotare il robot dei gradi specificati, con una imprecisione massima di +/­ 3 gradi, dovuta al sensore. La potenza assegnata ai motori diminuisce man mano che la rotazione si sta completando, e copre il range 40­1 %. 5 Per far seguire una linea colorata al robot, abbiamo usato l’​
algoritmo PID​
. Questo algoritmo si divide in tre parti: la parte proporzionale [P], la parte integrale [I], la parte derivata [D]. Nel nostro caso abbiamo sviluppato solo la parte P dell’algoritmo perché è più che sufficiente per seguire le linee rette presenti sul campo di gara. Un dispositivo che usa il PID, a differenza di altri algoritmi, è in grado di correggere la propria traiettoria in modo proporzionale all’errore commesso. Il robot non segue la linea ma il confine tra la linea colorata e il bianco. La media dei valori (nel nostro caso il colore e il contorno bianco) viene chiamata “offset”. La differenza tra l’offset e il valore che il sensore di colore rileva corrisponde all’errore. Attraverso un costante (Kp) il valore dell’errore viene moltiplicato per trovare la potenza necessaria da aggiungere e togliere ai due motori. Nel momento pre­gara lanciamo in esecuzione un programma che ci consente di salvare in tre variabili il valore offset per ogni riga colorata (nera, verde e rossa). In questo modo nel corso della competizione l’algoritmo segui­linea leggerà il valore della variabile corrispondente alla linea da seguire. L’avanzamento con traiettoria rettilinea lungo una parete del tavolo è stato ottenuto con l’uso del sensore ad ultrasuoni​
. Grazie al valore sufficientemente preciso fornito dal sensore, ci è stato possibile, mediante l’uso di un algoritmo proporzionale, di correggere la traiettoria di uno spostamento rettilineo. Abbiamo sviluppato anche un algoritmo che consente al robot di posizionarsi perpendicolarmente in corrispondenza del ​
bordo di una linea​
. In base ai valori letti dai due sensori di colore, viene calcolata la potenza da aggiungere o togliere ai due motori. Il processo di correzione è continuo e dura 1,5 secondi (tempo necessario per una correzione più precisa). 6