使用Android Accelerometer实现3D场景中的移动

时间:2016-10-30 17:50:46

标签: java android accelerometer

我目前正在尝试使用Androids陀螺仪和加速计实施头部跟踪和移动系统。对于这项任务,我认为这将是更难的部分:我设法使用Androids陀螺仪让头部跟踪工作。因此,我可以使用计算的旋转矩阵在场景中自由查看。我想要实现的第二部分是使用Androids Accelerometer来改变场景中的位置。我的目标是实现像HTC Vive那样的运动追踪(或者首先,跟踪玩家是否移动,例如在一个轴上)。

所以我实现了高通和低通滤波器以消除重力影响,如下所述:See paragraph "Using the Accelerometer"。 此外,在执行此滤波器之后,我还包括第二步,以消除传感器的剩余抖动。它就像:if(sensorData <= EPSILON) sensorData = 0;

通过这些准备工作,如果我的手机放在桌子上并向正X轴进行微小移动,我会观察到这样的情况:

X-Acc: 0.46105415
X-Acc: 2.031945
X-Acc: 1.5450834
X-Acc: 1.1939144
X-Acc: -0.18298185
X-Acc: -2.796235
X-Acc: -4.160668
X-Acc: -2.663677
X-Acc: 1.1761014
X-Acc: 0.8469965
X-Acc: 0.46683544
X-Acc: 0.4156207

因此,最初,加速度增加,之后手机因摩擦而经历负加速度。我正在努力的一点是,为什么事后会增加?事实上数据告诉我,手机向右移动,停止,向左移动一点,停止,再向右移动?

我对这个话题的每一个暗示感到高兴。有更好的方法吗?我是否以错误的方式解释传感器数据?我想我必须使用加速度计来了解运动,gps不够灵敏。

1 个答案:

答案 0 :(得分:0)

为了向右移动,您的手机需要:

- 被推(x轴上的力:2)

- 移动一段时间(x轴上的力:0)

-be停止(x轴上的力:-2)

加速度是速度的变化,而不是速度本身: - )

这个话题比你想象的要难。