Suche nach Orientierung mit getRotationMatrix() und getOrientation()
Im Versuch, um die Richtung des Vektors zeigen, die aus der Kamera, mit Bezug auf den magnetischen Norden. Ich bin unter dem Eindruck, daß ich die Werte wieder aus getOrientation(), aber ich bin mir nicht sicher, was Sie darstellen. Die Werte, die ich von getOrientation() ändern sich nicht erwartungsgemäß, wenn ich ändern Sie die Ausrichtung des Telefons (90 Grad drehen, ändert sich nicht, Werte um 90 Grad). Ich muss wissen, was die Werte, die von getOrientation() bedeuten. Was ich habe, so weit unten geschrieben:
package com.example.orientation;
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.Toast;
public class Orientation extends Activity{
private SensorManager mSM;
private mSensorEventListener mSEL;
float[] inR = new float[16];
float[] outR= new float[16];
float[] I = new float[16];
float[] gravity = new float[3];
float[] geomag = new float[3];
float[] orientVals = new float[3];
final float pi = (float) Math.PI;
final float rad2deg = 180/pi;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mSM = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSEL = new mSensorEventListener();
mSM.registerListener(mSEL,
mSM.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
mSM.registerListener(mSEL,
mSM.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
SensorManager.SENSOR_DELAY_NORMAL);
}
private class mSensorEventListener implements SensorEventListener{
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {}
@Override
public void onSensorChanged(SensorEvent event) {
//If the sensor data is unreliable return
if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE)
return;
//Gets the value of the sensor that has been changed
switch (event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
gravity = event.values.clone();
break;
case Sensor.TYPE_MAGNETIC_FIELD:
geomag = event.values.clone();
break;
}
//If gravity and geomag have values then find rotation matrix
if (gravity != null && geomag != null){
//checks that the rotation matrix is found
boolean success = SensorManager.getRotationMatrix(inR, I, gravity, geomag);
if (success){
//Re-map coordinates so y-axis comes out of camera
SensorManager.remapCoordinateSystem(inR, SensorManager.AXIS_X,
SensorManager.AXIS_Z, outR);
//Finds the Azimuth and Pitch angles of the y-axis with
//magnetic north and the horizon respectively
SensorManager.getOrientation(outR, orientVals);
float azimuth = orientVals[0]*rad2deg;
float pitch = orientVals[1]*rad2deg;
float roll = orientVals[2]*rad2deg;
//Displays a pop up message with the azimuth and inclination angles
String endl = System.getProperty("line.separator");
Toast.makeText(getBaseContext(),
"Rotation:" +
outR[0] + " " + outR[1] + " " + outR[2] + endl +
outR[4] + " " + outR[5] + " " + outR[6] + endl +
outR[8] + " " + outR[9] + " " + outR[10] + endl +endl +
"Azimuth: " + azimuth + " degrees" + endl +
"Pitch: " + pitch + " degrees" + endl +
"Roll: " + roll + " degrees",
Toast.LENGTH_LONG).show();
} /*else
Toast.makeText(getBaseContext(),
"Get Rotation Matrix Failed", Toast.LENGTH_LONG).show();*/
}
}
}
}
Ist, habe ich mich an die Dokumentation über die sensorManager-Klasse, aber es hat nicht geholfen dieses Problem lösen. Wenn jemand könnte mir helfen, Sinn aus der diese würde ich schätzen es wirklich. Ich bin den Test auf einem Nexus One mit Android 2.1
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil ich neu auf android war ich mit toast Darstellung der Informationen auf dem Bildschirm. Ich geändert, um nur text aktualisieren, auf einen Blick und schien es zu beheben. Ich habe auch herausgefunden, dass das, was ich davon ausgegangen, die orientVals waren tatsächlich korrekt ist. Für was brauche ich die Rolle nicht verwendet. Auch nicht erkennen, es war ein Weg, um konvertieren von rad auf deg eingebaut, so habe ich nur verwendet, dass.
können Sie aus der logger-Anwendung zeigt, dass raw-Werte auf dem Bildschirm. In der Beschreibung finden Sie einen link zu der source-code, so dass Sie lernen können, wie es greift auf die sensoren.
HTH,
Daniele
Müssen Sie die Ausrichtung Ihres Gerätes (Landscape/Portrait)
und machen Sie eine Entschädigung.
Ich denke, du solltest zu verwenden getInclination die Richtung zu bekommen anstelle von get-Orientierung. als getRotationMatrix ist die Berechnung auf der Basis von Schwerkraft und geomagnetische Feld und Sie erhalten die inlination aus dem magnetischen Feld direkt.
Ich Denke, Sie sollten outR bis inR im Einklang getOrientation