如何使用CMDeviceMotion正确设置初始参考系

时间:2018-07-26 17:14:32

标签: swift xcode motion-detection

我目前正在从事一个项目,在该项目中,一旦按下按钮,我便会收集设备姿态(方向)的大小,并随时间进行绘制。我想将其设置为将初始姿态设置为按下按钮时设备所处的姿态,以便所有进行中的值均相对于该零点。

我一直在使用本网站作为指南: https://nshipster.com/cmdevicemotion/ 最终的教程是我所要寻找的,因为执行“ multiplyByInverseOf”的初始态度应该可以满足我的要求。

这是我的结果的快照(从3开始,因为它是3秒钟的倒计时):

time    attitude Magnitude
3       0
2.99    0.673
2.98    0.673
2.97    0.673
2.96    0.67
2.95    0.669
2.94    0.668

我正在使用的代码:

self.motion.startDeviceMotionUpdates(to: OperationQueue.current!) { (motion, error) in

                //START Code here runs every 'updateFrequency'

                if let data = self.motion.deviceMotion {

                    //Store initial attitude for reference
                    if self.isFirst == true {
                        self.initialAttitude = data.attitude
                        self.isFirst = false
                    }

                    //attitude of phone impacted by user
                    data.attitude.multiply(byInverseOf: self.initialAttitude!)
                    let attitudeMagnitude = self.magnitudeFromAttitude(attitude: data.attitude)

initialAttitude和isFirst都是全局的; isFirst仅用于访问循环的第一次迭代(以检索初始姿态)。

可以看出,第一个数据点已正确零参考,但是值超出此范围(并保持稳定)。如何重构代码以防止这种跳转?

非常感谢!

0 个答案:

没有答案