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.
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:
- 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.
- 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
Componenti
- ControllerArduino UnoLa scheda a 8 bit tollerante con cui la maggior parte delle persone scopre la robotica.
- SensoreMPU-6050 IMUUn sensore di movimento a sei assi: ecco come il robot percepisce inclinazione, rotazione e accelerazione.
- DriverDriver per motori TB6612FNGUn ponte H a MOSFET che conserva i volt che hai davvero pagato.
- AttuatoreMotore con encoder N20Un micromotore con ingranaggi metallici e un encoder sul retro, così il robot sa quanto è avanzato davvero.
- TelaioTelaio robotico 2WDLa piattaforma su cui si montano due motori, un caster libero e tutta la tua elettronica.
- AlimentazionePacco batteria e alimentazione del robotLa differenza tra un robot che funziona e uno che continua a riavviarsi.
Tutorial in questo percorso
- Principiante · 45 minutiInclinazione con accelerometro e giroscopio MPU6050Trasforma i conteggi di MPU6050 in un angolo di inclinazione in gradi e scopri perché i due sensori non bastano da soli.
- Intermedio · 1 oraFiltro complementare: unire accelerometro e giroscopioUnisci accelerometro e giroscopio in un angolo di inclinazione stabile con una sola riga di codice.
- Avanzato · 2 oreControllo PID in cascata per un robot autobilanciatoDue anelli PID: uno mantiene l'inclinazione, l'altro la richiede affinché il robot raggiunga una destinazione.
- Principiante · 18 min di letturaCome regolare un controllore PID: guida praticaUn ordine pratico per regolare i guadagni P, I e D senza tirare a indovinare, e come provare ogni passo dal vivo.
- Principiante · 17 min di letturaLeggi gli encoder in quadratura per distanza e velocitàTrasforma gli impulsi di un encoder in quadratura in misure affidabili di direzione, distanza e velocità della ruota.
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.