Percorso di costruzioneAvanzatoUn fine settimana

Costruisci un robot autobilanciante con MPU6050 e PID

Un robot a due ruote che si alza in piedi da solo, resta verticale quando lo spingi e mantiene la propria posizione sul pavimento invece di allontanarsi.

Schema tecnico: Costruisci un robot autobilanciante con MPU6050 e PIDθTILT → PID → DRIVE UNDER IT

Cosa stai costruendo

Un robot che sta in piedi su due ruote senza che nulla lo sostenga se non un calcolo aritmetico.

La costruzione meccanica è davvero semplice — due motori, un telaio, un sensore, una batteria. Ciò che rende questo progetto degno di essere realizzato è che il problema di controllo non ammette errori parziali. Un seguitore di linea con guadagni mediocre continua comunque a seguire la linea, male. Un robot autobilanciante con guadagni mediocre è steso sul pavimento. Questa durezza è ciò che lo rende il modo migliore possibile per capire davvero il PID.

Alla fine avrai un robot che si alza in piedi, resiste a una spinta e resta approssimativamente dove lo hai messo.

Perché è difficile

Tutta la massa del robot si trova sopra l’asse. Questo lo rende un pendolo inverso: la verticale è un equilibrio, come lo è una matita appoggiata sulla punta—reale in teoria, impossibile senza correzioni continue. Inclinalo leggermente e la gravità produce una coppia che lo inclina ulteriormente, più rapidamente.

L’unica difesa del robot è la possibilità di spostare la propria base. Far avanzare le ruote riporta l’asse sotto il baricentro e ruota nuovamente il corpo in verticale. Ne deriva la regola controintuitiva che governa l’intero progetto: per non cadere in avanti, avanza.

Seguono due conseguenze, che danno forma a tutto ciò che segue:

  1. Non puoi controllare direttamente la posizione. Pilotare i motori dall’errore di posizione accelera la base da sotto la massa e il robot cade nella direzione opposta a quella richiesta. La posizione deve essere controllata tramite l’inclinazione.
  2. Esiste un limite rigido di recupero, pari a circa 35°. Oltre, l’accelerazione necessaria supera ciò che le ruote possono fornire prima che il corpo raggiunga il pavimento, e nessun guadagno è d’aiuto.

Elenco dei componenti

Componente Quantità Costo approssimativo Note
Arduino Uno o Nano 1 $5 Il ciclo interno vuole 100–200 Hz, che un Uno gestisce comodamente
MPU-6050 1 $2 Montato rigidamente e in livello, vicino all’asse della ruota
Motori N20 con encoder 2 $16 Riduttore metallico, non negoziabile. Vedi sotto
TB6612FNG 1 $3 La caduta di tensione di ~2 V dell’L298N si trova proprio dove agiscono le correzioni di precisione
Telaio 2WD 1 $10 Alto e stretto. Monta la batteria in alto — è controintuitivo
Pacco batteria 1 $10 2×18650. È anche la massa utile

Totale: circa $45–60.

Tre di queste scelte sono essenziali e sbagliarne una qualsiasi rende il robot non regolabile anziché semplicemente peggiore.

Motori con riduttore metallico. Un robot autobilanciante inverte la direzione centinaia di volte al secondo con piccoli incrementi. A ogni inversione si accumula una quota di gioco meccanico, quindi la zona morta di un riduttore plastico si trova proprio dove la correzione deve agire. Il risultato è un robot che oscilla attorno alla verticale e non si assesta mai, per quanto attentamente siano regolati i guadagni, e si legge in modo convincente come un problema di regolazione.

Un driver MOSFET. L’L298N consuma circa 2 V prima che il motore veda qualcosa, il che significa che i piccoli comandi di correzione restano al di sotto della tensione a cui il motore si muoverebbe. Di nuovo, una zona morta proprio dove si trovano le correzioni di precisione.

Batteria montata in alto. È la scelta che sorprende le persone. Un robot più alto con massa in alto cade più lentamente—il periodo del pendolo cresce con la radice quadrata della lunghezza— il che dà al ciclo di controllo più tempo per reagire. Un robot autobilanciante basso e tozzo è più difficile, non più facile.

Ordine di costruzione

Esegui queste operazioni in ordine. Ogni passo è verificabile autonomamente, il che conta moltissimo in un progetto il cui stato finale è netto.

1 — Ottieni un angolo di inclinazione affidabile. Collega l’MPU6050 e segui lettura dell’inclinazione da un MPU6050. Non andare avanti finché l’angolo non segna quasi zero quando il robot è verticale, non si muove nel verso giusto quando lo inclini e rimane fermo quando il robot è fermo. Tutto ciò che segue si fonda su questo numero.

2 — Fai in modo che l’angolo sopravviva al movimento. Un accelerometro da solo è inutilizzabile su un robot in movimento e un giroscopio da solo deriva in pochi secondi. Il filtro complementare li fonde in una riga. Provalo scuotendo il robot nel suo complesso senza ruotarlo: l’angolo dovrebbe muoversi appena.

