안드로이드 센서를 이용하다 보면 센서 값들에 정확도에 문제가 있다.


가속도계는 노이즈가 심하고, 자이로는 바이어스가 있다.


이러한 단점을 보완하기 위하여 센서를 합성해야 한다.


센서 합성은 수학적 지식이 있어야 한다.


보통은 그러한 지식이 없기 때문에 안드로이드에서는 내장함수로 계산을 도와준다.


Rotation Vector는 하나의 방향벡터와 방향벡터의 회전정도를 준다.


[출처 : https://en.wikipedia.org/wiki/Axis%E2%80%93angle_representation]


위 그림처럼 e는 방향을 나타내고, θ는 벡터가 시계 방향으로 회전한 정도를 나타낸다.


Android Developer : https://developer.android.com/reference/android/hardware/SensorEvent.html#values


안드로이드에서는 센서와 같게 사용하면 된다.

mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR), SensorManager.SENSOR_DELAY_UI);

value에서 출력되는 값은 다음과 같다.


  • values[0]: x*sin(θ/2)
  • values[1]: y*sin(θ/2)
  • values[2]: z*sin(θ/2)
  • values[3]: cos(θ/2)
  • values[4]: estimated heading Accuracy (in radians) (-1 if unavailable)

기존에 사용한 Orientation Sensor는 자이로를 사용하지 않아서 노이즈가 심했지만, Rotation Vector는 세개의 센서를 이용하여 각 센서의 단점을 보완했다



+ Recent posts