Percorso di apprendimentoIntermedio

Controllo PID per robot: un percorso di apprendimento

Trasforma una misura rumorosa in un segnale d'errore fluido e tarare un controllore PID stabile che insegue senza oscillare.

Un controllore PID è il cavallo di battaglia della robotica: trasforma la differenza tra il punto in cui un robot è e quello in cui dovrebbe essere in una correzione. Ma un controllore è buono solo quanto il segnale su cui agisce, quindi questo percorso inizia pulendo le letture rumorose dei sensori, poi ti insegna a tarare i termini proporzionale, integrale e derivativo affinché il robot insegua fluidamente invece di oscillare.

I nodi pratici sono quelli in cui l’ordine è importante. Prima tarare un loop PID puro, dove un unico riferimento e un unico sistema controllato ti permettono di vedere in isolamento overshoot, oscillazione ed errore allo stato stazionario. Solo poi applica gli stessi tre guadagni al seguilinea, dove il sistema controllato risponde e l’errore arriva da un sensore reale: è lì che la taratura smette di essere ordinata.

Il percorso si chiude in un punto a cui i nodi precedenti non possono portarti. Ogni sistema controllato fino a quel momento è stabile: ignoralo e resta fermo, quindi tarare significa fare meglio che non fare nulla. Un robot autobilanciante non è stabile: se lo lasci in pace, in un secondo è a terra. Questa singola modifica rende una buona taratura un requisito anziché un miglioramento e impone l’idea strutturale con cui il percorso finisce: quando non puoi comandare la cosa che ti interessa, devi annidare due loop e lasciare che quello esterno sposti l’obiettivo di quello interno.

Prima di iniziare

Dovresti già saper leggere un sensore e comandare un motore a una velocità desiderata: il percorso di controllo dei motori copre entrambe le cose. Porta con te un robot o un simulatore in cui cambiare un numero faccia subito vedere il suo effetto.

Cosa saprai fare

  • Tarare prima P, poi I, poi D in un ordine deliberato, invece di cambiare tre numeri insieme e sperare.
  • Leggere una curva di risposta e riconoscere dalla sua forma che cosa è sbagliato: overshoot, oscillazione sostenuta o errore allo stato stazionario che non si chiude.
  • Riconoscere il windup integrale quando l’attuatore satura e correggerlo limitando l’accumulatore, invece di abbassare il guadagno finché il sintomo non si nasconde.
  • Annidare due loop in modo che un controllore esterno sposti il riferimento di un controllore interno.

Dove le persone si bloccano

Tarare tutti e tre i guadagni insieme. Con tre manopole interagenti e una sola uscita, cambiare tutto in una volta significa non imparare nulla dal risultato. Aumenta P finché non oscilla e torna indietro; solo dopo aggiungi D; aggiungi I per ultimo e solo se rimane uno scostamento costante.

Derivare l’errore. Quando il riferimento fa un gradino, anche l’errore fa un gradino e la sua derivata è brevemente enorme: il robot si muove bruscamente per nessuna ragione fisica. Deriva invece la misura. La matematica è quasi identica e l’impatto scompare.

Fornire a D un segnale rumoroso. La differenziazione amplifica il rumore. Se il sensore è instabile, D trasforma quell’instabilità in comandi per il motore. Filtra prima: è il motivo per cui questo percorso inizia dal rumore del sensore invece che dal controllore.

Supporre che i guadagni si trasferiscano. I guadagni sono proprietà di un sistema controllato specifico. Batterie nuove, un telaio più pesante o una superficie diversa cambiano il sistema, e la taratura che ieri era perfetta oggi non lo è.

Una frequenza di loop incoerente. Sia I sia D dipendono dal tempo trascorso. Se il loop viene eseguito ogni volta che capita di finire, entrambi i termini vengono calcolati su una bugia. Fissa l’intervallo oppure misuralo e passa il tempo trascorso reale nei calcoli.

Di cosa hai bisogno

Cosa Perché questo percorso ne ha bisogno Note
Un sistema controllato che puoi eccitare Qualcosa che risponde a un comando e si stabilizza: un motore, un riscaldatore, un robot I simulatori sostituiscono tutti e tre se non ne hai
Un modo per tracciare curve Tarare guardando un robot è indovinare; tarare leggendo una curva no Serial plotter oppure i laboratori di questo percorso
Un intervallo di loop fisso Sia I sia D vengono calcolati sul tempo trascorso. Un loop che viene eseguito quando finisce calcola entrambi su una bugia Il pattern millis()
Pazienza per una manopola alla volta L’intero metodo —

