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