Von der Beschleunigung zur Verschiebung

Hallo, ich studiere Informatik im Hauptfach und diese Frage sollte für alle Physikgenies hier wirklich einfach sein:

Ich habe eine Reihe von Datenpunkten von einem Beschleunigungsmesser an einem sich bewegenden Objekt, das im Wesentlichen der Form folgt.

X-Beschleunigung einschließlich Schwerkraft

Y-Beschleunigung einschließlich Schwerkraft

Z-Beschleunigung einschließlich Schwerkraft

Drehung um die x-Achse

Drehung um die y-Achse

Drehung um die z-Achse

Ich möchte das Objekt im 3D-Raum zeichnen, und nach einigem Suchen wurde mir gesagt, ich solle doppelt integrieren, um eine Verschiebung zu erhalten.

Ist das der beste Weg? Es muss nicht recheneffizient sein, solange es leicht zu verstehen ist.

Zuerst müssen Sie Ihre Beschleunigungsmesser und die Rotationssensoren kalibrieren, sonst führen Offsets, Verstärkungsfehler und, viel schlimmer, das Übersprechen zwischen Kanälen zu erheblichen Fehlern. Dann müssen Sie die Rotationsdaten verwenden, um die Rotationsmatrix zwischen den realen Beschleunigungsmesserachsen und den Koordinatensystemachsen, in denen Sie das Ergebnis haben möchten, herauszufinden. Dann müssen Sie diese Matrix invertieren und auf die Beschleunigungsmesserdaten anwenden. Dann musst du die Fallbeschleunigung abziehen und JETZT kannst du zweimal integrieren. Einfach richtig? :-)
Dreht sich das Objekt, wenn es sich bewegt? dh zeigt "x" immer in die gleiche Richtung, oder dreht sich "x" mit der Ausrichtung des Objekts?
@SamBader: Natürlich tut es das. Das ist der lustige Teil. Der einzige Weg, um sicherzustellen, dass dies nicht der Fall ist, besteht darin, es auf eine Präzisionsführungsschiene zu setzen. Dann brauchst du den Beschleunigungsmesser natürlich nicht. Ein Meterstab erledigt die Arbeit billiger und besser. :-)
Ja, es dreht sich, wenn es sich bewegt. Nun, der Beschleunigungsmesser stammt von einem Mobiltelefon, daher bin ich mir nicht sicher, wie ich auf die Hardware zugreifen soll, um ihn zu kalibrieren. Auch in Bezug auf rotiert x mit Ausrichtung auf das Objekt, naja.. Ich bin mir selbst nicht sicher. Falls es hilft, ist es ein Samsung Galaxy S5.
Damit es noch mehr Spaß macht, enthalten die Messwerte Ihres Beschleunigungsmessers keine Erdbeschleunigung. Beschleunigungsmesser messen alles, was auf die Erde einwirkt, außer der Schwerkraft. Genau genommen messen sie die richtige Beschleunigung . Um die Sache noch lustiger zu machen, nennt man das, was Sie vorschlagen, " Koppelnavigation ". Fehler häufen sich. Ihre Orientierung und Geschwindigkeit enthält integriertes weißes Rauschen. Ihre Position enthält doppelt integriertes weißes Rauschen. Sie benötigen Korrekturen, um dieses Rauschen zu kompensieren.
Ich verwende die Variable "accelerationinclusivegravity.x", also denke ich, dass die Schwerkraft enthalten ist. Ist es einfacher, wenn ich es ohne Schwerkraft nehme?
Das merkt dein Handy nicht. Gehen Sie auf die Spitze eines Gebäudes und lassen Sie Ihr Handy fallen. Ihr Handy wird nach unten beschleunigen bei 9.81 M / S 2 . Ihr Handy-Beschleunigungsmesser zeigt Null Beschleunigung an. Wenn Ihr Handy den Sturz überlebt, legen Sie es flach auf eine Tischplatte. Die auf Ihr Mobiltelefon wirkenden Kräfte sind die nach unten gerichtete Gravitation und die nach oben gerichtete Normalkraft des Tisches. Ihr Handy spürt die Gravitationskraft nicht. Es spürt die Normalkraft, also meldet es, dass das Handy etwa um 1000 nach oben beschleunigt 9.81 M / S 2 .
Hmm Ok, ich habe es flach gelegt und ich bekomme einen Wert von minus 10 für die x-Achse. Ich denke, das ist die Schwerkraft?

Antworten (1)

Im Prinzip könnten Sie die Verschiebung aus Beschleunigungsmessermessungen erhalten, wenn Sie auch jederzeit eine Schätzung der Ausrichtung des Telefons hätten.

Sie müssten die Telefonausrichtung verwenden, um jede momentane Beschleunigungsmessung in denselben Koordinatenrahmen umzuwandeln, und dann eine konstante Komponente abziehen, die die Schwerkraft darstellt, und dann doppelt integrieren.

