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?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Oki, ich habe diese aus mathematisch mich also bitte Geduld mit mir.
Wenn Sie übersetzen möchten, eine Beschleunigung Vektor
accelerationvalues
in eine Beschleunigung Vektortrueacceleration
ausgedrückt in der realen Welt-Koordinaten, sobald Sie haben Azimut,pitch und roll gespeichertorientationvalues
Vektor, tun Sie einfach Folgendes:Müssen Sie in der Lage sein zu wissen, das Referenz-Koordinatensystem, das gibt auch Ihnen die Orientierung Ihres Geräts innerhalb der 'realen' Welt-Koordinaten. Ohne diese Informationen, es sich unmöglich um wandeln Sie Ihre Daten in etwas nützliches.
Zum Beispiel hat Ihr Gerät eine Art 'Richtungs' - sensor, der helfen würde, den Sinn der accelerometer-Daten (Kreisel & Zirkel zum Beispiel?)
Beschäftige ich mich mit dem gleichen problem. Was Sie tun können, ist, wie Sie die R[] matrix multiplizieren Sie Ihre Beschleunigung Vektor-und voilá.
PS: accelerometervalues muss eine 4-Feld-Vektor, fügen Sie einfach die 0 auf das Letzte Feld.
Versuchen, diese, seine Arbeit für mich
Dies ist, was ich verwendet, um anzeigen accelrometer Daten von der lokalen(Mobilen) Bezugsrahmen, auf die Erde Bezugsrahmen, um loszuwerden, der Orientierung in Abhängigkeit. Da in der Erde frame Z-Achse zeigt auf den Himmel und muss zeigen den Wert ~=9,81 m/sec^2. Ein Phänomen, das ich nicht verstehen konnte ist, wenn ich Telefon auf dem Drehstuhl jede beliebige Ausrichtung und drehen sich mit konstanter Geschwindigkeit, dann XEarth und YEarth Werte zeigt die rotation mit 90 Grad Phasenverschiebung und oszilliert wie eine Sinus/Cosinus-Welle, die ich davon ausgehen, Nord-und Ost-Achse.