Rotationsmatrix rotieren
-
Hallo,
ich habe eine Rotationsmatrix R, die iterativ (in einer Euler-Integration) um einen Winkel w = (w_x, w_y, w_z) gedreht wird. Ich bewerkstellige das, indem ich R mit dem "(wx)-Operator"
[ 0, -w_z, w_y ] W = (wx) = [ w_z, 0, -w_x ] [ -w_y, w_x, 0 ]
und dem Zeitschritt multipliziere, das Ergebnis zu R addiere und dann R mit dem Gram-Schmidt-Verfahren wieder orthogonalisiere.
Meine Frage: geht das auch einfacher, d.h. kann ich einfach eine kleine Rotation um w berechnen, bei der die Orthonormalität von R erhalten bleibt? bzw., eine rechnerisch weniger aufwändige Methode?
-
du erstellst einfach eine Rotationsmatrix die R' die w = (w_x, w_y, w_z) abbildet.
und dann berechnest du einfach: R'R. Das Ergebnis ist Orthonormal.
-
Wenn es nur um Rotationen geht könntest du auch mit Quaternionen statt mit Matritzen arbeiten. Die sind numerisch etwas stabiler.
-
otze schrieb:
du erstellst einfach eine Rotationsmatrix die R' die w = (w_x, w_y, w_z) abbildet.
und dann berechnest du einfach: R'R. Das Ergebnis ist Orthonormal.
Hmm, dazu müsste ich exp(dt * W) berechnen, und dann eine Matrixmultiplikation durchführen, das ist ja noch aufwändiger... Und da mir bei der Integration pro Zeitschritt sowieso erste oder zweite Ordnung genügt, suche ich mir glaube ich was anderes. Es sei denn das geht doch einfacher als ich denke.
Bestimmt gibt es für die Simulation eines einzelnen starren Körpers auch "professionelle" Integrations-Algorithmen, vielleicht kennt ihr da vielleicht was?
-
Schau dir mal die Screw Theorie an. Die machen das genau so mit Exponentialtransformationen. Und die Robotik ist damit shcon ziemlich erfolgreich
das: exp(dt * W) kann man mit der Rodriguez Formel berechnen. und zwar ziemlich einfach, wenn wx auf 1 normiert ist. Und die Matrixmultiplikation ist ja nicht so schlimm, solange du nicht im 100 dimensioaneln Raum rotierst ;). Ausserdem ist Gram Schmidt ja auch total langsam da O(n^3) (und numerisch instabil). Also schlechter wirds garantiert nicht.
-
otze schrieb:
Schau dir mal die Screw Theorie an. Die machen das genau so mit Exponentialtransformationen. Und die Robotik ist damit shcon ziemlich erfolgreich
Das ist großartig!
das: exp(dt * W) kann man mit der Rodriguez Formel berechnen.
Das ebenfalls! wx ist nicht normiert, weil es auch den betrag des winkels codiert, aber das sollte kein problem sein. Vielen Dank dafür!
Ich frage mich gerade, wo der Unterschied zu den Quaternionen liegt, rechnet man damit effektiv dasselbe?
-
Nein, simple Quaternionen können nur Rotationen beschreiben. Es gibt allerdings dual Quaternions die sich für die Screw Theory ziemlich anbieten sollten...