나는 getQuaternionFromVector()을 사용하여 안드로이드의 Sensor.TYPE_ROTATION_VECTOR 융합 센서로부터 쿼터니온을 얻습니다. 내 쿼터니언을 사용하여 내 Rajawali 앱의 카메라를 제어하고 싶습니다.센서 쿼터니온과 3d 카메라 쿼터니온 간의 변환 방법?
- 노스 :
값은 (X, Y, Z W) I는 (프리 전화 똑바로보고)이다 센서로부터 얻을 수 (0.5, 0.5, -0.5, 0.5)
- 동 : (0.71, 0, -0.71, 0)
- 남 : (0.5, -0.5, -0.5, -0.5)
- 웨스트 : (0, 0.71, 0, 0.71)
이 값을 다음 올바른 값으로 변환해야합니다.
- 북한 (1.0, 0, 0, 0)
- 동 : (0.71, 0, 0.71, 0)
- 남 : (0, 0, 1, 0)
- 웨스트 : (-0.71, 0, 0.71, 0)
몇 가지 시행 착오를 통해 해결책을 찾았지만 여전히 방법이 있습니다. I 먼저 Y 축에 대하여 90 °, 및 X 축에 대해 -90 ℃에서 회전 경우
Quaternion a = new Quaternion(Vector3.Y, 90);
a.multiply(q);
Quaternion b = new Quaternion(Vector3.X, -90);
b.multiply(a);
I 얻는 값이다 :
- 노스 (1, 0, 0, 0)
- 동 : (0.71, -0.71, 0, 0)
- 남 : (0, -1, 0, 0)
- 웨스트 : (0.71, 0.71, 0, 0)
결과는 북쪽이 정확하고, 동쪽은 위로, 서쪽은 아래로, 남쪽은 거꾸로되어 있습니다. 베어링이 피치와 섞여 있음을 알았습니다 (저는 장치의 피치를 변경하고 카메라의 방향이 바뀌 었으며 리 서버).
예상 쿼터니온 값과 일치하도록 센서 쿼터니언을 수정하는 방법에 대한 제안 사항이 있습니까? 센서 베어링이 카메라 베어링이 아닌 피치를 변경하도록 어떻게 변경할 수 있습니까?
미리 감사드립니다.