Capitolo 11
PID: aggiustiamo tutto
Come eliminiamo l'abbassamento e fermiamo l'oscillazione?
Capitolo 11: PID: aggiustiamo tutto ↗
L'abbassamento che non vuole morire
Theo: Vi ricordate il Capitolo 2? Il nostro controllore P lasciava il drone appeso sotto i 2 m, e nessun riusciva a sistemarlo. È ora di scoprire cosa ci riesce.
Per tenere su il drone, i motori devono spingere N, per sempre. Un controllore P spinge solo quando c'è un errore: . Quindi per spingere 4,9 N gli serve un errore di . Con = 20 N/m fanno = 4,9/20 ≈ 24,5 cm, per sempre. L'abbassamento non è un difetto della nostra taratura. È il prezzo che P fa pagare per tenere su qualsiasi cosa.
June: Quindi ci serve una parte del controllore che possa spingere 4,9 N con errore zero. Qualcosa con una memoria.
I: una pila di errore passato
L'idea è questa. Tieni un totale progressivo dell'errore, l'area sotto la curva dell'errore, esattamente l'"area che si accumula" del Capitolo 3. Spingi in proporzione a quella pila:
Finché il drone è sotto i 2 m, l'errore è positivo e la pila continua a crescere, quindi la spinta continua a crescere. La pila smette di crescere solo quando l'errore è esattamente zero. A quel punto semplicemente resta lì, tenendo tutta la spinta che ha accumulato. Ecco la memoria che voleva June.
Theo: Oh, che furbata. Il drone non può assestarsi da nessuna parte se non a 2 m, perché ovunque altro la pila starebbe ancora cambiando.
Capitolo 11: PID: aggiustiamo tutto ↗
Prima indovina! Mika vuole eliminare l'abbassamento in fretta, quindi pensa di alzare a manetta. Cosa succederà?
Il widget parte con = 10 N/(m·s). Guarda tre cose: l'area ombreggiata in rosso (l'errore che si accumula), la parte integrale della spinta arancione tratteggiata che sale fino alla linea viola della gravità, e l'indicatore dell'abbassamento. Trascina a 0 per riavere l'abbassamento del Capitolo 2, poi prova valori più grandi. è fisso a 20 N/m.
Capitolo 11: PID: aggiustiamo tutto ↗
Capitolo 11: PID: aggiustiamo tutto ↗
Mika: Alziamolo! ! Sterminiamolo!
Mika: …perché non si ferma? I rimbalzi sono cresciuti e cresciuti, e ora fa lo yo-yo su e giù di mezzo metro, per sempre!
Theo: A 50 hai superato una specie di bordo. Ho provato qualche valore: sotto circa 40 si assesta, sopra no (e lo yo-yo ci mette circa un secondo per oscillazione). Tra poco vedremo perché. La pila è sempre un po' indietro: continua a spingere in su dopo che il drone ha superato i 2 m.
Ecco l'errore di Mika, ed è comunissimo: l'integrale sistema l'abbassamento, ma aggiunge ritardo, e il ritardo fa oscillare le cose (ce l'ha insegnato la doccia). Ci serve qualcosa che spinga contro la velocità. (Secondo la matematica le sue oscillazioni dovrebbero crescere per sempre. Si fermano a circa mezzo metro solo perché a ogni oscillazione la spinta arriva a 0 N: le eliche non possono tirare giù, il limite del Capitolo 10.)
D: un ammortizzatore virtuale
June: Nel Capitolo 7 era lo smorzatore a calmare la molla. E se il controllore facesse finta di essere uno smorzatore?
Uno smorzatore spinge contro la velocità. Quindi aggiungiamo un termine che spinge contro quanto in fretta si muove il drone:
Guarda l'equazione del drone: l'attrito dà già . Il termine D aggiunge in più, quindi il drone si comporta come se il suo attrito fosse . Stiamo aggiungendo attrito dell'aria via software.
Capitolo 11: PID: aggiustiamo tutto ↗
Capitolo 11: PID: aggiustiamo tutto ↗
Attiva il grande guadagno I di Mika e poi aggiungi smorzamento. Basta N·s/m per riportarlo alla stabilità (sposta il bordo fino a ): lo yo-yo infinito diventa un rimbalzo che si spegne. Però va ancora oltre di almeno un quarto, per quanta D tu aggiunga. Quella pila enorme ricorda semplicemente troppo. Ora spegni il di Mika (di nuovo a 10) e prova –5: calmo. I e D si compensano: la D ti compra spazio per la I, ma non spazio infinito.
June: Se 4 va bene, 10 va ancora meglio. Ammortizzatore al massimo!
Mika: Sale così piano… e poi va oltre i 2 m lo stesso? In ritardo?
Theo: June, è di nuovo il tuo drone nel miele del Capitolo 7! Oltre la coppia veloce è sovrasmorzata. Ma ora c'è anche una pila, e un drone lento dà alla pila il tempo di riempirsi troppo.
Lo smorzamento critico è dove ζ = 1: N·s/m con = 20. Con = 10, passare da = 4 a 10 porta la sovraelongazione da 0 a circa l'8%, e il tempo di assestamento da meno di un secondo a circa 5 s. Più D non è sempre meglio; ora il widget te lo dice quando esageri.
Mika: Quindi la D prevede il futuro! Vede dove sta andando il drone e ci arriva prima.
Theo: Non proprio. Conosce solo la pendenza adesso. È come indovinare dove atterrerà una palla supponendo che continui dritta. Di solito un'ipotesi decente, ma non è magia. Aspetta di darle in pasto un sensore ballerino.
Cosa fa ogni manopola ai poli
È ora di usare la mappa del Capitolo 10. Scriviamo tutto l'anello, con :
L'integrale è scomodo, quindi prendiamo la pendenza di entrambi i lati. Pendenza e area si disfano a vicenda (Capitolo 3), quindi la pendenza di è semplicemente . La gravità è costante, quindi la sua pendenza è zero: sparisce e basta. Con un riferimento fisso, . Termine per termine:
Rimetti insieme i pezzi e porta a sinistra tutto quello che contiene . I tre puntini su vogliono dire la pendenza della pendenza della pendenza:
Theo: La gravità è sparita dall'equazione. Ecco l'ammazza-abbassamento in forma algebrica: all'altezza finale di non importa proprio niente. Sempre che si assesti, s'intende. Il drone di Mika con non ci è mai riuscito.
Proviamo ancora . Con I attivo, l'equazione è cubica, quindi ci sono tre poli. Se , non c'è integratore: prendere la pendenza ha aggiunto una radice finta in , il fattore comune si semplifica e il drone PD ha due poli.
Per una cubica con tutti i coefficienti positivi , c'è un test classico (il criterio di Routh–Hurwitz) che dice che tutti e tre i poli stanno nella metà sinistra esattamente quando . Per il nostro drone, quello è il bordo del precipizio:
Mika: Una regola con sopra i nomi di due persone. Dobbiamo crederci e basta?
Theo: No. Possiamo trovare il bordo da soli.
Nell'istante in cui una coppia oscillante raggiunge l'asse verticale, la sua parte reale è zero, quindi prova nella cubica. Siccome e , le parti reali e le parti di lato devono sommarsi a zero ciascuna per conto suo:
La seconda dice . Mettila nella prima:
Capitolo 11: PID: aggiustiamo tutto ↗
Con i valori di partenza ( = 20, niente D) il bordo è 40. È esattamente dove il drone di Mika è impazzito, e il suo yo-yo ci metteva circa un secondo per oscillazione: 6,32 rad/s è la ωn del drone P del Capitolo 7. Aggiungere sposta il bordo fino a 200. Non fidarti di noi: cambia i numeri qui sopra, o i cursori qui sotto, e guarda i poli, la mini-mappa e la risposta al gradino.
Capitolo 11: PID: aggiustiamo tutto ↗
- La manopola I () aggiunge un terzo polo all’anello e può spingere una coppia verso destra. Troppo I e attraversa la linea.
- La manopola D () alza il limite di stabilità del guadagno I aggiungendo smorzamento. Le traiettorie possono piegare: più D non sposta ogni polo a sinistra.
- La manopola P () allarga soprattutto la coppia oscillante in alto e in basso: più veloce, ma più oscillante se D non tiene il passo.
Il parco giochi della taratura
Ora si fa sul serio: decollo da terra fino a 2 m con i motori veri (0–20 N). Conquista tutte e quattro le stelle. Ogni volta che cambi un guadagno, l'ultimo volo resta come un fantasma sbiadito.
Capitolo 11: PID: aggiustiamo tutto ↗
June: Ho spento l'anti-windup, messo = 30, = 60, = 2… e il drone è schizzato a 4 m, fuori dal suo disegno!
Theo: La pila ha continuato a crescere per tutto il tempo in cui i motori erano al massimo. Con l'anti-windup acceso, gli stessi guadagni arrivano al massimo a 2,8 m. Stesse manopole, memoria molto diversa.
Due avvertimenti sulla D
Avvertimento 1: il calcio derivativo
Il drone è sospeso a 1 m. A s spostiamo il riferimento a 1,5 m. Se la D usa la pendenza dell'errore, allora l'errore salta di mezzo metro in un istante. La sua pendenza è enorme, e anche la spinta: un picco quasi impulsivo del comando, che i libri in inglese chiamano derivative kick.
Capitolo 11: PID: aggiustiamo tutto ↗
Capitolo 11: PID: aggiustiamo tutto ↗
Mika: Sull'errore chiede più di 200 N? A motori che arrivano al massimo a 20?
June: E non sanno dire di no con garbo. Sbattono al massimo per un attimo, e il drone si prende un calcio nel sedere.
Prendere invece la pendenza dell'altezza misurata risolve il problema: il drone non può teletrasportarsi, quindi la sua altezza non ha salti. Stesso smorzamento, niente calcio. Quasi tutti i PID veri fanno così.
Avvertimento 2: il rumore
I sensori di altezza veri tremolano di un paio di centimetri. Un paio di centimetri di tremolio, mille volte al secondo, ha una pendenza enorme. La D lo amplifica dritto nei motori. La soluzione è smussare la misura prima di prenderne la pendenza (un filtro con costante di tempo ), al prezzo di reagire un po' più tardi.
Capitolo 11: PID: aggiustiamo tutto ↗
Capitolo 11: PID: aggiustiamo tutto ↗
Mika: Ok, la D non prevede il futuro. Prevede com'era il rumore un millisecondo fa.
Cosa abbiamo aggiustato
Cosa abbiamo capito
- P spinge in proporzione all'errore, ma deve lasciare un abbassamento per tenere su il drone.
- I accumula l'errore passato; l'unico punto di riposo è errore zero, quindi elimina l'abbassamento, che muore con una costante di tempo di circa . Aggiunge ritardo, quindi se esageri le cose oscillano.
- D spinge contro la velocità: uno smorzatore virtuale che si aggiunge all'attrito , quindi . Più D non è sempre meglio: sovrasmorzato, il drone striscia e la pila si riempie troppo.
- L'anello chiuso è ; è stabile esattamente quando .
- Prendi la D dalla misura (niente calcio) e filtrala (meno rumore).
June ha provato il nostro PID da drone sulla doccia… e ha oscillato esattamente come noi nel Capitolo 0. Cos'ha di speciale il ritardo?