Sommario:

Robot autobilanciante a due ruote: 7 passaggi
Robot autobilanciante a due ruote: 7 passaggi

Video: Robot autobilanciante a due ruote: 7 passaggi

Video: Robot autobilanciante a due ruote: 7 passaggi
Video: TODO SIMPLY Propulsore elettrico universale per carrozzina. Leggero, facile da montare 2024, Novembre
Anonim
Robot autobilanciante a due ruote
Robot autobilanciante a due ruote

Questo istruibile passerà attraverso il processo di progettazione e costruzione di un robot autobilanciante. Come nota, voglio solo dire che i robot autobilanciati non sono un concetto nuovo e sono stati costruiti e documentati da altri. Voglio sfruttare questa opportunità per condividere con voi la mia interpretazione di questo robot.

Cos'è un robot autobilanciato?

Un robot autobilanciato è un sistema che utilizza i dati di misurazione inerziale, raccolti da un sensore di bordo, per regolare continuamente la sua posizione per mantenersi in posizione verticale.

Come funziona?

Una semplice analogia da considerare è un pendolo invertito. Dove il centro di massa è sopra il punto di rotazione. Tuttavia, nel nostro caso, stiamo limitando il pendolo a 1 grado di libertà avendo un asse di rotazione, nel nostro caso l'asse di rotazione delle due ruote. Poiché qualsiasi tipo di disturbo causerà la caduta del robot, abbiamo bisogno di un metodo per mantenere attivamente il robot in equilibrio. È qui che entra in gioco il nostro algoritmo a circuito chiuso (controllore PID), sapendo in quale direzione sta cadendo il nostro robot, possiamo regolare la direzione di rotazione dei nostri motori per mantenere il sistema bilanciato.

Come funziona l'algoritmo a ciclo chiuso?

Il principio di base per mantenere il robot in equilibrio è che, se il robot sta cadendo in avanti, compenserà spostando la parte inferiore del robot in avanti per riprendersi e quindi mantenersi verticale. Allo stesso modo, se il robot sta cadendo all'indietro, compenserà spostando la parte inferiore del robot all'indietro per riprendersi.

Quindi, dobbiamo fare due cose qui, in primo luogo, dobbiamo calcolare l'angolo di inclinazione (Roll) che sta sperimentando il robot e, di conseguenza, dobbiamo controllare la direzione di rotazione dei motori.

Come misureremo l'angolo di inclinazione?

Per misurare l'angolo di inclinazione utilizzeremo un'unità di misura inerziale. Questi moduli incorporano un accelerometro e un giroscopio.

  • L'accelerometro è un dispositivo elettromagnetico che misura la corretta accelerazione, questa è l'accelerazione di un corpo in un fotogramma di riposo istantaneo.
  • Un giroscopio è un dispositivo elettromeccanico che misura la velocità angolare e viene utilizzato per determinare l'orientamento del dispositivo.

Tuttavia, il problema con l'utilizzo di tali sensori è che:

  • L'accelerometro è molto rumoroso ma è costante nel tempo, l'angolo varia con movimenti orizzontali improvvisi
  • Il valore del giroscopio, d'altra parte, andrà alla deriva nel tempo, ma inizialmente è abbastanza preciso

Per questo istruibile, non implementerò un filtro, ma utilizzerò il Digital Motion Processing (DMP) integrato. Altri hanno utilizzato un filtro complementare per ottenere un segnale uniforme, puoi scegliere il metodo che preferisci. poiché il robot si bilancia con entrambe le implementazioni.

Forniture

Parti:

  1. Arduino Pro Mini 3.3V 8 con un ATMEGA328 da 8 Mhz
  2. FT232RL 3.3V 5.5V FTDI USB a modulo adattatore seriale TTL
  3. Modulo GY-521 con MPU-6050
  4. Una coppia di micro motoriduttori N20 6V - 300rpm
  5. Driver del motore L298N
  6. LM2596S Convertitore buck da CC a CC
  7. Batteria (batteria agli ioni di litio ricaricabile da 9,7 V)
  8. Cinghia della batteria
  9. Due circuiti stampati PCB di prototipazione
  10. Cavi dei ponticelli maschio e femmina dei pin dell'intestazione

