我正在 android 中创建一个应用程序,我需要在其中检测人是否摔倒了。我知道这个问题已经在其他论坛中被问及关于使用矢量数学的问题,但我没有从中得到准确的结果。
下面是我检测跌倒的代码:
@Override
public void onSensorChanged(SensorEvent arg0) {
// TODO Auto-generated method stub
if (arg0.sensor.getType()==Sensor.TYPE_ACCELEROMETER) {
double gvt=SensorManager.STANDARD_GRAVITY;
float vals[] = arg0.values;
//int sensor=arg0.sensor.getType();
double xx=arg0.values[0];
double yy=arg0.values[1];
double zz=arg0.values[2];
double aaa=Math.round(Math.sqrt(Math.pow(xx, 2)
+Math.pow(yy, 2)
+Math.pow(zz, 2)));
if (aaa<=6.0) {
min=true;
//mintime=System.currentTimeMillis();
}
if (min==true) {
i++;
if(aaa>=13.5) {
max=true;
}
}
if (min==true && max==true) {
Toast.makeText(FallDetectionActivity.this,"FALL DETECTED!!!!!" ,Toast.LENGTH_LONG).show();
i=0;
min=false;
max=false;
}
if (i>4) {
i=0;
min=false;
max=false;
}
}
}
为了解释上面的代码,我使用了向量和并检查该值是否已达到低于或等于 6(坠落时)并突然大于 13.5(着陆时)以确认坠落。
现在有人在论坛上告诉我,如果设备仍然是向量和,则向量和将返回 9.8 的值。下降时它应该接近 0 并且在着陆时应该达到 20 左右。在我的情况下,这似乎没有发生。如果我哪里出错了,有人可以建议吗?
最佳答案
有人为此开发了一个 Android 应用程序。也许你可以从他的网站上得到一些信息:http://ww2.cs.fsu.edu/~sposaro/iFall/ .他还发表了一篇文章,解释了他是如何发现跌倒的。这真的很有趣,你应该看看!
论文链接:http://ww2.cs.fsu.edu/~sposaro/publications/iFall.pdf
恢复时,跌倒检测基于 X-Y-Z 加速度的结果。基于这个值:
- 下落时,下落通常以自由落体阶段开始,使结果大大下降到 1g 以下。
- 在撞击地面时,合成物的振幅有一个峰值,其值高于 3g。
- 之后,如果这个人因为跌倒而不能动弹,结果将保持接近1G。
关于android - 检测人是否跌倒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8804227/