Puoi completare ogni nodo di questo percorso nel browser. I tre laboratori sono controllori reali su sistemi controllati reali (simulati) e la procedura di taratura si trasferisce direttamente all’hardware: è questo il motivo per cui conviene farlo prima qui.

Perché il percorso segue quest’ordine

L’ordine è scelto perché ogni fase aggiunge esattamente una nuova difficoltà.

Il filtraggio viene prima perché un controllore è buono solo quanto il suo ingresso e D è il termine che ti punisce se lo salti. La differenziazione amplifica il rumore: un sensore con ±2 conteggi di instabilità campionato ogni 10 ms produce una stima della derivata che oscilla di 200 conteggi al secondo, e D la trasforma direttamente in comandi per il motore. Tarare un controllore su un segnale non filtrato ti insegna la lezione sbagliata: che D è inutile.

Il loop puro viene prima del robot perché isola il controllore. Un riferimento, un sistema controllato, tre guadagni, nessuna geometria di sterzata, nessun posizionamento del sensore, nessuno slittamento delle ruote. Quando la risposta fa overshoot qui, la causa sono i guadagni e non può essere nient’altro.

Il seguilinea viene dopo perché aggiunge due cose insieme, ed entrambe sono aggiunte oneste: l’errore ora proviene da un sensore reale con un campo visivo limitato e il sistema controllato risponde: il movimento stesso del robot cambia l’errore più rapidamente di quanto il controllore si aspetti. Qui una taratura che sembrava finita non lo è più.

Il robot che si bilancia viene per ultimo ed è il punto di tutto il percorso. Ogni sistema controllato prima di lui è stabile: ignoralo e resta fermo, quindi tarare è un’ottimizzazione. Un pendolo invertito non è stabile: lasciolo solo per un secondo e sarà a terra. Questa singola modifica trasforma una buona taratura da miglioramento a requisito e impone l’idea strutturale con cui il percorso finisce: quando non puoi comandare la cosa che ti interessa, annidi due loop.

Punti di verifica: come sapere che una fase è stata compresa

Fase La verifica Cosa significa superarla
Filtraggio Traccia segnale grezzo e filtrato sugli stessi assi mentre disturbi il sensore Puoi indicare in millisecondi il ritardo introdotto dal filtro e dire perché vale la pena pagarlo
Solo P Aumenta P fino all’oscillazione stabile, annota il valore, dimezzalo Hai un numero per il guadagno critico e la risposta ora fa overshoot e si stabilizza
Aggiungi D Aumenta D finché l’overshoot viene smorzato L’overshoot diminuisce senza rendere lenta la risposta; troppo D la rende irregolare
Aggiungi I Solo se rimane uno scostamento costante Lo scostamento si chiude e hai limitato l’accumulatore prima di testare vicino alla saturazione
Leggi una curva Guarda tre risposte e riconosci che cosa è sbagliato in ciascuna Riesci a distinguere overshoot, oscillazione sostenuta ed errore allo stato stazionario dalla sola forma
Windup Comanda un riferimento molto oltre ciò che l’attuatore può raggiungere, poi rilascialo Il sistema non prosegue oltre al rilascio: se lo fa, manca il limite dell’accumulatore
Frequenza del loop Stampa l’intervallo reale per un minuto È fisso oppure stai passando il tempo trascorso misurato nei calcoli
Cascata Comanda una posizione su un sistema controllato in equilibrio Il loop interno viene eseguito diverse volte più veloce di quello esterno e puoi dire il rapporto

Dove si ferma questo percorso

PID è il cavallo di battaglia, non l’intero campo, e questo percorso è onesto sul fatto che finisce qui.

Si ferma al controllo a ingresso singolo e uscita singola. I robot reali hanno spesso più loop accoppiati che interferiscono tra loro, e per questo esiste un’intera disciplina che PID non affronta.

Non copre il feed-forward, il miglioramento pratico più grande che manca alla maggior parte dei loop robotici. PID è reattivo per costruzione: non può agire finché non esiste un errore. Se conosci già il movimento che stai comandando, puoi calcolare in anticipo gran parte dell’uscita richiesta e lasciare che PID corregga solo la differenza. Il tutorial sui profili di movimento è la prima metà di questa idea.

Non copre il controllo basato su modello — LQR, piazzamento dei poli o qualsiasi cosa che inizi scrivendo le equazioni del sistema controllato. Questi metodi danno risultati migliori quando hai un modello accurato, e la maggior parte dei piccoli robot non ce l’ha.