Utensili:

  1. Saldatore e saldatore
  2. Distanziatore esagonale in nylon
  3. Set di cacciaviti di precisione
  4. stampante 3d

Passaggio 1: costruzione

Dato che avevo accesso a una stampante 3D, ho deciso di stampare in 3D il telaio e utilizzare i distanziatori per collegare tutto insieme.

Il robot è composto da 4 strati

  1. Lo strato inferiore collega i motori e ha punti di montaggio per il modulo driver motore L298N
  2. Il livello successivo ospita la scheda prototipo con Arduino pro mini e le intestazioni saldate ad essa
  3. Il terzo strato monta l'IMU
  4. Lo strato superiore, che chiamo "strato paraurti" contiene la batteria, il convertitore buck e un interruttore monetario

Il mio principio progettuale principale era di mantenere tutto modulare. Il motivo era che se qualcosa andava storto con uno dei componenti, potevo facilmente sostituirlo o se avevo bisogno di un componente per un altro progetto, potevo prenderlo facilmente senza preoccuparmi di non poter utilizzare nuovamente il sistema.

Passaggio 2: cablaggio

Cablaggio
Cablaggio

Ho saldato alcune pinte di intestazione femmina a una scheda perf per abbinarle ai mini pin di intestazione Arduino pro. Successivamente, ho saldato i pin dell'intestazione maschio sulla scheda per consentire l'accesso all'I/O. Il resto dei componenti è stato montato sul telaio stampato in 3D e collegato tramite cavi jumper.

Passaggio 3: teoria del controllo

Ora passiamo al cuore del progetto. Per mantenere il robot in equilibrio, dobbiamo generare un segnale di controllo appropriato per guidare i motori nella direzione corretta e alla velocità corretta per mantenere il robot bilanciato e stabile. Per fare ciò utilizzeremo un popolare algoritmo di loop di controllo noto come controller PID. Come suggerisce l'acronimo, ci sono tre termini per questo controller, questi sono i termini proporzionale, integrale e derivato. Ciascuno dei quali è accompagnato da coefficienti che ne determinano l'influenza sul sistema. Spesso la parte più dispendiosa in termini di tempo dell'implementazione del controller è la regolazione dei guadagni per ciascun sistema univoco per ottenere la risposta più ottimale.

  • Il termine proporzionale moltiplica direttamente l'errore per fornire un output, quindi maggiore è l'errore maggiore è la risposta
  • Il termine integrale genera una risposta basata su un accumulo dell'errore per ridurre l'errore di stato stazionario. Più a lungo il sistema è sbilanciato, più velocemente risponderanno i motori
  • Il termine derivato è la derivata dell'errore che viene utilizzato per prevedere la risposta futura e così facendo riduce l'oscillazione dovuta al superamento dello stato stazionario.

Il principio di base di questo algoritmo è calcolare continuamente l'angolo di inclinazione che è la differenza tra la posizione desiderata e la posizione corrente, questo è noto come errore. Quindi utilizza questi valori di errore e calcola la somma delle risposte proporzionale, integrale e derivata per ottenere un'uscita, ovvero i segnali di controllo inviati ai motori. Di conseguenza, se l'errore è grande, il segnale di controllo inviato ai motori farà ruotare i motori ad alta velocità per raggiungere uno stato bilanciato. Allo stesso modo, se l'errore è piccolo, il segnale di controllo farà ruotare i motori a bassa velocità per mantenere il robot in equilibrio.

Passaggio 4: utilizzo dell'MPU 6050

Libreria MPU6050

github.com/jrowberg/i2cdevlib/tree/master/…

Calibrazione degli offsetNon tutti i sensori sono repliche esatte l'uno dell'altro. Di conseguenza, se si provano due MPU 6050 si possono ottenere valori diversi per l'accelerometro e il giroscopio se posizionati ancora sulla stessa superficie. Per superare questo offset angolare costante, dobbiamo celebrare ogni sensore che utilizziamo. Eseguendo questo script:

www.i2cdevlib.com/forums/topic/96-arduino-…

