我在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。
  • 10-08 08:26