2016-08-03 4 views
0

나는 좌우 대칭 동작을 사용하는 앱에서 작업 해왔다. CMQQuaternion 값을 통해 Using quaternion instead of roll, pitch and yaw to track device motion 통해 "롤"얻을 CMDeviceMotion 데이터를 사용하여 작업하고 있지만 출력이 때로는 완벽하게 작동하지 않는 다른 하나의 동작 이상한 비트가 있습니다.가로 방향의 CMDeviceMotion

앱이 가로 방향 (두 가지 방법 모두)으로 잠겨 있지만 세로 방향으로 고정 된 앱을 시작하면 롤 코드가 pi/2 수정 자와 완벽하게 작동한다는 것을 알게되었습니다. 내가 가로로 열린 장치로 앱을 열면 수정 자없이 피치에서 작동합니다.

문제는 내가 사용할 알 수있는 방법이 없다는 것입니다. 참조 프레임을 감지하거나 재설정 할 수있는 방법이 있습니까?

업데이트 : 내가 가로 방향으로 시작하는 경우가 :(그냥 무작위 축을 선택하는 것 같다 나는이 다시 짐벌 잠금 일 가정하지만, 원래의 질문이 계속 적용, 거짓말을

- 어떻게 할 읽고없이 downvote 할 필요성을 느낄 수없는 사람들을 위해 (A NSNotification에서 오는)

일부 토큰 코드 :

업데이트 2 나는 가로 방향으로 장치를 시작할 때이 일관성을 얻는다.

CMDeviceMotion *data = [[note userInfo] valueForKey:@"data"]; 
CMQuaternion quat = data.attitude.quaternion; 
CGFloat roll = atan2(2*(quat.y*quat.w - quat.x*quat.z), 1 - 2*quat.y*quat.y - 2*quat.z*quat.z); 

CGFloat pitch = atan2(2*(quat.x*quat.w + quat.y*quat.z), 1 - 2*quat.x*quat.x - 2*quat.z*quat.z); 
CGFloat yaw = 2*(quat.x*quat.y + quat.w*quat.z); 


NSLog(@" - - "); 
NSLog(@"raw roll: %f",roll); 
NSLog(@"raw pitch: %f",pitch); 
NSLog(@"raw yaw: %f",yaw); 

NSLog(@"q.x: %f",quat.x); 
NSLog(@"q.y: %f",quat.y); 
NSLog(@"q.z: %f",quat.z); 
NSLog(@"q.w: %f",quat.w); 

AppDelegate에서 실행 된 startDeviceMotionUpdatesToQueue입니다.

그러나 이것은 문제가되기 때문에 장치가 시작시 세로 방향이지만 가로 방향이 아닌 경우 안정됩니다. 기기 데이터로 수행 할 작업은 완전히 별개의 문제입니다.

이 만족스러운 답변이없는 유사한 문제 (또는 문제의 코드 : |)는이 CMDeviceMotion yaw values unstable when iPhone is vertical

+0

예상대로 작동하지 않는 코드가 있으면 _show_ 코드를 참조하십시오. 귀하의 질문은 가장 막연한 일반 상황에서만 이루어집니다. 당신이하고있는 일이나 심지어 그 문제가 무엇인지 아는 사람? – matt

+0

코드는 문제가있는 곳이 아닙니다. 내가 말한대로 CMQuaternions를 사용하여 계산을했는데 장치 출력이 다르고 발사 방향에 따라 불안정합니다 - 어떻게 내 코드와 관련이 있습니까? – Martin

+0

"내 코드와 어떤 관련이 있습니까?" "장치 출력"이 무엇인지 아는 유일한 방법은 코드를 통해서입니다. – matt

답변

0

내 롤 코드는 "롤 코드가"작동하지 않는 완벽

작동 아주. "롤 코드"가 없어야합니다. 짐발 잠금을 얻을 수있는 상황에서는 오일러 각도를 전혀 사용하지 마십시오. roll과 같은 오일러 각도로 "축소"할 수 없습니다. 대신 쿼터니언을 사용하거나 rotationMatrix에 머물러보십시오. 쿼터니언으로 시작하여 으로 시작하여 문제를 해결할 수 없습니다.을 오일러 각으로 변환하십시오. 그게 바로 당신이하려는 일입니다. 이것이 가능하다고 생각하면 짐벌 잠금 장치가 무엇인지 이해하지 못했을 것입니다 (또는 아마도 atan이 어떻게 작동하는지).

+0

계산에 쿼터니언을 사용하고 있습니다 그 이유 때문에 롤. 모든 숫자를 추적하면 경치 상태에서 시작하면 옆으로 기울어지기에 반응하는 다른 세트를 얻습니다. 그러나 초상화로 시작하면 일관된 일련의 동작을 얻습니다. – Martin

관련 문제