Wie aktualisiert quaternion basierend auf 3d-gyro-Daten?
Habe ich einen ersten quaternion , q0. Und ich bekomme Winkelgeschwindigkeit Messungen, die ich integrieren, die die Geschwindigkeiten also ich hab 3 Winkeln bei 50Hz oder so. Wie kann ein quaternion basierend auf dem 3-Winkel? Ich kann nicht nur 3 Quaternionen, kann ich das?
So klar zu stellen.
F. neu=F. neu*F. update(alfa,beta,gamma)
F. neue stellt meine aktuelle Ausrichtung in Quaternionen, die ich es aktualisiert werden soll durch Multiplikation mit f: update quaternion. Wie kann ich die Q. update mit den Winkeln?
Dank!
- Die traurige Nachricht ist: Es ist viel mehr kompliziert als das. Siehe zum Beispiel Ausrichtung Schätzung mit einer Quaternionen-basierten indirekten Kalman-filter mit adaptiven Schätzung der externen Beschleunigung. Durch die Art und Weise, wie Sie sich den Umgang mit dem gyro drift?
- Diese Frage scheint nicht zu sein über die Programmierung in den Bereich definiert, in dem Hilfe-center.
- Sorry Jungs. Ich habe gerade angefangen zu arbeiten als software-Entwickler vor 2 Wochen und das ist meine erste Frage hier(die lustige Sache ist, ich bin ein Maschinenbau-Ingenieur :D). Sie sind die besten!!! Über die drift? Ich weiß es noch nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nehme an, Sie sind der Integration von euler-Winkeln, weil Sie möchten, um Ihr das Leben schwer. Zuerst und vor allem der gyro nicht direkt integrieren in Ihre euler-Winkel. Wenn Sie sich Fragen, diese Frage, ich nehme an, Sie wissen auch nicht, wie Sie richtig finden, rate of change euler-Winkeln von Ihrem gyro-Messungen. Sie benötigen eine Transformationsmatrix für diese Arbeit. Ich empfehle Kommissionierung bis eine Kopie Farrell "Aided navagition" Auf Seite 57 erklärt er, wie man berechnen der Transformationsmatrix, um ändern Sie Ihre gyro-Sätze in Euler-Preisen. Aber warum die Mühe, wenn Sie können Ihre rate der änderung quaternion direkt aus dem quaternion und Ihre gyro-Daten:
so
wo Ⓧ stellt die Quaternionen-Produkt. Seien Sie vorsichtig mit Ihren frames hier. Der Kreisel stellt die Drehrate sensor-Rahmen mit Bezug auf das Inertialsystem dargestellt, in der sensor-Rahmen. Das bedeutet, dass Ihre quaternion Bedürfnisse zu vertreten, eine ähnliche rotation vom sensor zum Inertialsystem. In diesem Fall sollte eine rotation aus dem Inertialsystem der gyro frame. Wenn wir ignorieren Dinge wie die rotation der Erde der vorstehenden Gleichung ist gültig.
Sich bewusst sein über "Aided Navigation." Meiner Meinung nach seine Behandlung von Quaternionen ist sehr verwirrend.
qdot = 0.5 * q Ⓧ w
bedeutet? sollten wir skalaren multiplizieren Sie die quaternion q? Wo ist der Maßstab geblieben?Können Sie einfach integrieren, Ihre Winkelgeschwindigkeit zu erhalten angular position (als Euler-Winkel), konvertieren Sie die Euler Winkel zu Quaternionen, dann multiplizieren Sie das Quaternion zu sammeln Orientierung.
Angenommen, Ihr Eingang ist durch einen 3D-Vektor der Winkelgeschwindigkeit: omega = (alpha, beta, gamma), gegeben durch Grad pro Sekunde. Um die Euler-Winkel E in Grad, multiplizieren omega durch die Veränderungen in der Zeit, die wir anrufen können dt. Dies führt zu:
Erhalten Sie dt, indem die aktuelle Zeit von der Zeit Ihrer früheren update. Nach Erhalt der 3D-Euler-Winkeln von Gyroskop-Daten verwenden, konvertieren Sie ihn in ein Quaternion (w,x,y,z) durch folgende Gleichung (aus Wikipedia):
Nur copy-paste die zwei code-snippets oben in Ihren f: update () - Methode dann wieder die Quaternionen. Wenn Sie wissen wollen, wie die Gleichung funktioniert, einfach mal den Wiki-link, und Lesen Sie es.
E.x=pi/2
gibt die gleiche rotation wieEx=pi/2+2*pi
Mir verzeihen thread-necromancing, aber die Antworten scheinen alle zu kompliziert, und einige, wie ich, bevorzugen können dieser mehr 'bequem' Ansatz:
Sagen, dass omega=(alpha,beta,gamma) ist die gemessene geschwindigkeitsvektor von den gyros. Dann Reisen wir
viele Einheiten (deg oder rad abhängig gyro) um
So können wir konstruieren die rotation quaternion als:
Alles, was übrig ist, wird jetzt drehen unsere aktuelle rotation von
Q.update
. Dies ist trivial:Getan. Quaternionen sind schön, nicht wahr?
Einige Folien auf, gyros und Quaternionen, die nützlich sein können:
http://stanford.edu/class/ee267/lectures/lecture10.pdf
Könnten Sie konvertieren diese Winkel auf ein einziges quaternion und führen Sie dann den Vorgang, den Sie beschrieben, oder Sie können entweder konvertieren Sie jeder von Ihnen auf eine Achse-Winkel-pair-Mädchen und dann auf eine quaternion, und dann multiplizieren Sie die drei Quaternionen zusammen.
Finden Sie http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles und
http://www.j3d.org/matrix_faq/matrfaq_latest.html#Q60 mehr details.
1) Das update selbst ist einfach. Erstellen Sie einfach quaternion von "axis angle"Darstellung von Winkelgeschwindigkeit.
BWT, gemeinsamen Weg zu stellen "Winkelgeschwindigkeit" ist der Vektor der 3 Skalare. Vektor ist parallel zur Achse der momental rotation in den LOKALEN frame-Objekts. Also deine Gleichung Aussehen wird: Q neu=F. update(alfa -, beta -, gamma -)*F. neu.
http://en.wikipedia.org/wiki/Axis%E2%80%93angle_representation#Unit_quaternions
Und berücksichtigen die Zeit der integration (einfachste approximation der Euler-integration)
F. neu = Q. fromVector(angularVelocity * deltaTime)*f: neue
BEACHTEN Sie auch, angularVelocity * deltaTime produzieren "exponential map" rotation, die leicht umgewandelt werden können in quaternion.
Präzise integration , mehr komplizierte Annäherung verwendet werden sollte. Aber Sie müssen wissen, die genaue Bedeutung der Messungen (Zeitpunkt der Messung, Rauschen und mehr).
2) Die Funktion update ist nicht klar, aus Ihrer Frage. Was ist (alfa -, beta -, gamma -) Parameter? Wenn dies ein momental Rotationsgeschwindigkeit über 3 orthogonale Achse , als man bauen kann Winkelgeschwindigkeit von diesem einfach. Nur sicher sein in der richtigen Einheiten (Radiant pro Sekunde).
3) Die Art und Weise, um hilfreiche integration von Beschleunigungssensoren Daten ist zu kompliziert für eine kurze Antwort. Jede hardware umgegangen werden soll, die mit eigenen Eigenschaften. Es sollte auch Sicherung von Daten von der linearen Beschleunigung zu vermeiden drift.