TYPE_ROTATION_VECTOR, TYPE_ORIENTATION дают разные результаты, что и при отклонении

Я реализовал прослушиватель как для вектора вращения, так и для вектора ориентации, хотя я знаю, что он обесценился, я хотел проверить оба.

Я знаю, что вектор вращения является датчиком слияния и рекомендуется, но в соответствии с ним СЕВЕР (значение [0], возвращаемое getOrientation(rotationMatrix,value) geaving 0) не совпадает с СЕВЕРОМ от датчика ориентации . Я также подсчитывал данные из разных приложений из playstore, значения датчика ориентации кажутся более близкими к ним.

Более того, много раз мое значение азимута[0] из Rotation_Vector, а затем getOrientation просто взлетало вверх и продолжало колебаться между -180 и 180

P.S «getRotationMatrix (float [] R, float [] I, float [] гравитация, float [] геомагнитный)» также дает тот же результат, что и вектор вращения.

 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 телефона и вектором, указывающим на север, так что это была моя первоначальная реализация. Пожалуйста, предложите.


comment
Согласно значениям документации Android [1] указывает на север. Итак, шаг указывает на север, а не на азимут :-)   -  person Agnius Vasiliauskas    schedule 11.11.2014


Ответы (1)