Comment utiliser la bibliothèque OpenGoddard 4-python pour un contrôle optimal non linéaire et la génération de trajectoires

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

Comment utiliser OpenGoddard 1 Comment utiliser OpenGoddard 2 Comment utiliser OpenGoddard 3 OpenGoddard Comment utiliser 4 ← Maintenant ici

Cette fois, je parlerai de la formulation et des résultats en utilisant l'une des techniques standards d'optimisation.

Problème de transition en orbite basse poussée

En raison du développement de la propulsion électrique comme le moteur ionique, devenu célèbre parce que l'explorateur d'astéroïdes a également été installé à Yabusa, il est de plus en plus courant de passer de la terre à d'autres planètes par propulsion électrique au lieu de propulsion chimique comme un moteur de fusée. J'ai fait. Il est bien connu que la transition orbitale en propulsion chimique nécessite l'énergie minimale requise pour prendre une orbite appelée orbite de Hohmann. Cependant, ce n'est qu'un moteur avec une poussée suffisante, et à faible poussée, ce sera une trajectoire appelée trajectoire en spirale. La plupart des problèmes de transition orbitale entre deux points sont résolus comme des problèmes de valeurs aux limites (problème de Lambert, également appelé problème de Lambert), mais ici nous les traiterons comme des problèmes de contrôle optimal et les résoudrons.

Les papiers originaux sont les suivants.

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

Équation du mouvement

\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}

Condition de contention

Entrez la valeur initiale et la valeur finale pour limiter l'amplitude de la poussée.

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

Fonction d'évaluation

Le but est de minimiser le temps total nécessaire à la poussée.

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

Remplacement de la valeur absolue

Étant donné que la fonction d'évaluation contenant des valeurs absolues n'est pas lisse, le remplacement à l'aide de variables libres (également des variables auxiliaires) est effectué en tant que norme pour l'analyse numérique. http://www.msi.co.jp/nuopt/download/introduction/module/technic.pdf

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

En tenant compte de cela, décrivez comme 3 variables d'état ($ r, v_r, v_t ) et 4 variables de contrôle ( u_ {r1}, u_ {r2}, u_ {t1}, u_ {t2} $). Je vais continuer.

Si la fonction d'évaluation a un terme d'intégration, spécifiez le contenu du terme d'intégration dans running_cost.

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

résultat

4_LTTO_.png

En regardant le graphique de u, qui est la variable de contrôle, nous pouvons voir que l'histoire de la poussée est difficile à comprendre pour les humains. Même un problème aussi difficile peut être facilement résolu (bien qu'il nécessite quelques essais et erreurs et savoir-faire).

Résumé

Comme mentionné ci-dessus, nous avons expliqué les points qui peuvent être notés à partir d'un exemple simple lors de l'utilisation d'OpenGoddard. Ce qui suit est un bref résumé.

Bien que la zone reste comme une partie non intuitive avec savoir-faire, il est encore possible de trouver facilement la solution (trajectoire) d'un contrôle optimal non linéaire. Il est important de noter qu'il n'y a aucune garantie que ce soit la valeur optimale car c'est une solution numérique, et que c'est une solution localement optimale, mais je pense qu'il n'y a pas de problème dans de nombreuses pratiques. Veuillez essayer d'utiliser Open Goddard!

Serpentine 1

Le SLSQP de Scipy est actuellement utilisé dans la v1.0.0 comme solveur pour la méthode de planification secondaire séquentielle, mais les performances de ce solveur ne sont pas adaptées aux problèmes à grande échelle. Les problèmes avec un grand nombre de variables et de nœuds prennent un temps de calcul considérable. Il semble que Coco Rahen devrait utiliser un solveur haut de gamme qui utilise les caractéristiques d'une matrice clairsemée, mais cela n'a pas été vérifié. SNOPT et IPOPT sont souvent mentionnés dans les articles.

Serpentine 2

