我几乎在这里读到关于垂直运动的每一个问题,但我无法得到一个确切的结论和想法。因为大多数问题都与游戏编程有关,其中涉及很多噪音,旋转等,如one或此one。
我的问题很简单。我只想检测上下运动(真或假,无测量)。我不关心肖像或风景模式或旋转。我只想知道用户是否正在向上或向下移动电话。例如; 我想检测拉起运动。我把手机放在口袋里然后拉起来。它甚至可能吗?它有多精确,我应该关注哪些传感器?
答案 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并且不知道需要什么额外的硬件(如果有的话)。