Android - 如何处理跌倒检测算法

时间:2011-01-31 07:23:26

标签: android orientation detection accelerometer sensor

我希望能够在我的应用程序中使用相当简单的跌倒检测算法。在onSensorChanged()中,我得到当前x,x,z值的绝对值,并从中减去SensorManager.GRAVITY_EARTH(9.8 m / s)。结果值必须连续10次大于阈值以设置表示加速度计已检测到下降的标志,阈值约为8m / s。

此外,我正在比较阈值已经过去时手机的方向以及当阈值不再通过时它的方向,这设置了另一个标志,表示方向传感器检测到跌倒。

当设置两个标志时,发生一个事件以检查用户是否正确等等。我的问题在于阈值,当手机直接保持时,加速度计的绝对值约为9.8 m / s,但是当我保持它的角度可以超过15米/秒。这导致其他事件触发跌倒检测,如果我增加阈值以避免这种情况,则不会检测跌倒 任何人都可以在这里给我一些建议,我应该使用哪些可能的值或如何改进我的方法?非常感谢。

4 个答案:

答案 0 :(得分:15)

首先,我想提醒您,您不能只是将x,y,z值一起添加,您必须使用矢量数学。这就是为什么你得到超过15米/秒的价值。只要手机没有移动,矢量总和应该总是大约9.8米/秒。您使用SQRT(x * x + y * y + z * z)计算它。如果您需要更多信息,可以阅读有关矢量数学的内容,也许http://en.wikipedia.org/wiki/Euclidean_vector#Length是一个良好的开端。

我还建议使用另一种算法:在自由落体中,加速度计的x,y,z值都应接近零。 (至少,这是我很久以前在学校学过的物理课程。)所以也许你可以使用一个公式,如果x,y,z <= 3 m / s的向量和比检测到自由落体。如果矢量总和然后升高到超过20米/秒的值,则比检测到着陆。

这些阈值只是一个疯狂的猜测。也许您只需在测试应用程序中记录x,y,z值,然后在手机中移动,然后离线分析值(及其法线和矢量和)的行为方式,以了解哪些阈值是合理的。< / p>

答案 1 :(得分:6)

我已经在这个问题上发表了一篇论文。请随时查看“ifall”@ ww2.cs.fsu.edu/~sposaro

我们基本上取平方根并寻找3件事 1.降低门槛。即堕落 2.上限打破了。即击中地面 3.约1g的扁平线,即longlie,长时间铺设在地面上

答案 2 :(得分:4)

我忘了更新此帖子,但iFall现已在Android电子市场上发布。 另请查看ww2.cs.fsu.edu/~sposaro/iFall以获取更多信息

答案 3 :(得分:0)

可以使用加速计传感器。

将此写入传感器更改的监听器..

include(locate_template('your-template-part.php'));