In questa seconda puntata del tutorial entreremo nel vivo della progettazione di un Robot Line Follower competitivo, partendo dalle valutazioni fatte in quella precedente (che invito a leggere chi si fosse “collegato” solo ora) e sviluppandole ulteriormente per trarne indicazioni utili alla scelta e il dimensionamento dei componenti meccanici ed elettronici.
Ribadisco che non intendo suggerire o imporre le “mie” scelte tecniche, bensì aiutare chi legge a farne di sue personali, magari diversissime dalle mie e certamente altrettanto valide (o magari di più) se coerenti con le considerazioni che faremo.
Iniziamo analizzando la struttura di un Robot piuttosto “classico”, che si muove grazie a due ruote motrici e che rileva la posizione della linea attraverso una serie di sensori posti anteriormente.

Lo schema base per un Robot di questo tipo è quello proposto nella prima figura.

Blocchi Robot
Schema base di un robot line follower

Nell’immagine le frecce indicano il flusso delle informazioni, ad intervalli prefissati la logica di controllo determina l’errore di posizionamento sulla linea attraverso le letture sulla barra dei sensori ad infrarossi e, mediante algoritmi più o meno complessi, elabora le correzioni di velocità da trasferire ai due motori attraverso i driver di potenza che li pilotano, finalizzate a recuperare l’allineamento con il centro della linea da seguire.

In se la cosa appare piuttosto banale, e ancora banali ma importantissime le considerazioni che ne conseguono:

  1. tanto più elevata sarà la risoluzione dell’errore di posizionamento che il sistema di sensori può misurare e di trasferire alla logica di controllo e tanto più tempestivamente e precisamente il controllore stesso sarà in grado di intervenire e correggere l’errore;
  2. tanto più elevata sarà la risoluzione della velocità che il controllore richiede al driver di potenza e tanto più precisa sarà la correzione;
  3. tanto più elevata sarà la corrispondenza tra la velocità che il driver richiede al motore e la velocità a cui realmente gira il motore, tanto più efficace sarà il controllo della posizione sulla linea di tutto il sistema.

Il mio personale approccio alla progettazione parte appunto dall’ultimo anello della catena, cioè il blocco ruota – riduttore – motore – driver.

Questo potrà sembrare strano perché spesso i robot amatoriali sono considerati erroneamente poco più di una “scheda elettronica con le ruote” ma vedremo come la scelta degli elementi che compongono questo blocco condizioni tutta l’architettura del robot, compresa l’elettronica non di potenza.

Riprendiamo la considerazione fatta al precedente punto 3.

E’ evidente che il miglior modo per ottenere una elevata precisione nella risposta dei motori alle richieste del driver e della logica sarebbe quella di un controllo ad anello chiuso, cioè l’inserimento di un encoder incrementale sull’asse motore e l’utilizzo di un algoritmo che permetta di elaborare il feedback fornito dall’encoder stesso per un allineamento continuo della velocità reale a quella richiesta.

Questa soluzione non è facilissima da attuare, sia per gli elevati regimi di rotazione che per la complessità intrinseca del software, per cui per il momento la accantoneremo; teniamo però presente che le soluzioni alternative che andremo a ricercare saranno comunque finalizzate al dimensionamento di un sistema ben equilibrato, che potrebbe essere una ottima base per una eventuale successiva implementazione del controllo ad anello chiuso.

In un controllo ad anello aperto l’elettronica chiede una velocità al motore e spera che questo riesca a fornirla, non avendo modo di verificarlo se non in ritardo e indirettamente attraverso l’errore di posizionamento sulla linea.

Il fattore che condiziona maggiormente la coerenza tra la risposta effettiva del sistema e quanto gli viene richiesto è certamente la coppia disponibile. Assumendo (per ora) che la ruota sia in grado di collegare in modo esatto il moto-riduttore con il terreno, tanto maggiore è il rapporto tra la “forza” del motore e le forze che gli si oppongono (peso del robot, inerzia, ecc.) tanto più possiamo sperare che questo sia in grado di contrastarle e quindi di avere una risposta coerente con la richiesta.

La spinta del motore naturalmente sarà influenzata, oltre che dalle sue caratteristiche proprie, dal diametro della ruota e dal rapporto di riduzione. Più elevato è il rapporto di riduzione, maggiore è la coppia alla ruota parità di motore, ma cala la velocità. Più piccolo è il raggio della ruota, maggiore è la spinta ma minore la velocità.

