Visto che la matematica non e' banale ho usato un progetto gia' fatto basato su Android. A questo link si trova la descrizione che usa la fusione di velocita' e dati geografici per ridurre le fluttuazioni del segnale GPS. Una libreria EKF per Arduino si trova a questo link basato su questo codice Matlab (l'esempio che usa EKF per GPS si trova nella sottodirectory /extras/c/ con dati di pseudorange, non direttamente lat/lon). Per una breve trattazione matematica invece qui
Un altro sito con una trattazione matematica semplice si trova qui
E' disponibile una app per Android a questo indirizzo GitHub
La prova e' stata effettuata mantenendo il sensore fermo e leggendo ad intervalli di tempo la distanza cumulata (ovvero la somma degli errori dei falsi movimenti registrati dal sensore).
Si evidenzia che il tempo di campionamento del GPS e del'accelerometro sono molto differenti e gli aggiornamento del filtro sono scalati sul sensore piu' lento
Distanza cumulata in metri |
Eliminando i primi due punti si ha una deriva media di 0.0015 m/sec, un dato incredibile considerando che con il solo GPS per ogni secondo la distanza e' di oltre 1 m
La scheda PixHawk contiene all'interno un algoritmo di fusione dei sensori per GPS ed IMU basato su EKF