Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

5
voti

Alla ricerca di un equilibrio

Indice

La morfologia di assieme

La forma dell'oggetto in questione è quella verticale su due ruote motrici, simile ad un piccolo segway in miniatura. Le batterie di alimentazione stanno in alto, mentre una IMU che contiene un accelerometro e un giroscopio sta piuttosto in basso. Poi c'è un circuito elettronico con una MCU o microcontrollore, un motorino a spazzole, l'assale con le ruote e un encoder che ne conta i giri o frazioni di giro.

La calibrazione dell'accelerometro

Abbiamo un asse orizzontale longitudinale y orientato in avanti, un asse orizzontale trasversale x orientato a sinistra e un asse verticale z orientato in basso. Con l'aiuto del Debug offerto dal sistema di sviluppo MPLABX, si è presa nota delle letture nelle 4 posizioni in quadratura: in equilibrio, capovolta, poggiata sulla fronte, e sulle spalle. In tal modo veniamo a sapere esattamente quanti count corrispondono a variazioni di accelerazione pari a 2G, quanti count segnalano i singoli assi in orizzontale (dovrebbe essere zero o quasi) e di quanti count si modifica il segnale dell'asse z ponendolo in verticale, variazione che si assume corrispondente all'accelerazione G di gravità.
I valori riscontrati non rispettano esattamente le specifiche della IMU pertanto mi rimane il dubbio che il chip MEM, MPU6050, premontato nel modulino adoperato, non sia di prima scelta.

Lo schema

La situazione può rappresentarsi come un programma di elaborazione o come un sistema di controllo. Poichè il listato del programma contiene già dei commenti, ho preferito tracciare uno schema a blocchi così da offrire un secondo punto di vista.
I triangoli rappresentano amplificatori o attenuatori, per alcuni la attenuazione è così grande da rendere trascurabile il segnale ma ho preferito lasciarli indicati in vista di possibili modifiche.
I blocchi indicati come integratori sono realizzati dal programma eseguendo una somma ad ogni iterazione, quindi sono integratori puri e non si comportano esattamente come le celle RC. Non mi è chiaro se gli errori numerici possano cumularsi in una direzione privilegiata quindi assumere una certa importanza. Infatti il prototipo tende a spostarsi di un poco all'indietro dopo la partenza.
I filtri taglia basso hanno una costante di tempo di svariati secondi, sicuramente maggiore dei tempi di reazione e servono per azzerare la componente continua dei relativi segnali.

La formula "tilt"

L'accelerazione orizzontale y, rapportata a G, fornisce già una misura dell'inclinazione in radianti. Ci sarebbe da tirare in ballo la funzione arcoseno ma per piccoli angoli si può trascurare. Questo è vero a veicolo fermo, ma poi l'accelerazione cinematica dovuta al movimento si mischia a quella dovuta all'inclinazione. Ho trovato, su un forum nazionale di robotica, una formula che consente di eliminare questa sovrapposizione e quindi fornisce il valore tilt dell'inclinazione. Dico subito che ho provato a trascurare il problema e il risultato non cambia granchè, comunque la formula è la seguente:
posto
a = {\sqrt{a_y^2+a_z^2-g^2}}
abbiamo
tilt = {\arcsin \frac{ g\times a_y + a\times a_z}{a_y^2+a_z^2}}
a rappresenta l'accelerazione cinematica orizzontale, di cui la formula fornisce il modulo ma non il segno. Poichè l'accelerazione cinematica è impressa dal motore, possiamo dedurre il segno di a dal segno dell'ultima variazione del duty cycle impresso al motore.
La scala dell'accelerometro non influisce in questi calcoli, abbiamo solo rapporti fra letture e il risultato è un angolo cioè un numero puro.

La "sensor fusion"

L'accelerometro tende a comportarsi come un microfono nella banda sub-acustica attorno a 15 Hz nella quale fornisce un segnale troppo "rumoroso". Quindi conviene utilizzare il giroscopio per misurare le variazioni rapide dell'inclinazione, e utilizzare l'accelerometro per correggere la deriva lenta che si verrebbe a creare se misurassimo soltanto le variazioni. Il giroscopio elettronico, per sua natura, fornisce un segnale proporzionale alla velocità angolare cioè alla derivata dell'inclinazione. Sommiamo l'inclinazione "tilt" in radianti ottenuta con la formula del paragrafo precedente in base ai segnali dell'accelerometro, con la suddetta derivata in radianti/secondo ottenuta dal giroscopio, quest'ultima moltiplicata per una costante T che ha le dimensioni di un tempo e vale un secondo o poco meno. Il risultato di questa somma, filtriamolo con un filtro passa-basso avente una costante di tempo ancora pari a T. In definitiva, usando la variabile di Laplace S che è anche operatore di derivazione, abbiamo:
(tilt + S T x tilt)/(1+ST)=tilt cioè abbiamo riottenuto l'angolo di inclinazione, prevalentemente dall'accelerometro ai tempi lunghi e prevalentemente dal giroscopio ai tempi brevi, proprio come conviene. Mi scuso per il pasticcio matematico, se il risultato non fosse corretto sono pronto a ravvedermi.

