Ho continuato la mia ricerca su internet e ho trovato che probabilmente Kalman non è l'unica via.
... o almeno sto inquadrando un po' il problema.
L'obiettivo è un sistema per il 3d-tracking abbastanza semplificato.
L'errore di posizione deve essere inferiore agli 0.5m in un periodo di 60secondi, entro il quale il sistema viene resettato.
L'hardware è composto da un accelerometro a 3 assi analogico ed un giroscopio a 3 assi.
La procedura per ricavare la posizione è la seguente:
1- Ricavare l'orientamento combinando le misure di giroscopio ed accelerometro tramite un algoritmo di sensor-fusion.
2- Avendo individuato l'orientamento so con precisione su quali componenti dell'accelerometro si distribuisce l'accelerazione.
3- Sottrarre dalla misura dell'accelerometro il vettore g
4- Il resto è cinematica.
E' corretta questa procedura?
Supponendo la procedura corretta mi vengono in mente alcuni macro-problemi:
1. Quale algoritmo di sensor-fusion scegliere? Io ricerco efficacia e semplicità :whistle:
Se avete dei consigli li ascolterò molto volentieri.
2. A orientamento individuato ho una misura precisa della scomposizione di g sui vari assi, però la misura dell'accelerometro è rumorosissima. Per le precisioni che voglio raggiungere è necessario utilizzare un ADC a 16bit con un quanto di
q = 3.3/2^16 = 5.04*10^-5 V
Ho fatto un calcolo del rumore di un accelerometro che avevo in casa:
Negli accelerometri il rumore è influenzato da 2 parametri:
Densità di rumore, che è un parametro intrinseco dell'accelerometro
Bandwidth che viene determinata con i filtri che vengono posti in uscita agli assi dell'accelerometro.
La maggioranza degli accelerometri possiede integrata già la resistenza per realizzare il filtro passa-basso in uscita, così è sufficiente aggiungere solo il condensatore.
Per calcolare la Bandwidth è sufficiente usare la seguente formula:
BW = 1/(2 * π * R * C)
Rappresenta la massima frequenza apprezzabile di variazione dell'accelerazione.
Conoscendo il valore della larghezza di banda e la densità di rumore, il valore del rumore è ricavabile da questa relazione:
Noise = Noise Density * sqrt(BW * 1.6)
(Trovata sul sito dell'ANALOG DEVICES:
www.analog.com/en/content/td_acceleromet...definitions/fca.html
Quindi prima di poter effettuare un calcolo di rumore sarebbe necessario conoscere la frequenza con la quale variano le accelerazioni.
A. MMA7361L
Noise density: +/-350ug/ sqrt(Hz) misurato tra 0.1Hz e 1kHz
Frequenza di variazione accelerazione: 10Hz
Resistenza interna filtro RC: 32Kohm
Sensibilità accelerometro: 800 mV/g
Calcolo il valore del condensatore per ottenere una Bandwidth di 10Hz:
15 = 1/(2 * π * 32K * C) --> C = 1/(2 * π * 32K * 10) = 5*10-7 = 500nF
Avendo scelto una BW = 10 HZ calcoliamo il rumore:
Noise_g = 350*10^-6 * sqrt(10*1,6) = 1,4*10^-3 g
Noise_V = 1,4*10^-3 * 0,8 = 1,12*10^-3 V = 1,12mV
Se noi volessimo abbinare questo accelerometro ad un ADC a 16-bit avremmo un quanto di :
q = 3.3/2^16 = 5,04*10^-5
Che risulta ben inferiore al valore del rumore e quindi le nostre misure sarebbero totalmente inaccurate. Infatti il rapporto Rumore/quanto è:
SNR = q / Noise_V = 1,12*10^-3 / 5,04*10^-5 = 22.2
E come potete leggere il rumore risulta 22 volte maggiore del quanto.
La prima domanda che mi pongo è: questo rumore è gaussiano?
Se fosse così basterebbe prendere una buona quantità di misure e farne la media?
In caso contrario come si procede?
Saluti e grazie!