Quale algoritmo dovrei usare per bilanciare un robot a due ruote usando un giroscopio?


25

Esiste un algoritmo valido, popolare e affidabile che posso usare prendendo input da un giroscopio e utilizzandolo per controllare due ruote indipendenti per mantenere un robot così equilibrato in posizione verticale? Sto cercando un algoritmo che mi permetta di usarlo per guidare un robot e tenerlo in posizione verticale quando è fermo. La capacità di affrontare le pendenze e le persone che la spingono sarebbe anche un vantaggio, ma non essenziale.


Lavorerò anche su questo. Devi usare un filtro kalman per filtrare i tuoi dati grezzi. E usa un algoritmo PID per ottimizzarlo.
Huzo,

Risposte:


16

Il controller più semplice è un controller di feedback dello stato lineare. Esistono essenzialmente 4 stati diversi per i quali è necessario un guadagno. Questi sono angolo di inclinazione, velocità di inclinazione, velocità e posizione.


LQR (regolatore quadratico lineare) è un metodo per progettare questi guadagni (dopo aver ottenuto una rappresentazione dello spazio degli stati linearizzata del sistema). Se non si dispone di una rappresentazione dello spazio degli stati (probabilmente no), è possibile ottenere equazioni di movimento e misurare i parametri. Se non si dispone di una rappresentazione dello spazio degli stati, è necessario ottimizzare manualmente i guadagni (senza LQR o altri metodi come il posizionamento dei poli ).


Ottimizzazione dei guadagni manualmente:

Supponendo che l'angolo di inclinazione, la posizione / velocità e le coppie delle ruote siano tutti rivolti in avanti (se positivi), si desidera un guadagno positivo sull'angolo di inclinazione e sulla velocità di inclinazione, nonché un guadagno positivo su posizione e velocità.

Inizia con un guadagno su angolo di inclinazione e velocità di inclinazione. Ciò consentirà di bilanciare inizialmente. Una volta che è bilanciato, puoi controllare la posizione e la velocità aggiungendo un guadagno ad essi. Se è instabile, aumentare il guadagno sulla velocità di inclinazione (che aiuta a smorzare il sistema).

Il controllo di posizione / velocità controllerà entrambi gli stati a zero. Per controllare un altro valore, è sufficiente un controller di tracciamento di riferimento, sostituendo gli stati con i loro errori prima di inserirlo nel controller (ad es. Velocità attuale - riferimento di velocità).

Il controllo dell'imbardata può essere eseguito in modo indipendente (con le differenze nelle coppie delle ruote aggiunte al controller principale di bilanciamento / velocità / posizione).


9

Credo che la soluzione più popolare a questo problema sia un controller LQR . Il problema che stai cercando di risolvere è il problema del pendolo invertito . Utilizzando queste parole chiave, dovresti essere in grado di Google il codice open source di qualcuno. Il prossimo problema sarà la mappatura della maggior parte delle quantità fisiche rilevanti per l'applicazione (peso, coppia del motore, ecc ...)


5

Dal momento che non conosco le tue abilità in ingegneria / teoria del controllo, ti consiglio di iniziare con un controller PID . È un semplice controller e troverai molte implementazioni di codice. Lo svantaggio del PID è che probabilmente finirai per passare un po 'di tempo a sintonizzare i parametri a mano.

Alcuni anni fa l'ho usato per controllare un robot Lego Mindstorm a due ruote basato sulla sua odometria e ha funzionato abbastanza bene. Per farlo muovere, dovrai giocare con i set point.

Naturalmente, in seguito puoi migliorare la qualità del tuo controller (stabilità, robustezza, ecc.) Usando leggi di controllo più avanzate come l'LQR menzionato in precedenza.

In bocca al lupo!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.