Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios CMDeviceMotion userAcceleration是否颠倒了?_Ios_Accelerometer_Core Motion - Fatal编程技术网

Ios CMDeviceMotion userAcceleration是否颠倒了?

Ios CMDeviceMotion userAcceleration是否颠倒了?,ios,accelerometer,core-motion,Ios,Accelerometer,Core Motion,我在CMDeviceMotion中看到一些来自userAcceleration字段的意外读数。当我查看来自CMAccelerometerData的原始加速计数据时,我发现如果iPhone平放在桌子上,读数是1G(1G in-Z轴),如果我将iPhone(当然是在软表面上)放下,则加速度计读数会如预期的那样变为零。没关系。当我改用CMDeviceMotion类时,当iPhone平放在桌子上时,userAcceleration的读数是零。同样,这很好。但是,当我放下iPhone并阅读CMDevice

我在CMDeviceMotion中看到一些来自userAcceleration字段的意外读数。当我查看来自CMAccelerometerData的原始加速计数据时,我发现如果iPhone平放在桌子上,读数是1G(1G in-Z轴),如果我将iPhone(当然是在软表面上)放下,则加速度计读数会如预期的那样变为零。没关系。当我改用CMDeviceMotion类时,当iPhone平放在桌子上时,userAcceleration的读数是零。同样,这很好。但是,当我放下iPhone并阅读CMDeviceManager userAcceleration时,userAcceleration的值是1G直接向上(+Z)而不是预期的向下(-Z)。看起来用户加速度读数实际上与设备实际经历的加速度完全相反。还有其他人注意到这一点吗?在我尝试积分速度和位置之前,我可以反转(乘以-1)所有用户加速度值吗?还是我误解了用户加速度的读数?

和之间存在一些概念上的差异

  • 加速计原始数据只是所有测量加速度的总和,即设备重力和电流加速度的组合
  • 设备运动数据是所有3个传感器(即加速计、陀螺仪和磁强计)传感器融合的结果。因此(理论上)消除了偏差和误差,剩余的加速度数据被分离为重力和加速度,以便使用
  • 因此,如果您想比较两者,您必须对照
    CMDeviceMotion.userAcceleration+CMDeviceMotion.gravity
    检查
    CMAccelerometerData.acceleration
    ,以比较同类

    通常,当您需要精确的值和硬件独立性时,CMDeviceMotion在大多数情况下是您的首选

    另一个要考虑的是,当您通过启动设备运动更新时提供。我不确定使用基本版本时的默认设置是什么


    你说你想积分这些值来得到速度和位置。关于这一点有好几次讨论,我可以说根本不可能得到合理的结果。见:


    如果你的应用程序概念迫使你在半秒钟以上依赖精确的结果,试着改变它。

    结果表明,CMAcceleration不遵守右手法则,x是指向左边,y是指向屏幕底部,在这种情况下,对于典型的右手系统,z轴应该指向上方,但不是。 这让我在处理运动传感器时感到不舒服