Verwendung der OpenGoddard 4-Python-Bibliothek zur nichtlinearen optimalen Steuerung und Trajektoriengenerierung

https://github.com/istellartech/OpenGoddard https://istellartech.github.io/OpenGoddard/

Verwendung von OpenGoddard 1 Verwendung von OpenGoddard 2 Verwendung von OpenGoddard 3 OpenGoddard How to use 4 ← Jetzt hier

Dieses Mal werde ich über die Formulierung und die Ergebnisse unter Verwendung einer der Standardtechniken zur Optimierung sprechen.

Übergangsproblem bei Umlaufbahn mit geringem Schub

Aufgrund der Entwicklung elektrischer Antriebe wie des Ionenmotors, der berühmt wurde, weil der Asteroidenforscher auch in Yabusa installiert wurde, wird es immer häufiger, durch elektrischen Antrieb von der Erde zu anderen Planeten zu gelangen, anstatt durch chemischen Antrieb wie einen Raketentriebwerk. Ich tat. Es ist bekannt, dass der Orbitalübergang beim chemischen Antrieb die minimale Energie erfordert, die erforderlich ist, um eine Umlaufbahn zu nehmen, die als Hohmann-Umlaufbahn bezeichnet wird. Dies ist jedoch nur ein Motor mit ausreichendem Schub, und bei niedrigem Schub ist es eine Flugbahn, die als Spiralbahn bezeichnet wird. Die meisten Probleme des Orbitalübergangs zwischen zwei Punkten werden als Randwertprobleme gelöst (Lamberts Problem, auch Lambert-Problem genannt), aber hier werden wir sie als optimale Steuerungsprobleme behandeln und lösen.

Die Originalarbeiten sind wie folgt.

Ross, I. Michael, Qi Gong, and Pooya Sekhavat. "Low-thrust, high-accuracy trajectory optimization." Journal of Guidance, Control, and Dynamics 30.4 (2007): 921-933. https://doi.org/10.2514/1.23181

Bewegungsgleichung

\begin{align}
\dot{r} &= v_r \\
\dot{v_r} &= v_t^2 / r - 1 / r^2 + u_r \\
\dot{v_t} &= - v_r v_t / r + u_t
\end{align}

Rückhaltebedingung

Geben Sie den Anfangs- und den Endwert ein, um die Schubgröße zu begrenzen.

|u_r| \leq 0.01 \\
|u_t| \leq 0.01 \\
0 < t_f < 55

Bewertungsfunktion

Ziel ist es, die für den Schub erforderliche Gesamtzeit zu minimieren.

J = \int_{t_0}^{t_f} |u_r| + |u_t| dt

Absoluter Wertersatz

Da die Bewertungsfunktion, die Absolutwerte enthält, nicht reibungslos ist, wird das Ersetzen durch freie Variablen (auch Hilfsvariablen) als Standard für die numerische Analyse durchgeführt. http://www.msi.co.jp/nuopt/download/introduction/module/technic.pdf

u = u_1 - u_2 \\
|u| = u_1 + u_2

In Anbetracht dessen beschreiben Sie als 3 Zustandsvariablen ($ r, v_r, v_t ) und 4 Steuervariablen ( u_ {r1}, u_ {r2}, u_ {t1}, u_ {t2} $). Ich werde fortsetzen.

Wenn die Auswertungsfunktion einen Integrationsbegriff hat, geben Sie den Inhalt des Integrationsbegriffs in running_cost an.

def running_cost(prob, obj):
    ur1 = prob.controls_all_section(0)
    ur2 = prob.controls_all_section(1)
    ut1 = prob.controls_all_section(2)
    ut2 = prob.controls_all_section(3)

    return (ur1 + ur2) + (ut1 + ut2)
prob.running_cost = running_cost

Ergebnis

4_LTTO_.png

Wenn wir uns den Graphen von u ansehen, der die Steuervariable ist, können wir sehen, dass die Geschichte des Schubes für den Menschen schwer zu verstehen ist. Selbst solch ein schwieriges Problem kann leicht gelöst werden (obwohl es einige Versuche und Know-how erfordert).

Zusammenfassung

Wie oben erwähnt, haben wir die Punkte erläutert, die anhand eines einfachen Beispiels bei Verwendung von OpenGoddard festgestellt werden können. Das Folgende ist eine kurze Zusammenfassung.

Obwohl der Bereich als nicht intuitiver Teil mit Know-how verbleibt, ist es dennoch möglich, die Lösung (Trajektorie) einer nichtlinearen optimalen Steuerung leicht zu finden. Es ist wichtig anzumerken, dass es keine Garantie dafür gibt, dass es der optimale Wert ist, da es sich um eine numerische Lösung handelt und dass es sich um eine lokal optimale Lösung handelt, aber ich denke, dass es in vielen Praktiken kein Problem gibt. Bitte versuchen Sie es mit Open Goddard!

Serpentin 1

Das SLSQP von Scipy wird derzeit in Version 1.0.0 als Löser für die sequentielle Sekundärplanung verwendet. Die Leistung dieses Lösers ist jedoch nicht für große Probleme geeignet. Probleme mit einer großen Anzahl von Variablen und Knoten erfordern eine beträchtliche Rechenzeit. Es scheint, dass Coco Rahen einen hochwertigen Löser verwenden sollte, der die Eigenschaften einer spärlichen Matrix verwendet, aber dies wurde nicht verifiziert. SNOPT und IPOPT werden häufig in Veröffentlichungen erwähnt.

Serpentin 2

Zusätzlich zu dem diesmal erklärten Open Goddard haben wir ein Programm namens Open Tsiolkovsky veröffentlicht.

Diese beiden sind ein Paar Software, das Rückwärtsproblem und das Vorwärtsproblem.

Der ursprüngliche Grund für die Herstellung ist die Erzeugung der Raketenbahn, daher ist Open Goddard ein ziemlich vielseitiges Werkzeug. Es mag besser sein, ein anderes Tool für große Probleme bei der optimalen Steuerung zu verwenden, aber ich denke, dass es ein gutes Tool ist, da einfache Berechnungen nur wenige Abhängigkeiten aufweisen und einfach zu installieren sind (heißes Selbstlob).

Recommended Posts

OpenGoddard Verwendung der 2-Python-Bibliothek zur nichtlinearen optimalen Steuerung und Trajektoriengenerierung
Verwendung der OpenGoddard 3-Python-Bibliothek zur nichtlinearen optimalen Steuerung und Trajektoriengenerierung
Verwendung der OpenGoddard 4-Python-Bibliothek zur nichtlinearen optimalen Steuerung und Trajektoriengenerierung
Verwendung der OpenGoddard 1-Python-Bibliothek zur nichtlinearen optimalen Steuerung und Trajektoriengenerierung
Verwendung von Anfragen (Python Library)
[Python] Verwendung von Matplotlib, einer Bibliothek zum Zeichnen von Diagrammen
So installieren und verwenden Sie pandas_datareader [Python]
[Python] Organisieren der Verwendung für Anweisungen
Python: Verwendung von Einheimischen () und Globalen ()
Verwendung von "deque" für Python-Daten
Verwendung von Python zip und Aufzählung
Verwendung ist und == in Python
Verwendung der C-Bibliothek in Python
[Python] Verwendung von Hash-Funktion und Taple.
Tipps für diejenigen, die verwirrt sind, wie man is und == in Python verwendet
Verwendung von OAuth und API für Dienstkonten mit Google API Client für Python
[BigQuery] Verwendung der BigQuery-API für die Python-Tabellenerstellung-
[Python] [Django] Verwendung des Auswahlfelds und Hinzufügen von Optionen
[Python] Verwendung der Diagrammerstellungsbibliothek Altair
Python # So überprüfen Sie Typ und Typ für Super-Anfänger
python3: Verwendung der Flasche (2)
[Python] Verwendung von Liste 1
Wie benutzt man Python Argparse?
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
[Python] Verwendung von input ()
Wie benutzt man Python Lambda?
[Python] Verwendung von virtualenv
python3: Verwendung der Flasche (3)
python3: Wie man eine Flasche benutzt
Verwendung von Python-Bytes
[Einführung in die Udemy Python3 + -Anwendung] 36. Verwendung von In und Not
TensorFlow-Lernmethode für Profis der freien Künste und Python-Anfänger
[Python] Zusammenfassung der Verwendung von Split- und Join-Funktionen
Wie nutzt man maschinelles Lernen für die Arbeit? 03_Python-Codierungsverfahren
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
Ich wusste nicht, wie ich die [Python] für die Anweisung verwenden sollte
Python: So verwenden Sie Async mit
So installieren und verwenden Sie Tesseract-OCR
[Python] Verwendung der Pandas-Serie
Verwendung von SQLite in Python
Verwendung von .bash_profile und .bashrc
So installieren und verwenden Sie Graphviz
[Python] Verwendung von Liste 3 Hinzugefügt
Wie man MySQL mit Python benutzt
Verwendung der Python-API von OpenPose
Verwendung von ChemSpider in Python
Python: Verwendung von pydub (Wiedergabe)
Verwendung von PubChem mit Python
Verwendung der Zip-Funktion von Python
[Python] Verwendung der Typetalk-API
Verwendung von Funktionen in separaten Dateien Perl-Version und Python-Version
Verwendung von Umgebungsvariablen für Serverless Framework und Python und Verwaltung von Phasen
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
Verwendung eines externen Editors für die Python-Entwicklung mit Grasshopper
[Einführung in Python] Verwendung des Booleschen Operators (und ・ oder ・ nicht)