2012-03-26 61 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接近零,z接近-50,與我如何旋轉設備無關。

這50個地球磁場的大小是正確的(根據Wikipedia應該在25到65微特斯拉之間),但是矢量的方向似乎都是錯誤的。我想知道是否:

  • 這是什麼奇怪我的位置只(斯德哥爾摩,瑞典),或
  • 的磁感應強度屬性顯示剩餘磁場沒有地球磁場,或
  • 這是錯誤

您是否有與磁場屬性相似的經歷?

+0

至少部分您的問題,[文檔](http://developer.apple.com/library/ios/DOCUMENTATION/CoreMotion/Reference/CMDeviceMotion_Class/Reference/Reference.html#//apple_ref/occ/ instp/CMDeviceMotion/magneticField)是你的朋友:「...給你設備附近的總磁場,沒有設備偏差......這些值反映了地球的磁場加周圍場,減去設備偏差。」 – rickster 2012-03-26 16:31:22

+0

是的,但真實的行爲似乎不是根據文檔... – fishinear 2012-03-26 16:36:07

+1

你的問題啓發我玩磁力計一些我自己...我試過這個代碼(不使用你的答案參考框架,因爲我對設備相關的領域方向感興趣),但我看到的只有<0,0,0>。我錯過了那些不在你節選內容的東西嗎? – rickster 2012-03-30 21:00:05

回答

2

好的,神祕感解決了。

我現在使用了一個參考座標系CMAttitudeReferenceFrameXTrueNorthZVertical,它給出了與之前使用的... XArbirtraryCorrectedZVertical類似的結果。然後,我通過使用給定的姿態將其旋轉回參考框架來計算磁場矢量相對於重力的位置。

事實證明,磁場相當穩定地指向真北方以東5度,但與地面成約73度的角度。根據我在瑞典的位置,根據this map,這就是正好是

+0

是的。他們並沒有在學校教給你:-)地球上的大多數磁場矢量直接指向地面 - 至少,它的確位於我住的地方(在英國)。 – Benjohn 2016-01-14 16:26:44