8

Rotation Vector と Orientation Vector の両方のリスナーを実装しましたが、減価償却されていることはわかっていますが、両方をテストしたかったのです。

Rotation Vector がフュージョン センサーであり、推奨されることは知っていますが、それによると、北 ( getOrientation(rotationMatrix,value) によって返される value[0] は、ベアリング 0 を生成します) は、方向センサーからの北と一致しません。また、プレイストアのさまざまなアプリから集計しましたが、方向センサーの値はそれらに近いようです。

さらに、Rotation_Vector からの方位角の値 [0] を何度も取得すると、getOrientation が急上昇し、-180 から 180 の間で振動し続けます。

PS "getRotationMatrix(float[] R, float[] I, float[]gravity, float[] geomagnetic)" も Rotation Vector と同じ結果になります。

 public final void onSensorChanged(SensorEvent event)
{
   float rotationMatrix[];      
  switch(event.sensor.getType())
  {  
   .
       .
       .       
  case Sensor.TYPE_ROTATION_VECTOR:
       rotationMatrix=new float[16];
       mSensorManager.getRotationMatrixFromVector(rotationMatrix,event.values);
       determineOrientation(rotationMatrix);
       break; 

   case Sensor.TYPE_ORIENTATION:
        sensorZValue.setText(""+event.values[0]); //rotation about geographical z axis  
        sensorXValue.setText(""+event.values[1]); //rotation about geographical x axis  
        sensorYValue.setText(""+event.values[2]); //rotation about geographical y axis

 }//switch case ends
}


private void determineOrientation(float[] rotationMatrix)
    {
    float[] orientationValues = new float[3];
    SensorManager.getOrientation(rotationMatrix, orientationValues);
    double azimuth = Math.toDegrees(orientationValues[0]);
    double pitch = Math.toDegrees(orientationValues[1]);
    double roll = Math.toDegrees(orientationValues[2]);

    sensorZValue.setText(String.valueOf(azimuth));  //rotation about geographical z axis
    sensorXValue.setText(String.valueOf(pitch)); //rotation about geographical x axis   
    sensorYValue.setText(String.valueOf(roll)); //rotation about geographical y axis


    }

電話の Y 軸と北を指すベクトルの間の角度を決定したいので、それが私の最初の実装でした。提案してください。

4

1 に答える 1

2

これが役立つと思います...

傾きとピ​​ッチを補正できる Android コンパス

これにより、より信頼できる情報源を使用して北が計算されます。

お役に立てれば。

于 2014-02-03T19:15:16.443 に答える