Prodotti
Alessandro
Microbo(t) - un nuovo robot line follower
Tutorials -
Martedì 15 Maggio 2012 10:06
Scritto da Alessandro

Qualche tempo fa, parlando con Gioblu al telefono, abbiamo ipotizzato di organizzare un mini torneo di line follower. Il line follower, sebbene sia uno dei classici della robotica per principianti, fatto ad un certo livello è abbastanza complesso. Su youtube si vedono line follower che corrono a 3 m/s e anche più, con ottimizzazioni spinte e ricerca delle massime performance che raggiunge discreti livelli.

Solitamente una gara di line follower è basata su velocità pura e il percorso è abbastanza lineare e semplice, con ampie curve e ampi rettilinei. In questo casa la parte hw la fa un po’ da padrone, perché il sw è abbastanza semplice da costruire. Bisogna cercare il giusto compromesso nelle caratteristiche meccaniche e nei motori per farlo andare più veloce possibile. Purtroppo richiede parecchio denaro, perché la ricerca delle performance può far scegliere motori costosi o ruote con mescole particolari.

L’alternativa è basata su percorsi che invece sono molto contorti o difficili, con angoli retti, linee che si incrociano, interruzioni di linea, ostacoli eccetera. In questo caso la parte hw riveste molta meno importanza. Più importante è l’algoritmo e quindi il sw con cui si programma il robottino. L’abilità del costruttore di robot si evidenzia nella sua capacità di costruire un algoritmo performante che permetta al robottino di affrontare le difficoltà che gli vengono messe di fronte.

In questo tutorial vorrei descrivere il robottino che ho realizzato, che è in grado di affrontare un percorso tortuoso fatto di curve a 180° piuttosto che serpentine strettissime, cercando di avere comunque una buona velocità.

Il robottino come vuole la tradizione è auto costruito. Per praticità alcuni componenti sono presi dal mercato, in modo da non dover inventare di nuovo la ruota ogni volta. Il robottino è inoltre già dotato di un sensore ad infrarossi frontale nel caso in cui si volesse utilizzarlo in un percorso con ostacoli da aggirare.

Questo è Microbo(t) – line follower robot

 

 

 

E’ costituito dai seguenti elementi:

- Telaio in PVC espanso 5 mm (costa pochi centesimi)

- Arduino Nano (circa 40 euro)

- Motori Pololu 50:1 HP (circa 30 euro tutti e due)

- Braccetti per motori Pololu (circa 6 euro tutti e due)

- Ruotino pivotante Pololu 3.8” in plastica (circa 3 euro)

- Ruote Pololu 42x19 (circa 10 euro tutte e due)

- Driver per motori Sparkfun TB6612FNG (circa 9 euro)

- Sensore di distanza Sharp ad IR 4-30 cm (circa 15 euro)

- Sensore di linea Pololu QT-8RC (circa 12 euro)

- Batteria Li-Po 7.4V 900mAh (circa 9 euro)

- Un po’ di viti e cavetti

Come si vede i componenti costosi sono l’Arduino Nano e i motori. Nulla vieta di utilizzare un arduino tradizionale con un evidente risparmio di denaro. Nella mia configurazione il peso è di circa 160 gr. Si può fare molto di meglio, in effetti su internet ci sono line follower con Arduino che pesano 100 gr.

 

 

 

 

 

Qualche commento sui componenti hw che ho utilizzato. Il sistema di guida, costituito dalle ruote Pololu e dai motori è quasi ottimo. Penso che ancora migliore sia utilizzando i motori Pololu HP 100:1 che assicurano ancora più trazione e fluidità nei cambiamenti di marcia, pur avendo un numero inferiore di giri/minuto. Quelli da 30:1 che ho provato erano troppo nervosi, quelli da 50:1 sono quasi ottimi, quelli da 100:1 penso siano ancora migliori. Peccato che non ne ho da provare. Assolutamente pessimo il ruotino in plastica della Pololu. Purtroppo non ne avevo altri di così piccoli, quindi l’ho tenuto. Sconsiglio il suo utilizzo. Pessimo.

