2016-05-12 68 views
0

我试图计算使用加速计传感器的设备掉落的高度,但没有运气。Android:如何使用加速计计算从哪个设备跌落的高度?

我能够检测到设备跌落。

请分享问题的想法或解决方法,如果你们中的任何人尝试相同。

下面是我试过的代码。

“私人无效handleSensorChanged(SensorEvent事件){ 如果(event.sensor.getType()== Sensor.TYPE_ACCELEROMETER){

 double gvt=SensorManager.STANDARD_GRAVITY; 

     //int sensor=event.sensor.getType(); 
     double xx=event.values[0]; 
     double yy=event.values[1]; 
     double zz=event.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(); 
      minXx = zz; 

      Log.d(TAG,"Min: xx, yy, zz = "+xx+", "+yy+", "+zz); 
     } 

     if (min==true) { 
      acc+=aaa; 
      count++; 
      i++; 
      if(aaa>=13.5) { 
      max=true; 
      maxtime = System.currentTimeMillis();    
      maxXx = zz; 
      Log.d(TAG,"Max: xx, yy, zz = "+xx+", "+yy+", "+zz); 
      } 
     } 

     if (min==true && max==true) { 
      double time = (maxtime - mintime); 
      //double distance = (minXx-maxXx)* Math.pow(time,2)/1000; 
      double maxVelocity = (aaa/count)*time; 
      double avgVelocity = maxVelocity/2; 
      double distance = (avgVelocity * time)/1000; 

      String msg = "FALL DETECTED!!!!! Duration = "+time + " milli secs, distance = "+ distance +" cms mtrs"; 
      Toast.makeText(this, msg,Toast.LENGTH_LONG).show(); 
      Log.d(TAG, msg); 
      v.vibrate(75); 
      resetValues(); 
     } 

     if (i>4) { 
      resetValues(); 
     } 
     } 

}' 

在此先感谢。

+0

请提供您已经尝试过的内容,并根据需要概述什么不起作用。 – dharms

+0

@dharms,我已经添加了代码,请帮助我,如果你知道。 – Pampapathi

回答

1

加速计给你速度的变化。这可能包括在秋季结束时突然停止。有技术可以使用这些数据来计算遍历。下面是一些阅读材料:

https://en.wikipedia.org/wiki/Dead_reckoning https://en.wikipedia.org/wiki/Inertial_navigation_system

但是消费级设备设计用于基本手势的解释不会是准确的,你就会有假阳性和假阴性,因为这将是很难将这些动作与设备可能发生的其他事情区分开来。所以管理你的期望。

+0

我需要同意你的看法,如果设备开始移动,尝试了很多算法之后,我加入了使用加速度计来启动服务,我发现即使放在桌子上,某些加速度计也会产生大量误报。所以你需要一个算法来“更正”这些值,不记得这个算法的名字......使用从0到1的一个alpha值(如果有人可以帮忙) – AxelH