Berechnen Sie die vertikale Entfernung mithilfe der Beschleunigung

Ich habe folgendes Szenario: Ein iPhone ist mit einer vertikalen Schiene verbunden (seine Bewegung ist auf die Y-Achse beschränkt). Durch mechanische Mittel wird das Telefon nach oben gedrückt und kann dann wieder zur Ruhe kommen. Der Abstand variiert (zwischen 6" und 24"). Die für die vollständige Fahrt erforderliche Gesamtzeit beträgt ungefähr 1 - 2 Sekunden. Das Ziel ist es, die Entfernung zu schätzen, die das Gerät zurücklegt.

Ich habe mir beides durchgelesen:

Berechnung der Entfernung aus gemessener Beschleunigung vs. Zeit

Abrufen der Position von einem Beschleunigungsmesser auf einem Android-Telefon

(obwohl ich zugeben muss, dass ich mich seit Jahren nicht mehr direkt mit diesen Themen auseinandersetzen musste)

Derzeit sammle ich Beschleunigungsdaten (entlang der Y-Achse) und verwende Folgendes, um das Integral von Beschleunigung und Geschwindigkeit abzuschätzen (über Excel):

1  Time [A]  Acceleration [B]   Velocity [C]                Distance [D]
2  0         a(z)               0                           0
3  1         a(z)               =C2+(A3-A2)*(B2+B3)/2       =D2+(A3-A2)*(C2+C3)/2
4  2         a(z)               =C3+(A4-A3)*(B3+B4)/2       =D3+(A4-A3)*(C3+C4)/2
5  3         a(z)               =C4+(A5-A4)*(B4+B5)/2       =D4+(A5-A4)*(C4+C5)/2
6  4         a(z)               =C5+(A6-A5)*(B5+B6)/2       =D5+(A6-A5)*(C5+C6)/2
7  5         a(z)               =C6+(A7-A6)*(B6+B7)/2       =D6+(A7-A6)*(C6+C7)/2
8  6         a(z)               =C7+(A8-A7)*(B7+B8)/2       =D7+(A8-A7)*(C7+C8)/2
9  7         a(z)               =C8+(A9-A8)*(B8+B9)/2       =D8+(A9-A8)*(C8+C9)/2
10 8         a(z)               =C9+(A10-A9)*(B9+B10)/2     =D9+(A10-A9)*(C9+C10)/2
11 9         a(z)               =C10+(A11-A10)*(B10+B11)/2  =D10+(A11-A100)*(C10+C11)/2
12 10        a(z)               =C11+(A12-A11)*(B11+B12)/2  =D11+(A12-A11)*(C11+C12)/2
   ...       ...                ...                         ...

Hier ist ein Beispiel meiner Daten: test_data_1.csv

Wenn die Einheiten der Beschleunigung in G (9,8 m/s^2) gemessen werden, was sind die resultierenden Einheiten für Geschwindigkeit und Entfernung?

So sieht ein Diagramm meiner Daten aus - es ergibt für mich wirklich keinen Sinn (was nicht verwunderlich ist, da ich in diesen Bereichen nicht viel Erfahrung habe). Auch hier besteht das Ziel darin, eine Entfernungsschätzung zu erhalten (sie muss nicht perfekt sein).

Irgendwelche Hinweise/Erklärungen wären sehr willkommen.

Wenn Sie Zeitintervalle eingeben S e C Ö N D S dann sind die Integrale M e T e R / S e C Ö N D Und M e T e R .
Verwenden Sie CMAccelerometerData#accelerationoder CMDeviceMotion#userAccelerationum den Beschleunigungswert zu erhalten? Denn ersteres ist die Eigenbeschleunigung , eine Vektorsumme aus G und der bekannten dv/dtBeschleunigung.
@LeonidShevtsov, den ich verwende CMAccelerometerData#acceleration- ist es das, was Sie vorschlagen?
@RobertJoseph Nein, Sie sollten startDeviceMotionUpdates, und verwenden CMDeviceMotion#userAcceleration- siehe Übersicht auf dieser Seite . Grundsätzlich filtert die API die Schwerkraft heraus und stellt dv/dtfür Sie bereit.

