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