가속도계와 자이로 스코프를 함께 사용하여 장치 회전을 감지 할 수 있습니다 ("중력"은 자이로 스코프를 사용하여 데이터를 부드럽고 반응이 빠른 곳으로 융합 한 것입니다).
내 자신의 테스트에서 게임 회전 벡터 센서는 자장 데이터 (자이로 바이어스 제거를 통해 간접적으로 발생할 수 있음)의 영향을 받기 때문에 다른 솔루션을 찾아야합니다. 주위를 돌아 다니며 회전의 방해를받은 자기장이 나옵니다 .- 자이로 출력을 통합하여 Game Rotation Vector 데이터를 비교하는 비디오를 만들었습니다. here).
자기장 데이터없이 이동하면 항상 드리프트가 발생합니다 (수평면에서 회전 오류가 느리게 생성됩니다). 필요한 작업의 주요 부분은 시간 경과에 따라 자이로 스코프 데이터를 통합하는 것입니다 (회전 추적을 위해 자이로 스코프 데이터를 사용하는 Google 자체 코드 참조) here.
수직 드리프트를 방지하려면 가속도계를 사용하여 중력의 상대적인 위치를 추적하고이를 자이로 스코프 데이터와 결합해야합니다. 이렇게하는 것이 일반적으로 권장되는 방법은 Kalman Filter을 사용하는 것입니다.하지만 애플리케이션에 따라 불필요하게 복잡 할 수 있으므로 저역 통과 필터링 된 데이터로 설명 할 수있는 상보 형 필터를 사용하는 것이 좋습니다. , 잡음이 많지만 안정적인 신호 (가속도계)와 응답 성이 뛰어나고 표류하는 신호 (자이로 스코프)에 고역 통과가 가능합니다. 칼만과 보완 필터에 대한 훌륭한 자료는 here입니다.
이것은 정확하게 좋은 대답은 아니지만 TYPE_MAGNETIC 센서 값을 하드 코딩하고 TYPE_ACCELEROMETER와 함께 SensorManager.getRotationMatrix()를 사용할 수 있습니다. – Maurycy
@Maurycy 이는 또한 수행하려는 작업을 수행하는 방법이기도합니다. 어떻게 든 ** TYPE_GRAVITY ** 센서 만 사용하여 작업 할 수있었습니다. –
내 의견에 더 나은 솔루션은 실제로 그냥 정체 매트릭스를 사용하는 것입니다 ... 기본적으로 1로 3 자석 값을 하드 코드하고 SensorManager.getRotationMatrix() – Maurycy