【问题标题】:CMDeviceMotion userAcceleration is upside down?CMDeviceMotion userAcceleration 是颠倒的?
【发布时间】:2018-01-27 03:58:30
【问题描述】:

我在 CMDeviceMotion 的 userAcceleration 字段中看到了一些意外读数。当我查看来自 CMAccelerometerData 的原始加速度计数据时,我看到如果 iPhone 平放在桌子上,读数是 1G 直线向下(-Z 轴上 1G),如果我放下 iphone(当然是在柔软的表面上)然后加速度读数按预期归零。没关系。当我改用 CMDeviceMotion 类时,当 iPhone 平放在桌子上时,userAcceleration 读数按预期为零。这也很好。但是当我放下 iPhone 并读取 CMDeviceManager userAcceleration 时,userAcceleration 值是 1G 直线上升 (+Z) 而不是预期下降 (-Z)。看起来 userAcceleration 读数实际上与设备实际经历的加速度完全相反。有没有其他人观察到这一点?在尝试对速度和位置进行积分之前,我可以只反转(乘以 -1)所有 userAcceleration 值,还是我误解了 userAcceleration 正在读取的内容?

【问题讨论】:

    标签: ios accelerometer core-motion


    【解决方案1】:

    CMAccelerometerData.accelerationCMDeviceMotion.userAcceleration 之间存在一些概念上的差异

    1. 原始加速度计数据只是测量的所有加速度的总和,即重力和设备当前加速度的组合。
    2. 设备运动数据是所有 3 个传感器(即加速度计、陀螺仪和磁力计)的传感器融合的结果。从而消除了偏差和误差(理论上),并将剩余的加速度数据分离为重力和加速度以方便使用。

    因此,如果您想比较两者,您必须检查 CMAccelerometerData.accelerationCMDeviceMotion.userAcceleration + CMDeviceMotion.gravity 以比较同类。

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

    要考虑的另一件事是您在通过startDeviceMotionUpdatesUsingReferenceFrame 启动 Device Motion 更新时提供的CMAttitudeReferenceFrame。我不确定使用基本版时默认是什么startDeviceMotionUpdates


    您说您想要整合这些值以获得速度和位置。关于这个有几个讨论,最重要的是,我可以说不可能得到合理的结果。见:

    如果您的应用概念迫使您依赖精确结果超过半秒,请尝试改变它。

    【讨论】:

      【解决方案2】:

      原来CMAcceleration不遵循右手法则,x指向左,y指向屏幕底部,在这种情况下,对于典型的右手系统,z轴应该指向上侧,但事实并非如此。 与运动传感器打交道时让我感到不舒服!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-21
        • 1970-01-01
        • 1970-01-01
        • 2021-12-30
        • 2013-02-01
        • 2018-06-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多