Nehmen wir, um es deutlich zu machen, ein Bild, an dem die Schwerkraft entlang zieht z ^ Richtung, X ^ ist Osten, j ^ ist Norden.

Das Telefon kann in eine beliebige Richtung zeigen, also definiert es auch seinen eigenen zeitabhängigen Koordinatenrahmen, z. X ^ ' ( T ) zeigt auf die rechte Seite des Bildschirms, j ^ ' ( T ) zeigt auf den oberen Rand des Bildschirms und z ^ ' ( T ) Punkte aus dem Bildschirm. Dies ist der Rahmen, in dem Sie Ihre Beschleunigungsmesserdaten erhalten A M ' ( T ) .

Angenommen, das Telefon enthält ein perfektes Gyroskop, damit Sie wissen, wie Sie die Ausrichtung des Telefons im Raum beschreiben. dh du kannst schreiben X ^ ' ( T ) , j ^ ' ( T ) , z ^ ' ( T ) bezüglich X ^ , j ^ , z ^ Und T . Dann können Sie eine Rotationsmatrix berechnen R ( T ) die zwischen Frames konvertiert.

A M ( T ) = R ( T ) A M ' ( T )

Und dann die Schwerkraft abziehen:

A = A M G z ^

Unter der Annahme, dass das Telefon am Ursprung im Ruhezustand beginnt:

R = D T D T A .

Voila!

Diese Methode ist jedoch sehr fehleranfällig. Wenn Ihre Orientierungsschätzung beispielsweise auch nur ein kleines bisschen daneben liegt, funktioniert die Subtraktion der Schwerkraft nicht gut, und der Algorithmus geht davon aus, dass Ihr Telefon beschleunigt, selbst wenn es stillsteht. Ein Fehler von einem Grad kann leicht dazu führen, dass er um Kilometer in der Größenordnung von Minuten abweicht, zumal jeder Beschleunigungsfehler doppelt integriert wird!

Sehen Sie hier für eine gute Diskussion!

Wow, das ist detailliert. Vielen Dank. Ich werde versuchen, einen Kalman-Filter zu verwenden, um die Daten zu entrauschen.
Sichere Sache! Ich kenne den Kalman-Filter nicht, aber lese einfach die Wiki-Seite durch, es klingt clever, und ich bin gespannt, wo du ihn anwenden würdest. Das Wiki-Beispiel enthielt eine Anwendung, die GPS-Daten mit einer geschwindigkeitsbasierten Koppelnavigation zusammenführt. Ist das vergleichbar mit dem, was Sie planen?
Es ist etwas ähnlich, außer dass ich keine GPS-Daten habe, also werde ich die Startposition und Ausrichtung des Telefons als konstante Daten verwenden. Ich werde es wahrscheinlich anwenden, bevor ich damit beginne, irgendwelche Berechnungen durchzuführen
Hmm, das ist eine eindeutige Voreingenommenheit, oder? Wenn der Benutzer beispielsweise das Telefon an Punkt A startet, es zu Punkt B bewegt und es auf unbestimmte Zeit an Punkt B lässt, wird die Ausgabe Ihres Algorithmus stetig zu A zurückschleichen, richtig? Oder vielleicht ist das in Ihrer Anwendung in Ordnung ...?
aww verdammt ... in diesem Fall muss ich einen neuen Algorithmus finden, um dann das Rauschen zu entrauschen. wird eine Weile dauern.
Ich glaube nicht, dass Sie etwas finden werden, um die langfristigen Ergebnisse der Koppelnavigation zu stabilisieren, aber Sie könnten die Anwendung vielleicht so gestalten, dass Sie nur wissen müssen, wie sich die Position in kurzen Zeitspannen ändert. Ich weiß nicht, was das Endziel ist, aber diese Methode sollte es Ihnen ermöglichen, beispielsweise Formen mit dem Telefon nachzuzeichnen. Lass uns aber wissen, wie es läuft! :D. (Oder ob ich sonst noch etwas tun kann, um Ihre Frage angemessen zu beantworten).
Nun, ich muss das Objekt eigentlich nur für Zeitspannen von 10-20 Sekunden verfolgen und zeichnen. Ich denke also, dass der DR nicht so viele akkumulierte Fehler haben sollte. klar, werde berichten wie es weitergeht.
Hoffe es geht gut! Übrigens, wenn Sie das oben Genannte nützlich fanden, können Sie die Antwort gerne "akzeptieren". Danke!
Am Telefon habe ich auf das grüne Häkchen geklickt. Ich denke, das akzeptiert die Antwort? Es ist nützlich, aber ich bin höllisch schwach in Mathe.. Also wird es eine Weile dauern..
Das funktioniert, danke! Übrigens enthält die Übersichtsseite der Sensoren jede Menge nützlicher Funktionen, die Ihnen einiges an Rechenarbeit ersparen können (zB getRotationMatrix()).
Wow, ich wusste nicht, dass es solche Funktionen gibt. Danke. Dies sollte die Dinge etwas beschleunigen.