iOS:CoreMotion加速值

时间:2014-02-22 10:26:56

标签: core-motion

我们可以从CMAcceleration检索加速度数据。

它提供3个值,即xyz

我一直在阅读这篇文章,似乎对这些价值观有不同的解释。

有人说它们是重力的加速度值。

其他人说它们不是,它们是轴在轴上转动时的加速度值。

这是哪个版本正确?例如,x表示pitch的加速率或从左到右表示加速率吗?

另外,如果我们想要获得yaw的加速率(多快),那么当回调给我们不断提供值时,我们怎么能够得到该值?我们需要为计算设置另一个计时器吗?


修改 (以响应@Kay):

是的,基本上就是这样 - 我只想确保x, y, zpitch, roll and yaw分别用框架表示。

1。)

这些在某些情况下如何相关?是否需要除了获取值之外,例如yaw需要使用x, y, z的其他信息?

2。)

你能解释一下这个:

(deviceMotion.rotationRate.z - previousRotationRateZ) / (currentTime - previousTime)

我们是否需要使用计时器作为时间值?如何利用上述内容生成角加速度?我认为角加速需要更复杂的数学。

3。)

在现实世界的情况下,我们几乎不能只依赖pitch, roll and yaw中的单个值,因为我们无法在一个轴上进行 旋转(我们的手)不是那么“稳定”。特别是在喝了5杯咖啡之后......)

假设我想得到yaw的值(是的, z轴上的旋转),但当yaw旋转时,我想查看它针对pitch x轴)。

是的,这里有两个动作组合在一起(想象一下手机围绕 z 旋转,轻微的移动朝向和离开用户的脸部)。

所以: 是否有数学模型(或根据您个人经验的模型)从计算不同轴的值中获取值? ( 示例案例 :如果用户在z轴上旋转并且同时也在进行x轴运动 - 很好。如果不是,那么运动不好我们需要)。样品盒就在我头顶。

我希望上面的yawpitch样本案例对您有意义。如果没有,请随意引用更好的用例进行解释。

4。)

最后一次。我们如何才能将时间作为参考框架来检查自上次运动以来运动的速度?我们应该提供一个公差(例如:“自上次运动以来不到1/50秒 - 做一些事情。如果没有,什么也不做。”)?我们在何时何地设置计时器?

1 个答案:

答案 0 :(得分:1)

CMAccelerometerData的课程参考说:
G轴的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)

<强>更新
这取决于您想要做什么以及您有兴趣跟踪哪些动作。我希望你不想在翻译时获得x,y,z中的确切设备位置,因为这是不可能的。当然,可以非常好地确定方向,即相对于g的旋转。

  1. 我认为在> 99%的情况下,使用角度时,您不需要加速度的其他信息。
  2. 不要使用自己的计时器。 CMDeviceMotion继承自CMLogItem,因此提供了传感器数据的完美匹配时间戳,或者相应地为传感器融合算法的结果提供了插值时间。
    我假设你不需要角加速度。
  3. 即使没有咖啡,你也完全正确;-)如果你看一下this video中显示的动作,你所描述的情况正是如此。数学和算法是一些重型R&amp; D的结果,我与NDA绑定 但大多数用例都包含在CMAttitude中可用的属性中。由于Gimbal Lock而在进行计算时要小心欧拉角
  4. 这完全取决于你的目标。