Rotationsbewegungsintegration (Starrkörperdynamik)

Ich versuche, die Rotationsbewegung eines starren Körpers (ein Satz von N Punktmassen) zu integrieren. im Trägheitsrahmen , aber meine Ergebnisse scheinen völlig falsch zu sein. Welcher der folgenden Schritte könnte falsch sein?

1) Unter der Annahme nur eines Inertialsystems können wir schreiben:

D L D T = τ D ( ICH ω ) D T = τ D ICH D T ω + ICH D ω D T = τ D ω D T = ICH 1 ( τ D ICH D T ω ) ( 1 )

2) Im Inertialsystem haben wir:

R ich ( T ) = X ich ( T ) X ^ + j ich ( T ) j ^ + z ich ( T ) z ^
v ich ( T ) = R ˙ ich ( T ) = X ˙ ich ( T ) X ^ + j ˙ ich ( T ) j ^ + z ˙ ich ( T ) z ^
ω ( T ) = ω X ( T ) X ^ + ω j ( T ) j ^ + ω z ( T ) z ^
R ˙ ich ( T ) = ω × R ich

3) Da ich nur ein Inertialsystem angenommen habe, den Trägheitstensor ICH ist eine Funktion der Zeit und wird bei jedem Zeitschritt aktualisiert T .

ICH ( T ) = [ ICH X X ICH X j ICH X z ICH j X ICH j j ICH j z ICH z X ICH z j ICH z z ]

Wo

ICH X X = M ich ( j ich 2 + z ich 2 )

ICH j j = M ich ( X ich 2 + z ich 2 )

ICH z z = M ich ( X ich 2 + j ich 2 )

ICH X j = ICH j X = M ich X ich j ich

ICH X z = ICH z X = M ich X ich z ich

ICH j z = ICH z j = M ich j ich z ich

Ich habe die Ableitung von berechnet ICH sein:

ICH ˙ = [ ICH ˙ X X ICH ˙ X j ICH ˙ X z ICH ˙ j X ICH ˙ j j ICH ˙ j z ICH ˙ z X ICH ˙ z j ICH ˙ z z ]

Wo

ICH ˙ X X = M ich ( 2 j ich j ˙ ich + 2 z ich z ˙ ich )

ICH ˙ j j = M ich ( 2 X ich X ˙ ich + 2 z ich z ˙ ich )

ICH ˙ z z = M ich ( 2 X ich X ˙ ich + 2 j ich j ˙ ich )

ICH ˙ X j = ICH ˙ j X = M ich ( X ˙ ich j ich + X ich j ˙ ich )

ICH ˙ X z = ICH ˙ z X = M ich ( X ˙ ich z ich + X ich z ˙ ich )

ICH ˙ j z = ICH ˙ z j = M ich ( j ˙ ich z ich + j ich z ˙ ich )

4) Ich integriere die Differentialgleichung ( 1 ) Verwenden Sie ein einfaches Runge-Kutta-4-Schema wie dieses:

T ich + 1 = T ich + H
ω ich + 1 = ω ich + H 6 ( k 1 + 2 k 2 + 2 k 3 + k 4 )

Wo H ist der Integrationszeitschritt und

k 1 = F ( ω ich )
k 2 = F ( ω ich + k 1 H 2 )
k 3 = F ( ω ich + k 2 H 2 )
k 4 = F ( ω ich + k 3 H )

Ich beginne die Simulation, indem ich das System mit einer Winkelgeschwindigkeit initialisiere ω 0 . Danach drehe ich bei jedem Zeitschritt alles N Punkte des starren Körpers um den aktuellen Vektor ω um einen Winkel | ω | H unter Verwendung einer durch die Rodrigues-Formel berechneten Rotationsmatrix

R = J + Sünde ( ω H ) W + [ 1 cos ( ω H ) ] W 2

Wo J ist der 3 × 3 Identitätsmatrix und W = [ 0 u z u j u z 0 u X u j u X 0 ] mit u = ω | ω |

Nach der Rotation/Aktualisierung aller N Punkte, berechne ich den Trägheitstensor neu ICH (und somit ICH ˙ Und ICH 1 ) und dann durch Gleichung ( 1 ) Ich aktualisiere die Winkelgeschwindigkeit ω . Der Zyklus geht weiter von T = 0 bis zu einigen T M A X mit Schritt H . Das Problem ist, dass die Ergebnisse zunächst korrekt sind (Drehimpuls und Energie sind konstant), aber nach einigen Zeitwiederholungen werden die Zahlen schnell zu groß und ich werde voll von NaNs. Auch für den einfachsten Fall wäre das äußere Drehmoment geeignet τ = 0 , das gleiche passiert. Ich habe überprüft, ob es ein Problem mit der Determinante von gibt ICH (und kann daher nicht invertiert werden), aber die Determinante bleibt ungleich Null. Stimmt irgendetwas mit einer der Gleichungen nicht? Muss ich während der Zeitschleife eine Art Normalisierung auf eine Größe durchführen? Es muss eine Möglichkeit geben, die Drehung des starren Körpers im Trägheitsrahmen zu simulieren. Danke schön.

