2016-04-13 25 views
0

Ich möchte die besten Pitch-and-Roll-Werte erhalten. Ich verwende diesen Code bereits, um den Azimutwert zu erhalten.Erhalten Sie stabilisierte Pitch- und Roll-Werte

Pitch-and-Roll-Werte scheinen nicht gut zu sein.

@Override 
    public void onSensorChanged(SensorEvent event) { 

     switch (event.sensor.getType()) { 

      case Sensor.TYPE_ROTATION_VECTOR: 
       // calculate th rotation matrix 
       SensorManager.getRotationMatrixFromVector(rMat, event.values); 

       float[] data = SensorManager.getOrientation(rMat, orientation); 

       Log.i(TAG, "NEW pitch?="+data[1]+" roll="+data[2]); 

       // do something with data 

       break; 
     } 

ich diesen Code in Augmented-Reality-Umgebung (mit Jmonkeyengine) 3D-Objekte je nach Telefon Position zu bewegen:

public void updateRotationFused(float pitch, float roll) { 
    //pitch: cams x axis roll: cams y axisheading: cams z axis 
    mRotXYZQ.fromAngles(pitch + FastMath.HALF_PI , roll - FastMath.HALF_PI, 0); 
    mCurrentCamRotationFused = mInitialCamRotation.mult(mRotXYZQ); 
} 

ist etwas, was ich verpasst?

EDIT

-Code bereits in App ist von diesem link

Es funktioniert, aber ich denke, Sensor.TYPE_ROTATION_VECTOR einen besseren Weg.

+0

Wie sind die Werte "nicht gut"? Sind sie laut? – reden

+0

Ja, sie sind laut. –

Antwort

0

Beschleunigungssensoren in Mobiltelefonen neigen dazu, ziemlich laut zu sein, und Sie müssen einen Filter anwenden, um bessere Ergebnisse zu erzielen. Dies könnte alles von einem trimmed mean filter zu einem Kalman filter Ich schlage vor, mit einem mittleren Filter zu starten, wie es ziemlich einfach zu implementieren ist. Einfach gesagt, schneidet es Werte ab, die zu weit von den üblichsten liegen, basierend auf einer "Fenster" -Größe.