E non copre il gain scheduling, la risposta standard al fatto che i guadagni non si trasferiscono: conservare più tarature e passare da una all’altra in base alla velocità, al carico o alla tensione della batteria.

Percorso di apprendimento

Il percorso

Segui i nodi in ordine: ognuno sblocca il successivo una volta completato. I tuoi progressi vengono salvati su questo dispositivo.

0 / 7 completati

100%
Tutorial

Filtra e fondi letture rumorose dei sensori

Tutoriale

Apri il tutorial
Obiettivo

Tara un controllore stabile

Abilità sbloccata

Domande comuni

Domande frequenti

In che ordine devo tarare i guadagni PID?

Prima P, poi D, poi I, e sempre uno alla volta. Aumenta il guadagno proporzionale finché la risposta oscilla in modo stabile, poi torni indietro fino a circa metà di quel valore: questo è il classico punto di partenza di Ziegler–Nichols e ti avvicina rapidamente. Aggiungi subito dopo il termine derivativo per smorzare l'overshoot lasciato da P. Aggiungi quello integrale per ultimo e solo se rimane uno scostamento costante che P da solo non riesce a eliminare. Cambiare tutti e tre insieme non ti insegna nulla, perché con tre manopole interagenti e una sola uscita non puoi attribuire il cambiamento che vedi alla manopola che hai girato.

Perché il mio controllore PID oscilla?

Di solito perché il guadagno proporzionale è troppo alto per il ritardo del sistema controllato. Ogni loop ha un ritardo: filtraggio del sensore, inerzia del motore, intervallo stesso del loop. P agisce su un errore che è già vecchio. Oltre una certa soglia la correzione arriva abbastanza tardi da peggiorare la situazione e il loop entra in oscillazione. Abbassa P e aggiungi D, che agisce sulla velocità di variazione e quindi anticipa. Se l'oscillazione è rapida e irregolare anziché fluida, sospetta che il rumore stia raggiungendo D: la differenziazione amplifica il rumore e un sensore instabile diventa un comando di motore instabile.

Cos'è il windup integrale e come posso correggerlo?

Si verifica quando l'attuatore satura, per esempio quando i motori sono già alla massima potenza: l'errore smette di ridursi, ma il termine integrale continua ad accumularlo. Quando il riferimento viene raggiunto, l'integrale contiene un grande valore accumulato che deve essere scaricato, perciò il sistema lo supera e impiega molto tempo a tornare indietro. La soluzione è limitare l'accumulatore integrale a un intervallo sensato, oppure smettere di accumulare ogni volta che l'uscita è satura. Quello che non devi fare è abbassare il guadagno integrale finché il sintomo non si nasconde: scambieresti l'overshoot con uno scostamento che non si chiude mai.

I miei guadagni PID si trasferiscono a un altro robot?

No, e spesso non si trasferiscono neppure allo stesso robot di domani. I guadagni sono proprietà del sistema controllato, non dell'algoritmo, e il sistema include lo stato di carica della batteria, la massa del telaio, la superficie e la temperatura del riduttore. Una taratura perfetta con batterie nuove diventerà lenta con batterie scariche perché lo stesso ciclo di duty ora produce meno coppia. Ecco perché il percorso insiste sulla taratura secondo una procedura anziché sulla copia di numeri: la procedura si trasferisce anche quando i guadagni no.

Perché derivare la misura invece dell'errore?

Perché, quando il riferimento fa un gradino, anche l'errore fa un gradino e la derivata di un gradino è brevemente enorme. Il robot si muove bruscamente per un motivo che non ha nulla a che fare con la fisica: non è cambiato nulla, hai solo chiesto qualcosa di diverso. Derivare la misura fornisce la stessa informazione sulla rapidità con cui il sistema sta cambiando, senza l'impatto del riferimento. La modifica è una riga di codice e quasi sempre è quella giusta.

Cos'è il PID a cascata e quando mi serve?

Due loop annidati, in cui l'uscita di quello esterno è il riferimento di quello interno. Ti serve ogni volta che non puoi comandare direttamente la cosa che ti interessa. Su un robot autobilanciante vuoi controllare la posizione, ma i motori controllano la coppia delle ruote e l'unico modo per muoversi è inclinarsi deliberatamente: un loop interno mantiene l'inclinazione all'angolo ricevuto e uno esterno chiede un'inclinazione per potersi spostare. Il loop interno deve essere diverse volte più veloce di quello esterno, altrimenti quello esterno insegue un obiettivo che quello interno non ha ancora raggiunto.