Una ulteriore nota riguardo alla velocità; per avere un certo margine di sicurezza il motore dovrà essere in grado di girare tranquillamente oltre il regime richiesto dalle specifiche del nostro progetto, ma la sua velocità massima non dovrà essere troppo superiore a quella che utilizzeremo, altrimenti calerà drasticamente la risoluzione utile del controllo (punto 2).

Facciamo un esempio

Pensiamo di pilotare il driver di un motore attraverso un segnale PWM a 10 bit (senza addentrarmi nelle spiegazioni circa il Pulse Width Modulation ovvero “modulazione a variazione della larghezza d’impulso”, segnalo il link di un ottimo tutorial al quale faremo riferimento anche in seguito: http://www.tmasi.com/robotica/pwmtut/PWMTut_H.htm).

Con questa risoluzione possiamo passare al driver un valore compreso tra 0 e 1023.

Supponiamo una relazione lineare tra il segnale e il regime di rotazione del motore.

Immaginiamo che il range di utilizzo del motore nella nostra applicazione vada da 0 a 16.000 RPM (revolutions per minute), mentre la velocità massima del motore stesso sia di 18.000 RPM.

Utilizzando il segnale PWM in modalità SM (Sign Magnitude, vedere il tutorial al link citato) il motore è fermo se viene inviato un segnale di valore 0 e gira alla massima velocità (18.000 RPM) con un valore di 1023; siccome la velocità massima nella nostra applicazione (16.000 RPM) si ottiene con un valore di circa 909, di fatto noi utilizziamo l’89% della risoluzione disponibile e possiamo suddividere il range di velocità richiesta al nostro motore in 909 “gradini”. Se invece scegliamo un motore da 36.000 giri/minuto la velocità di 16.000 RPM viene raggiunta con il valore di 455, il nostro sistema utilizza solo il 44% della risoluzione disponibile e con solo 455 “gradini” la precisione del controllo risulta molto inferiore.

Utilizzando il segnale PWM in modalità LAP (Locked AntiPhase, vedere il solito tutorial) il problema aumenta notevolmente; in questa modalità il motore sta fermo con un valore di 512 mentre gira alla massima velocità, nei due sensi di rotazione, rispettivamente con il valore 0 e con il valore 1023 e di conseguenza anche le risoluzioni utilizzabili, i “gradini”, si dimezzano.

Ma vediamo di andare oltre

Per capire di che valori di velocità, diametro ruota e rapporto di riduzione abbiamo bisogno occorre riprendere le valutazioni fatte nel capitolo precedente dove rilevavamo che purtroppo il Robot non ha alcun modo di “prevedere” l’approssimarsi di una curva e quindi il software non ha modo (ad esempio) di fargli percorrere un lungo rettilineo alla massima velocità consentita dalla meccanica per poi decelerare progressivamente in vista dell’ingresso in curva, che in questo caso potrebbe essere affrontata in modo sicuro senza penalizzare la velocità sul tratto dritto.

Al contrario, la velocità massima che potremo far mantenere al nostro Robot per tutto il tracciato sarà la velocità che gli permette di affrontare il punto più critico senza perdere il controllo, vale a dire la velocità che potrà tenere nel momento della brusca transizione tra il tratto rettilineo e l’inizio della curva più stretta.

Quando parliamo di velocità del robot ci riferiamo naturalmente alla velocità del suo centro; per mantenere una velocità costante per tutto il percorso, un tipico robot che sterza mediante un differential steering system (cioè variando indipendentemente la velocità delle due ruote motrici) avrà velocità di avanzamento delle singole ruote anche molto differenti da quella di avanzamento del robot.

In un tratto rettilineo è banale rilevare che la velocità delle due ruote è teoricamente uguale alle velocità del centro del robot.

LineaRetta
Traiettoria rettilinea del robot

In curva sarà evidentemente necessario ridurre la velocità della ruota interna e aumentare quella della ruota esterna per mantenere costante la velocità del centro del robot; sembra semplice ma dobbiamo approfondirne la dinamica.

Con l’aiuto della semplice animazione che segue e delle successive immagini, analizziamo le fasi che interessano la traiettoria teorica del robot che percorre una curva stretta.

Traiettoria su curva stretta
In questa animazione possiamo vedere come un robot Line Follower percorre un tratto di curva

L’azione (di fatto un cambio di direzione di 90°) è stata scomposta in una serie di frame in cui ogni volta il robot ha ruotato di 5° rispetto al precedente in modo da “congelare” il percorso in curva in una sequenza di posizioni da cui possiamo rilevare una serie di dati:

Come si vede dall’immagine sotto, benché la curva della linea da seguire sia un perfetto quarto di circonferenza, il centro del robot, la sua traiettoria, segue in realtà un andamento parabolico. Chiaramente ciò è dovuto al fatto che l’elemento che segue la linea non è il centro del robot ma la barra dei sensori e, senza complicarci la vita con la probabile equazione che governa questo movimento, limitiamoci ad utilizzare questa scoperta per continuare l’analisi.

Traiettoria in curva
Andamento della traiettoria in una curva stretta

Il repentino approssimarsi del tratto curvo e l’andamento parabolico della traiettoria impone alle due ruote e quindi ai due moto-riduttori azioni molto diverse e di conseguenza velocità molto differenti da quella del centro del robot (che supponiamo costante).

La scelta e il dimensionamento dei motori e dei riduttori non potranno quindi essere fatte semplicemente in funzione della velocità prevista per il robot, bensì occorre analizzare le sollecitazioni e le velocità richieste alle ruote.

Per capire di cosa stiamo parlando, iniziamo a scomporre l’azione in curva in tre fasi: entrata in curva, parte centrale e uscita.

Robot Line Follower - Approccio alla curva
Fase 1: inserimento in curva
Robot Line Follower - Parte centrale curva
Fase 2: parte centrale
Robot Line Follower - Uscita di curva
Fase 3: uscita dalla curva

 

Confrontando le linee che schematizzano i percorsi compiuti dalle due ruote e dal centro del robot, salta agli occhi immediatamente che per tutta la parte centrale della curva (Fase 2) la ruota interna compie pochissima strada (nel caso dell’esempio è di fatto ferma e funge da perno di rotazione) mentre quella esterna “corre” per mantenere eguale la velocità del centro del robot.

Dall’immagine relativa all’ingresso in curva (Fase 1) rileviamo invece quanto breve sia (pochi cm) lo spazio a disposizione della ruota interna per passare dalla velocità lanciata del rettilineo al sostanziale arresto della ruota stessa. E’ qui che diventa fondamentale la coppia disponibile alla ruota; tanto sarà superiore all’inerzia del robot ed alle altre sollecitazioni che gli si contrappongono, tanto il nostro robot effettuerà con precisione le correzioni indicate dall’algoritmo di controllo.

Facile prevedere che un ritardo nell’adeguamento della velocità interna (anche se limitato) può compromettere l’ingresso in curva; a questo punto il controller dovrà reagire bruscamente ad un errore di linea divenuto molto grande e facilmente innescherà serpeggiamenti che provocheranno quantomeno un ritardo sul tempo e non la perdita definitiva del tracciato.

L’uscita dalla curva (Fase 3), se tutto ha funzionato a dovere nelle prime due fasi, non presenta grandi criticità in quanto l’andamento parabolico aiuta il software a smorzare eventuali oscillazioni.

Cominciamo a tirare le somme

Alla ruota interna viene richiesta la capacità di passare nello spazio di pochi centimetri dalla velocità massima di rettilineo all’arresto; questo richiede una coppia elevata che a parità di motore si ottiene in genere con un rapporto di riduzione alto.

Alla ruota esterna viene richiesta una velocità molto elevata, sino al doppio di quella del robot quando la ruota interna si ferma; questo richiede motori con elevato numero di giri/minuto (RPM) e un rapporto di riduzione piuttosto basso.

Sono esigenze diverse, praticamente opposte … se avessimo dei tracciati ad anello con curve tutte nella stessa direzione, come in certe gare automobilistiche negli USA, il problema non ci sarebbe, basterebbe dimensionare in modo diverso i due moto-riduttori … invece noi abbiamo percorsi dove si possono trovare curve tanto a destra quanto a sinistra, e quella che in un caso è la ruota interna diventa esterna e viceversa.

Quindi dobbiamo progettare il nostro sistema motore per entrambe le situazioni e operare dei compromessi. Come ho scritto nella puntata precedente si possono seguire strade diverse, facciamo quindi un paio di esempi abbastanza lontani tra loro come filosofia.

Per il primo esempio pratico ci appoggiamo alle caratteristiche dei Micro Metal Gearbox, una serie di moto-riduttori in miniatura commercializzati da una nota ditta statunitense, molto utilizzati nei Line Follower leggeri.

Micro Gear Motor
Micro Gear Motor

Questi riduttori hanno rapporti di riduzione che spaziano da 5:1 a 1000:1; per i nostri scopi andremo a valutare i rapporti 10:1 e 30:1 in quanto probabilmente vicini al compromesso tra coppia e regime di rotazione di cui necessitiamo.

  • stabiliamo come prestazione target del robot un avanzamento di un metro al secondo; riuscire a realizzare un robot capace di questa velocità media su un tracciato vario sarebbe già un ottimo risultato, anche se sul web si possono vedere immagini di robot di cui vengono dichiarate performance ben superiori
  • abbiamo visto che alla ruota esterna verrà richiesta una velocità doppia, vale a dire due metri/sec
  • i micro riduttori scelti hanno una sezione di 10 x 12 mm per cui le dimensioni del robot saranno piuttosto contenute e le ruote probabilmente avranno un diametro piuttosto piccolo, intorno ai 30 mm. Per semplicità di calcolo ipotizziamo un diametro di 29,92 mm che corrisponde ad un avanzamento sul terreno della ruota di 94 mm per ogni giro (il perimetro della ruota è infatti ovviamente pari a mm 29,92 * Pi)
  • per percorrere i due m/sec richiesti la ruota dovrà quindi compiere 21,28 rotazioni per secondo (2.000 mm/sec : 94 mm/giro). Poiché non è opportuno far lavorare il motore al limite delle sue prestazioni, incrementiamo il numero delle rotazioni per secondo richieste di circa il 30%, per cui dovremo identificare un motore capace di far compiere alla ruota almeno 28 giri/sec e cioè 1.680 RPM (rotazioni per minuto)
  • relativamente ai micro riduttori scelti sono disponibili varie opzioni disponibili con velocità coppia e assorbimento differenti; facciamo riferimento alla tabella comparativa fornita dalla società che li commercializza (https://www.pololu.com/search/compare/60)

Inizialmente ne cerchiamo uno sufficientemente veloce e che abbia il rapporto di riduzione 30:1; questo perché ci aiuterebbe a tenere alta la coppia necessaria alla ruota interna al momento della repentina diminuzione di velocità o fermata in curva.

Purtroppo con questo rapporto abbiamo tutti moto-riduttori con regimi di rotazione in uscita troppo bassi e anche il più performante disponibile si limita ad una velocità di 1.000 RPM.

Infatti notiamo che, anche quello che viene definito “High-Power motor“, assorbe sino a 1.600 mA in stallo ma non va oltre i 1.000 giri al minuto all’uscita del riduttore.

Siamo quindi costretti ad analizzare quelli con rapporto di riduzione 10:1. In questo caso tanto il modello da 700 mA di corrente di stallo quanto quello da 1.600 mA hanno velocità superiori a quella richiesta; occorre però scartare quello più potente in quanto ha un regime di rotazione quasi doppio di quello richiesto e questo provocherebbe una perdita di risoluzione utile nel controllo, come discusso in precedenza.

Occorre anche segnalare che probabilmente i motori verranno alimentati da due celle LiPo con una tensione nominale di 7,4V anziché i 6V previsti dal costruttore e ciò farà ulteriormente aumentare la velocità massima.

Quindi la nostra scelta deve ricadere sul “Medium-Power motor” che assorbe sino a 700mA in stallo e il suo asse ruota gira a 2.200 RPM, mentre siamo costretti a scartare l'”High-Power motor” che assorbe sino a 1.600 mA in stallo ma gira a 3.000 RPM, quasi il doppio di quanto ci serve.

Guardiamo ora in dettaglio i dati del moto-riduttore prescelto: ha un rapporto di riduzione di 9,96:1 e per la coppia viene dichiarato il valore non certo strabiliante di 0,2 kg-cm che equivale ad una forza di spinta della ruota di poco superiore ad un etto (F=\frac{M}{r}, dove “F” è la forza di spinta, “M” è la coppia ed “r” è il raggio della ruota e quindi \frac{0,2}{1,496} = 0,13 Kg ).

Va da se che motori di questo tipo e con una coppia così modesta esasperano la necessità di contenere peso e dimensioni del robot; di fatto limitano la possibilità di sperimentare soluzioni hardware più complesse, sono molto delicati sia meccanicamente che elettricamente e farli lavorare in condizioni prossime al loro limite li mette a rischio di danni irreversibili. In compenso sono piccoli e leggeri, assorbono poco per cui non è difficile reperire driver adeguati e si accontentano di batterie modeste.

Per il secondo esempio pratico utilizziamo il noto riduttore Tamiya Double Gear Box.

Double Gearset Tamiya
Double Gear Box Tamiya

Questo moto-riduttore è decisamente più ingombrante e pesante del precedente ma ha sostanzialmente due punti di forza: per prima cosa ha rapporti di riduzione di 12,75:1, 38,25:1, 114,75:1 e 344,25:1, modificabili semplicemente cambiando la configurazione degli ingranaggi forniti; secondariamente è decisamente più economico e monta lo stesso tipo di motori usati dagli auto-modelli “Mini 4WD” da competizione per cui sul mercato ve ne sono tantissimi e con prestazioni a volte anche esagerate. Va segnalato che questi motori sono progettati per una tensione di alimentazione di 3V, alimentandoli ad una tensione superiore si aumentano drasticamente le prestazioni ma altrettanto drasticamente se ne riduce la vita … chi ritenesse che le prestazioni giustifichino il sacrificio si potrà consolare con il fatto che la sostituzione del motore nel riduttore è velocissima.

I motori forniti standard con il gruppo di riduzione sono comunque accreditati di una velocità di 12.300 RPM a vuoto se alimentati a 3V; nei miei test, montati nel moto-riduttore e alimentati a 7,4V, sono arrivati a 35.600 RPM … il “Mach Dash” invece ha superato tranquillamente i 65.000 RPM (!).

Riprendendo il calcolo dell’esempio precedente e considerando sempre di avere ruote da 30 mm di diametro e quindi di dovergli ancora far compiere 1.680 rotazioni per minuto, vediamo che con un riduttore da 12,75:1 basterà un motore da 21.420 (motore standard), mentre utilizzandone uno superiore, ad esempio il Mach Dash, potremo anche configurare il rapporto di riduzione del nostro riduttore a 38,25:1.

Attenzione che questi motori scaldano tantissimo quando sono sovralimentati, si distruggono in pochi minuti se tenuti alla massima velocità e soprattutto arrivano ad assorbire oltre 6A sotto sforzo per cui la scelta del driver di potenza e della sua dissipazione non è banale.

Riguardo alla coppia disponibile, i motori Tamiya sono accreditati di 10/20 g-cm con alimentazione a 3V; non ho uno strumento in grado di misurare la coppia che forniscono quando sono sovralimentati ma penso di non sbagliare se giudico che come minimo raddoppi, considerando di quanto aumenta l’assorbimento e appoggiandomi alla formula:

 C_M = K_t \cdot I_a

dove C_M è Coppia Motrice, K_t è la costante di coppia tipica del motore e I_a è la corrente assorbita.

Facendo il caso di un valore medio di 15 g-cm a 3V, avremo una coppia al motore di almeno 30 g-cm a 7,4V che diventa una coppia all’uscita del riduttore di 368 g-cm nel caso di un rapporto di 12,75:1 e addirittura 1,148 kg-cm nel caso del rapporto 38,25:1 .

Alla ruota avremo una spinta rispettivamente di 246 g e 767 g.

Questo aumento di prestazioni si paga, come detto, con un aumento di peso e una certa complessità nel realizzare l’elettronica di potenza; inoltre occorre mettere in conto una certa scorta di motori…

Bene, a questo punto dovremmo avere scelto i moto-riduttori potenzialmente in grado di garantire una prestazione effettiva coerente con quella richiesta dalla logica di controllo; affinché succeda realmente bisogna però che il sistema di controllo e il driver di potenza siano scelti con attenzione.

Per quanto riguarda il driver di potenza o ponte “H” è sufficiente sceglierne o progettarne uno che sia in grado di fornire tutta la corrente che i motori devono assorbire per esprimere le performance attese. Driver sottodimensionati andranno in protezione per sovracorrente o sovra temperatura nei momenti meno adatti o peggio si danneggeranno irreparabilmente.

Un po’ più complesso il discorso relativo al sistema di controllo.

Abbiamo già accennato al fatto che un segnale PWM può essere utilizzato in modalità SM (Sign Magnitude) o LAP (Locked AntiPhase); la prima prevede l’utilizzo di un bit di direzione e di una onda quadra in cui il duty cycle (cioè il rapporto tra la semionda positiva e quella negativa) governa la velocità, la seconda utilizza due onde quadre invertite il cui duty cycle governa sia direzione che velocità.

Sempre senza entrare nel dettaglio, ma invitando nuovamente ad un approfondimento tramite il tutorial già citato o con una ricerca sul web, voglio segnalare il diverso comportamento delle due modalità in relazione alla necessità che il sistema ruota – moto-riduttore che abbiamo accuratamente dimensionato sia effettivamente in grado di esprimere le performance che potenzialmente può fornire.
Semplificando, un robot pilotato in SM si muoverà come un pattino a rotelle spinto dietro dalla nostra mano; fino a che spingeremo andrà avanti, appena smetteremo si fermerà; ma se si trovasse a percorrere una rampa sufficientemente inclinata continuerebbe il moto, rotolando avanti anche senza la nostra pressione. Un robot pilotato in LAP ha invece un comportamento più simile ad un pattino tenuto in mezzo a due mani che si muovono avanti e indietro o si fermano insieme.

Diciamo quindi che conviene optare per questo tipo di configurazione se vogliamo che il motore risponda prontamente alla richiesta di rallentare o fermarsi repentinamente e con precisione. Questa decisione però comporta alcune limitazioni nella scelta della logica di controllo.

Il buon funzionamento di questa modalità richiede infatti una frequenza del segnale PWM piuttosto elevata, maggiore di quella richiesta dal SM; ad esempio potrebbero avere difficoltà i molti “robottari” che utilizzano la diffusissima scheda di controllo Arduino o i suoi cloni, nelle varie versioni disponibili.

Questa scheda paga la sua facilità di utilizzo e l’enorme quantità di documentazione disponibile con librerie per la gestione del PWM hardware che possono arrivare a frequenze di lavoro più adatte al fading dei led che al controllo di motori DC. Naturalmente è sempre possibile intervenire manualmente sui registri appositi del micro Atmel ma occorre fare attenzione a non compromettere le funzioni di timer utilizzati da altre librerie necessarie. Si potrebbe allora prendere in considerazione l’utilizzo di Pic Microchip che in alcuni casi sono stati concepiti appositamente per il controllo dei motori, oppure si potrebbe optare per modelli di driver che implementano funzionalità di freno anche se pilotati in SM, a prezzo di una certa complessità del controllo.

Un ultima nota riguardo all’alimentazione dei motori. In molti casi le differenze tra la velocità e la coppia che lo stesso motore riesce ad esprimere con le batterie completamente cariche o durante il ciclo di scarica utile possono essere notevoli; questo fenomeno rende spesso difficile la taratura del robot. Una soluzione spesso usata è quella di inserire un regolatore di tensione definito step down o step up, rispettivamente se la tensione della batteria viene ridotta o aumentata per raggiungere la tensione in uscita; in questo modo è possibile tenere costante la tensione per un tempo maggiore e di conseguenza avere un robot con un rendimento più lineare.

Ricordando che qualsiasi richiesta di chiarimento o segnalazione di errori o imprecisioni è caldamente incoraggiata e può essere effettuata collegandosi al gruppo di Officine Robotiche relativo ai robot da line following:  https://groups.google.com/forum/#!forum/officinerobotiche_lf

Stefano Scibilia

https://www.facebook.com/Artigianato-Robotico-1035968686433516

 

::: Costruire un Robot Line Follower competitivo – Parte 1 :::

Rispondi

This site uses cookies. Find out more about this site’s cookies.
%d blogger hanno fatto clic su Mi Piace per questo: