【发布时间】:2017-05-16 11:57:01
【问题描述】:
我正在尝试构建一个我想要检测设备运动的应用程序。 基本上我需要检测设备的跌落。 任何人都可以帮助我如何使用与重力相关的加速度计来做到这一点?
【问题讨论】:
标签: android gravity motion-detection
我正在尝试构建一个我想要检测设备运动的应用程序。 基本上我需要检测设备的跌落。 任何人都可以帮助我如何使用与重力相关的加速度计来做到这一点?
【问题讨论】:
标签: android gravity motion-detection
必须使用高通滤波器。如果我们使用高通滤波器过滤掉缓慢变化的力,如重力,那么剩余的力就是快速变化的力,如垂直方向施加在手机上的力。
这就是加速度的分量如何分解成每个轴:
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 左右)。
【讨论】: