Wenn man sich die Dokumentation anschauen, werden Sie sehen, dass SensorEvent ein Array zurückgibt, die den Vektor aller Kräfte repräsentiert. Dies ist, wie die Komponenten der Beschleunigung lassen sich in jeder Achse:
values[0] //acceleration on x axis
values[1] //acceleration on y axis
values[2] //acceleration on z axis
Sie finden müssen, welche Richtung der Schwerkraft wird in dann zersetzen, dass in seine Bestandteile arbeitet. Die Größe der Schwerkraft wird immer 9,8 betragen, aber die Richtung und somit die Art und Weise, wie sie in die Komponenten zerfällt, wird sich ändern. Unter der Annahme, dass wir den Wert der Schwerkraft erhalten könnten und speichern, daß der Vektor in einem Array wie gravity[3]
:
gravity[0] //gravity x axis
gravity[1] //gravity y axis
gravity[2] //gravity z axis
Die Gesamtbeschleunigung, T
, am Telefon T = g + a
ist.Um a
nur würden wir a = T - g
brauchen:
linear_acceleration[0] = event.values[0] - gravity[0];
linear_acceleration[1] = event.values[1] - gravity[1];
linear_acceleration[2] = event.values[2] - gravity[2];
Beachten Sie, wie das alles Element für Element berechnet, weil es eine Vektoroperation ist.
Der schwierige Teil ist, gravity
zu finden, weil es nur einen Beschleunigungsmesser im Telefon gibt, der die Schwerkraft UND die anderen Kräfte gleichzeitig misst. Wir haben 2 verschiedene Kräfte, die wir von dem einen Sensor finden wollen. Wenn wir die Kräfte nur zu einem isolierten Zeitpunkt betrachten könnten, wären wir nicht in der Lage, die Informationen zu extrahieren. Allerdings erhalten wir über einen bestimmten Zeitraum hinweg Proben und wenn wir uns ansehen, wie sich die Kräfte im Laufe der Zeit verändern, können wir die Informationen extrahieren.
Dies bedeutet, dass wir die Ergebnisse aus dieser Quelle filtern müssen, basierend darauf, wie schnell sich diese Kräfte ändern. Die Größe der Beschleunigung aufgrund der Schwerkraft ändert sich nicht schnell, weil sie sich überhaupt nicht ändert. Die Schwerkraft ist eine konstante Kraft. Andere Kräfte werden sich jedoch im Laufe der Zeit ändern. Wenn wir die sich langsam ändernden Kräfte wie die Schwerkraft mit Hilfe eines Hochpassfilters ausfiltern, sind die verbleibenden Kräfte die sich schnell ändernden wie die Kräfte, die auf das Telefon einwirken. Aus diesem Grund wird der Hochpassfilter verwendet.
Das ist, was ich fragen. Warum können wir nicht direkt 9,8 vom Acccelerometer-Wert subtrahieren, den wir bekommen ... Es ist nichts als die tatsächliche Beschleunigung des Telefonsensors ... Ist das nicht? Wenn Sie in Android-Dokumentation sehen, verwendet sie .8 als Alpha, um es zu berechnen. Warum Alpha verwenden? – Jeet