Antworten (3)

Der Beschleunigungsmesser misst das Negativ der Schwerkraft plus jede Aufwärtsbeschleunigung, siehe ANMERKUNG 1

A C C = ( G + X ¨ )

und integrieren möchten X ¨ Geschwindigkeit zu bekommen v = X ˙ und Stellung X . So sollten Ihre Ausdrücke sein

v ( T ) = 0 T ( A C C + G ) D T X ( T ) = 0 T 0 T ( A C C + G ) D T D T

Sie wissen auch, dass die Endposition gleich der Anfangsposition sein sollte und die Endgeschwindigkeit im Ruhezustand sein sollte. Dazu müssen Sie die Integrationsergebnisse optimieren, um das gewünschte Ergebnis zu erhalten. Dies kann begründet werden, da Sie diskrete Beschleunigungswerte haben. Hier kalibrieren Sie das Modell mit den Messdaten.

Hier sind also die Schritte, die Sie unternehmen müssen

  1. Finden Sie die Abtastfrequenz N = # S A M P l e S S e C Ö N D
  2. Angenommen, die Anfangsposition ist Null
  3. Angenommen, die Anfangsgeschwindigkeit ist Null
  4. Finden Sie von den ersten Sekunden an das Lokale G Wert, während sich das Telefon nicht bewegt
  5. Beispiel Beschleunigungswerte A C C und berechnen Sie die Zeiten für jede Abtastung unter Verwendung der Abtasthäufigkeit und der Abtastanzahl.
  6. Finden Sie den Beginn des Ereignisses, indem Sie wann überprüfen A C C beginnt die Abweichung von G . Stellen Sie die Zeit auf den Beginn des Ereignisses gleich null ein
  7. Integrieren A C C G über die Zeit ab Nullzeit und notieren Sie die Endgeschwindigkeit v 1 und Zeit T 1 schließlich.
  8. Integrieren Sie nun die Geschwindigkeiten, um die Position zu erhalten, und notieren Sie sich die endgültige Position X 1 zum Zeitpunkt T 1 schließlich.
  9. Jetzt müssen die Beschleunigungswerte mit der linearen Funktion über die Zeit angepasst werden, um am Ende den gewünschten Effekt des Telefonierens zu erhalten. Dies geschieht mit diesem Stück analytischer Magie, siehe ANMERKUNG 2
    v ( T ) = 0 T ( A C C + G ) + ( 2 v 1 T 1 6 X 1 T 1 2 ) + T ( 12 X 1 T 1 3 6 v 1 T 1 2 ) D T X ( T ) = 0 T 0 T ( A C C + G ) + ( 2 v 1 T 1 6 X 1 T 1 2 ) + T ( 12 X 1 T 1 3 6 v 1 T 1 2 ) D T D T
  10. Sie können jetzt die Spitzengeschwindigkeit und die Spitzenhöhe finden.

ANMERKUNG 1: Um die Gleichung des Beschleunigungsmessers zu erhalten, müssen Sie ein Freikörperdiagramm auf dem Beschleunigungsmesser selbst erstellen, da er am Telefon befestigt ist und der Bewegung des Telefons folgt. Die Verbindungskraft F verwendeten piezoelektrischen Materialien derart abgetastet wird F M A C C G = M A C C X ¨ . Die gemeldete Beschleunigung ist kalibriert

A C C = F M A C C = G X ¨
so dass eine nach oben gerichtete Reaktionskraft eine nach unten gerichtete Beschleunigung anzeigt (die sogenannte D'Alembert-Regel). Beachten Sie, dass zunächst wann A C C = G Das Ergebnis ist X ¨ = ( G ) G = 0 .

ANMERKUNG 2: Sie können das überprüfen

0 T 1 ( 2 v 1 T 1 6 X 1 T 1 2 ) + T ( 12 X 1 T 1 3 6 v 1 T 1 2 ) D T = v 1 0 T 1 0 T ( 2 v 1 T 1 6 X 1 T 1 2 ) + T ( 12 X 1 T 1 3 6 v 1 T 1 2 ) D T D T = X 1

Tatsächlich d²x/dt²ist die Trennung so nützlich, dass es eine iPhone-API gibt, die die Schritte 1 bis 6 für Sie erledigt: siehe CMDeviceMotion#userAcceleration

Wie Ross sagte, müssen Sie versuchen, den insgesamt konstanten Teil Ihrer Beschleunigungsdaten zu entfernen. Die meisten Beschleuniger melden ständig die Schwerkraft. Selbst wenn Ihr Telefon still auf einem Schreibtisch läge, würde es eine Beschleunigung von -9,8 m/s^2 "nach unten" melden, jedoch nach unten ausgerichtet mit den Achsen Ihres Telefons.

Wenn Sie sich Ihre Daten ein wenig ansehen, ist die Beschleunigung für das erste Drittel Ihres Intervalls weitgehend konstant um -0,977. Ich gehe davon aus, dass sich Ihr Messgerät für diesen Teil der Daten nicht wirklich bewegt hat, also kann ich es als Basis nehmen und es entfernen. Wenn ich das entferne und dann die trapezförmige Integration durchführe, erhalten wir so etwas wie:

Integrierte Positionen

Sieht das so aus, wie Sie es erwartet haben?

Außerdem haben Sie in Ihrer Beschreibung der trapezförmigen Integration Fehler gemacht. In beiden Fällen, wenn wir integrieren A zu bekommen v und wenn wir integrieren v zu bekommen X , möchten wir diese Integration im Laufe der Zeit durchführen. Also in deiner Kolumne Dstatt so etwas wie D3=D2+(B3-B2)*(C2+C3)/2es sein sollteD3=D2+(A3-A2)*(C2+C3)/2

Vielen Dank @alemi! Deine Grafik ist genau das was ich suche. Ich kann mein Entfernungsdiagramm anscheinend nicht wie Ihres aussehen lassen (ich verwende die Daten, mit denen ich in meiner Frage verknüpft bin). Gibt es eine Möglichkeit, mir die Daten zu senden, mit denen Sie es gezeichnet haben? FYI: Ich habe meine trapezförmigen Integrationsgleichungen korrigiert, wie Sie vorgeschlagen haben.
Die Skala wird durch die Einheiten festgelegt, in denen die Zeit gemessen wird. Ich kannte Ihre Abtastrate nicht, also habe ich sie einfach skaliert, bis das Diagramm gut aussah, aber wenn Sie die Geschwindigkeit in m / s und x in Metern wollen, müssen Sie Ihre Zeitspalte in Sekunden erstellen und Ihre Beschleunigungsspalte mit 9,8 multiplizieren.
@RobertJoseph Ich fürchte, ich habe es nicht mehr.
@RobertJoseph Wenn Sie in den Physik-Chatroom kommen , könnten wir es ausdiskutieren. Keine Entschädigung erforderlich.
Sollte die rote Linie (Position) nach dem Ereignis nicht auf Null zurückgehen?
@ja72 Das ist der Driftfehler, den wir angesammelt haben.
Was das OP beseitigen kann, wenn es der in meiner Antwort beschriebenen Methode folgt.

Wenn deine Beschleunigungen drin sind G , sollten Sie den zweiten Term in Spalte C mit multiplizieren 9.8 . Die Geschwindigkeiten sind dann in m/s und Ihre Integration zu D wird in Metern sein. Sie können dann alle Einschränkungen anwenden, die Sie kennen. Wenn Sie wissen, dass die Geschwindigkeit bei Null beginnt und endet, möchten Sie möglicherweise eine konstante Beschleunigung zu den Daten hinzufügen oder davon abziehen, damit dies so herauskommt. Wenn Sie wissen, dass das Telefon zu seiner Ausgangsposition zurückkehrt, können Sie eine weitere Korrektur anwenden (lineare Änderung der Beschleunigung gegenüber der Zeit?), damit dies herauskommt. Diese können die Genauigkeit verbessern.