Lego Mindstorms Line follower PID ( controllo proporzionale
Transcript
Lego Mindstorms Line follower PID ( controllo proporzionale
Lego Mindstorms Line follower PID ( controllo proporzionale, integrativo, derivativo) A cosa serve un PID Ogni volta che un dispositivo deve mantenere costante un determinato valore, ad esempio una velocità, una temperatura, un livello, una rotta o il valore misurato da un sensore serve un sistema detto regolatore. Qualcosa che corregga eventuali ed inevitabili errori rispetto al valore di consegna (set point). Se pensiamo al pilota automatico di una nave che deve lavorare per mantenere la rotta, ci è facile comprendere come venti, correnti e onde siano fonti di errore che il regolatore deve contrastare. Ma ci può essere anche il caso in cui si debba seguire un valore che cambia come ad esempio seguire un percorso che varia, come succede ad un robot tipo line follower o se vogliamo ad un missile che segue l’aereo da colpire. La descrizione matematica di un sistema di regolazione PID è molto complessa, (http://it.wikipedia.org/wiki/Controllori_PID) ma nel nostro caso cerchiamo di capire solo i concetti generali per poter poi implementare in modo sperimentale un regolatore. Line follower il problema Dobbiamo far seguire al nostro robot una linea di forma qualsiasi di colore nero su fondo bianco, o meglio, vedremo che in realtà quello che il robot deve seguire è il bordo della linea nera, delimitazione tra il nero ed il bianco. La struttura semplificata della macchina da realizzare è riportata in figura È un robot con due motori indipendenti A e C. Un sensore di luminosità che legge l’intensità della luce riflessa dalla superficie; la luce è prodotta da un diodo led montato sul robot (cerchio rosso). Una macchina così fatta, anche se molto semplice ha tutte le caratteristiche di un robot; il sensore “legge” il mondo esterno e in base alle informazioni ricevute la macchina cambia il suo comportamento. Il sensore di luminosità Il sensore di luminosità usato è quello in figura. La prima operazione da eseguire è la sua calibrazione; con il led acceso dobbiamo misurare l’intensità della luce riflessa dalla superficie bianca che corrisponde al valore max che viene posto pari a 100; stessa procedura per la luce riflessa dalla linea nera, valore minimo posto uguale a 0. In tutte l altre situazioni intermedie il sensore leggerà un valore di luce riflessa compresa tra il valore minimo 0 e quello massimo 100. Attenzione alle condizioni di luce ambientali, se cambiano occorre calibrare sensore. di nuovo il Analisi del problema Il robot deve seguire la linea nera? Non conviene lavorare in questo modo perché se la macchina perde la linea e va verso il bianco non sappiamo da che parte è uscito e potremmo perdere per sempre il percorso. Se invece facciamo seguire il bordo, ad esempio sinistro, della linea sappiamo che se il sensore riporta un valore maggiore del precedente è andato verso il bianco (verso sinistra) mentre al contrario ha deviato verso il nero ( a destra); possiamo così determinare la direzione verso cui far ruotare il robot per cercare di ritrovare il percorso. Un controllo della direzione di questo tipo è detto on off in quanto prevede due soli stati possibili riguardo il comportamento dei motori 1. Gira a destra se luce > 50 2. Gira a sinistra se luce < 50 Un’altra possibilità è quella di prevedere non solo due stati possibili ma 3, 4 5 in funzione del valore dell’intensità della luce letta dal sensore 1. 2. 3. 4. 5. Luce >> 50? Allora gira tanto a destra Luce > 50? Allora gira un po’ a destra Luce = 50? Vai dritto Luce < 50? Gira un po’ a sinistra Luce >> 50? Gira tanto a sinistra È intuitivo capire che il comportamento di un robot così programmato sarà migliore del precedente; l’andamento sarà meno a zig zag e con linea retta il moto sarà praticamente continuo se scegliamo in maniera corretta i valori di soglia tra una stato e l’altro. Aumentando i possibili stati ci stiamo avviando alla realizzazione di un regolatore proporzionale nel quale l’entità della rotazione è proporzionale alla differenza tra il valore rilevato dal sensore ed il valore 50 fissato come separazione nero bianco. Quanto detto può essere schematizzato nel grafico seguente Il primo grafico è relativo alla situazione a due stati: il robot non va mai dritto, gira a destra se il sensore riporta un valore >50 gira a sinistra nell’altro caso. Il secondo fa riferimento ad una situazione a tre stati: il robot va dritto se il sensore riporta un valore intorno a 50 (lungo la separazione bianco nero); gira a destra se il valore letto dal sensore è >50 gira a sinistra nel caso opposto. Il terzo grafico mostra il comportamento d un regolatore proporzionale: se il sensore riporta il valore 50 il robot va dritto, se però il valore letto dal sensore tende ad aumentare il robot inizia a girare verso destra e tanto più il valore è diverso da 50 tanto più “forte” è la sterzata verso destra; in maniera analoga se il sensore misura valori minori di 50. Proporzionale significa che la “forza della sterzata” sarà tanto maggiore quanto più il valore letto dal sensore si allontana da 50. La curva rappresentata nel grafico è quindi una retta che in generale ha equazione Nel nostro caso la y rappresenta il raggio di sterzata (legato alla differente potenza applicata ai due motori) mentre la x è sostanzialmente la differenza tra il valore misurato dal sensore e quello di riferimento (set point) legato alla separazione bianco nero della linea da seguire. Fissiamo 50 il valore letto dal sensore quando è esattamente sulla linea di separazione Definiamo ; naturalmente se il robot si sposta verso il bianco mentre se il robot si sposta vero il nero Sull’asse della y, in unità arbitrarie riportiamo la “forza della sterzata” che ha il valore max +1 se verso destra e il valore max negativo -1 se verso sinistra. L’equazione della retta rappresentata sul grafico è Dove Turn e la “forza della sterzata” positiva se verso destra, negativa se verso sinistra, m è il coefficiente angolare della retta cioè un valore legato alla sua pendenza Nel caso specifico )) )) I valori riportati nel grafico sono totalmente arbitrari; nel caso reale bisognerà determinare sperimentalmente il range in cui cade il valore dell’errore; in maniera analoga occorre legare i valori compresi tra +1 e -1 alla potenza dei due motori. Il coefficiente angolare m, nella letteratura dei sistemi di controllo, prende il nome di Kp costante di proporzionalità, quindi Applichiamo quanto detto al robot. Pa=potenza motore A; Pb=potenza motore B Se Pa=Pb moto rettilineo a velocità costante Se Pa>Pb il robot gira a destra Se Pa<Pb il robot gira a sinistra La potenza applicata al motore assume valori compresi tra 0 (motore fermo) e 100 (max potenza). Fissiamo P valore di potenza applicata ai due motori per seguire la linea retta (turn=0 perché errore=0) direzione 0 P P dritto >0 >P <P Gira a destra <0 <P >P Gira a sinistra Ad esempio fissiamo: P=50% (motori a metà potenza) Valore di soglia (offset) = 50 (valore letto dal sensore se sul bordo bianco nero; valore medio tra lettura tutto bianco e tutto nero) Kp=5 ; ipotesi ; se errore=0 Pot motori =50; se errore = 10 pot motore = 0; allora Pseudo codice: Kp=5; P=50; offset=50; luce, errore, turn Loop infinito Luce=lettura del sensore inizializzazione variabili; i valori devono essere regolati in funzione della situazione sperimentale. La variabile luce serve per memorizzare il valore letto dal sensore Ripeti per sempre Sensore misura luce e memorizza il valore nella variabile luce Errore=offset-luce Calcolo dell’errore Turn=Kp*errore Calcolo di turn Pa=P+turn; Pb=P-turn Calcola potenza da applicare ai motori motoreA=direzione Avanti, Potenza Pa Comanda motore A motoreB=direzione Avanti, Potenza Pb Comanda motore B Fine loop torna all’inizio e ripeti I valori di P e Kp sono da aggiustare in funzione del comportamento del robot in base al percorso. Solo osservando il suo movimento si può giungere ad una scelta ottimale dei due parametri.