Die Umwandlung accelerometer-Daten aus dem Gerät werden die Koordinaten in der realen Welt-Koordinaten

Ich bin wirklich sorry, wenn dies ist eine sehr grundlegende Frage, aber ich habe keine Wahl, aber es Fragen: Wie setzt du die accelerometer-Daten aus dem Gerät Koordinaten in der realen Welt-Koordinaten?

Ich meine, vorausgesetzt, daß der Beschleunigungsmesser ist mir somenting wie (Ax,Ay,Az) -im Gerät werden die Koordinaten-, welche Transformationen sollte ich mich bewerben für die Transformation der Werte in (Ax',Ay',Az') -in der realen Welt-Koordinaten-, so kann ich mit der Beschleunigung Vektor in der realen Welt-Koordinaten zu berechnen, wenn das Gerät beschleunigt Nord, Ost, Süd-west,etc?

Habe ich gearbeitet, um dieses Problem in den letzten Tagen. Zuerst dachte ich, dass es shound nicht schwierig sein, aber nach der Suche Dutzende von Seiten, die ich noch nicht mit etwas kommen, bis funktional.

Übrigens, hier ist etwas code, mit dem, was ich umgesetzt habe, so weit:

    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??
        }
   }
};

Habe ich:

Vektor der Beschleunigungen in native-Koordinaten in accelerometervalues.

Vektor der magnetischen Feldwerte in geomagneticmatrix.

Azimut, pitch und roll in orientationvalues.

Rotation matrix R.
Neigung matrix I.

Ich denke, dass alle notwendigen Informationen dort, Azimut, pitch und roll sollte beschreiben die Verschiebung der Koordinaten-system in Bezug mit der realen Welt-Koordinatensystem. Ich glaube auch, dass R ist/kann auch verwendet werden als true north Vektor im inneren der Geräte-Koordinaten.

Scheint es mir, dass obtaing die Werte der Beschleunigung in der realen Welt ist nur eine mathematische transformation Weg von den Daten. Ich kann einfach nicht herausfinden.

Vielen Dank im Voraus.

Bearbeitet:

Habe ich versucht direkt multipliying die Komponenten accelerometervalues mit der rotationsmatrix R (trueaccel=accel*R) aber es hat nicht funktioniert.

                    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];

Habe ich auch schon versucht multipliying accelerometervalues mit der Neigung matrix I. Auch multipliying mit R und I (trueaccel=accel*R*I) und das hat nicht funktioniert entweder. Weder der Aufruf zu remapcoordinates() und dann multiplizieren Sie die in den vorhergehenden Formen.

Hat jemand eine Idee, was ich falsch mache?

InformationsquelleAutor Tommy | 2011-03-28
Schreibe einen Kommentar