是否可以使用Android传感器检测垂直移动(仅上下移动)?

时间:2017-05-25 12:35:38

标签: android xamarin.android android-sensors

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

我的问题很简单。我只想检测上下运动(真或假,无测量)。我不关心肖像或风景模式或旋转。我只想知道用户是否正在向上或向下移动电话。例如; 我想检测拉起运动。我把手机放在口袋里然后拉起来。它甚至可能吗?它有多精确,我应该关注哪些传感器?

1 个答案:

答案 0 :(得分:1)

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

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

  • 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休息,对该值的更改将归功于设备的加速。稍后会进行一些数学运算(蛮力数值积分),你可以有速度或距离(尽管注意这很快就会变得非常不准确......)

请注意,有一个Rotation Vector Sensor API可能允许您从陀螺仪读数中移除设备的方向,从而可以计算真实世界的移动,但我还没有尝试过此API并且不知道需要什么额外的硬件(如果有的话)。