En plus de l'Open Goddard expliqué cette fois, nous avons publié un programme appelé Open Tsiolkovsky.

Ces deux sont une paire de logiciels, le problème inverse et le problème avant.

La raison originale de sa création est la génération d'orbite de fusée, mais par conséquent, Open Goddard est un outil assez polyvalent. Il peut être préférable d'utiliser un autre outil pour les problèmes de contrôle optimal à grande échelle, mais je pense que c'est un bon outil car les calculs simples ont peu de dépendances et sont faciles à installer (éloges à chaud)

Recommended Posts

OpenGoddard Comment utiliser la bibliothèque 2-python pour un contrôle optimal non linéaire et la génération de trajectoires
Comment utiliser la bibliothèque OpenGoddard 3-python pour un contrôle optimal non linéaire et la génération de trajectoires
Comment utiliser la bibliothèque OpenGoddard 4-python pour un contrôle optimal non linéaire et la génération de trajectoires
Comment utiliser la bibliothèque OpenGoddard 1-python pour un contrôle optimal non linéaire et la génération de trajectoires
Comment utiliser les requêtes (bibliothèque Python)
[python] Comment utiliser Matplotlib, une bibliothèque pour dessiner des graphiques
Comment installer et utiliser pandas_datareader [Python]
[Python] Organisation de l'utilisation des instructions
python: Comment utiliser les locals () et globals ()
Comment utiliser "deque" pour les données Python
Comment utiliser le zip Python et énumérer
Comment utiliser is et == en Python
Comment utiliser la bibliothèque C en Python
[Python] Comment utiliser la fonction de hachage et taple.
Conseils pour ceux qui ne savent pas comment utiliser is et == en Python
Comment utiliser OAuth et API de compte de service avec le client API Google pour python
[BigQuery] Comment utiliser l'API de BigQuery pour Python -Création de table-
[Python] [Django] Comment utiliser le champ de choix et comment ajouter des options
[Python] Comment utiliser la bibliothèque de création de graphes Altair
Python # Comment vérifier le type et le type pour les super débutants
python3: Comment utiliser la bouteille (2)
[Python] Comment utiliser la liste 1
Comment utiliser Python Argparse
Python: comment utiliser pydub
[Python] Comment utiliser checkio
[Python] Comment utiliser input ()
Comment utiliser Python lambda
[Python] Comment utiliser virtualenv
python3: Comment utiliser la bouteille (3)
python3: Comment utiliser la bouteille
Comment utiliser les octets Python
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
Méthode d'apprentissage TensorFlow pour les professionnels des arts libéraux et les débutants en Python
[Python] Résumé de l'utilisation des fonctions de fractionnement et de jointure
Comment utiliser l'apprentissage automatique pour le travail? 03_Procédure de codage Python
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
Je ne savais pas comment utiliser l'instruction [python] for
Python: comment utiliser async avec
Comment installer et utiliser Tesseract-OCR
[Python] Comment utiliser la série Pandas
Comment utiliser SQLite en Python
Comment utiliser .bash_profile et .bashrc
Comment installer et utiliser Graphviz
[Python] Comment utiliser la liste 3 Ajouté
Comment utiliser Mysql avec python
Comment utiliser l'API Python d'OpenPose
Comment utiliser ChemSpider en Python
Python: Comment utiliser pydub (lecture)
Comment utiliser PubChem avec Python
Comment utiliser la fonction zip de python
[Python] Comment utiliser l'API Typetalk
Comment utiliser les fonctions dans des fichiers séparés version Perl et version Python
Comment utiliser les variables d'environnement Serverless Framework et Python et gérer les étapes
[Introduction à Python] Comment utiliser l'opérateur in dans l'instruction for?
Comment utiliser un éditeur externe pour le développement Python avec Grasshopper
[Introduction à Python] Comment utiliser l'opérateur booléen (et ・ ou ・ non)