La transformation de l'accéléromètre de données à partir du dispositif de coordonnées du monde réel coordonnées

Je suis vraiment désolé si c'est une question très simple, mais je n'ai pas le choix, mais de la poser: Comment traduire les données de l'accéléromètre de l'appareil coordonnées du monde réel, coordonnées?

Je veux dire, en supposant que l'accéléromètre est de me donner somenting comme (Ax,Ay,Az) -dans l'appareil coordonnées-, quelles transformations dois-je appliquer pour transformer les valeurs en (Ax',U',Az') -dans le monde réel les coordonnées de l'-, si je peux utiliser le vecteur accélération dans le monde réel, les coordonnées de calculer si l'appareil est à l'accélération nord, est, sud-ouest,etc?

J'ai travaillé autour de cette question au cours de la dernière quelques jours. Au début, je pensais qu'il shound pas être difficile, mais après une recherche de plusieurs dizaines de pages, je n'ai pas trouver quelque chose de fonctionnel.

Par ailleurs, voici un peu de code avec ce que j'ai mis en œuvre à ce jour:

    private SensorEventListener mSensorEventListener = new SensorEventListener() {

    public void onAccuracyChanged(Sensor sensor, int accuracy){
}

    public void onSensorChanged(SensorEvent event) {
        switch(event.sensor.getType()){
        case Sensor.TYPE_ACCELEROMETER:
            accelerometervalues = event.values.clone();
            AX.setText(accelerometervalues[0]+"");
            AY.setText(accelerometervalues[1]+"");
            AZ.setText(accelerometervalues[2]+"");
            break;
        case Sensor.TYPE_ORIENTATION:
            orientationvalues = event.values.clone();
            azimuth.setText(orientationvalues[0]+"");
            pitch.setText(orientationvalues[1]+"");
            roll.setText(orientationvalues[2]+"");
            break;
        case Sensor.TYPE_MAGNETIC_FIELD:
            geomagneticmatrix =event.values.clone();
            TAX.setText(geomagneticmatrix[0]+"");
            TAY.setText(geomagneticmatrix[1]+"");
            TAZ.setText(geomagneticmatrix[2]+"");
            break;
        }
        if (geomagneticmatrix != null && accelerometervalues != null) {
            float[] R = new float[16];
            float[] I = new float[16];
            SensorManager.getRotationMatrix(R, I, accelerometervalues, geomagneticmatrix);
            //What should I do here to transform the components of accelerometervalues into real world acceleration components??
        }
   }
};

J'ai:

Un vecteur des accélérations en natif coordonnées dans accelerometervalues.

Un vecteur de valeurs de champ magnétique dans geomagneticmatrix.

De l'azimut, de tangage et de roulis dans orientationvalues.

Matrice de Rotation R.
L'inclinaison de la matrice I.

Je pense que toutes les informations nécessaires sont là, azimut, de tangage et de roulis doit décrire le déplacement de l'appareil du système de coordonnées en rapport avec le monde réel du système de coordonnées. Aussi, je crois que R est/peut même être utilisé comme un vrai le nord de vecteur à l'intérieur des appareils coordonnées.

Il me semble que obtaing les valeurs de l'accélération dans le monde réel est juste une transformation mathématique à l'écart de ces données. Je ne peux pas le comprendre.

Merci d'avance.

Édité:

J'ai essayé directement multipliying les composants de accelerometervalues avec la matrice de rotation R (trueaccel=accel*R) mais il ne fonctionne pas.

                    trueacceleration[0]= accelerometervalues[0]*R[0]+accelerometervalues[1]*R[1]+accelerometervalues[2]*R[2];
                trueacceleration[1]= accelerometervalues[0]*R[1]+accelerometervalues[1]*R[4]+accelerometervalues[2]*R[7];
                trueacceleration[2]= accelerometervalues[0]*R[2]+accelerometervalues[1]*R[5]+accelerometervalues[2]*R[8];

J'ai aussi essayé de multipliying accelerometervalues avec l'inclinaison de la matrice I. Aussi multipliying avec deux R et I (trueaccel=accel*R*I) et qui ne fonctionne pas non plus. Ni fait appel à remapcoordinates() puis multiplier dans l'une des formes précédentes.

Quelqu'un a une idée sur ce que je fais mal?

OriginalL'auteur Tommy | 2011-03-28