Un sistema per correre parallelo alla libreria

Un sistema per correre parallelo alla libreria

il sistema di pilotaggio di Arianna dei motori delle ruote ci permette di fare curve più o meno larghe e abbiamo visto che una curva a raggio infinito equivale ad andare diritto. Perché correre diritto e paralleli alla libreria dovrebbe essere un problema? Approfondiamo la teoria e vediamone che la soluzione sta nell’introdurre un sistema di controllo retroazionato. Vedremo l’elemento di base dei sistemi di controllo che sono onnipresenti intorno a noi, dalla caldaia di casa ai jet militari a reazione che non possono volare senza questi sistemi attivi.

Per percorrere una retta le due ruote devono percorre lo stesso spazio.
Ci sono tre effetti che fanno si che il risultato sia vicino a quello atteso ma non abbastanza per garantire il risultato. Noi governiamo la velocità di rotazione di ogni singolo motore e quindi della ruota.
Supponiamo che le velocità siano uguali, devono essere identiche anche le ruote. Identiche significa perfettamente uguali anche nell’appoggio al terreno. Se la loro circonferenza differisse di un millimetro, che significa una differenza tra i diametri diverso di 3 decimi di mm, avremmo che per ogni giro ruota perderemmo un mm, nel nostro caso una differenza di circa lo 0.7 %. Un piccolo errore che sommato nel tempo, integrato (dalla funzione matematica di integrale) è il termine corretto, conduce a delle differente importanti.
Successivamente abbiamo lo slittamento delle ruote sul terreno, per piccola che sia Arianna, soffre anche lei di perdite di aderenza che fanno si che a un giro ruota non corrisponda esattamente un pari avanzamento sul pavimento.
Per ultimo l’effetto più importante, la differenza tra la velocità richiesta e quella ottenuta. Noi stiamo usando un motore in continua con rotore alimentato a spazzole e statore a magneti permanenti.  Il rotore costituisce il circuito di armatura.

 schemamotoredc  eqmotoredc

 

  • Va è la tensione di armatura. Nel nostro caso la tensione generata dal PWM.
  • Ia è la corrente di armatura.
  • Ra è la resistenza di armatura
  • La è l’induttanza di armatura
  • Ke e Kt son due costanti, proprie del motore, dette costante elettrica e di coppia
  • Cm la coppia motrice
  • ω è la velocità di rotazione
  • Eg è la tensione controelettromotrice generata dalla rotazione del motore. Questa dipende dalla velocità di rotazione.

A questa aggiungiamo l’equazione della meccanica che lega momento di inerzia, ‘J’, a Coppia motrice e Coppia resistente.

J*dω/dt = Cm – Cr

Il tutto per dire che la velocità del motore, ω, dipende da una serie di fattori. Il considerarla proporzionale alla tensione di alimentazione è una prima approssimazione.

E quindi??

Quindi se vogliamo governare il moto di Arianna non ci basta imporre le scorrimento tra le velocità dei motori, dobbiamo fare anche altro.

Come guidiamo la macchina?

Quando guidiamo la macchina non lo facciamo ad occhi chiusi, sappiamo anzi che distogliere gli occhi dalla strada ci porta fuori via e dobbiamo correggere prontamente. Se scomponiamo le nostre azioni fatte inconsciamente queste sono nell’ordine:

  • valutare nostra posizione rispetto ai bordi della strada,
  • ruotare di conseguenza il volante. Questa azione modifica la posizione dell’auto.
  • ritornare all’azione di valutazione. Punto 1

Il ripetere questo processo ci porta a seguire il percorso voluto. Questo algoritmo realizza un sistema di controllo ad anello chiuso.

Controllo in anello chiuso

