检测设备相对于重力的运动

时间:2017-05-16 11:57:01

标签: android gravity motion-detection

我正在尝试构建一个应用程序,我想检测设备的运动。 基本上我需要检测设备的跌落。 任何人都可以帮助我如何使用加速计关于重力?

1 个答案:

答案 0 :(得分:0)

必须使用高通滤波器。如果我们通过使用高通滤波器滤除像重力这样的缓慢变化的力,那么剩余的力就是快速变化的力,就像在垂直方向上施加到手机上的力一样。

这是加速度分量分解到每个轴的方式:

 values[0] //acceleration on x axis
 values[1] //acceleration on y axis
 values[2] //acceleration on z axis

您需要找到重力运行的方向,然后将其分解为其组成部分。重力的大小总是为9.8,但方向,以及它如何分解成组成部分,将会改变。假设我们可以得到引力的值并将该向量存储在像引力这样的数组中[3]:

gravity[0] //gravity x axis
 gravity[1] //gravity y axis
 gravity[2] //gravity z axis

The total acceleration, T, on the phone is T = g + a. To get just a we would need a = T - g:

 linear_acceleration[0] = event.values[0] - gravity[0];
 linear_acceleration[1] = event.values[1] - gravity[1];
 linear_acceleration[2] = event.values[2] - gravity[2];

注意这是如何逐个元素计算的,因为它是一个向量运算。 在提取所有值之后,我们必须应用高通滤波器并将linear_acceleration [2]与阈值进行比较(也许你可以将它保持在9左右)。