哈玛林.是否可以使用Android传感器检测垂直运动(仅向上和向下)?



我几乎阅读了这里关于垂直运动的每一个问题,但我无法得到确切的结论和想法。因为大多数问题都是关于游戏编程的,其中涉及很多噪音、旋转等,比如这个或这个。

我的问题很简单。我只想检测上下运动(真或假,没有测量)。我不在乎纵向或横向模式还是旋转。我只想知道用户是向上还是向下移动手机。例如; 我想检测引体向上运动。我把手机放在口袋里,做引体向上。甚至可能吗?它的准确度如何,我应该专注于哪些传感器?

这实际上比你想象的要困难得多。

手机的陀螺仪传感器为您提供手机相对于手机的运动,而不是世界。 将手机正面朝上,平放在桌子上会给你

  • x = 0.0
  • y = 0.0
  • z = -9.8.

由于传感器的原因,这些值会略有波动。 随着手机的旋转,这些基本(静止)值会发生变化 - 在 45 度时,您会得到

  • x = 6.93
  • y = 0
  • z = 6.93

这样sqrt(x*x + y*y + z*z) = 9.8. 如果要隔离上下运动,则必须停止手机旋转,或者忽略此运动。

如果您停止手机旋转 - 例如,手机必须直立放在口袋中,那么您只需查看x组件,该组件将在静止时读取-9.81并且变化将显示加速度,较小的负值或正值在向上方向,更多的负面在向下方向。

如果您希望忽略其他移动(例如,用户仅将其用于定义的活动),则绝对值就可以了。sqrt(x*x + y*y + z*z)将为您提供静止9.8,对该值的更改是由于设备的加速。 稍后进行一些数学运算(蛮力数值积分),您可以获得速度或行进距离(尽管请注意,这很快就会变得非常不准确......

请注意,有一个旋转矢量传感器 API,可能允许您从陀螺仪读数中删除设备的方向,从而允许您计算现实世界的运动,但是我没有尝试过这个 API,也不知道需要什么额外的硬件(如果有的话)。

最新更新