CMDeviceMotion userAcceleration是颠倒的?
我在CMDeviceMotion的userAcceleration字段中看到了一些意想不到的读数。 当我查看来自CMAccelerometerData的原始加速度计数据时,我发现如果iPhone平放在桌子上,则读数是1G直线下降(1G在-Z轴),如果我放下iPhone(当然在软的表面上),则加速度读数如预期的那样变为零。 这一切都很好。 当我改为使用CMDeviceMotion类时,当iPhone平放在桌面上时,userAcceleration的读数为0。 这再好不过了。 但是,当我放弃iPhone和阅读CMDeviceManager userAcceleration,userAcceleration值是1G直线上升(+ Z)不下来(-Z)预期。 看起来用户加速度读数实际上与设备实际加速的完全相反。 有没有人观察过这个? 在我尝试整合速度和位置之前,是否可以反转(乘以-1)所有userAcceleration值,还是误导了userAcceleration正在读取的内容?
CMAccelerometerData.acceleration和CMDeviceMotion.userAcceleration之间有一些概念上的区别
- 原始加速度计数据只是所有加速度的总和,即设备的重力和当前加速度的组合。
- 设备运动数据是所有3个传感器,即加速计,陀螺仪和磁力计的传感器融合的结果。 因此消除了偏差和误差(理论上),剩余的加速度数据分为重力和加速度,便于使用。
所以,如果你想比较,你必须检查CMAccelerometerData.acceleration
CMDeviceMotion.userAcceleration + CMDeviceMotion.gravity
比较像喜欢。
一般来说,CMDeviceMotion是大多数情况下的首选,当你需要精确的值和硬件独立性。
需要考虑的另一件事是通过startDeviceMotionUpdatesUsingReferenceFrame启动Device Motion更新时提供的CMAttitudeReferenceFrame 。 我不确定什么是使用基本版本startDeviceMotionUpdates时的默认值
你说你想整合这些值来获得速度和位置。 关于这一点有几个讨论,在底线我可以说是不可能得到合理的结果。 看到:
- 在iPhone中使用加速度计寻找距离
- 使用Core Motion获取加速计数据的位移
- 我怎样才能find陀螺仪和加速度传感器的距离?
如果您的应用程序概念迫使您依靠精确的结果超过半秒钟,请尝试更改它。
原来CMA加速不服从右手规则,其中x指向左侧,y指向屏幕底部,这种情况下,典型的右手系统中,z轴应该指向上侧,不。 处理运动传感器让我感到不舒服!
3年后,仍然认为这是一个未解决的问题。 我不认为CMAccelerometerData在-Z轴上读取约1g是“一切正常”,因为根据他们的文档( https://developer.apple.com/library/content/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/ motion_event_basics / motion_event_basics.html )+ Z是从屏幕向外。 当手机放在桌子上时,屏幕朝上,这意味着正在试验桌子的向上的力量。 在09:15看到这个谷歌谈话 。 x和y也是一样的。
陀螺仪的读数与文档中所描述的一样,其中x向右,y向上,z向外。
我的结论是,你必须倒置所有的加速度计轴,你将有像陀螺仪一样的右手坐标系和文档一样。