3 — Regola il ciclo interno nel simulatore. Prima che l’hardware possa cadere, usa il simulatore di equilibrio per farti un’idea di ciò che fa ogni guadagno. Imposta il guadagno derivativo a zero su un robot attualmente in equilibrio e osserva l’oscillazione crescere finché non cade; vedere qui quel guasto costa molto meno che sulla tua scrivania.

4 — Fai in modo che si alzi in piedi. Scrivi il ciclo interno del controllo PID ad anelli in cascata per l’equilibrio, con il ciclo esterno disabilitato. Il successo è un robot che resta verticale e a cui è consentito vagare. Non cercare ancora di correggere la deriva.

5 — Aggiungi gli encoder e il ciclo esterno. Con il conteggio in quadratura che fornisce la posizione reale delle ruote, abilita il ciclo esterno in modo che il robot mantenga una posizione. Inizia con un guadagno molto più basso di quanto sembri ragionevole: il suo effetto è indiretto ed è facile far litigare i due cicli.

Note sull’hardware che contano davvero

Monta la batteria in alto. È controintuitivo ed è la singola scelta meccanica più utile del progetto. Alzare il baricentro aumenta il periodo del pendolo, quindi il robot cade più lentamente e il ciclo ha più occasioni di recuperarlo. Un robot basso e pesante sul fondo è molto più difficile da bilanciare di uno alto.

Usa riduttori metallici. Un robot autobilanciante inverte la direzione centinaia di volte al secondo. I motori con riduttore plastico hanno abbastanza gioco meccanico da far sprecare i primi gradi di ogni inversione senza produrre movimento, cosa che il ciclo non può compensare. I motori N20 con encoder sono la soluzione abituale.

Usa un TB6612FNG, non un L298N. Il TB6612FNG perde molta meno tensione sulla propria uscita. Sull’L298N, i piccoli comandi di correzione restano al di sotto della tensione a cui il motore si muoverebbe, creando una zona morta proprio dove si trovano le correzioni di precisione.

Fornisci ai motori un’alimentazione separata. Un pacco batteria che subisce un calo di tensione durante la corrente di stallo provoca un brownout del microcontrollore a metà correzione. Il robot cade quindi per ragioni che non hanno nulla a che vedere con il ciclo di controllo, il che rende estenuante il debug.

Verifica durante la costruzione

Controllo Che cosa dimostra
L’angolo segna ~0° tenendo il robot verticale in mano Non rimane alcuna compensazione di montaggio nella misurazione
Scuotendo senza ruotare, l’angolo si muove appena Il filtro si fida del giroscopio durante l’accelerazione
Le ruote avanzano in avanti quando il robot viene inclinato in avanti Il segno del ciclo interno è corretto
Il robot resiste a una spinta e si assesta senza far crescere l’oscillazione Il guadagno derivativo sta svolgendo il suo compito
Il robot smette di derivare quando viene attivato il ciclo esterno Gli encoder e il ciclo esterno sono collegati correttamente

Come appare un risultato buono

Misura Appena bilancia Ben regolato
Frequenza del ciclo interno (inclinazione) 100 Hz 200–500 Hz
Frequenza del ciclo esterno (posizione) 20 Hz 20–50 Hz — parecchie volte più lenta di quella interna
Oscillazione dell’inclinazione a riposo ±3–5° Meno di ±1°
Deriva dal punto di partenza in 60 s 1–2 m Meno di 30 cm
Recupero da una spinta di Una spinta leggera Una spinta decisa
Costante del filtro complementare 0.98 0.98–0.995, scelta anziché copiata
Durata di funzionamento prima che si allontani vagando Secondi Indefinita

Il rapporto tra le frequenze dei cicli è il numero che quasi tutte le prime costruzioni sbagliano. Il ciclo interno mantiene l’inclinazione; il ciclo esterno richiede un’inclinazione per potersi spostare. Se il ciclo esterno viene eseguito a una frequenza vicina a quella del ciclo interno, insegue un bersaglio che il ciclo interno non ha ancora raggiunto, e i due si scontrano. Una separazione di cinque a dieci volte è la regola pratica.

La riga sulla «deriva» serve a spiegare a cosa servono gli encoder, ed è importante essere chiari al riguardo: un robot con il solo ciclo di inclinazione bilancerà splendidamente e vagherà per tutta la stanza, perché nulla gli dice dove si trova. È verticale e smarrito. Aggiungere il ciclo esterno di posizione è ciò che lo trasforma da dimostrazione in robot.

Convenzioni sui segni: la cosa che fa perdere una serata

Quattro segni devono concordare e non puoi ricavarne i valori ragionando: devi verificare ciascuno sul banco, tenendo il robot in mano:

Controllo Tieni il robot e… Dovrebbe…
Segno dell’IMU Inclinalo in avanti Segnalare un’inclinazione positiva (o sempre negativa — scegline una)
Segno dei motori Comanda un’uscita positiva Far avanzare le ruote in avanti
Segno del ciclo interno Inclinalo in avanti con il ciclo in esecuzione Comandare alle ruote avanti, per recuperare la caduta
Segno del ciclo esterno Spingilo in avanti dalla posizione di riposo Inclinarsi indietro per tornare

Inverti il terzo segno e il robot accelera la propria caduta, con forza, nella direzione in cui stava già andando. Il sintomo è inequivocabile e vale la pena provarlo con le ruote sollevate da terra.

Quando non funziona

Quasi ogni guasto è una di cinque cose, e sono abbastanza diverse da distinguersi:

  • Si abbatte immediatamente all’accensione — il segno del ciclo interno è invertito.
  • L’oscillazione cresce finché non cade — guadagno derivativo troppo basso, oppure D ricavato da un angolo differenziato anziché dalla velocità di rotazione riportata dal giroscopio.
  • Ronzia mentre è verticale — guadagno proporzionale troppo alto, oppure ciclo eseguito troppo lentamente per quei guadagni.
  • Scivola sul pavimento senza resistere — guadagno proporzionale troppo basso oppure motori in saturazione.
  • Si bilancia ma si allontana — compensazione del montaggio, con troppo poco termine integrale per assorbirla.

La tabella delle modalità di guasto esamina ciascuna in maggiore dettaglio, e ognuna può essere riprodotta deliberatamente nel simulatore — il modo più rapido per imparare a riconoscerle.

Roadmap del progetto

Il percorso di costruzione

Segui l'albero tecnologico dai componenti fino a un robot funzionante. Ogni nodo si sblocca quando i suoi prerequisiti sono completati, e i tuoi progressi vengono salvati su questo dispositivo.

0 / 16 completati

100%
Costruzione

Fai in modo che si alzi in piedi

Costruzione

Obiettivo

Fai in modo che mantenga la posizione

Obiettivo

Componenti

Tutorial in questo percorso

Esercitati prima di cablare

Mettilo a punto nel simulatore

Il percorso di costruzione passa per un laboratorio nel browser. Ottieni qui il comportamento giusto, poi trasferisci le tue impostazioni sul robot reale.

Domande frequenti

Quanto è difficile un robot autobilanciante come primo progetto?

È un pessimo primo progetto e un ottimo terzo. Nel cablaggio non c'è nulla di difficile, ma il sistema da controllare è instabile, il che significa che non esiste un punteggio parziale: il robot o sta in piedi oppure no, e un segno errato sembra identico a guadagni sbagliati finché non sai cosa osservare. Costruisci prima un seguitore di linea, così la regolazione del PID e i driver dei motori ti sono già familiari; poi questo diventa un problema concentrato su un solo ciclo anziché su cinque incognite contemporanee.

Perché il mio robot autobilanciante vibra invece di restare fermo?

Di solito è un guadagno proporzionale troppo alto per la frequenza del ciclo oppure gioco meccanico nel riduttore. Prova prima ad abbassare Kp. Se la vibrazione persiste con un guadagno basso, osserva le ruote nel momento in cui invertono: se è visibile una zona morta prima che si muovano, il problema è il riduttore e un motore con ingranaggi metallici risolverà ciò che nessuna regolazione può risolvere.

Servono davvero gli encoder?

Non per stare in piedi. Il ciclo interno necessita soltanto di un angolo di inclinazione, quindi un robot senza alcun encoder bilancerà perfettamente—semplicemente deriverà, perché nulla gli dice dove si trova. Gli encoder sono ciò di cui il ciclo esterno ha bisogno per mantenere la posizione. Se vuoi, costruiscilo prima senza di essi, fallo bilanciare, poi aggiungili.

Con quale frequenza deve essere eseguito il ciclo di controllo?

200 Hz sono un minimo sensibile per il ciclo interno e una frequenza maggiore è migliore. Il tempo di caduta naturale del robot determina la scadenza: un piccolo robot passa da verticale a irrecuperabile in ben meno di un secondo, quindi un ciclo a 50 Hz ha pochissime occasioni per intervenire. Eseguiolo da un timer hardware anziché da delay(), perché la coerenza temporale conta più per il termine derivativo che la frequenza esatta.

Perché si bilancia ma si sposta lentamente per tutta la stanza?

La compensazione del montaggio dell'IMU. Se il sensore si trova un grado fuori dalla verticale, il ciclo mantiene quell'angolo errato e mantenere un'inclinazione costante significa accelerazione costante. Misura l'offset con il robot realmente verticale in mano, sottrailo come costante e lascia che il termine integrativo assorba ciò che resta. Puoi riprodurre esattamente questo effetto con il cursore di compensazione nel simulatore.