首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测此人是否跌倒

检测此人是否跌倒
EN

Stack Overflow用户
提问于 2012-01-10 21:45:06
回答 3查看 8.5K关注 0票数 6

我正在android中创建一个应用程序,我需要检测这个人是否摔倒了。我知道这个问题已经在其他论坛中被问到并回答为使用向量数学,但我没有从中得到准确的结果。

下面是我用来检测坠落的代码:

代码语言:javascript
复制
@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左右。在我的情况下,这种情况似乎不会发生。如果我哪里出了问题,有人能给我提个建议吗?

EN

回答 3

Stack Overflow用户

发布于 2013-05-14 02:52:07

有个人为此开发了一款android应用程序。也许你可以从他的网站上获得一些信息:http://ww2.cs.fsu.edu/~sposaro/iFall/。他还写了一篇文章,解释了他是如何检测到坠落的。这真的很有趣,你应该去看看!

论文链接:http://ww2.cs.fsu.edu/~sposaro/publications/iFall.pdf

继续,跌倒检测基于X-Y-Z加速度的结果。基于此值:

  1. 当下落时,下落一般以自由落体期开始,使得落差明显低于1g。
  2. 对地面的冲击,产生的振幅有一个峰值,数值高于3g。
  3. 之后,如果人由于跌倒而不能移动,结果将保持接近1G。
票数 7
EN

Stack Overflow用户

发布于 2012-01-10 23:12:40

如果person / phone掉下来,会发生以下情况:

  • 绝对加速度向量值变为0(当然有一些噪声)
  • 着陆时绝对向量值将出现合理的峰值(直到加速度计提供的最大值)

当手机不动时,模数地球引力的向量指向上方。

你的代码基本上是正确的,但我会使用一些平均值,因为手机中使用的加速度计价格便宜,噪音大,而且缺乏精确度

票数 1
EN

Stack Overflow用户

发布于 2017-01-12 20:59:48

在你的信号中加上平均意味着:-移动平均。这取决于你的窗口大小。例如。假设我有一个包含以下数字的向量: 1, 2 ,3,4,5,6。我的窗口大小是2。然后移动平均值是从向量中取出每两个数字,并将它们平均为2。所以你可以取1+2/2,然后将1移到下一个2。2+3/2,等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8804227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档