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

标签 android orientation detection accelerometer sensors

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

此外,我还在比较手机在超过阈值时的方向和不再超过阈值时的方向,这会设置另一个标志,表明方向传感器检测到跌倒。

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

最佳答案

首先,我想提醒您,您不能直接将 x、y、z 值直接相加,您必须使用矢量数学。这就是您获得超过 15 m/s 的值的原因。只要手机不动,矢量和就应该始终约为 9.8 m/s。您使用 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 m/s 的值,那么您就会检测到着陆。

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

关于Android - 如何处理跌倒检测算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4848490/

相关文章:

android - Activity 方向继承自父级

android - Android Twitter异步任务在横向崩溃

swift - 自动布局 [Snapkit] 更改旋转约束

java - 如何在 Java 中加快 PC/SC 读卡器上的卡缺失检测?

encryption - 检测加密的简单方法

c++ - 使用If语句检测整数溢出

android - 在 Android Honeycomb 中实现 Actionbar

java - Android 中的音频缓冲

android - 如何在 Android 的改造响应中添加多个 header

java - 如何将 TIFF 图像文件转换为 Android 位图