2012-03-26 4 views
0

나는 CMDeviceMotion, 특히 startDeviceMotionUpdatesUsingReferenceFrame을 실험 해왔다. 자기 필드 값이 나에게 맞지 않는 것 같습니다.CMDeviceMotion의 MagneticField 속성이 잘못 되었습니까?

CMDeviceMotion *manager = [[CMDeviceMotion alloc] init]; 
manager.deviceMotionUpdateInterval = 0.1; 
[manager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryCorrectedZVertical toQueue:queue withHandler:^(CMDeviceMotion *motion, NSError *error) { 
    CMMagneticField fld = motion.magneticField.field; 
    NSLog(@"%5.1f %5.1f %5.1f", fld.x, fld.y, fld.z); 
    [self handleDeviceMotion:manager.deviceMotion]; 
}];  

이 약 50의 크기의 자기장 벡터를 나타내지 만, 거의 비중 정렬 : 할 경우, 예를 들어

. 즉, 장치가 테이블에 평평하게 놓여있을 때 x 및 y는 0에 가깝고 z는 장치를 회전하는 방법과 관계없이 -50에 가깝습니다.

지구 자기장의 크기는 50입니다 (Wikipedia은 25에서 65 micro Tesla 사이 여야 함). 그러나 벡터의 방향은 모두 잘못되었습니다.

  • 그것은 내 위치 만 (스톡홀름, 스웨덴)에서 독특한 무언가가, 또는
  • 자기장 속성은 땅의 필드없이 자기장을 나머지 표시, 또는
  • 이 버그
  • 입니다 : 내가 있는지 궁금 해서요

magneticField 속성과 비슷한 경험이 있습니까?

+0

적어도 질문 [docs] (http://developer.apple.com/library/ios/DOCUMENTATION/CoreMotion/Reference/CMDeviceMotion_Class/Reference/Reference.html#//apple_ref/occ/) instp/CMDeviceMotion/magneticField)는 친구입니다. "... 장치 바이어스가없는 주변의 총 자기장을 제공합니다.이 값은 지구의 자기장과 주변 필드에서 장치 바이어스를 뺀 값을 반영합니다." – rickster

+0

사실이긴하지만 실제 동작은 문서에 따른 것 같지 않습니다 ... – fishinear

+1

귀하의 질문은 나 자신이 자력계를 가지고 놀아 왔다고 고무했습니다 ...이 코드를 사용해 보았습니다. 장치 관련 필드 방향에 관심이 있습니다). 그러나 내가 보는 것은 모두 <0,0,0>입니다. 나는 당신의 발췌 부분에없는 것을 놓치고 있습니까? – rickster

답변

2

OK, 신비가 해결되었습니다.

이제 참조 프레임 CMAttitudeReferenceFrameXTrueNorthZVertical을 사용했습니다. 이전에 사용한 ... XArbirtraryCorrectedZVertical과 비슷한 결과를 제공합니다. 그런 다음 magneticField 벡터가 주어진 태도를 사용하여 referenceFrame으로 다시 회전하여 중력과 관련하여 어떻게 배치되는지 계산했습니다.

자기장은 진북의 동쪽 5도를 안정적으로 가리키고 있지만 지상으로 약 73 도의 각을 가지고 있습니다. 그리고 this map에 따르면 스웨덴 내 위치에 대한 기대에 따라 정확히입니다.

+0

예. 그들은 학교에서 그 것을 가르쳐주지 않습니다 :-) 지구 자기장 벡터의 대부분은 직접적으로지면을 가리 킵니다. 적어도 그것은 내가 살고있는 곳 (영국에서)입니다. – Benjohn

관련 문제