Swift:CoreMotion设备没有移动但是记录加速度

时间:2017-10-04 15:54:15

标签: core-motion acceleration

这是我的CM代码:

func checkMotion(_ myMotionManager:CMMotionManager) -> Bool {

        //check to see if core motion is available
        var isCoreMotionAvailable = myMotionManager.isAccelerometerAvailable
        isCoreMotionAvailable = myMotionManager.isGyroAvailable
        isCoreMotionAvailable = myMotionManager.isMagnetometerAvailable
        isCoreMotionAvailable = myMotionManager.isDeviceMotionAvailable

        if isCoreMotionAvailable {
            myMotionManager.deviceMotionUpdateInterval = 0.25
            myMotionManager.startDeviceMotionUpdates(to: OperationQueue.current!, withHandler: checkMotionUpdate)

        }

        return false
    }

并检查数据:

func checkMotionUpdate(data: CMDeviceMotion?, error:Error?) {

        if error != nil {
            print(error!.localizedDescription)
        } else {

            if let motionData = data {

                //check to see if we have a base point and if not store one
                if !bHasBasePoint {
                    basePoint = motionData
                    bHasBasePoint = true
                    print("Basepoint:\(basePoint!)")
                }

                print("Acceleration X: \(motionData.userAcceleration.x)")
                print("Acceleration Y: \(motionData.userAcceleration.y)")
                print("Acceleration Z: \(motionData.userAcceleration.z)")
                print()

            }
        }
    }

和一些结果:

基点:

Basepoint:QuaternionX 0.011783 QuaternionY -0.461725 QuaternionZ 0.000044 QuaternionW 0.886945 UserAccelX 0.006458 UserAccelY 0.000324 UserAccelZ 0.002740 RotationRateX 0.000997 RotationRateY -0.001316 RotationRateZ -0.001370 MagneticFieldX 0.000000 MagneticFieldY 0.000000 MagneticFieldZ 0.000000 MagneticFieldAccuracy -1 Heading -1.000000 @ 73807.821537

一些加速检查:

Acceleration X: 0.00645828247070312
Acceleration Y: 0.0003238245844841
Acceleration Z: 0.00274038314819336

Acceleration X: 0.00522691011428833
Acceleration Y: 0.000595645979046822
Acceleration Z: 0.00370562076568604

Acceleration X: 0.00506830215454102
Acceleration Y: 0.000180358067154884
Acceleration Z: 0.0017169713973999

Acceleration X: 0.00555837154388428
Acceleration Y: -0.00128581002354622
Acceleration Z: 0.00320953130722046

Acceleration X: 0.00509798526763916
Acceleration Y: -4.2034313082695e-05
Acceleration Z: 0.00197714567184448

所以我在CM编码(第2天)非常新,当我现在看到iPhone正在摇篮中时,为什么我看到x,y和z的加速度变化时我感到有点困惑?这是预期的行为,是否存在一系列加速,我应该忽略它作为假阳性?

由于

1 个答案:

答案 0 :(得分:1)

所以,也许你现在找到了关于它的其他信息。但是因为还没有回答:

通常,在设备静止时进行一些动作录制是正常的。这有两个原因:一个是传感器本身产生一些误差噪声,另一个原因是传感器在一个轴上的值总是为1(或者在轴之间更真实地分开),朝向引力我们生活的星球。现在,这个引力部分被一个过滤器分开了,但这也引入了一些错误。

来自传感器本身的错误应该随机产生负面和正面误差,移动平均线应该消除那些因素的影响(你的Y轴似乎没有被重力和线性加速度的分裂感染,我猜它几乎完全取消了某些值)。所以你应该通过平均一些过去的值来获得更好的价值。

从读数中你得到的通常是2个轴,值更高一些。我猜它们会出现在万有引力分裂中,你的手机还在,但也许有点倾斜,因为在gradle中。

现在虽然0.00something不低,但它也不是最高的错误。你可以通过查找一些像Wikipedia Magnitude这样的参考文献来感受这些值是什么意思,或者可以通过这一方面来了解地震,这些参考文献显示了人类可以感受到的加速度;)Wikipedia Ground Acceleration。< / p>

我不知道苹果用于分裂引力的是什么,但我记得它至少在不久前不是最好的过滤器,但对于UI的东西来说足够快和有用。但这可能会随着ARKit而改变。因此,如果您需要更准确的分割,可能会根据原始引力实施另一个滤波器。

我希望这有点帮助。