2017-07-19 4 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

Iは以下の式を用いてヨードリフトを補償することができ:

磁力計を使用して初期の基準点(固定された世界のフレーム基準)を作成:

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

あなたはジロを意味しませんか? MotionManagerには、3つの入力、加速度計、ジャイロスコープ、および磁力計が混在するモードがあります。

あなたがお奨めこのため

は、「デバイスの動き」

デバイスの動きにそれを設定します。 :startDeviceMotionUpdates(または: startDeviceMotionUpdates()メソッドを使用して更新を開始し、定期的に にdeviceMotion プロパティを読み込んでCMDeviceMotionオブジェクトにアクセスします。 startDeviceMotionUpdates(using :)メソッド(iOS 5.0の新機能) では、姿勢 の推定に使用する参照フレームを指定できます。

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

ただし、これはバッテリー消費にかなり増加させることを認識する必要があります。

+0

これは私が現時点で行っていることですが、CMMotionManagerを使用してロール、ピッチ、ヨーの更新を取得しています。しかし、ヨウはしばらくしてから漂流し、これはジャイロの一般的な問題であると私は理解しています。私は解決策を探しています。 –

関連する問題