TYPE_ROTATION_VECTOR和TYPE_ORIENTATION给出了不同的结果,而且偏差也不同。

8
我已经为旋转向量和方向向量都实现了监听器,尽管我知道它们已经过时了,但我想测试一下两者的效果。
我知道旋转向量是一种融合传感器,也是推荐使用的,但根据它的数据,北方(通过getOrientation(rotationMatrix,value)返回的value[0] 值为0)与方向传感器返回的北方值不匹配。我还从Playstore下载了其他应用程序进行了比对,发现方向传感器的值更接近于它们的值。
此外,很多时候我的方位角值(来自旋转向量的getOrientation的value[0])会突然飙升,并在-180到180之间震荡。
另外,"getRotationMatrix(float[] R, float[] I, float[] gravity, float[] geomagnetic)" 的结果与旋转向量相同。
 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轴与指向北方的向量之间的角度,这是我的初始实现。请提供建议。

根据Android文档,values[1]指向北方。因此,俯仰角指向北方,而不是方位角 :-) - Agnius Vasiliauskas
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接