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:
- Un filtro Kalman che stima l'inclinazione attuale insieme all'attuale inclinazione del giroscopio .
- 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.
Le forze inerziali avvertite dagli accelerometri in C possono essere derivate (se non ho commesso alcun errore)
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:
- : Differenze finite rispetto alle nostre misure attuali e precedenti di
- : l'attuale lettura del giroscopio
- : stima precedente di più l'integrazione di e Più di uno
- : Differenze finite sopra e
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