scritto da Luis Rodenas, otterremo degli offset. Gli errori di offset possono essere eliminati definendo i valori di offset nella routine setup().

Utilizzo del processore di movimento digitale

L'MPU6050 contiene un DMP (Digital Motion Processor).

Che cos'è un DMP? Puoi pensare al DMP come a un microcontrollore integrato che elabora il movimento complesso dal giroscopio a 3 assi e dall'accelerometro a 3 assi a bordo della mpu6050, utilizzando i propri algoritmi di fusione del movimento. Scaricare l'elaborazione che altrimenti verrebbe eseguita da Arduino

Come usarlo? Per capire come utilizzare il DMP, passare attraverso lo schizzo di esempio MPU6050_DMP6 fornito con la libreria MPU6050 (nell'IDE di Arduino: File-> Esempio-> MPU6050-> MPU6050_DMP6). Questa è anche una buona opportunità per verificare che il sensore funzioni effettivamente e che il cablaggio sia corretto

Passaggio 5: codifica

Ho usato l'IDE Arduino e un'interfaccia FTDI per programmare Arduino pro mini.

Utilizzando lo sketch di esempio (MPU6050_DMP6) fornito con la libreria MPU6050 come codice di base, ho aggiunto le funzioni PID() e MotorDriver().

Aggiungi la libreria

  • MPU6050: Per utilizzare il sensore MPU6050 dovremo scaricare la libreria per sviluppatori I2C da Jeff Rowberg e aggiungerla alla cartella "librerie" di Arduino che si trova nei file di programma sul tuo computer.
  • Wire: abbiamo anche bisogno della libreria Wire per consentirci di comunicare con i dispositivi I2C.

Pseudo codice

Includi biblioteche:

  • Filo.h
  • MPU6050
  • I2Cdev.h

Inizializzare variabili, costanti e oggetti

Impostare ()

  • Imposta la modalità pin per il controllo dei motori
  • Imposta la modalità pin per il LED di stato
  • Inizializzare l'MPU6050 e impostare i valori di offset

PID ()

Calcola valore PID

MotorDriver (risposta PID)

Utilizzare il valore PID per controllare la velocità e la direzione dei motori

Ciclo continuo ()

  • Ottieni dati da DMP
  • Chiama PID() una funzione MotorDriver()

Passaggio 6: Procedura di sintonizzazione PID

Questa è la parte più noiosa del progetto e richiede un po' di pazienza a meno che tu non sia molto fortunato. Ecco i passaggi:

  1. Imposta i termini I e D su 0
  2. Tenendo il robot, regolare P in modo che il robot inizi a oscillare intorno alla posizione di equilibrio
  3. Con P impostato, aumentare I in modo che il robot acceleri più velocemente quando è sbilanciato. Con P e I correttamente sintonizzati, il robot dovrebbe essere in grado di autobilanciarsi per almeno qualche secondo, con qualche oscillazione
  4. Infine, aumentare D ridurre l'oscillazione

Se il primo tentativo non dà risultati soddisfacenti, ripeti i passaggi con un diverso valore di P. Inoltre, tieni presente che puoi mettere a punto i valori PID in seguito, per aumentare ulteriormente le prestazioni. I valori qui dipendono dall'hardware, non sorprenderti se ottieni valori PID molto grandi o molto piccoli.

Passaggio 7: conclusione

I micromotoriduttori utilizzati dovevano rallentare per reagire a grandi disturbi e, dato che il sistema era troppo leggero, non c'era abbastanza inerzia per ottenere l'effetto pendolo desiderato, quindi se il robot si inclina in avanti si inclinerà semplicemente in un angolo e correrà in avanti. Infine, le ruote stampate in 3D erano una cattiva scelta poiché continuano a scivolare.

Suggerimenti per un miglioramento:

  • Motori più veloci con una coppia maggiore, ovvero per i motori CC maggiore è la tensione nominale maggiore è la coppia
  • prendi una batteria più pesante o sposta semplicemente la massa un po' più in alto
  • Sostituisci le ruote stampate in 3D con quelle in gomma per ottenere più trazione

Consigliato: