2016-05-12 4 views
0

Ich habe versucht, Höhe zu berechnen, von der Gerät mit Beschleunigungssensor fällt, aber kein Glück.Android: Wie berechnet man die Höhe, von der Gerät mit Beschleunigungssensor herunterfällt?

konnte ich das Gerät fallen zu erkennen.

Bitte teilen Gedanken oder Workaround für die Frage, wenn einer von Ihnen das gleiche versucht.

Unten ist Code, den ich versuchte.

‚private void handleSensorChanged (SensorEvent event) { if (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(); 
     } 
     } 

}' 

Vielen Dank im Voraus.

+0

Bitte geben Sie an, was Sie bereits versucht haben, und skizzieren Sie, was nicht wie gewünscht funktioniert. – dharms

+0

@dharms, ich habe den Code hinzugefügt, bitte helfen Sie mir, wenn Sie wissen. – Pampapathi

Antwort

1

Der Beschleunigungssensor gibt Ihnen Änderungen der Geschwindigkeit. Dies kann den plötzlichen Stopp am Ende des Falls beinhalten. Es gibt Techniken, um solche Daten zu verwenden, um eine Traversierung herauszufinden. Hier einige Lesestoff:

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

jedoch ein Consumer-Gerät für die Interpretation der grundlegenden Gesten ausgelegt ist, nicht genau sein würde, und Sie werden falsch positive und falsch-negative Ergebnisse haben, weil es schwer sein wird, um solche Bewegungen von anderen Dingen zu unterscheiden, die mit dem Gerät passieren können. Verwalte deine Erwartungen.

+0

Ich muss mit Ihnen zustimmen, ich füge hinzu, den Beschleunigungsmesser zu verwenden, um einen Dienst zu starten, wenn das Gerät sich bewegt, nachdem ich viele Algorithmen ausprobiert habe, finde ich heraus, dass sogar auf einem Schreibtisch ruhen einige Beschleunigungsmesser eine Menge falsch positiv. Also brauchst du einen Algo, um die Werte zu "korrigieren", kann mich nicht an den Namen dieses Algo erinnern ... benutze einen Alpha-Wert von 0 bis 1. (wenn jemand helfen kann) – AxelH

Verwandte Themen