使用 Core Motion 准确跟踪用户围绕对象旋转的度数

Accurately track users rotation in degrees around an object using Core Motion

我目前正在尝试准确跟踪用户围绕物体(例如汽车)的运动度数。

用户在汽车周围移动时,他的 iPhone 将处于横向。我想为用户围绕汽车旋转的每一度拍摄一张照片。

我目前正在使用 CoreMotion 来尝试确定 Yaw

let queue = OperationQueue.main
motionManager.deviceMotionUpdateInterval = 1 / 30
motionManager.startDeviceMotionUpdates(using: .xArbitraryZVertical, to: queue) { (motion, error) in
  if let deviceMotion = motion {
    let quat = deviceMotion.attitude.quaternion

    let ysqr = quat.y * quat.y
    let t3 = 2.0 * (quat.w * quat.z + quat.x * quat.y)
    let t4 = 1.0 - 2.0 * (ysqr + quat.z * quat.z)
    let yaw = atan2(t3, t4)

    print(round(self.degrees(yaw)))
  }
}

我注意到当我在对象周围移动时,当设备 PitchRoll 发生变化时 Yaw 会受到影响。

有什么方法可以准确地跟踪Yaw围绕一个物体360度旋转吗?

您可能想要查看的是使用 CoreLocation(特别是 CLLocationManagerstartUpdatingHeading)获取设备的航向。

获取设备的当前航向更加可靠,更新速度非常快。