Accelerometri in un robot autobilanciato, non possiamo fare di meglio?


9

Attualmente sto leggendo i robot autobilanciati che utilizzano un IMU (giroscopi + accelerometri) per stimare il loro angolo di inclinazione attuale.

La maggior parte dei documenti che ho trovato dicono le stesse cose:

  • Non puoi semplicemente prendere l'arco-tangente dei dati degli accelerometri per trovare la direzione della gravità perché sono influenzati da "rumori inerziali".
  • Non puoi semplicemente integrare l'output del giroscopio nel tempo perché va alla deriva.
  • Esistono due soluzioni generalmente accettate per unire tali dati:
    1. Un filtro Kalman che stima l'inclinazione attuale insieme all'attuale inclinazione del giroscopio .
    2. Un filtro gratuito che applica un filtro passa-basso sui dati dell'accelerometro (possono essere considerati affidabili a lungo termine) e un filtro passa-alto sui dati del giroscopio (può essere considerato affidabile a breve termine).

Tutte le fonti che ho trovato sembrano utilizzare i dati grezzi degli accelerometri in quei filtri, ignorando il fatto che, in un robot auto-bilanciante, possiamo avere una stima molto buona del "rumore inerziale" di cui sopra.

Ecco il mio però

Modelliamo il nostro robot con un pendolo invertito con un fulcro mobile e usiamo questo scarso disegno come riferimento.

inserisci qui la descrizione dell'immagine

Le forze inerziali avvertite dagli accelerometri in C possono essere derivate (se non ho commesso alcun errore)

(cr¨cΘ¨)=(-X¨peccato(Θ)-RΘ˙2-X¨cos(Θ)+RΘ¨)

Supponendo che

  • Il nostro robot sta rotolando senza scivolare
  • Possiamo misurare x (utilizzando motori passo-passo o motori DC con encoder)

Quindi possiamo avere una buona stima di tutte quelle variabili:

  • X¨^K: Differenze finite rispetto alle nostre misure attuali e precedenti diX
  • Θ˙^K : l'attuale lettura del giroscopio
  • Θ^K : stima precedente di più l'integrazione diΘΘ˙^K e Θ˙^K-1 Più di uno Δt
  • Θ¨^K : Differenze finite sopra Θ˙^K e Θ˙^K-1

Una volta ottenuto ciò, possiamo annullare l'effetto delle forze inerziali negli accelerometri, lasciando solo una misura molto migliore della gravità.

Probabilmente è comunque una buona idea usare questo come input del solito filtro Kalman come in 1. sopra.

Forse possiamo persino costruire un filtro Kalman in grado di stimare tutte quelle variabili contemporaneamente? Ci proverò.

Cosa ne pensi? Mi sto perdendo qualcosa qui?

Penso che il robot autobilanciante possa essere un buon tag, ma non riesco a crearlo


Un telemetro laser sarebbe incredibilmente utile.
holmeski,

Risposte:


1

Se costruisci correttamente un filtro Kalman con un input 'x', allora sì, sarà meglio. In particolare, il sensore inerziale non può darti un valore assoluto per x in ogni caso, perché stai (essenzialmente) cercando di integrare due volte un segnale dell'accelerometro in una posizione, e che è squisitamente sensibile al rumore nell'uscita dell'accelerometro.

Alcune cose che potresti voler considerare nei tuoi viaggi:

  1. Un filtro Kalman in piena regola è intenso dal punto di vista computazionale, ma un Kalman allo stato stazionario è fondamentalmente un filtro complementare con frequenze di rolloff selezionate per costruzione piuttosto che b'guess e b'gosh.
  2. Parlando di b'guess e b'gosh, se vuoi che un Kalman funzioni bene (e, a volte, per niente) devi rendere conto in modo molto accurato di tutto ciò che accade nelle tue variazioni. Kalmans è noto per non rispondere bene alle discrepanze tra il tuo modello e la realtà. Se sei disposto a fare i conti con la matematica, esamina H-infinito e altre tecniche di stima dello stato robuste.
  3. Se percorri la strada H-infinito, puoi anche trovare il filtro H-infinito a stato stazionario e ottenere lo stesso vantaggio computazionale (e, in effetti, la struttura del filtro effettiva nel tuo codice incorporato sarà la stessa; esso ' Avranno solo valori diversi nei coefficienti).

Penso che tu stia sopravvalutando il costo computazionale di un filtro kalman completo. Julien avrà probabilmente meno di 6 stati, il che non sarebbe un problema sulla maggior parte delle schede.
holmeski,

1

Anche se questa non è una risposta completa alla tua domanda, voglio lasciare alcuni dei miei pensieri. Penso che ti sia mancato:

  1. La gravità stessa, che punta verso il basso e in genere è di circa 9,81 m / s² ma potrebbe essere diversa a seconda della posizione (si misura la gravità 0 solo quando il robot è in caduta libera)
  2. I sensori in genere non sono allineati al 100% sull'asse x / y / z (il chip non è completamente orizzontale sul PCB ... il PCB non è montato completamente orizzontale / verticale nel robot e così via); devi compensare questo
  3. I sensori dell'accelerometro hanno un valore di offset e guadagno, che è necessario compensare. Sono influenzati, ad esempio, dalla temperatura e dalle tolleranze di fabbricazione. Ci sono algoritmi di calibrazione online per questo; ma puoi anche inserire queste variabili sconosciute in un filtro Kalman.
  4. I giroscopi hanno una deriva, che dipende anche dalla temperatura. Non è una costante ma potrebbe cambiare nel tempo. Questa deriva può essere leggermente compensata con l'aiuto di un magnetometro.
  5. I magnetometri noti anche come sensori bussola in 3D possono essere utilizzati per compensare la deriva dei giroscopi. Tuttavia, a volte sono influenzati da campi elettromagnetici (motori, magneti, acciaio nelle pareti, ecc.). Quindi non ci si può fidare totalmente.

Un modello di filtro Kalman è un buon approccio. Più conoscenza del modello di movimento inserito nel modello, meglio funzionerà. Devi anche conoscere le (co) varianze di tutte le variabili ... Quanto pensi che siano le misure di ciascun sensore.


Aspetti positivi su problemi del mondo reale come calibrazione, deriva, temperatura, ecc.
Ben
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.