ein paar Vorschläge: bevorzugen Sie implizite Methoden gegenüber expliziten Methoden, da sie normalerweise numerisch stabiler sind. Denken Sie auch daran, dass RK keine Energie spart. Möglicherweise möchten Sie einige Einschränkungen / Lagrange-Multiplikatoren anwenden, um sicherzustellen, dass die Energievariationen bis zu einer akzeptablen Ordnung Null bleiben
Wenn Sie die Ergebnisse genauer machen möchten, können Sie auch versuchen, die Achse auf die Hauptachse zu verschieben, auf der der Trägheitstensor diagonal ist. Siehe en.wikipedia.org/wiki/Moment_of_inertia#Principal_axes
Ich sehe nicht, wo Sie r(t) bekommen? Wo ist Ihre Bewegungsgleichung für die Übersetzung?
@Eli Ich habe den Beitrag richtig bearbeitet und genau erklärt, wie ich r (t) jedes Punkts aktualisiere. Auch hier gibt es nur Rotation. Keine Verschiebung des Massenschwerpunkts.
@RishabhJain Der Körper ist von Anfang an so ausgerichtet, dass die x-, y-, z-Achsen mit den Hauptträgheitsachsen zusammenfallen (Trägheitstensor ist diagonal).
@lurscher Stimmt, aber selbst die "schlechteste" explizite Methode 1. Ordnung sollte eine stabile Fehlerdrift für die Energie und den Drehimpuls des Körpers verursachen. In meinem Fall wachsen diese Mengen innerhalb weniger Zeititerationen ins Unendliche.
du schuld erweiterst deine Differentialgleichungen um ω ˙ mit R ˙ = ω × R und löse beide Differentialgleichungen , also löse jetzt j ˙ = F ( j ) Wo j = [ ω , R ] T . Ich Wahr über die Anfangsbedingungen ?
Welche Grenzen verwenden Sie für Ihre Δ T ? Ich würde dafür sorgen Δ T << π / 2 ω sup mit ω sup eine Obergrenze für alle Ihre Winkelgeschwindigkeiten zu einem bestimmten Zeitschritt ist
@Eli Nein, es ist nicht erforderlich, dem Problem eine weitere ODE hinzuzufügen. R ˙ wird verwendet, um das Neue zu berechnen ω . Aber R ˙ wird direkt über die alte berechnet ω .
Können Sie erklären, wie Sie rechnen R ˙ und r?
@MichaelGaitanas Können Sie auch einige Grafiken in die Frage einfügen, die die Zunahme der Energie und des Gesamtdrehimpulses (falls vorhanden) im Laufe der Zeit zeigen, damit die Leute besser verstehen können, was passiert
Lesen Sie diese Hinweise zum Modellieren und Integrieren starrer Körper.

Antworten (1)

Ich bin deiner Herleitung von nicht gefolgt D ICH D T . In den meisten Lehrbüchern wird sie wie folgt bewertet

D ICH D T = ω × ICH = | 0 ω z ω j ω z 0 ω X ω j ω X 0 | | ICH X X ICH X j ICH X z ICH X j ICH j j ICH j z ICH X z ICH j z ICH z z |

mit der zusätzlichen Einschränkung, dass ICH hängt von der Ausrichtung des Körpers ab. Die Orientierung kann unter Verwendung von Euler-Winkeln, Quaternionen oder nur der 3 × 3-Rotationsmatrix verfolgt werden R . So oder so ist das Endergebnis, dass der Massenträgheitstensor zu jedem Zeitpunkt aus dem MMOI im Körperrahmen berechnet werden muss

ICH = R ICH B Ö D j R

Am Ende haben Sie die Bewegungsgleichungen

τ = ICH ω ˙ + ω × ICH ω } ω ˙ = ICH 1 ( τ ω × ICH ω )

Es ist auch üblich, das Obige im folgenden Algorithmus in Bezug auf den Drehimpuls auszudrücken. Jedem Integrationsschritt wird die Rotationsmatrix gegeben R und Impulsvektor L

Schritt Berechnung Anmerkungen 0 ICH = R ICH B Ö D j R MMOI in der Welt koordiniert 1 ω = ICH 1 L Rotationsvektor extrahieren 2 R ˙ = ω × R Drehrichtung ändern 3 L ˙ = τ ( T , R , ω ) Impulsänderung durch Drehmoment  τ

Hinweis : Beim Integrieren der Rotationsmatrix R mit Runge-Kutta das Ergebnis von R R + H R ˙ keine Rotationsmatrix mehr ist und die Genauigkeit der Lösung schnell abnimmt.

Stattdessen verwenden die Leute oft Quaternionen Q ^ = ( Q v Q S ) die die Rotation beschreiben als

R = 1 + 2 Q S [ Q v × ] + 2 [ Q v × ] [ Q v × ]
Wo [ Q v × ] = | 0 z j z 0 X j X 0 | ist der 3 × 3-Kreuzproduktmatrixoperator des Vektorteils der Quaternion Q v .

Die Ableitung der Quaternion ist definiert als

Q ^ ˙ = 1 2 ( ω Q v Q S ω + ω × Q v )

Es gibt zwei Möglichkeiten, die Quaternion zu integrieren

  • verwenden Q ^ Q ^ + H Q ^ ˙ was eine erneute Normalisierung nach jedem Teilschritt erfordert.

  • Gegeben Q ^ = ( Q v Q S ) Und ω Vektor

    ( Q v Q S ) | cos ( θ 2 ) Sünde ( θ 2 ) z Sünde ( θ 2 ) z cos ( θ 2 ) + Sünde ( θ 2 ) [ z × ] | ( Q v Q S )

    Wo θ = H ω ist der Schrittwinkel und z = ω / ω ist die Schrittrotationsachse.

    Die resultierende Quaternion stellt immer noch Rotationen dar und driftet nicht weg wie andere Formulierungen, sondern ist für niedrige Rotationswerte instabil, wie Sie an der sehen können ω im Nenner.