dsNDesign
Erfahrenes Mitglied
Hei,
ich möchte von der aktuellen Position eines Androiden die Richtung zu einer bestimmten Position anzeigen. Dazu benötige ich ja die Ausrichtung des Geräts.
Dies habe ich bis jetzt mit dem Magnetic und dem Accelerometer versucht. Die Werte, welche ich dabei jedoch für den Azimuth erhalte, schwanken stark. Die Tendenz stimmt zwar, jedoch schwanken diese (selbst wenn das Gerät auf dem Tisch liegt und nicht bewegt wird), in einem Bereich von ca. 5°. Noch schlimmer ist es, wenn ich das Gerät schüttel. Dann springt mein Zeiger in alle möglichen Richtungen.
Hier mein bisheriger Code-Ausschnitt:
Hat jemand ein paar Tipps, wie ich dies optimieren könnte?
Gruß
ich möchte von der aktuellen Position eines Androiden die Richtung zu einer bestimmten Position anzeigen. Dazu benötige ich ja die Ausrichtung des Geräts.
Dies habe ich bis jetzt mit dem Magnetic und dem Accelerometer versucht. Die Werte, welche ich dabei jedoch für den Azimuth erhalte, schwanken stark. Die Tendenz stimmt zwar, jedoch schwanken diese (selbst wenn das Gerät auf dem Tisch liegt und nicht bewegt wird), in einem Bereich von ca. 5°. Noch schlimmer ist es, wenn ich das Gerät schüttel. Dann springt mein Zeiger in alle möglichen Richtungen.
Hier mein bisheriger Code-Ausschnitt:
Java:
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
Java:
public void onSensorChanged(SensorEvent sensorEvent) {
switch(sensorEvent.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
mGravity = sensorEvent.values.clone();
break;
case Sensor.TYPE_MAGNETIC_FIELD:
mMagnetic = sensorEvent.values.clone();
break;
default:
return;
}
if(mGravity != null && mMagnetic != null) {
updateDirection();
}
}
Java:
private void updateDirection() {
float[] temp = new float[9];
float[] RR = new float[9];
SensorManager.getRotationMatrix(temp, null, mGravity, mMagnetic);
SensorManager.remapCoordinateSystem(temp, SensorManager.AXIS_X, SensorManager.AXIS_Z, RR);
float[] values = new float[3];
SensorManager.getOrientation(RR, values);
for (int i=0; i < values.length; i++) {
Double degrees = (values[i] * 180) / Math.PI;
values[i] = degrees.floatValue();
}
azimuth = values[0];
}
Hat jemand ein paar Tipps, wie ich dies optimieren könnte?
Gruß