使用 Core Motion 准确跟踪用户围绕对象旋转的度数
Posted
技术标签:
【中文标题】使用 Core Motion 准确跟踪用户围绕对象旋转的度数【英文标题】:Accurately track users rotation in degrees around an object using Core Motion 【发布时间】:2017-05-15 09:20:29 【问题描述】:我目前正在尝试准确地跟踪用户在物体(例如汽车)周围的运动。
当用户在汽车周围移动时,他的 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)))
我注意到,当我在对象周围移动时,Yaw
会在设备Pitch
或Roll
发生变化时受到影响。
无论如何我可以准确地跟踪Yaw
围绕一个对象旋转 360 度吗?
【问题讨论】:
attitude
具有 pitch
、roll
和 yaw
的内置属性。你为什么要自己计算这些?
我试图使用Quaternion
,因为我注意到当roll
或pitch
发生变化时我的yaw
会发生变化。我只需要准确地跟踪一个物体周围的 360 度旋转。
在这种情况下,您可能想要的不是pitch
、roll
或yaw
,而是设备的“指南针”方向。它会像您希望的那样变化,并且不会受到其他方向移动的影响。您还应该能够从设备运动中获得它。
@Fogmeister 感谢您的反馈。我将不得不阅读这一点,因为我不知道如何使用 CoreMotion
获得“指南针”方向。
@Fogmeister 感谢您为我指明了正确的方向。这似乎是我想要实现的解决方案。我将通读CLLocationManager
和startUpdatingHeading
的文档。
【参考方案1】:
您可能想要查看的是使用CoreLocation
(特别是CLLocationManager
和startUpdatingHeading
)来获取设备的标题。
在获取设备当前航向和更新速度方面更加可靠。
【讨论】:
以上是关于使用 Core Motion 准确跟踪用户围绕对象旋转的度数的主要内容,如果未能解决你的问题,请参考以下文章