Il controllo derivativo

La variabile controllata è l'inclinazione, la cui derivata in questo caso è fornita da un segnale indipendente che è quello del giroscopio. Si poteva anche fare la consueta derivata dell'errore, ma ho voluto complicare le cose.
Quindi per ottenere una corretta derivata dell'errore si fa la differenza fra i due termini che la compongono: la derivata dell'inclinazione, ottenuta dal giroscopio, e la derivata del setpoint, il quale non è costante come si vedrà appresso. Ecco perchè nello schema c'è un poco di ingarbuglio e un nodo sommatore con tre ingressi, mentre nel programma la cosa appare più semplice ma occorre fare i conti con la scala del giroscopio.
Nota: trascurando il secondo dei due termini sopra detti, in realtà il funzionamento migliora. Pertanto dopo la pubblicazione di questo articolo, la relativa istruzione nel programma è stata ridotta a un commento.

L'azione regolatrice

Supponiamo che l'avviamento avvenga in posizione di equilibrio e memorizziamo come riferimento o setpoint l'angolo di inclinazione iniziale, che dovrebbe essere zero o poco diverso. Il sistema di regolazione, ogni millisecondo, misura l'inclinazione corrente e cerca di azzerare lo scostamento dal detto valore iniziale, mediante una azione proporzionale, cui viene sommata una azione derivativa come detto nel paragrafo precedente. In che cosa consiste questa azione? Abbiamo un motore collegato alle ruote tramite una cinghietta di trasmissione, quindi dovremmo modulare la velocità, o la posizione, o l'accelerazione, o la coppia di questo motore? A complicare le cose, il motore viene alimentato in ambo i versi in PulseWidthModulation quindi dobbiamo scegliere fra modulazione a 2 o 3 livelli, con ring armonico libero o con tensione sempre impressa, con induttore o meno, a che frequenza eccetera. Dopo diverse prove è stata adotatta la soluzione più semplice, con l'aggiunta praticamente trascurabile di un integratore come indicato nello schema.

La stabilizzazione

Inseguire l'inclinazione iniziale non basta a impedire la caduta. Lo squilibrio iniziale, per quanto possa essere piccolo, tenderà ad incrementarsi sempre di più. Il sistema di regolazione tenterà di opporsi con una robusta azione caratterizzata da un verso costante, quindi un ulteriore loop di controllo utilizzerà questa azione come segnale di errore per correggere l'inclinazione assunta come riferimento. C'è anche un altro segnale capace di indicare una difficoltà nel mantenimento dell'equilibrio, ed è lo spostamento segnalato dall'encoder applicato alle ruote. Se il veicolo si è spostato troppo, bisogna comunque cercare di riportarlo indietro. Ambedue questi segnali vanno a correggere il setpoint dell'inclinazione con modalità diverse. E' opportuno che soltanto uno di essi, cioè la posizione dell'encoder che offre maggiore certezza, possa mantenere un valore continuo, mentre l'altro viene sottoposto a un filtro taglia-basso pertanto può agire soltanto nei transitori.

Un videoclip

https://www.youtube.com/watch?v=jOSAL1TuRPA

Lo schema elettrico

balan1.JPG

balan1.JPG

Il programma

https://www.electroyou.it/forum/viewtopic.php?f=14&t=80896&p=912435#p912435

Le foto più recenti

Di fianco:

balfian.jpg

balfian.jpg

Da sotto:

balencod.jpg

balencod.jpg

Le conclusioni

C'è equilibrio e equilibrio, questo è un po' nevrotico. Forse la bassa risoluzione dell'encoder (24 count per giro della ruota), la poca potenza del motore, l'elasticità della cinghia di trasmissione, la qualità della IMU, la messa a punto insufficiente, la (quasi) mancanza di modellazione teorica, l'algoritmo scorretto, la programmazione inadeguata, la pretesa di far tutto da sè, ma la verità mi sfugge e forse un giorno mi verrà chiara. Altre realizzazioni mi hanno dato risultati che considero definitivi, questa continua ad attrarmi.

4

Commenti e note

Inserisci un commento

di ,

Potresti mettere nella intro dell'articolo una foto dell'insieme.. Per il resto veramente un bel progetto !

Rispondi

di ,

Grazie. Per adesso, grazie alla foto in homepage, si può capire e magari fare un clic. Poi rimarrà il titolo che effettivamente è fuorviante, non proprio del tutto dal mio punto di vista.

Rispondi

di ,

L'argomento è molto interessante ma manca all'articolo un'introduzione che spieghi, magari brevemente, l'oggetto e il tuo interesse verso questo tipo di progetto. Non tutti sanno di primo acchito, specie quelli più anziani, immagino, cos'è un segway. Ti inviterei quindi ad aggiungere qualche parola che inviti alla lettura.

Rispondi

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.