2016-04-13 21 views
0

En iyi pitch ve roll değerlerini almak istiyorum. Azimut değerini almak için bu kodu zaten kullanıyorum.Dengeli perde ve rulo değerleri alın

Adım ve rulo değerleri iyi görünmüyor.

@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; 
     } 
ben 3d nesneleri telefon konumuna bağlı olarak hareket etmek (Jmonkey motoru ile) artırılmış gerçeklik ortamında bu kodu kullanıyorum

:

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

gözden kaçırdığım bir şey var mı? Uygulamada zaten kullanılmakta olan

DÜZENLEME

Kod O inşaat ama Sensor.TYPE_ROTATION_VECTOR daha iyi bir yolu olduğunu düşünüyorum bu link

değil.

+0

Değerler nasıl iyi değil? Onlar gürültülü mü? – reden

+0

Evet, gürültülüler. –

cevap

0

Cep telefonlarındaki ivmeölçerler oldukça gürültülü olma eğilimindedir ve daha iyi sonuçlar almak için bir filtre uygulamanız gerekir. Bu, trimmed mean filter'dan Kalman filter 'a kadar her şey olabilir. Uygulaması oldukça basit olduğundan, ortalama bir filtreyle başlamanızı öneririm. Basitçe söylemek gerekirse, bir "pencere" boyutuna göre en yaygın olanlardan çok uzak değerleri keser.

İlgili konular