Comment créer une intersection / conjonction satellite dans GMAT?

Oct 03 2020

Commencer à apprendre le GMAT. J'ai pu assez bien faire en sorte que mon satellite se déplace dans l'espace avec diverses cibles et manœuvres dans la séquence de la mission.

Maintenant, j'aimerais que mon satellite cible un autre satellite et qu'il manœuvre en conjonction avec ce satellite (rien de malveillant, je veux juste que les satellites soient sur cinq lorsqu'ils se croisent :)). Est-il possible de cibler un autre satellite pour des manœuvres en GMAT?

Réponses

2 ChrisR Oct 04 2020 at 05:54

Pour des scénarios plus compliqués comme ceux-ci, vous devez probablement utiliser l'interface Python de GMAT.

Je recommanderais ce qui suit:

  1. Configurez les deux vaisseaux spatiaux pour qu'ils soient propagés ensemble: je ne suis pas sûr que cela soit disponible dans l'interface graphique, mais dans le script, changez l' Propagateinstruction en Propagate Synchronized(cf. la documentation ).
  2. Au lieu de se propager sur toute l'orbite, propagez pendant de petites périodes de temps, par exemple 60 secondes, et à la fin de chacune, appelez votre fonction Python. D'emblée, je dirais que vous devez transmettre la position et la vitesse des deux vaisseaux spatiaux à cette fonction, par exemple GMAT MyModule.DoStuff(SC1.J2000.X, SC1.J2000.Y, ..., SC2.J2000.VY, SC2.J2000.VZ).
  3. Dans cette fonction, vous devrez calculer l'optimum $\Delta \vec v$, renvoyez-le à GMAT, appliquez-le à un moment précis de votre choix et calculez l'erreur. En effet, vous devrez utiliser GMAT pour faire les segments de propagation de votre correcteur différentiel (ou SQP si vous voulez une solution vraiment optimale).

Source: Je travaille actuellement sur un correcteur différentiel sur ma boîte à outils . Je recommande également vivement la thèse de doctorat du Dr Parrish , en particulier le chapitre 3, qui détaille comment configurer un correcteur différentiel puis un SQP pour un contrôle optimal. Bien que centrée sur l'optimisation à faible poussée, la même méthode peut être utilisée avec moins de nœuds pour une optimisation impulsive.

2 PeterNazarenko Oct 04 2020 at 23:48

J'avais lu il y a de nombreuses années dans un livre la règle empirique approximative pour les manœuvres orbitales et les rendez-vous: supposons que deux vaisseaux spatiaux suivent la même trajectoire (circulaire) avec une distance entre eux, disons 100 km, et le second navire essaie d'intercepter le premier dans une période orbitale. Le deuxième navire doit changer d'orbite de circulaire à elliptique avec la différence entre l'apoapside et la périastre égale à 1/5 de la distance horizontale (20 km). Il y a une demi-ellipse dans le cas où un satellite a une orbite basse par rapport à un autre, nous avons donc besoin d'un point de tir du moteur à la distance de 5/2 de la différence d'altitude des orbites.

Ici, nous devons résoudre deux tâches: la seconde - pour obtenir les paramètres d'une manœuvre de Hohmann pour le transfert interorbitaire, et la première - pour obtenir un point d'exécution de la manœuvre. La solution de la deuxième tâche dans GMAT est triviale (pour les utilisateurs avec une certaine expérience). Je suppose que cette solution pour la première tâche est également possible dans GMAT, mais je n'ai pas non plus trouvé d'option aussi triviale. J'utilise donc la technique suivante: l' Propagateopérateur à l'intérieur de l' Whileopérateur GMAT . Le paramètre de Propagateest une petite quantité de temps, comme ChrisR l'a mentionné dans sa réponse(J'utilise 10 secondes). D'autres trucs sont dans le piese du code pour le cas de deux satellites, un sur orbite basse avec peu d'excentricité (vaisseau spatial par défaut GMAT, j'ai changé quelques valeurs par défaut GMAT: poussée - de 10 N à 1000 N, Isp de 300 à 350, carburant masse de 756 kg à 1500 kg), et le second environ 600 km plus haut sur une orbite presque circulaire:

BeginMissionSequence;
Propagate Synchronized DefaultProp(DefaultSC) DefaultProp(Spacecraft1) {DefaultSC.ElapsedSecs = 12000.0};  % Some initial coast
While ratio > 2.5
   Propagate Synchronized DefaultProp(DefaultSC) DefaultProp(Spacecraft1) {DefaultSC.ElapsedSecs = 10.0, OrbitColor = [255 128 192]};
   BeginScript
      GMAT dR = Spacecraft1.RMAG-DefaultSC.RMAG;
      GMAT dist = sqrt((DefaultSC.X-Spacecraft1.X)*(DefaultSC.X-Spacecraft1.X)+(DefaultSC.Y-Spacecraft1.Y)*(DefaultSC.Y-Spacecraft1.Y)+(DefaultSC.Z-Spacecraft1.Z)*(DefaultSC.Z-Spacecraft1.Z)-dR*dR);
      GMAT ratio = dist/dR;
   EndScript;
EndWhile;
...

Le reste du code est une manœuvre de Hohmann avec brûlure finie. Toutes les variables, bien sûr, doivent être déclarées dans GMAT.

Toutes les suggestions et améliorations sont bien entendu les bienvenues.

Je pense que les prochains liens seront utiles:

https://en.wikipedia.org/wiki/Orbit_phasing

https://en.wikipedia.org/wiki/Clohessy%E2%80%93Wiltshire_equations

Wikipedia dit que les équations de Clohessy – Wiltshire "sont très utiles pour planifier le rendez-vous du chasseur avec la cible" mais, honnêtement, maintenant je n'ai aucune idée de comment les appliquer dans GMAT.

En outre, cette réponse peut être utile.