Android - Umgang mit Sturz-Erkennung-Algorithmus
Ich möchte in der Lage sein, die über ein relativ einfacher Sturz-Erkennung-Algorithmus, der in meiner Anwendung. In dem moment, in onSensorChanged(), bin ich immer der absolute Wert der aktuellen x -, x -, z-Werte und Subtraktion SensorManager.GRAVITY_EARTH (9,8 m/s) aus. Der sich ergebende Wert größer als ein Schwellenwert 10 mal hintereinander festlegen ein flag zu sagen, ein Sturz erkannt wurde, durch den Beschleunigungssensor, der Schwellenwert wird über 8m/s.
Auch ich bin den Vergleich der Orientierung des Telefons, sobald die Schwelle überschritten worden und die orienation ist es, wenn der Schwellenwert nicht mehr übergeben werden, dies setzt einen flag zu sagen, das Orientierungs-sensor hat erkannt, dass eine Herbst.
Wenn beide flags gesetzt sind, wird ein Ereignis Auftritt, überprüfen Sie, user ok, etc etc. Mein problem ist, mit dem Schwellenwert, wenn das Telefon gerade gehalten bis der absolute Wert der Beschleunigungsmesser ist etwa 9,8 m/s, aber wenn ich es halten sich immer noch in einem Winkel, kann es über 15m/s. Dies verursacht andere Ereignisse auslösen, die Sturz-Erkennung, und ob ich erhöhen Sie den Schwellenwert zu vermeiden, ist es nicht entdecken fällt.
Kann jemand geben Sie mir einige Ratschläge hier mit, was für Werte ich nehmen sollte oder wie auch Verbesserung meiner Methode? Vielen Dank.
InformationsquelleAutor der Frage bobby123 | 2011-01-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst möchte ich Sie daran erinnern, dass Sie können nicht fügen Sie einfach die x -, y -, z-Werte zusammen, wie Sie sind, haben Sie, um Vektor-Mathematik. Dies ist, warum Sie erhalten Werte von mehr als 15 m/s. Solange das Telefon nicht bewegen, werden die Vektor-Summe sollte immer über 9.8 m/s. Sie berechnen es mit SQRT(x*x + y*y + z*z). Wenn Sie weitere Informationen benötigen, können Sie Lesen über Vektorrechnung, vielleicht http://en.wikipedia.org/wiki/Euclidean_vector#Length ist ein guter start für ihn.
Ich auch vorschlagen, einen anderen Algorithmus: Im freien fall, alle drei x -, y -, z-Werte der Beschleunigungsmesser sollte in der Nähe von null. (Zumindest das ist, was ich gelernt, in Physik-Klassen vor langer Zeit in der Schule.) So können Sie vielleicht eine Formel verwenden, wie wenn die vektorielle Summe der x -, y -, z <= 3 m/s, als Sie erkennt einen freien fall. Und wenn die Vektor-Summe, erhöht um einen Wert, der über 20 m/s, als Sie erkennen die Landung.
Diese Schwellenwerte nur eine wilde Vermutung. Vielleicht haben Sie einfach das aufzeichnen der x -, y -, z-Werte in einem test-Anwendung, und dann bewegen Sie das Telefon, und dann analysieren offline, wie sich die Werte (und deren normal-und vector-sum -) Verhalten zu bekommen ein Gefühl dafür, welche Schwellenwerte sinnvoll sind.
InformationsquelleAutor der Antwort MarkusSchaber
Habe ich konkret veröffentlichte ein Papier zu diesem Thema. Bitte fühlen Sie sich frei heraus zu überprüfen "ifall" @ ww2.cs.fsu.edu/~sposaro
Wir im Grunde die Wurzel der Summe der Quadrate und suchen für 3 Dinge
1. Untere Schwelle brach. Ie fallinging
2. Obere Schwelle brach. Ie auf den Boden
3. Flatline rund 1g, dh longlie, die Verlegung auf dem Boden für einen längeren Zeitraum
InformationsquelleAutor der Antwort Frank Sposaro
Ich vergessen diesen thread zu aktualisieren, aber iFall ist jetzt verfügbar auf Android Market.
Schauen Sie sich auch ww2.cs.fsu.edu/~sposaro/iFall weitere Informationen
InformationsquelleAutor der Antwort Frank Sposaro
Seine möglich, mit dem Beschleunigungs-sensor.
Schreiben diese im sensor geändert listener..
InformationsquelleAutor der Antwort Varun Chandran