2010-06-07 10 views
7

So che questa domanda è definitivamente risolta da qualche parte già molte volte, per favore mi illumini se sai della loro esistenza, grazie.Componenti accelerometrici di gravità

Rundown rapido: Voglio calcolare da un accelerometro a 3 assi la componente di gravità su ciascuno di questi 3 assi. Ho utilizzato diagrammi di corpo libero a 2 assi per calcolare la componente di gravità dell'accelerometro negli assi X-Z, Y-Z e X-Y del mondo. Ma la soluzione sembra leggermente fuori, è accettabile per casi estremi quando solo 1 asse dell'accelerometro è esposto alla gravità, ma per un pitch and roll di entrambi i 45 gradi, la magnitudine totale combinata è maggiore della gravità (ottenuta da Xa^2 + Ya^2 + Za^2 = g^2; Xa, Ya e Za sono letture dell'accelerometro nei suoi assi X, Y e Z).

Maggiori dettagli: Il dispositivo è un Nexus One e dispone di un sensore di campo magnetico per azimut, beccheggio e rollio oltre all'accelerometro a 3 assi.

Nell'asse del mondo (con Z nella stessa direzione della gravità, e X o Y punta al polo nord, non pensate che questo importi molto?), Ho pensato che il mio dispositivo avesse un'intonazione (P) su l'asse YZ e un rotolo (R) sull'asse XZ. Con che ho usato semplice Trig per ottenere: Sin (R) = Ax/Gxz Cos (R) = Az/Gxz Tan (R) = Ax/Az

C'è un altro set per il pitch, P.

Ora ho definito la gravità con 3 componenti nell'asse del mondo, un Gxz misurabile solo nell'asse XZ, un Gyz per YZ e un Gxy per l'asse XY. Gxz^2 + Gyz^2 + Gxy^2 = 2 * G^2 il 2G è perché la gravità è effettivamente inclusa due volte in questa definizione.

Oh e l'asse X-Y produce qualcosa di più esotico ... Spiegherò se richiesto in seguito.

Da queste equazioni ho ottenuto una formula per Az e ho rimosso le operazioni di abbronzatura perché non so come gestire i calcoli tan90 (è infinito?).

Quindi la mia domanda è, qualcuno sa se ho fatto questo giusto/sbagliato o in grado di indicarmi la giusta direzione?

Grazie! Dvd

risposta

1

Vorrei saperlo perché sono anche interessato a questo problema.

Un buon punto di partenza per la ricerca è http://www.diydrones.com/. I ragazzi laggiù hanno già risolto questo problema nel contesto degli autopiloti di aerei. C'è un sacco di codice open source di alta qualità collegato a quel sito, oltre a discussioni sulla matematica coinvolta.

5

Come ho capito la tua domanda, conosci il pitch e l'imbardata del tuo dispositivo (dal magnetometro) e vuoi usare queste informazioni per calcolare il componente di gravità lungo ciascuno degli assi delle coordinate (del tuo dispositivo)?

Come fisico sto cresciuto con angoli di Eulero, invece di pitch-imbardata extra, ma guardando http://en.wikipedia.org/wiki/Yaw,_pitch,_and_roll vorrei calcolare questo come segue: Si supponga che il dispositivo è inizialmente orientata lungo il telaio di coordinate globale, in modo che la gravità è gvec:={0,0,-g} (nel frame locale). Ora dobbiamo calcolare le coordinate locali di gvec mentre attraversiamo il tiro di imbardata (l'imbardata non fa nulla come si cita). Per me questo è più semplice con le matrici di rotazione: dobbiamo cambiare il segno degli angoli dal gvec soggiorni messi.Farò questo con Mathematica perché questo è il mio martello e questo è un chiodo

yaw = RotationMatrix[-yawangle,{0,0,1}]; 
pitch = RotationMatrix[-pitchangle, {0,1,0}]; 
roll = RotationMatrix[-rollangle,{1,0,0}]; 
gvec={0,0,-g} 
yaw.gvec 
pitch.yaw.gvec 
roll.pitch.yaw.gvec 

L'uscita è alle coordinate locali per gvec prima di imbardata, e dopo di imbardata, beccheggio e rollio (così ultima riga in basso dovrebbe essere la vostra risposta):

{0,0,-g} 
{0,0,-g} 
{g Sin[pitchangle],0,-g Cos[pitchangle]} 
{g Sin[pitchangle],-g Cos[pitchangle] Sin[rollangle],-g Cos[pitchangle] Cos[rollangle]} 
0

Grazie Janus! La tua spiegazione mi ha illuminato sulla matrice di rotazione. E l'ultima riga ha risolto il mio problema!

Ora ho solo bisogno di rielaborare il mio diagramma di corpo libero per scoprire che cosa ho fatto di sbagliato ... ho già trovato che non avrei avuto una componente XY di gravità, dal momento che la gravità è ortonormale all'asse XY. ..

grazie ancora!

Edit: un seguito a questo, l'ultima riga: {g Sin [pitchangle], - g Cos [pitchangle] Sin [rollangle], - g Cos [pitchangle] Cos [rollangle]}

I ho trovato invece di -g Cos [pitchangle] Sin [rollangle] Sin [roll] dal mio diagramma del corpo libero assomiglia più strettamente alla reale accelerazione.

Quello che non riesco a capire ora è l'ultimo componente -g Cos [pitchangle] Cos [rollangle] ora è perfetto per i piccoli angoli di beccheggio e rollio, e funziona bene sia per un angolo di beccheggio o rotolo mentre il l'altro rimane a 0, ma una deviazione diventa significativa quando sia il beccheggio che il rollio non sono più un angolo piccolo (diciamo 40 gradi). In realtà mi sono anche reso conto di ottenere un 45 roll e 45 pitch sul nexus uno, il telefono avrebbe una lettura dell'asse 0 Z, con X e Y entrambi sull'accelerazione 6.8ish. Mentre la formula risultante dalla moltiplicazione della matrice di rotazione a 45 rotoli e 45 toni sarebbe 0,5 gravità.

C'è qualcosa di sbagliato con l'uscita del sensore di orientamento? o è questo il modo in cui il pitch and roll dovrebbe funzionare?

Qualcuno sa come per tenere conto di questo?

Grazie!

+0

Cerco problema simile. Quindi hai ottenuto una formula esatta per rimuovere il fattore di gravità da tutti gli assi, tenendo conto dei valori di orientamento del dispositivo in quell'istante. Voglio solo pura accelerazione su tutti gli assi senza componenti gravitazionali. – Pritam

+1

Questa non dovrebbe essere una risposta. Questo dovrebbe essere un commento alla risposta di Giano, o aggiunto alla tua domanda con "Update:" – bcorso

0

Non è facile ottenere vettore gravità dalla sensore di accelerazione, è necessario un altro sensore giroscopico, come (se disponibile) per ottenere la parte corretta gravità dalle letture accelerometro.

riguarda Navigator

+0

Ciao, alla ricerca di qualche pseudocodice per fare questo con accelerometro e giroscopio. – Bresiu

1

mi rendo conto il distacco è vecchio, ma nel caso in cui gli altri lo usano: Nella tua ultima risposta si indica che si vede ancora qualche deviazione specialmente sotto angoli maggiori. Ho avuto la stessa esperienza ma è scomparso quando ho aggiunto una procedura di calibrazione per acquisire la lettura dell'accelerometro su una superficie piana e ho effettuato tutte le letture successive relative alla lettura della superficie piana.

Problemi correlati