2013-12-16 24 views
11

我目前正在開發iPhone應用程序(在iPhone 5,iOS 7,Xcode 5上),這需要非常準確地確定當前的態度。 CMDeviceMotion的「態度」並不能滿足這些要求,因爲蘋果的傳感器融合算法似乎過分依賴於相當快速(以我的經驗)漂移的陀螺儀。這就是爲什麼我決定讀出裸露的傳感器數據,後來我想在自己的傳感器融合算法中結合它。Apple的iPhone磁力計校準是否正常工作?

當詢問磁力數據的一個有兩種可能性:

  1. 通過CMMagnetometerData在CMMotionManager

  2. 通過CMCalibratedMagneticField在CMDeviceMotion關於蘋果公司說

的CMCalibratedMagneticField返回通過這個屬性給你的總磁性fi在設備附近沒有設備偏差。不像CMMagnetometer類的磁感應強度特性,這些值反映了地球的磁場加上週圍的田地,再減去器件偏置。

原則上(2)正是我想要的。

如果磁力計數據正確校準,有一個非常簡單的測試。爲了簡單起見,可以將自己限制在兩個維度上。當設備位於背面時,組合B_x^2 + B_y^2必須保持不變,與設備指向的方向無關。它必須等於地球磁場的水平分量(假設設備附近沒有其他場)。因此,當執行位於其背面的設備的360度旋轉時,B_x上的測量數據B_y應顯示一個圓圈。詳情請參閱here

現在重點:CMCalibratedMagneticField的數據不會導致一個圓圈!

Plot

有沒有人有這一個解釋?還是有人知道,CMCalibratedMagneticField是如何產生的?當執行設備的「八字形」運動時,磁力計是否按照link from above的標準進行了校準,或者該運動的好處是什麼?

Btw。爲什麼「八字形」運動並沒有圍繞它的三軸翻轉設備,這將允許按照link from above中所述進行校準?

我會很高興澄清這個問題......謝謝!

回答

2

沒有與在IOS 7的磁力計的一個問題,它具有+-7º錯誤。嘗試使用7.1測試版。

編輯

磁力計有一段時間的零漂移,但對於突然改變體位相當不準確的。另一方面,加速度計和陀螺儀可以快速調整以適應突然變化,但作爲慣性傳感器,它們會在一段時間內失去準確性。

所以當CMCalibratedMagneticField試圖彌補您的旋轉運動,它使用來自陀螺儀和加速度計數據。這是當加速度計和陀螺儀的+-7º誤差進入並拋出你的圓偏離軌道。查看這個answer和這個wikipedia article欲瞭解更多信息。

關於八位數字: 兩者都做同樣的事情,他們將您的設備的「北方」在每個方向上取向,以期消除磁場干擾。沿着所有三個軸翻轉你的設備將會更好,但是執行起來比較困難,用戶不容易理解。

希望這會有所幫助。

+0

非常感謝您的回答!有沒有這種信息的參考? – user2980195

+0

我錯了,錯誤在iOS 7.0.3中修復。參考:http://support.apple.com/kb/DL1691 – Pranav

+0

但這隻涉及加速度計而不是磁力計,對不對? – user2980195