Gelöste Aufgaben/GYRQ: Unterschied zwischen den Versionen

Aus numpedia
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(25 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 10: Zeile 10:


==Aufgabenstellung==
==Aufgabenstellung==
Die Bewegung des Kreisels kann man auch anderes als in Aufgabe [[Gelöste Aufgaben/GYRO|GYRO]] mit Euler-Drehwinkeln abbilden, die nicht immer leicht zu interpretieren sind. Natürlich könnten wir dafür in der Ergebnisdarstellung die Euler-Winkel z.B. in [[https://de.wikipedia.org/wiki/Quaternion|Quaternionen]] umrechnen. Aber hier wollen wir ausprobieren, wie die Bewegungsgleichungen in anderen Koordinaten aussehen. Alles andere ist so wie in [[Gelöste Aufgaben/GYRO|GYRO]].
Die Bewegung eines Kreisels kann man auch anderes als in Aufgabe [[Gelöste Aufgaben/GYRO|GYRO]] mit Euler-Drehwinkeln abbilden, die nicht immer leicht zu interpretieren sind. Natürlich könnten wir dafür in der Ergebnisdarstellung die Euler-Winkel z.B. in [https://de.wikipedia.org/wiki/Quaternion Quaternionen] umrechnen. Aber hier wollen wir ausprobieren, wie die Bewegungsgleichungen selbst in anderen Koordinaten (vgl. [https://de.wikipedia.org/wiki/Drehgruppe Drehgruppe]) aussehen. Und ob wir dadurch numerische Vorteile erwarten können.
 
Alles andere ist so wie in [[Gelöste Aufgaben/GYRO|GYRO]].


<onlyinclude>
<onlyinclude>
[[Datei:GYRO-01.png|150px|left|mini|Kreisel mit gelenkiger Fußpunktlagerung.]]
[[Datei:GYRO-01.png|150px|left|mini|Kreisel mit gelenkiger Fußpunktlagerung.]]
Gesucht ist die Präzessions-Bahn eines Kreisels mit Euler-Drehwinkeln.
Gesucht ist die Präzessions-Bahn eines Kreisels mit Quaternionen / [[Sources/Lexikon/Kugelkoordinaten|Kugelkoordinaten]].
Unser Kreisel ist ein Kegel der Höhe ''H'' und Radius ''R''.  
Unser Kreisel ist ein Kegel der Höhe ''H'' und Radius ''R''.  
Die Bewegungsgleichungen sollen mit dem [[Werkzeuge/Gleichgewichtsbedingungen/Arbeitsprinzipe der Analytischen Mechanik/Prinzip der virtuellen Verrückungen|Prinzip der virtuellen Verrückungen]] aufgestellt werden. Wir suchen nach der Trajektorie des Mittelpunktes des Kreisels für große Kippwinkel.
Die Bewegungsgleichungen sollen mit dem [[Werkzeuge/Gleichgewichtsbedingungen/Arbeitsprinzipe der Analytischen Mechanik/Prinzip der virtuellen Verrückungen|Prinzip der virtuellen Verrückungen]] aufgestellt werden. Wir suchen nach der Trajektorie des Mittelpunktes des Kreisels für große Kippwinkel.
Zeile 24: Zeile 26:
Maxima brauchen wir zum Aufstellen der Bewegungsgleichungen, die zunächst mal recht komplex aussehen. Dabei nehmen wir die Bewegungsgleichungen wie sie aus den Gleichgewichtsbedingungen kommen und lösen sie als [[Anfangswertprobleme|Anfangswertproblem]].  
Maxima brauchen wir zum Aufstellen der Bewegungsgleichungen, die zunächst mal recht komplex aussehen. Dabei nehmen wir die Bewegungsgleichungen wie sie aus den Gleichgewichtsbedingungen kommen und lösen sie als [[Anfangswertprobleme|Anfangswertproblem]].  


[[Datei:GYRO-02.png|120px|right|Geomertrie des Kreisels]]
[[Datei:GYRQ-03.png|160px|right|Geomertrie des Kreisels]]


{{MyCodeBlock|title=Header|
{{MyCodeBlock|title=Header|
text=Wir lösen hier das Anfangswertproblem mit den nichtlinearen Bewegungsgleichungen zu den Koordinaten  
text=Für die Beschreibung von Drehungen werden oft [[Sources/Lexikon/Quaternionen für Drehungen|Quaternionen]] genutzt. Dabei wird eine Drehung durch die neue Lage der ''x<sub>3</sub>''-Achse sowie eine Drehung um diese Achse beschreiben. Für die Ermittlung von Bewegungsgleichungen - z.B. eines Kreisels - eignen sich Quaternionen aber nicht gut: für die Abbildung muss man dafür sorgen, dass die Euler-Achse ein Einheits-Vektor ist.
 
[[Datei:GYRQ-04.png|160px|left|Euler-Kippwinkel ''φ<sub>1</sub>'', ''φ<sub>2</sub>'']] Mit einer kleinen Änderungen können wir diese Idee trotzdem weiter verfolgen. Wir nutzen Kugelkoordinaten, um ein Kippen um die Winkel ''φ<sub>1</sub>'', ''φ<sub>2</sub>'' zu erfassen, genau wie bei der Beschreibung von Länge- und Breitengraden auf der Erde.
Die Transformationsmatrix zu diesem Ansatz ist
::<math>
\underline{\underline{D}}_{12}\left( \varphi_1(t),\varphi_2(t) \right)
=
\begin{pmatrix}\cos{\left( {{\varphi }_1}(t)\right) } \cos{\left( {{\varphi }_2}(t)\right) } & \cos{\left( {{\varphi }_1}(t)\right) } \sin{\left( {{\varphi }_2}(t)\right) } & -\sin{\left( {{\varphi }_1}(t)\right) }\\
-\sin{\left( {{\varphi }_2}(t)\right) } & \cos{\left( {{\varphi }_2}(t)\right) } & 0\\
\sin{\left( {{\varphi }_1}(t)\right) } \cos{\left( {{\varphi }_2}(t)\right) } & \sin{\left( {{\varphi }_1}(t)\right) } \sin{\left( {{\varphi }_2}(t)\right) } & \cos{\left( {{\varphi }_1}(t)\right) }\end{pmatrix}
</math>
Mit einer weiteren Drehung ''φ<sub>3</sub>'' um die Rotationsachse lösen also auch hier das Anfangswertproblem mit den nichtlinearen Bewegungsgleichungen zu den Koordinaten  


::<math>\underline{\varphi} = \left( \begin{array}{c}\varphi_1(t)\\ \varphi_2(t)\\ \varphi_3(t)\end{array}\right)</math>,
::<math>\underline{\varphi} = \left( \begin{array}{c}\varphi_1(t)\\ \varphi_2(t)\\ \varphi_3(t)\end{array}\right)</math>,


wobei ''φ<sub>1</sub>'', ''φ<sub>2</sub>'' Kippwinkel bezüglich der ''x<sub>1</sub>''- und ''x<sub>2</sub>''-Achsen sind, ''φ<sub>3</sub>'' ist der Rotationswinkel um die Kreisel-Symmetrieachse.
Dabei sind die Kippwinkel ''φ<sub>1</sub>'', ''φ<sub>2</sub>'' nicht mehr die Winkel aus den Euler'schen Drehmatrizen für sukzessive Drehungen bezüglich der ''x<sub>1</sub>''- und ''x<sub>2</sub>''-Achsen sind, sondern die Winkel von Kugelkoordinaten.


[[Datei:GYRO-03.png|160px|left|Euler-Kippwinkel ''φ<sub>1</sub>'', ''φ<sub>2</sub>'']]
Wie zuvor kommen nun die Gleichgewichtsbedingungen aus dem [[Werkzeuge/Gleichgewichtsbedingungen/Arbeitsprinzipe der Analytischen Mechanik/Prinzip der virtuellen Verrückungen|Prinzip der virtuellen Verrückungen]].
Die Kippwinkel ''φ<sub>1</sub>'', ''φ<sub>2</sub>'' sind im nebenstehenden Bild eingetragen, die aus einer Transformation hervorgehenden Koordinatensysteme erhalten jeweils einen >'< zur Kennzeichnung. Dabei steht am Anfang das blue Koordinatensystem, das durch Kippung um ''φ<sub>2</sub>'' in das grüne und dann durch Kippung um ''φ<sub>1</sub>'' in das rote überführt wird. Nicht dargestellt ist die folgende Drehung um den Rotationwinkel ''φ<sub>3</sub>''.
 
Die Gleichgewichtsbedingungen kommen aus dem [[Werkzeuge/Gleichgewichtsbedingungen/Arbeitsprinzipe der Analytischen Mechanik/Prinzip der virtuellen Verrückungen|Prinzip der virtuellen Verrückungen]].
Für diese Gleichungen brauchen wir die virtuelle Arbeit der [[Sources/Lexikon/D'Alembert'sche Trägheitskraft|D'Alembert'schen Trägheitskräfte]] und die virtuelle Arbeit der Gewichtskraft des Kreisels.
|
|
code=
code=
Zeile 45: Zeile 54:
/* version: wxMaxima 21.05.2                          */
/* version: wxMaxima 21.05.2                          */
/* author: Andreas Baumgart                            */
/* author: Andreas Baumgart                            */
/* last updated: 2022-03-27                           */
/* last updated: 2022-04-01                           */
/* ref: gyroscopic precession                          */
/* ref: gyroscopic precession                          */
/* description: solve using principle of virt. work    */
/* description: solve using principle of virt. work    */
Zeile 54: Zeile 63:
<!-------------------------------------------------------------------------------->
<!-------------------------------------------------------------------------------->
{{MyCodeBlock|title=Declarations
{{MyCodeBlock|title=Declarations
|text=Wir brauchen zunächst die Transformationsmatrizen der [[Sources/Lexikon/Euler-Rotation|Euler-Rotation]], also die [[Sources/Lexikon/Drehmatrix|Drehmatrizen]], die unser inertiales Koordinatensystem in das Kreiselfeste Koordinatensystem überführt. Wir kippen zunächst um die ''x<sub>2</sub>''-Achse, dann um die resultierende ''x'<sub>1</sub>''-Achse und schließlich um die Rotationsachse ''x"<sub>2</sub>''. Die Koordinatentransformation ist dann
|text=Wir brauchen zunächst die Transformationsmatrizen aus <math>\underline{\underline{D}}_{12}\left( \varphi_1,\varphi_2\right)</math> sowie die bekannten Transformationsmatrizen der [[Sources/Lexikon/Euler-Rotation|Euler-Rotation]], also die [[Sources/Lexikon/Drehmatrix|Drehmatrizen]], die unser inertiales Koordinatensystem in das Kreiselfeste Koordinatensystem überführt. Wir kippen also zunächst um die ''x<sub>1</sub>'' und ''x'<sub>3</sub>''-Achse und schließlich um die resultierende Rotationsachse ''x'<sub>3</sub>''. Die Koordinatentransformation ist dann


::<math>\underline{\underline{D}}_{0\to K} = \underline{\underline{D}}_3(\varphi_3(t))\cdot\underline{\underline{D}}_1(\varphi_1(t))\cdot\underline{\underline{D}}_2(\varphi_2(t))</math>.
::<math>\underline{\underline{D}}_{0\to K} = \underline{\underline{D}}_3(\varphi_3(t))\cdot\underline{\underline{D}}_{12}(\varphi_1(t)),\varphi_2(t))</math>.


Und wir führen noch Abkürzungen für die Systemparameter
Und wir führen wiederum die folgenden Abkürzungen für die Systemparameter


::<math>{I_y}=\frac{\displaystyle 3 \left( {{R}^{2}}+4 {{H}^{2}}\right)  m}{20}, {I_z}=\frac{\displaystyle 3 {{R}^{2}} m}{10}, m=\frac{\displaystyle {\pi} H {{R}^{2}} \rho }{3}</math>
::<math>{I_y}=\frac{\displaystyle 3 \left( {{R}^{2}}+4 {{H}^{2}}\right)  m}{20}, {I_z}=\frac{\displaystyle 3 {{R}^{2}} m}{10}, m=\frac{\displaystyle {\pi} H {{R}^{2}} \rho }{3}</math>
Zeile 66: Zeile 75:
ein.
ein.
|code=
|code=
<syntaxhighlight lang="lisp" line start=1>
<syntaxhighlight lang="lisp" line start=21>
/*Declarations                                        */
/* Euler-Drehmatrizen */
/* Euler-Drehmatrizen */
D[1](φ) := matrix([1,0,0],[0,cos(φ),-sin(φ)],[0,sin(φ),cos(φ)]);
D[1](φ) := matrix([1,0,0],[0,cos(φ),sin(φ)],[0,-sin(φ),cos(φ)]);
D[2](φ) := matrix([cos(φ),0,sin(φ)],[0,1,0],[-sin(φ),0,cos(φ)]);
D[2](φ) := matrix([cos(φ),0,-sin(φ)],[0,1,0],[sin(φ),0,cos(φ)]);
D[3](φ) := matrix([cos(φ),-sin(φ),0],[sin(φ),cos(φ),0],[0,0,1]);
D[3](φ) := matrix([cos(φ),sin(φ),0],[-sin(φ),cos(φ),0],[0,0,1]);
 
/* Kugelkoordinanten */
D[12](θ,φ):= matrix([ cos(θ)*cos(φ), cos(θ)*sin(φ), -sin(θ)],
                    [      -sin(φ),        cos(φ),    0  ],
                    [ sin(θ)*cos(φ), sin(θ)*sin(φ),  cos(θ)]);


coord: [[ φ[1](t), φ[2](t), φ[3](t)],
coord: [[ φ[1](t), φ[2](t), φ[3](t)],
Zeile 100: Zeile 115:
::<math>
::<math>
\begin{pmatrix}{I_y} & 0 & 0\\
\begin{pmatrix}{I_y} & 0 & 0\\
0 & \left( 1-{{\cos{\left( {{\varphi }_1}\right) }}^{2}}\right)  {I_z}+{{\cos{\left( {{\varphi }_1}\right) }}^{2}} {I_y} & -\sin{\left( {{\varphi }_1}\right) } {I_z}\\
0 & \left( 1-{{\sin{\left( {{\phi }_1}(t)\right) }}^{2}}\right)  {I_z}+{{\sin{\left( {{\phi }_1}(t)\right) }}^{2}} {I_y} & \cos{\left( {{\phi }_1}(t)\right) } {I_z}\\
0 & -\sin{\left( {{\varphi }_1}\right) } {I_z} & {I_z}\end{pmatrix}
0 & \cos{\left( {{\phi }_1}(t)\right) } {I_z} & {I_z}\end{pmatrix}
\cdot
\ddot{\underline{\varphi}}
+
\begin{pmatrix}\left( {{{{\omega }_2}}^{2}} \cos{\left( {{\phi }_1}\right) } \sin{\left( {{\phi }_1}\right) }+{{\omega }_2} {{\omega }_3} \sin{\left( {{\phi }_1}\right) }\right)  {I_z}-{{{{\omega }_2}}^{2}} \cos{\left( {{\phi }_1}\right) } \sin{\left( {{\phi }_1}\right) } {I_y}\\
\left( -2 {{\omega }_1} {{\omega }_2} \cos{\left( {{\phi }_1}\right) } \sin{\left( {{\phi }_1}\right) }-{{\omega }_1} {{\omega }_3} \sin{\left( {{\phi }_1}\right) }\right)  {I_z}+2 {{\omega }_1} {{\omega }_2} \cos{\left( {{\phi }_1}\right) } \sin{\left( {{\phi }_1}\right) } {I_y}\\
-{{\omega }_1} {{\omega }_2} \sin{\left( {{\phi }_1}\right) } {I_z}\end{pmatrix}
\cdot
\cdot
\ddot{\underline{\varphi}} +
\dot{\underline{\varphi}}
\begin{pmatrix}\left( {{{{\omega }_2}}^{2}} \cos{\left( {{\varphi }_1}\right) } \sin{\left( {{\varphi }_1}\right) }-{{\omega }_2} {{\omega }_3} \cos{\left( {{\varphi }_1}\right) }\right)  {I_z}-{{{{\omega }_2}}^{2}} \cos{\left( {{\varphi }_1}\right) } \sin{\left( {{\varphi }_1}\right) } {I_y}\\
\left( {{\omega }_1} {{\omega }_3} \cos{\left( {{\varphi }_1}\right) }-2 {{\omega }_1} {{\omega }_2} \cos{\left( {{\varphi }_1}\right) } \sin{\left( {{\varphi }_1}\right) }\right)  {I_z}+2 {{\omega }_1} {{\omega }_2} \cos{\left( {{\varphi }_1}\right) } \sin{\left( {{\varphi }_1}\right) } {I_y}\\
{{\omega }_1} {{\omega }_2} \cos{\left( {{\varphi }_1}\right) } {I_z}\end{pmatrix}
=
=
\frac{\displaystyle 2}{\displaystyle 3} H m g\begin{pmatrix}
\begin{pmatrix}
\sin{\left( {{\varphi }_1}\right) } \cos{\left( {{\varphi }_2}\right) }\\
-\frac{\displaystyle 2}{3} H g m \sin{\left( \phi_1\right)}\\
\cos{\left( {{\varphi }_1}\right) } \sin{\left( {{\varphi }_2}\right) }\\
0\\
                          0\end{pmatrix}
0\end{pmatrix}
</math>
</math>
Dieses System von gewöhnlichen Differentialgleichung müssen wir nach den Winkelbeschleunigungen lösen - und das geht nur, wenn die Massenmatrix regulär ist. Wir prüfen das anhand der Systemdeterminante
Dieses System von gewöhnlichen Differentialgleichung müssen wir nach den Winkelbeschleunigungen lösen - und das geht nur, wenn die Massenmatrix regulär ist. Wir prüfen das anhand der Systemdeterminante
::<math>
::<math>
\det{\underline{\underline{M}}} = \cos(\phi_1)^2\;I_y^2\;I_z
\det{\underline{\underline{M}}} = \sin{\left(\varphi_1(t)\right)^2 I_y^2 I_z}.
</math>
</math>
Für den Kippwinkel muss also ''cos(φ<sub>1</sub>)≠0'' oder ''0 < φ<sub>1</sub> < 90°'' gelten. Das können wir für unsere Problemstellung gut einhalten.
Für den Kippwinkel muss also ''sin(φ<sub>1</sub>)≠0'' bzw. ''φ<sub>1</sub> ≠ 0°'' gelten. Diese Bedingung kann bei Kreiselsimulationen auf jeden Fall zu Singularitäten führen! Das Problem kommt aus der zweifachen Rotation um die "3"-Achse mit ''φ<sub>2</sub>'' und ''φ<sub>3</sub>''. Unser Ansatz zur Nutzung der Kugelkoordinaten ist also im Allgemeinen kaum geeignet. Trotzdem - wir machen erst mal weiter.
|code=
|code=
<syntaxhighlight lang="lisp" line start=1>
<syntaxhighlight lang="lisp" line start=1>
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* local vector to some material point with coordinates φ[i](t), i=1,2,3 */
/* trafo, order of rotations: y, x', z'' */
r[p]  : matrix([r,0,z]).D[3](α).D[3](φ[3](t)).D[12](φ[1](t),φ[2](t));
δr[p] : sum(subst([ε=0],diff(subst([coord[1][i]=coord[1][i]+ε*coord[2][i]],r[p]),ε)),i,1,3);
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* virtual work of d'Alembert forces */  
/* virtual work of d'Alembert forces */  
Zeile 188: Zeile 212:
<tr><td>[[Datei:GYRQ-13.png|300px|right|Trajektorie]]</td><td>[[Datei:GYRQ-14.png|300px|right|Phasendiagramme]]</td></tr>
<tr><td>[[Datei:GYRQ-13.png|300px|right|Trajektorie]]</td><td>[[Datei:GYRQ-14.png|300px|right|Phasendiagramme]]</td></tr>
</table>
</table>
Unsere Kugelkoordinaten haben also für die gewählten Anfangsbedingungen keine Probleme gemacht. Man erkennt, dass während der gesamten numerischen Integration der Kippwinkel ''φ<sub>1</sub> > 1'' bleibt. Spannend ist auch, dass der Lagewinkel ''φ<sub>2</sub>'' nun keine periodische Lösung mehr hat - die Rotationsachse läuft kontinuierlich um die Senkrechte um und der Winkel wird immer größer. Das kann man auch gut im Phasendiagramm erkennen.
|code=
|code=
<syntaxhighlight lang="lisp" line start=1>
<syntaxhighlight lang="lisp" line start=1>
Zeile 195: Zeile 220:


{{MyCodeBlock|title=Nachtrag
{{MyCodeBlock|title=Nachtrag
|text=Meist linearisiert man die Bewegungsgleichungen, indem man von kleinen Kippwinkeln ausgeht (''φ<sub>1</sub><<1'', ''φ<sub>2</sub><<1''). Für den Kreisel gilt außerdem ''ω<sub>1</sub><<ω<sub>3</sub>'', ''ω<sub>2</sub><<ω<sub>3</sub>'' so dass man außerdem ''ω<sub>3</sub> = constant'' setzten darf.
|text=Wieder linearisieren wir die Bewegungsgleichungen, indem wir von kleinen Kippwinkeln ausgehen (''φ<sub>1</sub><<1'', ''φ<sub>2</sub><<1''). Für den Kreisel gilt wiederum ''ω<sub>1</sub><<ω<sub>3</sub>'', ''ω<sub>2</sub><<ω<sub>3</sub>'' so dass man außerdem ''ω<sub>3</sub> = constant'' setzten darf.
Damit erhalten wir die "übliche" vereinfachte Bewegungsgleichung
Damit erhalten wir die vereinfachten Bewegungsgleichung


::<math>
::<math>
\begin{pmatrix}{I_y} & 0 & 0\\
\begin{pmatrix}{I_y} &   0   & 0\\
0 & {I_y} & 0\\
                  0 & {I_y} & 0\\
0 & 0 & {I_z}\end{pmatrix}\cdot \ddot{\underline{\varphi}}
                  0 &   0   & {I_z}\end{pmatrix}\cdot \ddot{\underline{\varphi}}
+
+
\omega_3\cdot \begin{pmatrix}0  & -I_z& 0\\
\omega_3\cdot \begin{pmatrix}0  & \varphi_1\cdot I_z& 0\\
                            I_z& 0  & 0\\
                            -\varphi_1\cdot I_z& 0  & 0\\
                             0  & 0  & 0\end{pmatrix}\cdot \dot{\underline{\varphi}}
                             0  & 0  & 0\end{pmatrix}\cdot \dot{\underline{\varphi}}
=
=
\frac{\displaystyle 2}{\displaystyle 3} H m g \begin{pmatrix}1&0&0\\0&1&0\\0&0&0\end{pmatrix}\cdot \underline{\varphi}
\frac{\displaystyle 2}{\displaystyle 3} H m g \begin{pmatrix}1\\0\\0\end{pmatrix}
</math>
</math>


Zeile 214: Zeile 239:
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* simplify */
/* simplify */
MS: subst([cos(φ[1](t))=1, sin(φ[1](t))=0], M);
gyrs: trigsimp(subst(abbr,gyr));
gyrS: subst([ε^2=0, ε=1],expand(subst([cos(φ[1](t))=1, sin(φ[1](t))=φ[1](t), ω[1](t)=ε*ω[1](t), ω[2](t)=ε*ω[2](t)],subst(abbr,gyr))));
smalls: [ω[1](t)=ε*ω[1](t),ω[2](t)=ε*ω[2](t)];
PS: subst([cos(φ[1](t))=1, cos(φ[2](t))=1, sin(φ[1](t))=φ[1](t), sin(φ[2](t))=φ[2](t)], P);
gyrs: subst([ε^2=0,ε=1],expand(subst(smalls,gyrs)));
</syntaxhighlight>
 
G: makelist(makelist(coeff(expand(gyrs[row][1]/ω[3](t)),ω[col](t)),col,1,3),row,1,3);
G: trigsimp(funmake('matrix,G));
}}
}}
Dieses lineare System von gewöhnlichen Bewegungsgleichungen kann man dann hervorragend als Eigenwertproblem analysieren.
Dieses lineare System von gewöhnlichen Bewegungsgleichungen kann man dann hervorragend als Eigenwertproblem analysieren.
Zeile 223: Zeile 250:


'''Links'''
'''Links'''
* ...
* [[Sources/Lexikon/Kugelkoordinaten|Kugelkoordinaten]]
* [[Sources/Lexikon/Quaternionen für Drehungen|Quaternionen für Drehungen]]


'''Literature'''
'''Literature'''
* ...
* ...

Aktuelle Version vom 4. April 2022, 11:54 Uhr


Aufgabenstellung

Die Bewegung eines Kreisels kann man auch anderes als in Aufgabe GYRO mit Euler-Drehwinkeln abbilden, die nicht immer leicht zu interpretieren sind. Natürlich könnten wir dafür in der Ergebnisdarstellung die Euler-Winkel z.B. in Quaternionen umrechnen. Aber hier wollen wir ausprobieren, wie die Bewegungsgleichungen selbst in anderen Koordinaten (vgl. Drehgruppe) aussehen. Und ob wir dadurch numerische Vorteile erwarten können.

Alles andere ist so wie in GYRO.


Kreisel mit gelenkiger Fußpunktlagerung.

Gesucht ist die Präzessions-Bahn eines Kreisels mit Quaternionen / Kugelkoordinaten. Unser Kreisel ist ein Kegel der Höhe H und Radius R. Die Bewegungsgleichungen sollen mit dem Prinzip der virtuellen Verrückungen aufgestellt werden. Wir suchen nach der Trajektorie des Mittelpunktes des Kreisels für große Kippwinkel.


Lösung mit Maxima und Matlab®

Wir arbeiten mit Maxima und Matlab.

Maxima brauchen wir zum Aufstellen der Bewegungsgleichungen, die zunächst mal recht komplex aussehen. Dabei nehmen wir die Bewegungsgleichungen wie sie aus den Gleichgewichtsbedingungen kommen und lösen sie als Anfangswertproblem.

Geomertrie des Kreisels
Geomertrie des Kreisels

Header

Für die Beschreibung von Drehungen werden oft Quaternionen genutzt. Dabei wird eine Drehung durch die neue Lage der x3-Achse sowie eine Drehung um diese Achse beschreiben. Für die Ermittlung von Bewegungsgleichungen - z.B. eines Kreisels - eignen sich Quaternionen aber nicht gut: für die Abbildung muss man dafür sorgen, dass die Euler-Achse ein Einheits-Vektor ist.

Euler-Kippwinkel φ1, φ2
Euler-Kippwinkel φ1, φ2

Mit einer kleinen Änderungen können wir diese Idee trotzdem weiter verfolgen. Wir nutzen Kugelkoordinaten, um ein Kippen um die Winkel φ1, φ2 zu erfassen, genau wie bei der Beschreibung von Länge- und Breitengraden auf der Erde.

Die Transformationsmatrix zu diesem Ansatz ist

Mit einer weiteren Drehung φ3 um die Rotationsachse lösen also auch hier das Anfangswertproblem mit den nichtlinearen Bewegungsgleichungen zu den Koordinaten

,

Dabei sind die Kippwinkel φ1, φ2 nicht mehr die Winkel aus den Euler'schen Drehmatrizen für sukzessive Drehungen bezüglich der x1- und x2-Achsen sind, sondern die Winkel von Kugelkoordinaten.

Wie zuvor kommen nun die Gleichgewichtsbedingungen aus dem Prinzip der virtuellen Verrückungen.


/*******************************************************/
/* MAXIMA script                                       */
/* version: wxMaxima 21.05.2                           */
/* author: Andreas Baumgart                            */
/* last updated: 2022-04-01                            */
/* ref: gyroscopic precession                          */
/* description: solve using principle of virt. work    */
/*******************************************************/




Declarations

Wir brauchen zunächst die Transformationsmatrizen aus sowie die bekannten Transformationsmatrizen der Euler-Rotation, also die Drehmatrizen, die unser inertiales Koordinatensystem in das Kreiselfeste Koordinatensystem überführt. Wir kippen also zunächst um die x1 und x'3-Achse und schließlich um die resultierende Rotationsachse x'3. Die Koordinatentransformation ist dann

.

Und wir führen wiederum die folgenden Abkürzungen für die Systemparameter

und die Zustandsgrößen

ein.


/*Declarations                                         */
/* Euler-Drehmatrizen */
D[1](φ) := matrix([1,0,0],[0,cos(φ),sin(φ)],[0,-sin(φ),cos(φ)]);
D[2](φ) := matrix([cos(φ),0,-sin(φ)],[0,1,0],[sin(φ),0,cos(φ)]);
D[3](φ) := matrix([cos(φ),sin(φ),0],[-sin(φ),cos(φ),0],[0,0,1]);

/* Kugelkoordinanten */
D[12](θ,φ):= matrix([ cos(θ)*cos(φ), cos(θ)*sin(φ), -sin(θ)],
                    [       -sin(φ),        cos(φ),     0  ],
                    [ sin(θ)*cos(φ), sin(θ)*sin(φ),  cos(θ)]);

coord: [[ φ[1](t), φ[2](t), φ[3](t)],
        [δφ[1]   ,δφ[2]   ,δφ[3]   ]];
q: funmake('matrix,makelist([coord[1][i]],i,1,3));

abbr: makelist(diff(φ[i](t),t)=ω[i](t),i,1,3);

params: [
  I[y] =      m       * 3/20*( R^2+4*H^2),
  I[z] =      m       * 3/10*  R^2,
   m   = ρ*%pi*R^2*H/3           ];
params: append(subst(params[3], [params[1], params[2]]),[params[3]]);
params: [params, makelist(solve(params[i], [H^3,R^4,R^2][i])[1],i,1,3)];




Equations of Motion

Die Gleichgewichtsbedingungen für den starren Kreisel (die virtuelle Formänderungenergie ist Null) kommen aus

,

wobei wir nur eine Kraft F - die Gewichtskraft - haben und V das Kreisel-Volumen ist.

Mit dem Ortsvektor zu einem Punkt des Kreisels

können wir nun die virtuelle Gesamtarbeit des Systems ausrechnen. Die Parameter mit R und H ersetzen wir durch die oben definierten Abkürzungen und erhalten die gekoppelten Bewegungsgleichungen

Dieses System von gewöhnlichen Differentialgleichung müssen wir nach den Winkelbeschleunigungen lösen - und das geht nur, wenn die Massenmatrix regulär ist. Wir prüfen das anhand der Systemdeterminante

Für den Kippwinkel muss also sin(φ1)≠0 bzw. φ1 ≠ 0° gelten. Diese Bedingung kann bei Kreiselsimulationen auf jeden Fall zu Singularitäten führen! Das Problem kommt aus der zweifachen Rotation um die "3"-Achse mit φ2 und φ3. Unser Ansatz zur Nutzung der Kugelkoordinaten ist also im Allgemeinen kaum geeignet. Trotzdem - wir machen erst mal weiter.


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* local vector to some material point with coordinates φ[i](t), i=1,2,3 */
/* trafo, order of rotations: y, x', z'' */
r[p]  : matrix([r,0,z]).D[3](α).D[3](φ[3](t)).D[12](φ[1](t),φ[2](t));
δr[p] : sum(subst([ε=0],diff(subst([coord[1][i]=coord[1][i]+ε*coord[2][i]],r[p]),ε)),i,1,3);

/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* virtual work of d'Alembert forces */ 
δW[a] :-ρ*diff(r[p],t,2).δr[p]$
/* integrate over body               */
δW[a] : integrate(integrate(integrate(r*δW[a], α,0,2*%pi), r,0,R*(z/H)), z,0,H)$
δW[a] : expand(expand(expand(expand(expand(expand(expand(δW[a])))))))$
δW[a] : expand(subst(params[2],δW[a]));

/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* virtual work of external (gravitational) force */ 
r[m] : subst([r=0, z=2*H/3], r[p]);
δr[m] : sum(subst([ε=0],diff(subst([coord[1][i]=coord[1][i]+ε*coord[2][i]],r[m]),ε)),i,1,3);
δW[g] : m*matrix([0,0,-g]).δr[m];
δW[g] : expand(δW[g]);




Solving

Mit der Spaltenmatrix der Zustandsgrößen

lösen wir die gewöhnlichen Differentialgleichungen

Dazu formulieren wir die Bewegungsgleichungen zunächst in Maxima und übertragen sie dann in ein Matlab©-Script. Die Bewegungsgleichungen machen wir mit der Zeit

dimensionslos (die Winkel selbst sind ja bereits dimensionslos). Die dimensionslose Zeit .


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* equations of motion */
eom: makelist(coeff(-δW[a],coord[2][row]),row,1,3);

/* mass matrix */
M: makelist(makelist(coeff(eom[row],diff(coord[1][col],t,2)),col,1,3),row,1,3);
M: trigsimp(funmake('matrix,M));
/* M^(-1) */
Mi : trigsimp(invert(M));

/* the rest ... */
gyr: trigsimp(expand(eom - M.diff(q,t,2)));
P:  makelist(coeff(-δW[g],coord[2][row]),row,1,3);




Matlab©-files

Folder Structure

Die Datei-Struktur zeit das Skript GYRQ.m. Classes und Functions sind in den jeweiligen Ordnern. Die Excel-Datei hält alle System-Parameter.

Den komplette Quellcode zu diesem Programm können Sie über dieses ZIP-File rechts herunterladen.

archive
download compressed archive →


Postprocessing

Die Ergebnisse der numerischen Integration tragen wir für die Winkel φ1(t), φ2(t) sowie für die Winkelgeschwindigkeiten ω1(t), ω2(t) auf. Es folgen noch die Trajektorie des Mittellinien-Endpunkts des Kreisels und die Phasendiagramme.

Winkel
Winkel
Winkelgeschwindigkeit
Winkelgeschwindigkeit
Trajektorie
Trajektorie
Phasendiagramme
Phasendiagramme

Unsere Kugelkoordinaten haben also für die gewählten Anfangsbedingungen keine Probleme gemacht. Man erkennt, dass während der gesamten numerischen Integration der Kippwinkel φ1 > 1 bleibt. Spannend ist auch, dass der Lagewinkel φ2 nun keine periodische Lösung mehr hat - die Rotationsachse läuft kontinuierlich um die Senkrechte um und der Winkel wird immer größer. Das kann man auch gut im Phasendiagramm erkennen.


... in Matlab (vgl. zip-Datei)




Nachtrag

Wieder linearisieren wir die Bewegungsgleichungen, indem wir von kleinen Kippwinkeln ausgehen (φ1<<1, φ2<<1). Für den Kreisel gilt wiederum ω1<<ω3, ω2<<ω3 so dass man außerdem ω3 = constant setzten darf. Damit erhalten wir die vereinfachten Bewegungsgleichung


<syntaxhighlight lang="lisp" line start=1> /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* simplify */ gyrs: trigsimp(subst(abbr,gyr)); smalls: [ω[1](t)=ε*ω[1](t),ω[2](t)=ε*ω[2](t)]; gyrs: subst([ε^2=0,ε=1],expand(subst(smalls,gyrs)));

G: makelist(makelist(coeff(expand(gyrs[row][1]/ω[3](t)),ω[col](t)),col,1,3),row,1,3); G: trigsimp(funmake('matrix,G));



Dieses lineare System von gewöhnlichen Bewegungsgleichungen kann man dann hervorragend als Eigenwertproblem analysieren.


Links

Literature

  • ...