2011-11-26 2 views
3

휴대 전화가 360도 회전했는지 감지하는 애플리케이션을 구축 중입니다. 이 회전은 35 초 안에 완료됩니다. 정확하게 어떻게 감지합니까? 필자는 '통합'에 대한 기사와 단기간에 자이로 스코프를 사용하고 자이로 스코프를 보상하기 위해 가속도계를 사용합니다. 이를 달성하는 가장 좋은 방법은 무엇이며, 시작하려면 자이로 스코프에서 회전 값을 얻으려면 어떻게해야합니까?iphone의 센서를 사용하여 회전 감지

나는 inverse'd CMAttitude에 의해 곱해진 RotationMatrix를 정말로 이해하지 못합니다. CMAttitude.yaw는 전화를 사용하지 않아도 다른 가치를 제공합니다. 나는 또한 주전자 예를 보았다. 내 코드는 나 자신을 위해 OpenGL을 사용하지 않기 때문에 RotationMatrix에서 데이터를 처리해야한다는 것을 제외하고는 거의 동일합니다. Hidde

+0

360도 회전을 감지하려면 어느 축을 중심으로합니까? –

+0

모든 축. 전화가 어떻게 배치되었는지는 알려지지 않았습니다. – Hidde

+0

실제 세계에서 축이 아닌 경우 전화와 관련된 축이 있습니까? –

답변

1

핵심 모션 API에 보면 미리

덕분에, 당신의 가장 좋은 방법은 회전 속도를 모니터링하는 것 같다. 구체적으로는이 설명과 함께 rotationRate 속성 선언 CMDeviceMotion 인터페이스 :

CMRotationRate 구조는 세 개의 축 주위를 회전 장치의 속도 지정 데이터를 포함한다. 이 속성 값에는 코어 동작 알고리즘에 의해 바이어스가 제거 된 자이로 스코프 데이터의 측정이 포함됩니다. 다른 손으로 에있는 CMGyroData의 동일 이름 속성은 자이로 스코프에서 원시 데이터를 제공합니다. 구조 유형 은 CMGyroData.h에 선언되어 있습니다.

그런 다음 회전이 주어진에서 발생해야하는 시간을 해결하기 위해 수학의 조금을 할 필요가하려는 CMMotionManager method:

- (void)startDeviceMotionUpdatesUsingReferenceFrame:(CMAttitudeReferenceFrame)referenceFrame toQueue:(NSOperationQueue *)queue withHandler:(CMDeviceMotionHandler)handler 

을 통해 관심을 선언하여 이벤트를 모니터링 할 수 있습니다 속도로 전체 360도 회전을 구성합니다.

+0

감사합니다. 테스트 및 계산을하겠습니다. 너는 나에게 맞는 것을 주었다. – Hidde

+0

그래서 몇 가지 테스트를 해봤지만 Y 축을 중심으로 모든 회전을 추가하면 전화를 전혀 움직이지 않아도이 숫자가 계속 바뀝니다. – Hidde

+0

바이어스 (오프셋)가 회전 속도는 자이로 스코프에 의해 주어진다. 이 바이어스는 시간에 따라 변합니다. iPhone은 정교한 알고리즘 ("센서 융합"이라고 부르지 만 Kalmann 필터라고도 함)을 사용하여 가속도계를 사용하여 이러한 편향을 보완합니다. CMDeviceMotion에서 얻은 자세 데이터는이 센서 융합 알고리즘의 결과이지만 회전 속도는 처리되지 않습니다. –

관련 문제