Originariamente inviato da Spectrum
Visualizza il messaggio
La Dij è riuscita a semplificare in modo efficace ed elegante un ostico problema dei sistemi di controllo automatici.
Quello che viene definito GAIN è un realtà il risultato di un sofisticato algoritmo di elaborazione dei PID, delizia e incubo per tutti quelli che ci hanno a che fare.
Ma cos'è 'sto PID?
E' l'acronimo di Proporzionale, Integrale, Derivativo ed è la base dei sistemi di controllo a Retroreazione.
Wow! ora che lo sappiamo siamo tutti più contenti.
Ma vediamo di fare un pò di chiarezza, sempre che questo sia possibile.
Supponiamo di avere una piattaforma volante, guardacaso un multirotore.
Siamo in un bel prato, c'e' il sole, le batterie sono cariche e siamo pronti a volare.
Attiviamo i motori e visto che teoricamente questi hanno una spinta uguale e che la loro spinta sia superiore alla massa totale del velivolo, il coso si solleva in verticale e accelera fino a quando non riduciamo di poco il throttle.
Purtroppo non viviamo in un mondo perfetto e si dà il caso che il volo del nostro gioiello volante sia insidiato da mille forze nemiche.
Ad esempio gli ESC non erogano l'esatta potenza ad ogni motore, i motori hanno varie tolleranze costruttive, le eliche non hanno tutte la stessa resa, il centro di spinta (CS) dell'impianto propulsivo non coincide con il centro di gravità (CG) del multi. Oppure semplicemente ci sia del vento che agisca lateralmente.
Quello che succede lo sappiamo tutti, il coso si inclina fino a ribaltarsi, se non si è pronti con gli stick a compensare l'anomalia.
A noi non piace passare un quarto d'ora di terrore evitando che il coso vada ad affettare noi, i curiosi o anche gli alberi circostanti. Occorre dunque un sistema di compensazione automatica, che corregga l'assetto senza il nostro intervento.
Fortunatamente oggi la nanoelettronica ha reso disponibili dei trasduttori che fino a pochi anni fa erano fantascienza.
Merito anche della ditta italo-francese STM microelectronics, che a messo sul mercato a prezzi abbordabili dei giroscopi e accelerometri a stato solido di altissima precisione e grandi come un chicco di riso.
Cosa riescono a fare questi micro dispositivi?
Semplicemente generano un segnale in tensione (o digitale in formato I2C) proporzionale all'inclinazione (per gli accelerometri), oppure la variazione di angolazione (per i giroscopi), cui sono sottoposti. Questi segnali sono fagocitati dal microprocessore di controllo ed usati per attuare le opportune correzioni.
Semplice no?
Mica tanto, visto che la risposta di correzione (la cosiddetta RETROREAZIONE) deve essere prima condizionata da determinate regole, anche abbastanza complesse.
E qui interviene il famigerato PID.
Abbiamo dunque un segnale (in realtà diversi, ma per semplificare ne consideriamo uno solo), che ci indica che l'inclinazione dell'accelerometro non corrisponde a quella prestabilita. Il processore confronta il valore con quello teorico e per differenza genera il valore dell'errore. Questo valore può essere positivo o negativo e di conseguenza l'intervento di correzione dovrà avere un valore opposto.
Per prima cosa viene applicato l'algoritmo P (proporzionale) che consiste nel prodotto dell'errore con una costante prestabilita: Risp(P)=errore * k(P)
La risposta del sistema di correzione è dunque PROPORZIONALE all'errore rilevato. Più alto è il valore della costante k(P), più energico sarà l'intervento applicato.
In via teorica potrebbe essere sufficiente per risolvere il problema, ma nella realtà del nostro mondo imperfetto ci accorgiamo che in questo modo il segnale d'errore non convergerebbe mai a zero, annullando in questo modo la risposta di correzione, abbiamo dunque bisogno di raffinare l'algoritmo.
E' stato perciò introdotto il concetto di Integrale (I) che viene modulato dall'integrazione nel tempo di diversi valori dell'errore precedente, moltiplicato per un'altra costante di comodo definita come k(I).
In sostanza il sistema di controllo ha ora una sorta di "memoria" dei precedenti valori di errore, calcola una media (li "integra") e fa in modo che la riposta del sistema non sia mai nulla.
Tutto a posto? Siamo ora in grado di compensare adeguatamente l'errore in modo automatico?
Ovviamente no, o almeno non con la precisione che ci serve.
E' stato allora inventato anche il parametro DERIVATIVO (D) che cerca di anticipare la risposta del sistema prima che l'errore diventi troppo grande. In sostanza possiamo agire sul TEMPO DI RISPOSTA per contrastare l'errore. In questo modo, più veloce sarà l'errore generato, più rapido sarà l'intervento di correzione.
Prendiamoci ora un'aspirina per cercare di azzerare il mal di testa generato da quanto letto fin'ora e poi diamo un'occhiata al seguente codice implementato in quasi tutti i controller per multirotori:
time = millis();
interval = time - previousTime;
P = error * kP;
I = I + (((error + previousError)/2) * interval);
D = ((error - previousError) / interval)*kD;
PID = P + (I * kI) + D;
previousTime = time;
previousError = error;
In questo caso si tratta di uno spezzone di codice scritto in linguaggio Wiring, ad esempio usato su hardware Arduino e dunque anche sulla piattaforma Multiwii.
Notiamo che il segnale di correzione viene generato partendo dal segnale di errore, condizionato dai valori delle costanti da noi impostate per rendere la risposta più o meno intensa, reattiva e veloce. Il segnale complessivo è la somma dei singoli valori di P, I, D.
Ricordiamoci anche questa procedura viene applicata a tutti valori generati dai sensori, perciò 3 assi per l'accelerometro, 3 assi per il giroscopio, mettiamoci anche il magnetometro e il barometro e possiamo comprendere che carico di lavoro grava sulla CPU.
In realtà i valori di queste costanti sono strettamente correlati, in quanto anche la minima variazione ha il suo effetto. Scegliere i valori giusti è il risultato di mesi o anni di sperimentazione sul campo, con modifiche delicatissime pena il disastro assicurato.
Personalmente ho lavorato con il sistema Multiwii per diversi anni, usando la scheda Crius All In One Pro e nonostante l'esperienza accumulata la regolazione di questi parametri era ed è tutt'ora decisamente difficile e critica.
La DiJ è riuscita a semplificare il tutto e renderlo fruibile ai comuni mortali inserendo delle sue unità di controllo degli algoritmi che creano una perfetta correlazione tra i PID, limitandoci a poter variare solo il famoso GAIN, che integra in modo logico ed accurato i valori dei PID. Magia! un solo valore per poter decidere come volerà il multirotore, senza impazzire con noiosi e perniciosi tentativi.
Valori bassi renderanno in velivolo molto lento nella retroreazione, con valori TROPPO bassi sarà già a tosare l'erba prima di compensare!
Con valori alti risulterà più stabile? Non sempre. Tutto dipende dalla configurazione strutturale del multi: dalla sua massa, dal diametro del frame, dalle eliche ecc.
Questo perchè un telaio pesante, con tanti rotori, con eliche dal diametro importante e grosse Lipo, ha un tempo di reazione superiore ad un quadricottero leggero e con eliche piccole (ricordiamoci anche dell'effetto giroscopico dei rotori).
La regola generale sarà perciò: Valori bassi per multirotori piccoli e alti per quelli grossi e pesanti.
Poi dipende dall'uso che ne vogliamo fare:
Ci serve una piattaforma ultrastabile per riprese video? in questo caso vogliamo risposte più lente e ponderate.
Oppure ci piacciono le acrobazie? Meglio che sia reattivo e nervoso, anche se meno stabile.
Tutto qui, semplice no?
Se avete avuto la pazienza di leggere tutto, ora dovreste avere un'idea più chiara su come operano i sistemi di stabilizzazione dei nostri multirotori.
Se non sono riuscito nell'intento... non è colpa vostra, ma solo mia![:)](https://www.dronerc.it/forum/core/images/smilies/smile.gif)
Saluti a tutti
Eugenio
.
Quello che viene definito GAIN è un realtà il risultato di un sofisticato algoritmo di elaborazione dei PID, delizia e incubo per tutti quelli che ci hanno a che fare.
Ma cos'è 'sto PID?
E' l'acronimo di Proporzionale, Integrale, Derivativo ed è la base dei sistemi di controllo a Retroreazione.
Wow! ora che lo sappiamo siamo tutti più contenti.
Ma vediamo di fare un pò di chiarezza, sempre che questo sia possibile.
Supponiamo di avere una piattaforma volante, guardacaso un multirotore.
Siamo in un bel prato, c'e' il sole, le batterie sono cariche e siamo pronti a volare.
Attiviamo i motori e visto che teoricamente questi hanno una spinta uguale e che la loro spinta sia superiore alla massa totale del velivolo, il coso si solleva in verticale e accelera fino a quando non riduciamo di poco il throttle.
Purtroppo non viviamo in un mondo perfetto e si dà il caso che il volo del nostro gioiello volante sia insidiato da mille forze nemiche.
Ad esempio gli ESC non erogano l'esatta potenza ad ogni motore, i motori hanno varie tolleranze costruttive, le eliche non hanno tutte la stessa resa, il centro di spinta (CS) dell'impianto propulsivo non coincide con il centro di gravità (CG) del multi. Oppure semplicemente ci sia del vento che agisca lateralmente.
Quello che succede lo sappiamo tutti, il coso si inclina fino a ribaltarsi, se non si è pronti con gli stick a compensare l'anomalia.
A noi non piace passare un quarto d'ora di terrore evitando che il coso vada ad affettare noi, i curiosi o anche gli alberi circostanti. Occorre dunque un sistema di compensazione automatica, che corregga l'assetto senza il nostro intervento.
Fortunatamente oggi la nanoelettronica ha reso disponibili dei trasduttori che fino a pochi anni fa erano fantascienza.
Merito anche della ditta italo-francese STM microelectronics, che a messo sul mercato a prezzi abbordabili dei giroscopi e accelerometri a stato solido di altissima precisione e grandi come un chicco di riso.
Cosa riescono a fare questi micro dispositivi?
Semplicemente generano un segnale in tensione (o digitale in formato I2C) proporzionale all'inclinazione (per gli accelerometri), oppure la variazione di angolazione (per i giroscopi), cui sono sottoposti. Questi segnali sono fagocitati dal microprocessore di controllo ed usati per attuare le opportune correzioni.
Semplice no?
Mica tanto, visto che la risposta di correzione (la cosiddetta RETROREAZIONE) deve essere prima condizionata da determinate regole, anche abbastanza complesse.
E qui interviene il famigerato PID.
Abbiamo dunque un segnale (in realtà diversi, ma per semplificare ne consideriamo uno solo), che ci indica che l'inclinazione dell'accelerometro non corrisponde a quella prestabilita. Il processore confronta il valore con quello teorico e per differenza genera il valore dell'errore. Questo valore può essere positivo o negativo e di conseguenza l'intervento di correzione dovrà avere un valore opposto.
Per prima cosa viene applicato l'algoritmo P (proporzionale) che consiste nel prodotto dell'errore con una costante prestabilita: Risp(P)=errore * k(P)
La risposta del sistema di correzione è dunque PROPORZIONALE all'errore rilevato. Più alto è il valore della costante k(P), più energico sarà l'intervento applicato.
In via teorica potrebbe essere sufficiente per risolvere il problema, ma nella realtà del nostro mondo imperfetto ci accorgiamo che in questo modo il segnale d'errore non convergerebbe mai a zero, annullando in questo modo la risposta di correzione, abbiamo dunque bisogno di raffinare l'algoritmo.
E' stato perciò introdotto il concetto di Integrale (I) che viene modulato dall'integrazione nel tempo di diversi valori dell'errore precedente, moltiplicato per un'altra costante di comodo definita come k(I).
In sostanza il sistema di controllo ha ora una sorta di "memoria" dei precedenti valori di errore, calcola una media (li "integra") e fa in modo che la riposta del sistema non sia mai nulla.
Tutto a posto? Siamo ora in grado di compensare adeguatamente l'errore in modo automatico?
Ovviamente no, o almeno non con la precisione che ci serve.
E' stato allora inventato anche il parametro DERIVATIVO (D) che cerca di anticipare la risposta del sistema prima che l'errore diventi troppo grande. In sostanza possiamo agire sul TEMPO DI RISPOSTA per contrastare l'errore. In questo modo, più veloce sarà l'errore generato, più rapido sarà l'intervento di correzione.
Prendiamoci ora un'aspirina per cercare di azzerare il mal di testa generato da quanto letto fin'ora e poi diamo un'occhiata al seguente codice implementato in quasi tutti i controller per multirotori:
time = millis();
interval = time - previousTime;
P = error * kP;
I = I + (((error + previousError)/2) * interval);
D = ((error - previousError) / interval)*kD;
PID = P + (I * kI) + D;
previousTime = time;
previousError = error;
In questo caso si tratta di uno spezzone di codice scritto in linguaggio Wiring, ad esempio usato su hardware Arduino e dunque anche sulla piattaforma Multiwii.
Notiamo che il segnale di correzione viene generato partendo dal segnale di errore, condizionato dai valori delle costanti da noi impostate per rendere la risposta più o meno intensa, reattiva e veloce. Il segnale complessivo è la somma dei singoli valori di P, I, D.
Ricordiamoci anche questa procedura viene applicata a tutti valori generati dai sensori, perciò 3 assi per l'accelerometro, 3 assi per il giroscopio, mettiamoci anche il magnetometro e il barometro e possiamo comprendere che carico di lavoro grava sulla CPU.
In realtà i valori di queste costanti sono strettamente correlati, in quanto anche la minima variazione ha il suo effetto. Scegliere i valori giusti è il risultato di mesi o anni di sperimentazione sul campo, con modifiche delicatissime pena il disastro assicurato.
Personalmente ho lavorato con il sistema Multiwii per diversi anni, usando la scheda Crius All In One Pro e nonostante l'esperienza accumulata la regolazione di questi parametri era ed è tutt'ora decisamente difficile e critica.
La DiJ è riuscita a semplificare il tutto e renderlo fruibile ai comuni mortali inserendo delle sue unità di controllo degli algoritmi che creano una perfetta correlazione tra i PID, limitandoci a poter variare solo il famoso GAIN, che integra in modo logico ed accurato i valori dei PID. Magia! un solo valore per poter decidere come volerà il multirotore, senza impazzire con noiosi e perniciosi tentativi.
Valori bassi renderanno in velivolo molto lento nella retroreazione, con valori TROPPO bassi sarà già a tosare l'erba prima di compensare!
Con valori alti risulterà più stabile? Non sempre. Tutto dipende dalla configurazione strutturale del multi: dalla sua massa, dal diametro del frame, dalle eliche ecc.
Questo perchè un telaio pesante, con tanti rotori, con eliche dal diametro importante e grosse Lipo, ha un tempo di reazione superiore ad un quadricottero leggero e con eliche piccole (ricordiamoci anche dell'effetto giroscopico dei rotori).
La regola generale sarà perciò: Valori bassi per multirotori piccoli e alti per quelli grossi e pesanti.
Poi dipende dall'uso che ne vogliamo fare:
Ci serve una piattaforma ultrastabile per riprese video? in questo caso vogliamo risposte più lente e ponderate.
Oppure ci piacciono le acrobazie? Meglio che sia reattivo e nervoso, anche se meno stabile.
Tutto qui, semplice no?
Se avete avuto la pazienza di leggere tutto, ora dovreste avere un'idea più chiara su come operano i sistemi di stabilizzazione dei nostri multirotori.
Se non sono riuscito nell'intento... non è colpa vostra, ma solo mia
![:)](https://www.dronerc.it/forum/core/images/smilies/smile.gif)
Saluti a tutti
Eugenio
.
Spiegazione chiara, completa e soprattutto utilissima!!! Grazie!
Inviato dal mio iPhone 6 plus utilizzando Tapatalk
Commenta