Vediamolo con uno schema a blocchi, una rappresentazione grafica dove le parti vengono scomposte e vengono indicate i collegamenti.
Nel nostro caso il robot Arianna viene rappresentato come un elemento, blocco, che riceve un valore di scorrimento “S” e in conseguenza a questo si porta a una certa distanza dalla libreria, la posizione reale. All’interno del blocco ci sarà una funzione matematica che rappresenta la fisica del sistema. Al momento non ci interessa adesso sapere come si ricava la funzione.
Vediamo invece come questa distanza fisica entri nel blocco “sensore IR” e da questo esca il numero “lettura sensore”. Questo è il blocco che rappresenta la misura fatta dal sensore IR. La misura viene condotta al nodo di differenza dove viene sottratto al valore “Riferimento”.  Questo nodo o blocco si chiama di confronto. È un blocco fondamentale in un sistema di controllo, qui viene fatta la differenza tra il valore desiderato “Riferimento” e dove è realmente il “sistema”. La sua uscita è l’errore “e” che viene portato al “regolatore” altro blocco fondamentale del sistema. Il regolatore in funzione dell’errore produce l’azione di sterzata su Arianna. Siamo così tornati all’inizio dove il ciclo si ripete nuovamente. Nel nostro caso ogni 100 ms ripetiamo tutta l’operazione.

sistemacontrollo

Il risultato di questo ripetersi è che quando Arianna si allontana o avvicina alla libreria viene sterzata in maniera opportuna per mantenersi alla distanza voluta.

Questo modo di operare si dice regolazione ad anello chiuso o a retroazione, il significato di chiuso sta nel blocco di ritorno “sensore IR”. Questo sensore misura la realtà e permette al sistema di reagire a ciò che accade realmente.

Abbiamo introdotto il concetto di sistema di controllo ad anello chiuso perché avevamo visto che governando solo i valori dei PWM non sapevamo esattamente dove saremmo andati. Quel metodo di controllo si chiama in anello aperto.

Introducendo la misura della distanza dalla libreria ci siamo dati un occhio (il sensore) con il blocco comparazione e il blocco regolatore siamo passati alla guida in funzione della distanza letta (sistema in anello chiuso)

il codice del controllo

Tutto questi concetti si traducono in poche righe di codice:


    // parte a 100 ms
   if ((millis()-lastTime) > 100){

   lastTime = millis();

   noInterrupts();
   measureAvailable = 0;
   errore = 0.5 - misuraSideIR(0); // nodo di confronto
   interrupts();

   // controllo sterzo da sensore laterale 
   if (statoRun == 1){
	raggiorSterzo =   kp*errore; 		// regolatore proporzionale
			
	if (raggiorSterzo < -MAX_S) raggiorSterzo = -MAX_S; if (raggiorSterzo >  MAX_S) raggiorSterzo =  MAX_S;
    }
		
    // raggiorSterzo va al blocco differenziale che gestisce i due motori 
    .....

ogni 100 ms il regolatore viene eseguito.
*per prima c’è una parte relativa alla gestione del sensore IR. Vengono bloccati gli interrupt per poter accedere ai dati in maniera coerente. Il flag measureAvailable viene azzerato per avviare la prossima misura. Sono dettagli che possiamo ora tarscurare.

*la riga sotto è il nodo di confronto. Il nostro sensore restituisce, nel suo range di misura, un numero reale  0 e 1. Mettiamo il riferimento al valore fisso di 0.5 in maniera da poter rimanere all’interno della sua capacità di misura.


errore = 0.5 - misuraSideIR(0); // nodo di confronto

  • il regolatore: quando Arianna è in movimento, statoRun == 1, viene eseguito la regolazione. L’errore viene moltiplicato per un numero kp detto guadagno proporzionale. Questo forma un regolatore Proporzionale. Il valore del guadagno verrà trovato in maniera empirica, con il sistema attuale numeri tra 4 e12 danno risultati disgnitosi.
    L’uscita del regolatore viene limitata con un valore MAX_S, questo evita che vengano applicate correzioni inutili (è inproduttivo sterzare a 90° se devo andare circa diritto, così come in autostrada facciamo correzioni dolci ). Il guadagno e il limite della correzzione possono essere cambiati in funzione della velocità e del tipo di movimento che facciamo adattandoli alle condizioni.
   // controllo sterzo da sensore laterale 
   if (statoRun == 1){
	raggiorSterzo =   kp*errore; 		// regolatore proporzionale
			
	if (raggiorSterzo < -MAX_S) raggiorSterzo = -MAX_S; if (raggiorSterzo >  MAX_S) raggiorSterzo =  MAX_S;
    }

 

La prossima volta la domanda è: “quanto spazio faccio?, gli encoder”

 

Annunci

Un pensiero su “Un sistema per correre parallelo alla libreria

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...