Il driver motori TB6612FNG della Sparkfun è leggermente sottodimensionato. Infatti fornisce 1.2A a regime, quando i motori Pololu HP possono assorbire fino a 1.6A. A dire la verità non ho avuto nessun problema con questi driver, ancora funzionano e non si sono fusi, per cui non mi resta che consigliarli. Purtroppo hanno una marea di fili, 7 per il pilotaggio, 2 per la tensione a +5V, uno (o due con la terra) per la tensione da dare ai motori e 4 fili per i motori. In totale fanno 14 fili che sono parecchi. Sono molto semplici da programmare e gestire. La funzione full brake è quella che mi ha maggiormente deluso. Infatti se deve frenare, comunque ci mette un pochetto per fermarsi, vittima dell’inerzia. Penso che i motori 100:1 possano aiutare su questo aspetto.

Il sensore di linea della Pololu QT-8RC si dimostra abbastanza affidabile. Fornisce già una uscita in digitale e può essere collegato direttamente alle porte digitali di Arduino. Dopo una fase di auto-apprendimento durante i primi secondi (si veda il video), è in grado di tararsi al meglio tenendo conto della riflettività della superficie su cui è poggiato il robottino e delle condizioni di luce ambientale. E’ in grado di seguire linee nere su sfondo bianco o bianche su sfondo nero. Per questo sensore esiste una libreria scritta dalla Pololu stessa per Arduino che fornisce una risposta che varia tra 0 e 8000 a seconda del sensore (da sinistra a destra) che finisce sopra la linea nera. Ho modificato leggermente la libreria per avere una risposta che vada da -800 a +800 con lo zero quando la linea è perfettamente sotto i sensori IR centrali. Questo rende dal mio punto di vista più semplice il controllo. L’unico problema vero che ho avuto è in presenza di angoli retti. In questo caso non sempre il robottino si è fermato in tempo ed è riuscito a girare. Purtroppo non ho video su questo aspetto particolare.

Una volta costruito da un punto di vista hardware ed elettrico, la difficoltà maggiore è la determinazione dei parametri del controllo, che permettono al robottino di ritornare verso la linea quando se ne sta allontanando. In questo caso ho messo in atto il solito controllo PID, anche se nella mia versione è stato ridotto soltanto a PD, cioè proporzionale e derivativo. Il controllo integrale l’ho messo a zero, in quanto i frequentissimi cambi di direzione lo rendevano estremamente difficile da individuare.

Ho scritto anche delle semplici routine per l’individuazione degli angoli retti. In questo caso il robottino cerca di inchiodare e si gira di 90°, fregandosene dell’indicazione del sensore IR di linea. Questa tecnica ha funzionato abbastanza, ma si può sicuramente fare di meglio.

Per quanto riguarda il sensore IR frontale non ho avuto ancora modo di testarlo a fondo per verificare gli algoritmi di aggiramento dell’ostacolo. In questo caso il problema maggiore è dovuto alla necessità di far compiere al robottino un aggiramento dell’ostacolo funzionando in catena aperta, cioè senza retroazione. In tutte le prove che ho fatto questa è stata la maggiore criticità. Il robottino dovrebbe sorpassare l’ostacolo, come fanno le macchine nelle strade trovando un veicolo più lento. Purtroppo è una manovra che è riuscita poche volte a causa della variabilità del tragitto fatto dal robottino dovuto, credo, alla tensione della batteria che nel tempo varia. Non ho fatto ulteriori prove, ma le possibilità sono due:

- Utilizzare un convertitore dc-dc boost 4-25v come fa ad esempio la Pololu nel loro robot 3Pi che mantiene costante la tensione in ingresso al driver dei motori e riuscendo ad avere una buona precisione anche in assenza di encoder

- mettere degli encoder nelle ruote e misurare gli angoli

Il convertitore dc-dc costa meno di 10 euro, mentre gli econder costano, per le route Pololu, circa 25 euro. Magari nella prossima versione del Microbo(t) deciderò quale soluzione adottare. Chiaramente la soluzione encoder è più sofisticata ma richiede uno sforzo di programmazione (e verifica che vi siano ancora pin disponibili sull’Arduino!).

Ecco Microbo(t) – line follower in azione:

 

e

 

Ecco il codice completo e commentato anche se un po’ ‘sporco’. Link

 

Gioblu Robotics © 2010 - 2012 · Sitemap · privacy

gioscarab@gmail.com · Via Savona 123 20146 Milano MI · PI 06977550968 · Codice fiscale MTLGNN86S09F205F

Gioblu BOTServer è online dal 10 Aprile 2010 - 319.232 Visite - 1.027.175 Pagine visualizzate - 182.309 Visitatori unici - 536 utenti attivi