2016-04-13 13 views
0

最高のピッチとロールの値を取得したい。 私はすでにazimut値を取得するためにそのコードを使用しています。安定したピッチとロールの値を得る

ピッチとロールの値が良くないようです。

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

私は、携帯電話の位置に応じて、3Dオブジェクトを移動するには(Jmonkeyエンジン付き)拡張現実環境でそのコードを使用しています:

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

は、私が逃した何かですか?既にアプリで使用されている

EDIT

コードは、それは動作しますが、私はSensor.TYPE_ROTATION_VECTORは良い方法だと思います。このlink

からです。

+0

どのように値が「うまくいかないのですか?彼らは騒々しいですか? – reden

+0

はい、彼らは騒々しいです。 –

答えて

0

携帯電話の加速度計はかなり騒がしい傾向があり、より良い結果を得るにはフィルタを適用する必要があります。 これはtrimmed mean filterからKalman filter のいずれかになります。私は平均的なフィルターで始めることを推奨します。これは実装が簡単です。単に「ウィンドウ」サイズに基づいて最も一般的なものから遠すぎる値をカットします。

関連する問題