CMDeviceMotion userAcceleration是颠倒?(CMDeviceMotion

2019-09-02 22:39发布

我看到在CMDeviceMotion的userAcceleration领域的一些意想不到的读数。 当我看从CMAccelerometerData原始加速度计的数据,我看到,如果iPhone是平放在桌上的读数为1G直下(1G在-Z轴),并且如果我把iphone(上当然柔软的表面),然后在acceleromtere读数变为零符合市场预期。 这是所有罚款。 当我改用CMDeviceMotion班,userAcceleration读数为零,当iPhone是平放在桌子预期。 再次,这是好的。 但是,当我把iPhone和阅读CMDeviceManager userAcceleration,该userAcceleration值是1G预期直线上升(+ Z)不倒(Z)。 看来,userAcceleration读数实际上是什么加速设备是真正经历正好相反。 有没有其他人观察到这一点? 可我只是反转(乘以-1)的所有userAcceleration值之前我试着速度和位置的整合,还是我misunerstanding什么userAcceleration是阅读?

Answer 1:

之间存在一些概念上的差异CMAccelerometerData.acceleration和CMDeviceMotion.userAcceleration

  1. 原始加速度计数据是即重力和该设备的当前加速度的组合测量的所有的加速度的只是总和。
  2. 设备的运动数据是所有3个传感器即加速度计,陀螺仪和磁强计的传感器融合的结果。 因此偏压和错误被消除(在理论上)和剩余的加速度数据被分离成重力和加速度,以方便地使用。

所以,如果你想比较双方你必须检查CMAccelerometerData.accelerationCMDeviceMotion.userAcceleration + CMDeviceMotion.gravity比较类似。

一般来说CMDeviceMotion是当你想要精确值和硬件独立性大多数情况下,你的第一选择。

另一个要考虑的是CMAttitudeReferenceFrame您通过启动装置运动更新时提供startDeviceMotionUpdatesUsingReferenceFrame 。 我不知道什么是使用基本版本时默认startDeviceMotionUpdates


你说,你要集成的值来获得速度和位置。 有关于这个多次讨论,并在底线,我可以说这是不可能得到合理的结果。 看到:

  • 在发现使用iPhone的加速度计的距离
  • 入门排量从核心运动加速度数据
  • 我怎样才能找到一个陀螺仪和加速度计的行驶距离?

如果您的应用程序的概念迫使你依靠精确的结果超过半秒钟,试图改变它。



Answer 2:

原来,CMAcceleration不服从右手定则,其中,x是指向左边,y为点到屏幕底部,在这种情况下,具有典型的右手系统,Z轴应该指向的上侧,但其不。 这让我不舒服的运动传感器打交道时!



Answer 3:

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。

我的结论是,你必须反转所有加速度计轴,你也会有同样的右手坐标系中像陀螺,喜欢的文档。



Answer 4:

作为一个堆栈溢出新手,我显然没有足够的声誉上的一些其他职位的评论......但我已经达到了相同的结论为cduguet。 基于所通告的iPhone坐标系(上https://developer.apple.com/documentation/coremotion/getting_processed_device_motion_data/understanding_reference_frames_and_device_attitude#2875084 )时,态度数据是与所通告的坐标轴一致。 即,在手机的任何轴线的正向旋转(在“右手法则”的意义上)寄存器适当正陀螺速度增加。 情理之中的事情,什么我期望的那样。

但是,当赋予的任何轴的正方向上的线性加速度,所述CMmanager记录数据为负值 。 我已经做了所有的轴,本试验数十次,并不断寻找同样的违反直觉的结果。

我可以改变所有的线性加速度值,使运动的方程与手机的坐标系一致的迹象,但我一直在试图理解为什么苹果会选择这种符号约定。 它只是没有道理给我。



文章来源: CMDeviceMotion userAcceleration is upside down?