检测智能手机在桌子上的水平和垂直移动

时间:2014-02-18 19:21:26

标签: android accelerometer android-sensors

我正在尝试编写一款小型安卓游戏,手机放在桌面上 在屏幕上有一个球,用户通过移动手机来控制其移动 在整个游戏过程中,用户不会从桌面上取下手机 在开始时,球将放置在屏幕的中间:
initial state
从用户那里推电话:
Pushing the phone from the user
enter image description here

应将球移向智能手机屏幕的顶部:
the ball move toward the top of the smartphone screen

从球的当前位置,将手机移回用户,并向右移动:
enter image description here
enter image description here
将相应地移动球:
enter image description here

我仔细阅读了Android Motion Sensors Guide,但我甚至没有意识到我应该使用Sensor \ Sensors。 我很想得到任何指示。

2 个答案:

答案 0 :(得分:3)

首先,TYPE_LINEAR_ACCELERATION,TYPE_ROTATION_VECTOR,TYPE_GRAVITY不是物理传感器,而是由传感器融合制成。

其次来自Android 4+这些融合传感器使用设备陀螺仪,因此如果移动设备没有陀螺仪,它们将不会工作。

因此,如果您想为所有手机制作通用应用程序,只使用加速度计(TYPE_ACCELEROMETER)。

现在针对您的情况,因为用户不会从桌面上取下手机,如果您需要,您可以轻松地从加速度计中减去重力分量。见http://developer.android.com/reference/android/hardware/SensorEvent.html 在Sensor.TYPE_ACCELEROMETER部分下。 (代码也是如此)。

现在您可以看到How can I find distance traveled with a gyroscope and accelerometer?找到线性位移&第一个答案表明他们没有使用陀螺仪。 (或者你可以谷歌找到加速度计读数的位移/线速度)

希望这一切都会给你很多想法。

答案 1 :(得分:1)

really difficult使用智能手机具有的传感器类型进行此类线性位置感应。加速度是位置相对于时间的二阶导数。所以从理论上讲,你可以使用加速度计数据,在时间上两次积分来实现绝对位置。在实践中,噪声会使计算不准确。

另一方面,如果你真的在谈论将相机面朝下放在桌子上,也许你可以想出一些聪明的方法来使用OpenCV's optical flow features来检测使用相机的动作,就像光学一样老鼠。我不知道你会如何点亮表面(闪光灯可能会烧坏电池)但是可能会解决问题。