2017-07-19 283 views
0

我目前使用CMMotionManager姿態來獲得滾動,俯仰和偏航。然而,運行幾分鐘後,偏航正在漂移並變得不準確。使用磁力計和加速度計來計算準確的偏航

我看了一個方法來計算偏航使用加速度計和磁力計的組合,將保持偏航準確補償的恆定漂移,但是,我還沒有找到一個工作公式。

這是我用於獲取動態更新的代碼的一小部分。

motionManager.deviceMotionUpdateInterval = 0.1 
motionManager.showsDeviceMovementDisplay = true 
motionManager.startDeviceMotionUpdates(using: .xMagneticNorthZVertical, to: OperationQueue.current!) 
    { deviceManager, error in 

    if let deviceManager = deviceManager { 
     let roll = deviceManager?.attitude.roll 
     let pitch deviceManager?.attitude.pitch 
     let yaw = deviceManager?.attitude.yaw // Get drifted over time 
... 

任何想法?

UPDATE

我可以通過使用下面的公式補償偏航漂移:

創建初始基準點(固定世界幀參考),使用磁力計:

m_w = (m_x,m_y,m_z) 

取當前magnetomer使用磁力計的點(也是固定的世界座標參考):

n_w = (n_x,n_y,n_z) 

轉換投影讀數的角度,可以計算

a = atan2(m_z,m_x) 
b = atan2(n_z,n_x) 

偏航漂移如下

y_d = (a-b) * 180/PI 

現在扣除從當前的加速度的偏航引起的。

WALLA!

回答

0

你是不是指giro? MotionManager具有混合3個輸入,加速度計,陀螺儀和磁力計的模式。

對於這個你得將它設置爲「設備的議案」

設備的議案。調用startDeviceMotionUpdates(使用:)或 startDeviceMotionUpdates()方法開始更新,並定期通過讀取deviceMotion 屬性來訪問CMDeviceMotion對象。 startDeviceMotionUpdates(使用:)方法(iOS 5.0中的新增功能) 可讓您指定用於態度 估計值的參考框架。

https://developer.apple.com/documentation/coremotion/cmmotionmanager

但是,你必須意識到,這增加了電池消耗不少。

+0

這是我現在所做的,正如我所說的,我使用CMMotionManager來獲取滾動,俯仰和偏航的更新。然而,在一段時間後,偏航會漂移,我明白這是陀螺儀常見的問題。我正在尋找解決方案。 –