我们可以从CMAcceleration
检索加速度数据。
它提供了3个值,分别是x
、y
和z
。
我一直在阅读这方面的内容,我似乎对这些值有不同的解释。
有人说它们是相对于重力的加速度值。
其他人说不是,它们是绕轴转动时相对于轴的加速度值。
这里哪个版本是正确的?例如,x
代表的是 pitch
的加速度还是代表从左到右的加速度?
此外,假设我们想要获得偏航的加速度(多快),当回调不断向我们提供值时,我们如何才能得出该值?我们需要设置另一个计时器来进行计算吗?
编辑(回应@Kay):
是的,基本上就是这样 - 我只是想确保x、y、z
以及分别的俯仰、滚动和偏航
并由框架以不同的方式表示。
1.)
这些在某些情况下有何关联?例如,除了获取值之外,是否还需要使用 x, y, z
来获取 yaw
的附加信息?
2.)
你能解释一下吗:
(deviceMotion.rotationRate.z - previousRotationRateZ) / (currentTime - previousTime)
我们是否需要使用计时器来获取时间值?以及如何利用上述产生角加速度?我认为角加速度需要更复杂的数学。
3.)
在现实世界中,我们几乎只能依赖于俯仰、横滚和偏航的单个值
,因为我们不可能仅进行旋转> 在一个轴上(我们的手不是那么“稳定”。尤其是在喝了 5 杯咖啡之后......)
假设我想获取偏航
的值(是的,在z轴上旋转),但当时为偏航
> 旋转我想根据pitch
(x 轴)检查它。
是的,这里结合了 2 个 Action (想象一下手机围绕 z 旋转,并有轻微的朝向和远离用户脸部的运动)。
那么:是否有数学模型(或者来自您个人经验的数学模型)可以通过计算不同轴的值得出一个值? (示例案例:如果用户在 z 轴上旋转,同时也在 x 轴上移动 - 很好。如果不是,则不是一个好的运动我们需要)。示例案例就在我的脑海中。
我希望上面包含偏航
和俯仰
的示例案例对您有意义。如果没有,请随意引用更好的用例进行解释。
4.)
最后一次。我们怎样才能以时间作为引用系来检查自上次以来的运动速度有多快?我们是否应该提供一个容差(例如:“自上次移动以来不到 1/50 秒 - 做某事。如果不是,则什么也不做。”)?我们在何时何地设置计时器?
最佳答案
CMAccelerometerData的类引用说:
X 轴加速度(重力)
加速度是在局部坐标中测量的,如figure 4-1 in the Event Handling Guide所示。它始终是一种平移,不能与以角度测量的径向或圆周运动相混淆。
无论如何,即使角速度恒定,每次旋转也与方向的变化相关,因此也会报告加速度。 Circular Motion
获取偏航加速度(多快)是什么意思?
基于Handling Rotation Rate Data中的图4-2偏航旋转围绕 Z 轴发生。这意味着 X、Y 平面上存在连续的线性加速度。如果你对角加速度感兴趣,你需要采取CMDeviceMotion.rotationRate并将其除以时间增量,例如:
(deviceMotion.rotationRate.z - previousRotationRateZ) / (currentTime - previousTime)
更新:
这取决于您想要做什么以及您有兴趣跟踪哪些 Action 。我希望您在进行翻译时不想获得 x、y、z 中的确切设备位置,因为这是不可能的。当然,可以很好地确定方向,即相对于 g 的旋转。
- 我认为在 >99% 的情况下,您在处理角度时不需要加速度的附加信息。
- 不要使用您自己的计时器。 CMDeviceMotion继承自CMLogItem从而提供传感器数据的完美匹配时间戳或传感器融合算法结果的插值时间。
我假设您不需要角加速度。 - 即使没有咖啡,你也是完全正确的;-)如果你看看 this video 中显示的 Action 确实有你描述的情况。数学和算法是大量研发的成果,我必须遵守保密协议(protocol)。
但大多数用例都包含 CMAttitude 中提供的属性。 。由于万向节锁定,计算时请谨慎使用欧拉角 - 这完全取决于您要做什么。
关于core-motion - iOS : CoreMotion Acceleration Values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21952965/