Carrière, Commande satellite par Kos

Une histoire épique à raconter ? Vous souhaitez raconter votre dernière épopée au confins de l'univers ? Racontez toutes vos histoires ici même.
Avatar de l’utilisateur
Duna attack!
Messages : 20
Inscription : 26 mai 2014, 09:06
Contact :

Re: Carrière, Commande satellite par Kos

Message par Duna attack! » 25 février 2017, 15:09

Nan il n'y a pas vraiment de tuto pour KOS à part: https://ksp-kos.github.io/KOS/tutorials.htm
sa reste trop peut pour pouvoir appeler sa un tutoriel, et étant français pas trop doué pour l'anglais sa n’arrange pas les choses.
Devis Shadoks
- Ce n'est qu'en essayant continuellement que l'on finit par réussir....
En d'autres termes... Plus ça rate et plus on a de chances que ça marche...
- S'il n'y a pas de solution c'est qu'il n'y a pas de problème.

Avatar de l’utilisateur
Duna attack!
Messages : 20
Inscription : 26 mai 2014, 09:06
Contact :

Re: Carrière, Commande satellite par Kos

Message par Duna attack! » 26 février 2017, 22:47

4éme Mission: Effectuer une orbite de Kerbin pendant 40 min pour validation
délivré par: Space exploration & Technology initiative.

Mission bonus: Effectuer une orbite de Kerbin et récupération de la sonde sur terre ou en mer.
délivré par: Space Penguins, inc.

Mission bonus: Test part, Parachute MK16 entre 1km et 6km et entre 120m/s et 300m/s.
délivré par: Research & Development Department.

Étape de la mission:

1- conte à rebours.
2- cible: la vertical, poussé aux max, décollage(stage).
3- Quand Apogée > que 90km, extinction du moteur.
3.1- Gravity Turn début 1km, 5° Est jusqu'à 80° Est à 30Km.
3.2- 60km antenne Communotron 16 active.
3.3- 65km ouverture des Panneaux Solaire.
4- Quand Altitude > que 71km, on Scan la science présente et la transfère au KSC.
5- Calcule du nœud de manœuvre pour la circularisation de l'orbite.
6- Burn pour la circularisation de l'orbite.
7- Attente de 40 min pour validation de la mission.
8- Cible rétrograde et Burn jusqu'à Périapsis <32km .
9- Cible rétrograde jusqu'à Altitude < de 2KM
9.1- 60km antenne Communotron 16 rétracté.
9.2- 2km ouverture du parachute
END

Pour le Nœud de Manœuvre, Kos interdit de pouvoir rentré(SET) un noeud de manoeuvre si la Tracking Station n'est pas passé au niveaux 2, mais autorise comme même de pouvoir le définir pour en récupérer les valeurs,Temps avant Burn, delta-v et temps de Burn.

Pour le Burn, Kos défini les valeurs,Temps avant Burn, delta-v et temps de Burn. mais prend pas en compte le faite que le vaisseaux perd de la Masse pendant la combustion; ce qui fait que le Thrus Twr augment au fur et à mesure que la masse diminue, se qui entraine une poussé(delta-v) plus importante que la poussé cible pour le temps de Burn définie d'origine.
Pour palier à ce problème il faut recalculé le temps de Burn, par rapport à la perte de masse pour avoir la bonne poussé.
Pour cela il faut se servir de "Équation de Tsiolkovski"
Lien Wiki:https://fr.wikipedia.org/wiki/%C3%89qua ... siolkovski
Lien Wiki(KSP):http://wiki.kerbalspaceprogram.com/wiki ... ket_Design
En fouillant un peut je suis tombé sur le travail d'un mec Troy Boileau - Troy Fawkes :https://www.troyfawkes.com/adventures-in-ksp-kos-math/

Code : Tout sélectionner

CLEARSCREEN.

PRINT "--------------------------------------------------".
PRINT "-                                                -".
PRINT "-    Initialisation du Processus de Lancement    -".
PRINT "-                                                -".
PRINT "--------------------------------------------------".
PRINT " ".
PRINT " ".
WAIT 1.
PRINT "compte a rebours:".
PRINT " ".
PRINT " ".

//Il s'agit de notre boucle de compte à rebours, qui passe de 10 à 5
FROM {local countdown is 10.} UNTIL countdown = 5 STEP {SET countdown to countdown - 1.} DO {
    PRINT "..." + countdown + ".".
    WAIT 1. // Met en pause le script ici pendant 1 seconde.
	}.
	
PRINT "...5...Tous les Systemes sur ON.".
WAIT 1.

PRINT "...4.".
WAIT 1.

PRINT "...3.".
WAIT 1.


PRINT "...2.".
WAIT 1.

//SAS ON.
PRINT "...1...Thrust max.".
SET thrott TO 1.0.
LOCK THROTTLE to thrott.
LOCK STEERING TO HEADING(90, 90).
WAIT 1.

PRINT "...0...Decolage.".
PRINT " ".
STAGE.//Décolgage

PRINT "...On brule jusqua AP = 90km".
PRINT " ".

// Initialisation des ALTITUDE = 1; Pour valeur non ateinte
declare ALTITUDEa To 1.
declare ALTITUDEb to 1.
declare ALTITUDEc to 1.
declare ALTITUDEd to 1.
declare ALTITUDEe to 1.
declare ALTITUDEf to 1.
declare ALTITUDEg to 1.
declare ALTITUDEh to 1.
declare ALTITUDEi to 1.
declare ALTITUDEj to 1.
declare ALTITUDEk to 1.
declare ALTITUDEl to 1.
declare ALTITUDEm to 1.
declare ALTITUDEn to 1.
declare ALTITUDEo to 1.
declare ALTITUDEp to 1.
declare ALTITUDEq to 1.
declare ALTITUDEr to 1.
declare ALTITUDEs to 1.
declare ALTITUDEt to 1.


UNTIL SHIP:APOAPSIS > 90000 { //N'oubliez pas que toutes les altitudes seront en mètres, pas en kilomètres

	//Gravity turn
	//5 degrés tous les 2 km jusqu'à 45 degrés à 20 km
	

	
	IF ALTITUDEa = 1 {
	WHEN SHIP:ALTITUDE > 1000 THEN {
	PRINT "...Debut du gravity turn.".
	PRINT " ".
	PRINT "...Inclinaison  5 degre est.".
	LOCK STEERING TO HEADING(90,85).
	SET ALTITUDEa to 0.
	}
	}
	
	WHEN ALTITUDEb = 1 THEN {
	WHEN SHIP:ALTITUDE > 2000 THEN {
	PRINT "...Inclinaison 10 degre est.".
	LOCK STEERING TO HEADING(90,80).
	SET ALTITUDEb to 0.
	}
	}
	
	WHEN ALTITUDEc = 1 THEN {
	WHEN SHIP:ALTITUDE > 4000 THEN {
	PRINT "...Inclinaison 15 degre est.".
	LOCK STEERING TO HEADING(90,75).
	SET ALTITUDEc to 0.
	}
	}
	
	WHEN ALTITUDEd = 1 THEN {
	WHEN SHIP:ALTITUDE > 6000 THEN {
	PRINT "...Inclinaison 20 degre est.".
	LOCK STEERING TO HEADING(90,70).
	SET ALTITUDEd to 0.
	}
	}
	
	WHEN ALTITUDEe = 1 THEN {
	WHEN SHIP:ALTITUDE > 8000 THEN {
	PRINT "...Inclinaison 25 degre est.".
	LOCK STEERING TO HEADING(90,65).
	SET ALTITUDEe to 0.

	}
	}
	
	WHEN ALTITUDEf = 1 THEN {
	WHEN SHIP:ALTITUDE > 10000 THEN {
	PRINT "...Inclinaison 30 degre est.".
	LOCK STEERING TO HEADING(90,60).
	SET ALTITUDEf to 0.
	}
	}
	
	WHEN ALTITUDEg = 1 THEN {
	WHEN SHIP:ALTITUDE > 12000 THEN {
	PRINT "...Inclinaison 35 degre est.".
	LOCK STEERING TO HEADING(90,55).
	SET ALTITUDEg to 0.
	}
	}
	
	WHEN ALTITUDEh = 1 THEN {
	WHEN SHIP:ALTITUDE > 14000 THEN {
	PRINT "...Inclinaison 40 degre est.".
	LOCK STEERING TO HEADING(90,50).
	SET ALTITUDEh to 0.
	}
	}
	
	WHEN ALTITUDEi = 1 THEN {
	WHEN SHIP:ALTITUDE > 16000 THEN {
	PRINT "...Inclinaison 45 degre est.".
	LOCK STEERING TO HEADING(90,45).
	SET ALTITUDEi to 0.
	}
	}
	
	WHEN ALTITUDEj = 1 THEN {
	WHEN SHIP:ALTITUDE > 18000 THEN {
	PRINT "...Inclinaison 50 degre est.".
	LOCK STEERING TO HEADING(90,40).
	SET ALTITUDEj to 0.
	}
	}
	
	WHEN ALTITUDEk = 1 THEN {
	WHEN SHIP:ALTITUDE > 20000 THEN {
	PRINT "...Inclinaison 55 degre est.".
	LOCK STEERING TO HEADING(90,35).
	SET ALTITUDEk to 0.
	}
	}
	
	WHEN ALTITUDEl = 1 THEN {
	WHEN SHIP:ALTITUDE > 22000 THEN {
	PRINT "...Inclinaison 60 degre est.".
	LOCK STEERING TO HEADING(90,30).
	SET ALTITUDEl to 0.
	}
	}
	
	WHEN ALTITUDEm = 1 THEN {
	WHEN SHIP:ALTITUDE > 24000 THEN {
	PRINT "...Inclinaison 65 degre est.".
	LOCK STEERING TO HEADING(90,25).
	SET ALTITUDEm to 0.
	}
	}
	
		WHEN ALTITUDEo = 1 THEN {
	WHEN SHIP:ALTITUDE > 22000 THEN {
	PRINT "...Inclinaison 70 degre est.".
	LOCK STEERING TO HEADING(90,20).
	SET ALTITUDEo to 0.
	}
	}
	
	WHEN ALTITUDEp = 1 THEN {
	WHEN SHIP:ALTITUDE > 26000 THEN {
	PRINT "...Inclinaison 75 degre est.".
	LOCK STEERING TO HEADING(90,15).
	SET ALTITUDEp to 0.
	}
	}
	
	WHEN ALTITUDEq = 1 THEN {
	WHEN SHIP:ALTITUDE > 30000 THEN {
	PRINT "...Inclinaison 80 degre est.".
	LOCK STEERING TO HEADING(90,10).
	SET ALTITUDEq to 0.
	}
	}
		
	WHEN ALTITUDEr = 1 THEN {
	WHEN SHIP:ALTITUDE > 60000 THEN {
	SET antenna TO SHIP:PARTSDUBBED("Communotron 16").
	FOR ant IN antenna {
	ant:GETMODULE("ModuleRTAntenna"):DOEVENT("ACTIVATE").
	}

	PRINT "...Antenne Communotron 16 Activer.".
	PRINT " ".
	SET ALTITUDEr to 0.
	}
	}
	
	WHEN ALTITUDEs = 1 THEN {
	WHEN SHIP:ALTITUDE > 65000 THEN {
	Panels on.
	PRINT "...Ouverture Des Panneaux Solaires.".
	PRINT " ".
   	SET ALTITUDEs to 0.
	}
	}
	
	WAIT 0.001.//liste des moteur actif et verifie si conbustion 
	GEAR OFF.
	LIST ENGINES IN elist.

	FOR e IN elist {
	IF e:FLAMEOUT and STAGE:READY {
        STAGE.
	PRINT "...Largage du 1er Moteur.".
	PRINT " ".
	}
	}
}

PRINT "...Moteur sur OFF".
PRINT " ".
PRINT "...Trajectoire Suborbitale finie!  APOAPSIS: " + round(SHIP:APOAPSIS).
PRINT " ".

SET thrott TO 0.
LOCK THROTTLE to thrott.
SET SHIP:CONTROL:PILOTMAINTHROTTLE TO 0.

WAIT UNTIL SHIP:ALTITUDE > 71000. //on fait les différente mesure scientifique à 71 km

PRINT "...Relever scientifique en cours.".
PRINT " ".
for sm in ship:modulesnamed("ModuleScienceExperiment") {
if not sm:hasdata sm:deploy(). wait 3.
if sm:hasdata for sd in sm:data {
	print sd:title.
	print "science acquise en renvoyant=" + round(sd:sciencevalue,2).
	print "science acquise en transmettant=" +round (sd:transmitvalue,2).
	print "Nb de donner=" + sd:dataamount.
	print " ".
	sm:TRANSMIT.
       	}
}

PRINT "...Relever scientifique Fini.".
PRINT " ".

WAIT 1.

// Circularisation d'orbite

//in km
SET g TO KERBIN:MU / KERBIN:RADIUS^2.
declare parameter new_otherapsis to 90. 
declare parameter position to 1.

set new_otherapsis to new_otherapsis * 1000.

if position = 1 {
  set node_time to TIME:SECONDS + ETA:APOAPSIS.
  set otherapsis to PERIAPSIS.
  set burnapsis to APOAPSIS.
}
else if position = 0 {
  set node_time to TIME:SECONDS + ETA:PERIAPSIS.
  set otherapsis to APOAPSIS.
  set burnapsis to PERIAPSIS.
}
set v_old to sqrt(BODY:MU * (2/(burnapsis+BODY:RADIUS) -
                             1/SHIP:OBT:SEMIMAJORAXIS)).
set v_new to sqrt(BODY:MU * (2/(burnapsis+BODY:RADIUS) -
                 1/(BODY:RADIUS+(new_otherapsis+burnapsis)/2))).
set dv to v_new-v_old.
PRINT "...Calcule du point de maneuvre pour finalisation de l'orbite.".
PRINT " ".
PRINT ".temps avant Burn:" + round(ETA:APOAPSIS,2) + "s.".
PRINT ".Delta-v" + round(dv,2).

// execute maneuver node
// calculer l'accélération maximale initiale du navire
set max_acc_ini to ship:maxthrust/ship:mass.

 // Dans la poursuite de a1 ...
 // Quel est notre FAI efficace?
SET eIsp TO 0.

LIST engines IN my_engines.
FOR eng IN my_engines {
SET eIsp TO eIsp + eng:maxthrust / ship:maxthrust * eng:isp.
}

// Quelle est notre vitesse d'échappement effective?
SET Ve TO eIsp * 9.81.

// What's our final mass?
SET final_mass TO mass*CONSTANT():e^(-1*dv / Ve).

 // Obtenez notre accélération finale.
SET max_acc_fin TO ship:maxthrust / final_mass.
 
 // Obtenez le temps nécessaire pour terminer la gravure.
SET t TO dv / ((max_acc_ini + max_acc_fin) / 2).

 // Définit les heures de début et de fin.
SET time_debut TO node_time - t/2.
SET time_fin TO node_time + t/2.

PRINT ".Estimation du temps de Burn: " + round(t,2) + "s".
PRINT " ".

//pointe sur le noeud, ne se soucient pas du sens du roulis.
SET myDir TO HEADING(90, 0).
LOCK STEERING TO myDir.

WAIT UNTIL (TIME:SECONDS + 7) >= time_debut.
SET myDir TO HEADING(90, 0).
LOCK STEERING TO myDir.


// Burn.
WAIT UNTIL TIME:SECONDS >= time_debut.
LOCK throttle TO 1.

UNTIL TIME:SECONDS >= time_fin {
SET myDir TO HEADING(90, 0).
LOCK STEERING TO myDir.
}
LOCK throttle TO 0.

PRINT "...Fin du Burn.".
PRINT " ".

PRINT "...Orbite circulariser.".
PRINT " ".

PRINT "Apoapsis= " + (round(SHIP:APOAPSIS)) + " ; Periapsis= " + round(SHIP:PERIAPSIS).
PRINT " ".

	


wait 1.

PRINT "...En Attente de 40 min pour valider la mission.".
PRINT " ".
WAIT 2400.

SET myDir TO SHIP:RETROGRADE.
LOCK STEERING TO myDir.
SET thrott TO 1.0.
WAIT 20.

PRINT "...Burn pour periapsis < 32km.".
PRINT " ".

SET myDir TO SHIP:RETROGRADE.
LOCK STEERING TO myDir.
SET thrott TO 1.0.
LOCK THROTTLE to thrott.
WAIT UNTIL SHIP:PERIAPSIS < 32000.	
	
PRINT "...Fin du Burn.".
PRINT " ".
	
SET thrott TO 0.
LOCK THROTTLE to thrott.
SET SHIP:CONTROL:PILOTMAINTHROTTLE TO 0.

UNTIL SHIP:ALTITUDE < 2000 { //Ouverture des parachutes(stage) à 2km
	SET myDir TO SHIP:RETROGRADE.
	LOCK STEERING TO myDir.
	
	WHEN ALTITUDEt = 1 THEN {
	WHEN SHIP:ALTITUDE < 60000 THEN {
	SET antenna TO SHIP:PARTSDUBBED("Communotron 16").
	FOR ant IN antenna {
	ant:GETMODULE("ModuleRTAntenna"):DOEVENT("DEACTIVATE").
	}

	PRINT "...Antenne Communotron 16 Retracter.".
	PRINT " ".
	SET ALTITUDEt to 0.
	}
	}
	
	}

STAGE.
PRINT "...Ouverture du parachute".
PRINT " ".

SET SHIP:CONTROL:PILOTMAINTHROTTLE TO 0.//met la poussé a O en fin de programme

WAIT SHIP:ALTITUDE < 2.
PRINT "--------------------------------------------------".
PRINT "-                                                -".
PRINT "-          .......Mission Reussi.......          -".
PRINT "-                                                -".
PRINT "--------------------------------------------------".
Ajout: Calculer l'accélération(poussée) par rapport à une valeur cible TWR= 1.7
Le calcul du rapport poussée-poids est très simple La formule pour cela est la poussée(T) de tous vos moteurs d'étape actuelle divisé par le poids(m) de votre navire.
TWR= T / m * g(9.81)
Réglage du Thorttle = TWRcible/TWR.
j'ai modifier mon Gravity Turn pour optimisé mon lancer, et je pense avoir un résultat pas trop mal.

Code : Tout sélectionner

CLEARSCREEN.

PRINT "--------------------------------------------------".
PRINT "-                                                -".
PRINT "-    Initialisation du Processus de Lancement    -".
PRINT "-                                                -".
PRINT "--------------------------------------------------".
PRINT " ".
PRINT " ".
WAIT 1.
PRINT "compte a rebours:".
PRINT " ".
PRINT " ".

//Il s'agit de notre boucle de compte à rebours, qui passe de 10 à 5
FROM {local countdown is 10.} UNTIL countdown = 5 STEP {SET countdown to countdown - 1.} DO {
    PRINT "..." + countdown + ".".
    WAIT 1. // Met en pause le script ici pendant 1 seconde.
	}.
	
PRINT "...5...Tous les Systemes sur ON.".
WAIT 1.

PRINT "...4.".
WAIT 1.

PRINT "...3.".
WAIT 1.


PRINT "...2.".
WAIT 1.

//SAS ON.
PRINT "...1...Thrust max.".
SET thrott TO 1.0.
LOCK THROTTLE to thrott.
LOCK STEERING TO HEADING(90, 90).
WAIT 1.

PRINT "...0...Decolage.".
PRINT " ".
STAGE.//Décolgage

PRINT "...On brule jusqua AP = 90km".
PRINT " ".

// Initialisation des ALTITUDE = 1; Pour valeur non ateinte
declare ALTITUDEa To 1.
declare ALTITUDEb to 1.
declare ALTITUDEc to 1.
declare ALTITUDEd to 1.
declare ALTITUDEe to 1.
declare ALTITUDEf to 1.
declare ALTITUDEg to 1.
declare ALTITUDEh to 1.
declare ALTITUDEi to 1.
declare ALTITUDEj to 1.
declare ALTITUDEk to 1.
declare ALTITUDEl to 1.
declare ALTITUDEm to 1.
declare ALTITUDEn to 1.
declare ALTITUDEo to 1.
declare ALTITUDEp to 1.
declare ALTITUDEq to 1.
declare ALTITUDEr to 1.
declare ALTITUDEs to 1.
declare ALTITUDEt to 1.

// PID-loop
SET g TO KERBIN:MU / KERBIN:RADIUS^2.
PRINT "...Gravite =" + round(g,2).
PRINT " ".
LOCK M to SHIP:MASS.
LOCK Thr to SHIP:MAXTHRUST.
LOCK Twr to Thr / (m * g).

SET Twr_setpoint TO 1.7.
PRINT "...Reglage de l'accelerateur pour TWR=1.7".
PRINT " ".

UNTIL SHIP:APOAPSIS > 90000 { //N'oubliez pas que toutes les altitudes seront en mètres, pas en kilomètres
	
	SET thrott TO Twr_setpoint/Twr.
	LOCK THROTTLE to thrott.
		
	//Gravity turn
	//5 degrés tous les 2 km jusqu'à 45 degrés à 20 km
		
	IF ALTITUDEa = 1 {
	WHEN SHIP:ALTITUDE > 1000 THEN {
	PRINT "...Debut du gravity turn.".
	PRINT " ".
	PRINT "...Inclinaison 5 degre est.".
	LOCK STEERING TO HEADING(90,85).
	SET ALTITUDEa to 0.
	}
	}
	
	WHEN ALTITUDEb = 1 THEN {
	WHEN SHIP:ALTITUDE > 2000 THEN {
	PRINT "...Inclinaison 10 degre est.".
	LOCK STEERING TO HEADING(90,80).
	SET ALTITUDEb to 0.
	}
	}
	
	WHEN ALTITUDEc = 1 THEN {
	WHEN SHIP:ALTITUDE > 4000 THEN {
	PRINT "...Inclinaison 15 degre est.".
	LOCK STEERING TO HEADING(90,75).
	SET ALTITUDEc to 0.
	}
	}
	
	WHEN ALTITUDEd = 1 THEN {
	WHEN SHIP:ALTITUDE > 6000 THEN {
	PRINT "...Inclinaison 20 degre est.".
	LOCK STEERING TO HEADING(90,70).
	SET ALTITUDEd to 0.
	}
	}
	
	WHEN ALTITUDEe = 1 THEN {
	WHEN SHIP:ALTITUDE > 9000 THEN {
	PRINT "...Inclinaison 25 degre est.".
	LOCK STEERING TO HEADING(90,65).
	SET ALTITUDEe to 0.

	}
	}
	
	WHEN ALTITUDEf = 1 THEN {
	WHEN SHIP:ALTITUDE > 12000 THEN {
	PRINT "...Inclinaison 30 degre est.".
	LOCK STEERING TO HEADING(90,60).
	SET ALTITUDEf to 0.
	}
	}
	
	WHEN ALTITUDEg = 1 THEN {
	WHEN SHIP:ALTITUDE > 15000 THEN {
	PRINT "...Inclinaison 35 degre est.".
	LOCK STEERING TO HEADING(90,55).
	SET ALTITUDEg to 0.
	}
	}
	
	WHEN ALTITUDEh = 1 THEN {
	WHEN SHIP:ALTITUDE > 18000 THEN {
	PRINT "...Inclinaison 40 degre est.".
	LOCK STEERING TO HEADING(90,50).
	SET ALTITUDEh to 0.
	}
	}
	
	WHEN ALTITUDEi = 1 THEN {
	WHEN SHIP:ALTITUDE > 21000 THEN {
	PRINT "...Inclinaison 45 degre est.".
	LOCK STEERING TO HEADING(90,45).
	SET ALTITUDEi to 0.
	}
	}
	
	WHEN ALTITUDEj = 1 THEN {
	WHEN SHIP:ALTITUDE > 24000 THEN {
	PRINT "...Inclinaison 50 degre est.".
	LOCK STEERING TO HEADING(90,40).
	SET ALTITUDEj to 0.
	}
	}
	
	WHEN ALTITUDEk = 1 THEN {
	WHEN SHIP:ALTITUDE > 27000 THEN {
	PRINT "...Inclinaison 55 degre est.".
	LOCK STEERING TO HEADING(90,35).
	SET ALTITUDEk to 0.
	}
	}
	
	WHEN ALTITUDEl = 1 THEN {
	WHEN SHIP:ALTITUDE > 30000 THEN {
	PRINT "...Inclinaison 60 degre est.".
	LOCK STEERING TO HEADING(90,30).
	SET ALTITUDEl to 0.
	}
	}
	
	WHEN ALTITUDEm = 1 THEN {
	WHEN SHIP:ALTITUDE > 32000 THEN {
	PRINT "...Inclinaison 65 degre est.".
	LOCK STEERING TO HEADING(90,25).
	SET ALTITUDEm to 0.
	}
	}
	
		WHEN ALTITUDEo = 1 THEN {
	WHEN SHIP:ALTITUDE > 34000 THEN {
	PRINT "...Inclinaison 70 degre est.".
	LOCK STEERING TO HEADING(90,20).
	SET ALTITUDEo to 0.
	}
	}
	
	WHEN ALTITUDEp = 1 THEN {
	WHEN SHIP:ALTITUDE > 37000 THEN {
	PRINT "...Inclinaison 75 degre est.".
	LOCK STEERING TO HEADING(90,15).
	SET ALTITUDEp to 0.
	}
	}
	
	WHEN ALTITUDEq = 1 THEN {
	WHEN SHIP:ALTITUDE > 40000 THEN {
	PRINT "...Inclinaison 80 degre est.".
	LOCK STEERING TO HEADING(90,10).
	SET ALTITUDEq to 0.
	}
	}
		
	WHEN ALTITUDEr = 1 THEN {
	WHEN SHIP:ALTITUDE > 60000 THEN {
	SET antenna TO SHIP:PARTSDUBBED("Communotron 16").
	FOR ant IN antenna {
	ant:GETMODULE("ModuleRTAntenna"):DOEVENT("ACTIVATE").
	}

	PRINT "...Antenne Communotron 16 Activer.".
	PRINT " ".
	SET ALTITUDEr to 0.
	}
	}
	
	WHEN ALTITUDEs = 1 THEN {
	WHEN SHIP:ALTITUDE > 65000 THEN {
	Panels on.
	PRINT "...Ouverture Des Panneaux Solaires.".
	PRINT " ".
   	SET ALTITUDEs to 0.
	}
	}
	
	WAIT 0.001.//liste des moteur actif et verifie si conbustion 
	GEAR OFF.
	LIST ENGINES IN elist.

	FOR e IN elist {
	IF e:FLAMEOUT and STAGE:READY {
        STAGE.
	PRINT "...Largage du 1er Moteur.".
	}
	}
}

PRINT "...Moteur sur OFF".
PRINT " ".
PRINT "...Trajectoire Suborbitale finie!  APOAPSIS: " + round(SHIP:APOAPSIS).
PRINT " ".

SET thrott TO 0.
LOCK THROTTLE to thrott.
SET SHIP:CONTROL:PILOTMAINTHROTTLE TO 0.

WAIT UNTIL SHIP:ALTITUDE > 71000. //on fait les différente mesure scientifique à 71 km

PRINT "...Relever scientifique en cours.".
PRINT " ".
for sm in ship:modulesnamed("ModuleScienceExperiment") {
if not sm:hasdata sm:deploy(). wait 3.
if sm:hasdata for sd in sm:data {
	print sd:title.
	print "science acquise en renvoyant=" + round(sd:sciencevalue,2).
	print "science acquise en transmettant=" +round (sd:transmitvalue,2).
	print "Nb de donner=" + sd:dataamount.
	print " ".
	sm:TRANSMIT.
       	}
}

PRINT "...Relever scientifique Fini.".
PRINT " ".

WAIT 1.

// Circularisation d'orbite

//in km
SET g TO KERBIN:MU / KERBIN:RADIUS^2.
declare parameter new_otherapsis to 90. 
declare parameter position to 1.

set new_otherapsis to new_otherapsis * 1000.

if position = 1 {
  set node_time to TIME:SECONDS + ETA:APOAPSIS.
  set otherapsis to PERIAPSIS.
  set burnapsis to APOAPSIS.
}
else if position = 0 {
  set node_time to TIME:SECONDS + ETA:PERIAPSIS.
  set otherapsis to APOAPSIS.
  set burnapsis to PERIAPSIS.
}
set v_old to sqrt(BODY:MU * (2/(burnapsis+BODY:RADIUS) -
                             1/SHIP:OBT:SEMIMAJORAXIS)).
set v_new to sqrt(BODY:MU * (2/(burnapsis+BODY:RADIUS) -
                 1/(BODY:RADIUS+(new_otherapsis+burnapsis)/2))).
set dv to v_new-v_old.
PRINT "...Calcule du point de maneuvre pour finalisation de l'orbite.".
PRINT " ".
PRINT ".temps avant Burn:" + round(ETA:APOAPSIS,2) + "s.".
PRINT ".Delta-v" + round(dv,2).

// execute maneuver node
// calculer l'accélération maximale initiale du navire
set max_acc_ini to ship:maxthrust/ship:mass.

 // Dans la poursuite de a1 ...
 // Quel est notre FAI efficace?
SET eIsp TO 0.

LIST engines IN my_engines.
FOR eng IN my_engines {
SET eIsp TO eIsp + eng:maxthrust / ship:maxthrust * eng:isp.
}

// Quelle est notre vitesse d'échappement effective?
SET Ve TO eIsp * 9.81.

// What's our final mass?
SET final_mass TO mass*CONSTANT():e^(-1*dv / Ve).

 // Obtenez notre accélération finale.
SET max_acc_fin TO ship:maxthrust / final_mass.
 
 // Obtenez le temps nécessaire pour terminer la gravure.
SET t TO dv / ((max_acc_ini + max_acc_fin) / 2).

 // Définit les heures de début et de fin.
SET time_debut TO node_time - t/2.
SET time_fin TO node_time + t/2.

PRINT ".Estimation du temps de Burn: " + round(t,2) + "s".
PRINT " ".

//pointe sur le noeud, ne se soucient pas du sens du roulis.
SET myDir TO HEADING(90, 0).
LOCK STEERING TO myDir.

WAIT UNTIL (TIME:SECONDS + 7) >= time_debut.
SET myDir TO HEADING(90, 0).
LOCK STEERING TO myDir.


// Burn.
WAIT UNTIL TIME:SECONDS >= time_debut.
LOCK throttle TO 1.

UNTIL TIME:SECONDS >= time_fin {
SET myDir TO HEADING(90, 0).
LOCK STEERING TO myDir.
}
LOCK throttle TO 0.

PRINT "...Fin du Burn.".
PRINT " ".

PRINT "...Orbite circulariser.".
PRINT " ".

PRINT "Apoapsis= " + (round(SHIP:APOAPSIS)) + " ; Periapsis= " + round(SHIP:PERIAPSIS).
PRINT " ".

	


wait 1.

PRINT "...En Attente de 40 min pour valider la mission.".
PRINT " ".
WAIT 2400.

SET myDir TO SHIP:RETROGRADE.
LOCK STEERING TO myDir.
SET thrott TO 1.0.
WAIT 20.

PRINT "...Burn pour periapsis < 32km.".
PRINT " ".

SET myDir TO SHIP:RETROGRADE.
LOCK STEERING TO myDir.
SET thrott TO 1.0.
LOCK THROTTLE to thrott.
WAIT UNTIL SHIP:PERIAPSIS < 32000.	
	
PRINT "...Fin du Burn.".
PRINT " ".
	
SET thrott TO 0.
LOCK THROTTLE to thrott.
SET SHIP:CONTROL:PILOTMAINTHROTTLE TO 0.

UNTIL SHIP:ALTITUDE < 2000 { //Ouverture des parachutes(stage) à 2km
	SET myDir TO SHIP:RETROGRADE.
	LOCK STEERING TO myDir.
	
	WHEN ALTITUDEt = 1 THEN {
	WHEN SHIP:ALTITUDE < 60000 THEN {
	SET antenna TO SHIP:PARTSDUBBED("Communotron 16").
	FOR ant IN antenna {
	ant:GETMODULE("ModuleRTAntenna"):DOEVENT("DEACTIVATE").
	}

	PRINT "...Antenne Communotron 16 Retracter.".
	PRINT " ".
	SET ALTITUDEt to 0.
	}
	}
	
	}

STAGE.
PRINT "...Ouverture du parachute".
PRINT " ".
SET SHIP:CONTROL:PILOTMAINTHROTTLE TO 0.//met la poussé a O en fin de programme

WAIT SHIP:ALTITUDE < 2.
PRINT "--------------------------------------------------".
PRINT "-                                                -".
PRINT "-          .......Mission Reussi.......          -".
PRINT "-                                                -".
PRINT "--------------------------------------------------".
J'ai mis dans le hangard de KSP Player le vaisseaux pour la 4émé mission.

https://image.noelshack.com/fichiers/20 ... shot26.png
https://image.noelshack.com/fichiers/20 ... shot28.png
Devis Shadoks
- Ce n'est qu'en essayant continuellement que l'on finit par réussir....
En d'autres termes... Plus ça rate et plus on a de chances que ça marche...
- S'il n'y a pas de solution c'est qu'il n'y a pas de problème.

Avatar de l’utilisateur
Duna attack!
Messages : 20
Inscription : 26 mai 2014, 09:06
Contact :

Re: Carrière, Commande satellite par Kos

Message par Duna attack! » 03 mars 2017, 14:11

j'ai pris un peut de temps depuis le dernier poste car ma prochaine mission est la mise en place un réseaux de Satellite de communication pour Remote Tech et pour se faire c'est mieux si on arrive à avoir un script qui permet une grande précision au niveaux de l'Apoapsis et du Périapsis.
je suis partie du principe qu'un bon Burn doit avoir un temps de 10 sec.

t = temps de Burn
treel = temps de Burn du nœud cacul par Tsiolkovsky rocket equation
tratio = 10 / treel.
t = treel * tratio.// = 10

Throttle = 1 / tratio.

mon script à encor des soucis de calculs pour certain transfère d'orbite, qu'y seront réglé plus tard, mais en fessent plusieurs passe(apoapsis et periapsis): 1 à 2 en normal et 1 en précision je suis arrivé à un résultat de 99.999416 %.
pour changer la position du nœud de manœuvre:
declare parameter position to 1. //Burn sur l'Apoapsis pour mettre le Périapsis à la valeur indiqué
declare parameter position to 0. //Burn sur Périapsis pour mettre l'Apoapsis à la valeur indiqué

dans le code modifier 4 lignes(1) pour passer en nœud de manœuvre précis on normal .

Code : Tout sélectionner

// Circularisation d'orbite

SET g TO KERBIN:MU / KERBIN:RADIUS^2.
declare parameter new_otherapsis to 1200. //en km
declare parameter position to 1.// 1 pour maneouvre sur apoapsis du periapsis - 0 inversion


set new_otherapsis to new_otherapsis * 1000.

if position = 1 {
  set node_time to TIME:SECONDS + ETA:APOAPSIS.
  set otherapsis to PERIAPSIS.
  set burnapsis to APOAPSIS.
}
else if position = 0 {
  set node_time to TIME:SECONDS + ETA:PERIAPSIS.
  set otherapsis to APOAPSIS.
  set burnapsis to PERIAPSIS.
}
set v_old to sqrt(BODY:MU * (2/(burnapsis+BODY:RADIUS) -
                             1/SHIP:OBT:SEMIMAJORAXIS)).
set v_new to sqrt(BODY:MU * (2/(burnapsis+BODY:RADIUS) -
                 1/(BODY:RADIUS+(new_otherapsis+burnapsis)/2))).
set dv to v_new-v_old.
PRINT "...Calcule du point de maneuvre pour finalisation de l'orbite.".
PRINT " ".
PRINT ".temps avant Burn:" + round(ETA:APOAPSIS,2) + "s.".
PRINT ".Delta-v" + round(dv,2).

print "Setting up maneuver node. ETA=" + (node_time - TIME:SECONDS).
set nd to NODE(node_time, 0,0,dv).

add nd.

LOCK STEERING TO nd:BURNVECTOR.//on verrouille la position sur le vecteur de poussé du nœud 
WAIT UNTIL VANG(SHIP:FACING:VECTOR, nd:BURNVECTOR) < 2.

PRINT ".Delta-v" + round(nd:BURNVECTOR:MAG,2).

// execute maneuver node
// calculer l'accélération maximale initiale du navire
set max_acc_ini to ship:maxthrust/ship:mass.

 // Dans la poursuite de a1 ...
 // Quel est notre FAI efficace?
SET eIsp TO 0.

LIST engines IN my_engines.
FOR eng IN my_engines {
SET eIsp TO eIsp + eng:maxthrust / ship:maxthrust * eng:isp.
}

// Quelle est notre vitesse d'échappement effective?
SET Ve TO eIsp * 9.81.

// What's our final mass?
SET final_mass TO mass*CONSTANT():e^(-1*nd:BURNVECTOR:MAG/Ve).

 // Obtenez notre accélération finale.
SET max_acc_fin TO ship:maxthrust / final_mass.
 
 // Obtenez le temps nécessaire pour terminer la gravure.
SET treel TO nd:BURNVECTOR:MAG / ((max_acc_ini + max_acc_fin) / 2).//precision; remplacer treel par t pour normal (1)
SET tratio TO 10 / treel.//precision; suprimer pour t normal (1)
SET t TO tratio * treel.//precision; suprimer pour t normal (1)


 // Définit les heures de début et de fin.
SET time_debut TO TIME:SECONDS + nd:ETA - t/2.
SET time_fin TO TIME:SECONDS + nd:ETA + t/2.
PRINT ".Estimation du temps de Burn: " + round(t,2) + "s".
PRINT " ".

// Burn.
WAIT UNTIL TIME:SECONDS >= time_debut.
LOCK throttle TO 1 / tratio.//precision; suprimer "/ tratio" pour normal (1)

WAIT UNTIL TIME:SECONDS >= time_fin.
LOCK throttle TO 0.

PRINT "...Fin du Burn.".
PRINT " ".

REMOVE nd.


PRINT "Apoapsis= " + (round(SHIP:APOAPSIS)) + " ; Periapsis= " + round(SHIP:PERIAPSIS).
PRINT " ".



PRINT "--------------------------------------------------".
PRINT "-                                                -".
PRINT "-          .......Mission Reussi.......          -".
PRINT "-                                                -".
PRINT "--------------------------------------------------".

https://image.noelshack.com/fichiers/20 ... shot31.png
Devis Shadoks
- Ce n'est qu'en essayant continuellement que l'on finit par réussir....
En d'autres termes... Plus ça rate et plus on a de chances que ça marche...
- S'il n'y a pas de solution c'est qu'il n'y a pas de problème.

Avatar de l’utilisateur
Duna attack!
Messages : 20
Inscription : 26 mai 2014, 09:06
Contact :

Re: Carrière, Commande satellite par Kos

Message par Duna attack! » 06 mars 2017, 15:15

Le script suivant est pour modifier l'inclinaison de notre satellite, pour l'avoir proche de 0°; en étant au préalable sur une orbite circulaire


Image

Comme vous pouvez le constater sur l'image ci-dessus,
(L'Ascending Node)N1 = Périapsis - ω(Argument of Périapsis)

Le Périapsis nous est donné en temps (seconde) par KOS variable ETA:PERIAPSIS.
ω(Argument of Périapsis) Nous est donné en degré par KOS variable SHIP:Orbit:ARGUMENTOFPERIAPSIS.
Pour passé d'une valeur angulaire à une valeur de temps il nous faut la période orbital donné par KOS SHIP:ORBIT:PERIOD.
ω(t)= (ω(°)/360) * période orbital.
donc N1= ETA:PERIAPSIS - ω(t). Il se peut que N1 soit négatif(le nœud est déjà passé) c'est que l'on se trouve dans la région de N2 et pas passé l'Apoapsis,
pour palier à se problème il suffit juste de rajouté une période orbital à notre résultat .
if N1 < 0 { N1 = période orbital + N1}

Maintenant que l'on a la position du nœud ascendant il vaut définir le Burn delta-v à effectuer pour notre maneuvre.

Image

Pour modifier l'orientation du plan de l' orbite d'un satellite, typiquement de l'inclinaison, il faut changer la direction du vecteur vitesse. Cette manoeuvre nécessite une composante de V soit perpendiculaire au plan orbital et, par conséquent, perpendiculairement au vecteur vitesse initiale. Si la taille de l'orbite reste constante, la manœuvre est appelée un changement simple plan . Nous pouvons trouver le changement nécessaire de la vitesse en utilisant la loi des cosinus. Dans le cas où V f est égal à V i , cette expression se réduit à:
Δv = 2vi sin (Θ/2).
où Vi est la vitesse avant et après la brûlure, et Θ est le changement d'angle requis.
Pour notre manœuvre le changement D'angle requis Θ = i (l'inclinaison de départ) donné par KOS variable SHIP:ORBIT:INCLINATION.

reste plus qu'à calculer vi (c'est va vitesse orbital indiqué sur la navibal); qui est donnée par cette formule:
vi = SQRT( GM / r )
gm = (constant:G * KERBIN:MASS).KOS,Constant universelle.
r = (SHIP:ALTITUDE + KERBIN:RADIUS).KOS,altitude + rayon de kerbin = rayon du satelite.

Code : Tout sélectionner

CLEARSCREEN.
//Dédut du scrip pour l'implemantation d'un neud de maneuvre ascendant
// supriment l'angle l'inclinaison.
SET gm TO (constant:G * KERBIN:MASS).
SET r TO (SHIP:ALTITUDE + KERBIN:RADIUS).
SET P TO SHIP:ORBIT:PERIOD.
SET i TO SHIP:ORBIT:INCLINATION.
SET Tp to ETA:PERIAPSIS.
SET Ap TO SHIP:Orbit:ARGUMENTOFPERIAPSIS.

PRINT "GM= " + gm.
PRINT "ORBIT:PERIOD. = " + P.
PRINT "Rayon sat= " + r.
PRINT "Inclnaision. = " + i.
PRINT"Time periapsis=" + Tp.
PRINT"Argument of periapsis=" + Ap.

SET v TO SQRT( gm / r ).
PRINT "vecteur orbital. = " + V.

SET dv TO (2 * V) * (sin(i/2)).
PRINT "delta-v incl.= " + dv.

SET TAp TO (P * (Ap / 360 )).//Passer d'une valeur angulaire à une valeur de temps 
PRINT "Argument of periapsis Time=" + TAp.

SET node_time TO (Tp - TAp).

PRINT "Nodetime=" + node_time.

if node_time < 0 {
SET node_time TO P + node_time.
}
set nd to NODE(node_time + TIME:SECONDS,0,-dv,0).

add nd.
//Fin du scrip pour l'implemantation d'un neud de maneuvre ascendant
 
LOCK STEERING TO nd:BURNVECTOR.
WAIT UNTIL VANG(SHIP:FACING:VECTOR, nd:BURNVECTOR) < 2.

PRINT ".Delta-v" + round(nd:BURNVECTOR:MAG,2).

// execute maneuver node
// calculer l'accélération maximale initiale du navire
set max_acc_ini to ship:maxthrust/ship:mass.

 // Dans la poursuite de a1 ...
 // Quel est notre FAI efficace?
SET eIsp TO 0.

LIST engines IN my_engines.
FOR eng IN my_engines {
SET eIsp TO eIsp + eng:maxthrust / ship:maxthrust * eng:isp.
}

// Quelle est notre vitesse d'échappement effective?
SET Ve TO eIsp * 9.81.

// What's our final mass?
SET final_mass TO mass*CONSTANT():e^(-1*nd:BURNVECTOR:MAG/Ve).

 // Obtenez notre accélération finale.
SET max_acc_fin TO ship:maxthrust / final_mass.
 
 // Obtenez le temps nécessaire pour terminer la gravure.
SET treel TO nd:BURNVECTOR:MAG / ((max_acc_ini + max_acc_fin) / 2).
if treel < 10 { //si temps de burn < 10 sec alors dimminué throttle pour avoir 10 sec
SET tratio TO 10 / treel.
SET t TO tratio * treel.
}
else {
SET tratio TO 1.
SET t TO treel.
}

 // Définit les heures de début et de fin.
SET time_debut TO TIME:SECONDS + nd:ETA - t/2.
SET time_fin TO TIME:SECONDS + nd:ETA + t/2.
PRINT ".Estimation du temps de Burn: " + round(t,2) + "s".
PRINT " ".

// Burn.
WAIT UNTIL TIME:SECONDS >= time_debut.
LOCK throttle TO 1 / tratio.

WAIT UNTIL TIME:SECONDS >= time_fin.
LOCK throttle TO 0.

PRINT "...Fin du Burn.".
PRINT " ".
REMOVE nd. 

PRINT "Apoapsis= " + (round(SHIP:APOAPSIS)) + " ; Periapsis= " + round(SHIP:PERIAPSIS).
PRINT " ".

PRINT "--------------------------------------------------".
PRINT "-                                                -".
PRINT "-          .......Mission Reussi.......          -".
PRINT "-                                                -".
PRINT "--------------------------------------------------".

Formule trouver dans la Mécanique Orbitale lien traduit google :http://translate.google.com/translate?h ... 23maneuver
Devis Shadoks
- Ce n'est qu'en essayant continuellement que l'on finit par réussir....
En d'autres termes... Plus ça rate et plus on a de chances que ça marche...
- S'il n'y a pas de solution c'est qu'il n'y a pas de problème.

Avatar de l’utilisateur
Laika
Messages : 624
Inscription : 18 avril 2016, 06:34
Localisation : Suisse / Vevey
Contact :

Re: Carrière, Commande satellite par Kos

Message par Laika » 06 mars 2017, 18:13

Heuuu ... Quoi ???
On sait qui a fait le premier pas sur la Lune, mais on ne sait pas qui l'a fait sur Terre.
Image

Avatar de l’utilisateur
Duna attack!
Messages : 20
Inscription : 26 mai 2014, 09:06
Contact :

Re: Carrière, Commande satellite par Kos

Message par Duna attack! » 14 mars 2017, 01:27

Création d'un réseau de communication pour Kerbin, composé de 4 satellites.
Délivré par: Communication Satellite Group; Mod Remote Tech.

Mes 4 satellites sont équipe de:
1) Reflectron KR-7 ;Cone 25 pour 90 Mm,pour Minmus
1) HG-5 High Gain Antenna;Cone90 pour 20Mm, pour Mun.
2) HG-5 High Gain Antenna; pour les 2 satellites reliant les planètes extérieurs.
1) CommTech EXP-VR-2T; Omni de 3Mm, pour tous vaisseaux dans une sphère de 3.3Mm.
3) Panneaux de 2/3, pour 1.6Ec/s- 4.8total
3)Baterie Z1-K de 1000 Ec/s
le tout pour une conso 0.18+0.82+3*0.55=2.65Ec/s,
M’étant les satellites à une altitude de 1.2 Mm, il passeront dans une zone d’ombre de 873 sec *2.65= 2313Ec donc sa devrait le faire.

Étape de la mission:
1- conte à rebours.
2- cible: la vertical, poussé aux max, décollage(stage).
3- Quand Apogée > que 80km, extinction du moteur.
3.1- Gravity Turn début 1km, 5° Est jusqu'à 85° Est à 52Km. je fini à 80Km Ap pour 32km Pe et largue le 2eme étage.
3.2- 70km Coiffe de protection éjecté.
3.3- 71km ouverture des Panneaux Solaire.
3.4- 72km activation du CommTech EXP-VR-2T.
4- incrémentation du premier Nœud de manœuvre (nd) pour une Apoapsis de 350km.
4.1- exécute nd.
5- incrémentation du 2eme Nœud de manœuvre pour une Périapsis de 350km.
5.1- exécute nd.
6-boucle pour vérifier les bonne valeur en Ap et Pe =< 1m
6.1- re 4 ou 5 si besoin.
7- Calcule du nœud Ascendant, pour avoir une inclinaison proche de 0°.
7.1- incrémentation du node Ascendant.
7.2- exécute.
8- calcule du transfère de Hohmann pour une Altitude final de 1.2 Mm
8.1- calcule de l'angle de phase pour commencer le transfère et avoir un bonne ange 90° entre chaque satellite.
8.2- incrémentation du 1er Nœud de manœuvre.
8.3- incrémentation du 2eme Nœud de manœuvre.
8.4- exécute 1er nd, avec diminution du trust /10 à 0.2 sec cible puis à 10km, 1km, 100m, 10m et fin à >0.001 m
8.5- exécute 2eme nd, avec diminution du trust /10 à 1/50 Temps cible puis à 100s, 10...0.0001 sec de la période orbital du premier sat.
9- activation des antennes et target cible.
10- positionner face au soleil pour les panneaux solaire et activation du SAS.
FIN-

Pour gérer tout se séquençage je me suis servie de plusieurs script don 1principal pour les appeler.

Principal:
satcom.ks
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

Code : Tout sélectionner

CLEARSCREEN.
PRINT "--------------------------------------------------".
PRINT "-                                                -".
PRINT "-    Programme de mise en orbite synchrone       -".
PRINT "-    des satellites de communication  RT         -".
PRINT "-                                                -".
PRINT "--------------------------------------------------".
SAS OFF.
RUNPATH ( "luncher.ks" ).
WAIT 1.
declare parameter cible_otherapsis to 350. //en km
declare parameter position to 1.// 1 pour maneouvre sur apoapsis du periapsis - 0 inversion
RUNPATH ( "circulp.ks" ).
WAIT 1.
RUNPATH ( "exnode.ks" ).
WAIT 1.
declare parameter position to 1.
RUNPATH ( "circulp.ks" ).
WAIT 1.
RUNPATH ( "exnode.ks" ).
WAIT 1.
declare parameter cible_otherapsis to 350.
SET PaCible TO false.
SET PeCible TO false.
UNTIL PaCible = true AND PeCible = true {
	SET Pa to APOAPSIS.
	SET Pe to PERIAPSIS.
	PRINT "PaCible =" + PaCible.
	PRINT "PeCible =" + PeCible.
	if ABS(Pa - ( cible_otherapsis * 1000 )) <= 1 {
		SET PaCible TO true.
	}
	else if ABS(Pa - ( cible_otherapsis * 1000 )) > 1 {
		SET PaCible TO false.
	}
	if ABS(Pe - ( cible_otherapsis * 1000 )) <= 1 {
		SET PeCible TO true.
	}
	else if ABS(Pe - ( cible_otherapsis * 1000 )) > 1 {
		SET PeCible TO false.
	}
	if PaCible = false {
	DECLARE GLOBAL position TO 0.
	RUNPATH ( "circulp.ks" ).
	RUNPATH ( "exnode.ks" ).
	}
	if PeCible = false {
	declare GLOBAL position to 1.
	RUNPATH ( "circulp.ks" ).
	RUNPATH ( "exnode.ks" ).
	}
WAIT 1.
}
RUNPATH ( "nodeAsc.ks" ).
WAIT 1.
RUNPATH ( "exnode.ks" ).
WAIT 1.
declare parameter cible_otherapsis to 1200.
DECLARE degreSat TO 270.// deffinir le decalage entre sat(cpu) et sat (cible)
RUNPATH ( "orbit.ks" ).
WAIT 1.
RUNPATH ( "exnodeAp.ks" ).
WAIT 1.
RUNPATH ( "exnodeTPO.ks" ).
WAIT 1.
RUNPATH ( "antenne.ks" ).
WAIT 5.

luncher.ks
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

Code : Tout sélectionner

CLEARSCREEN.

PRINT "--------------------------------------------------".
PRINT "-                                                -".
PRINT "-    Initialisation du Processus de Lancement    -".
PRINT "-                                                -".
PRINT "--------------------------------------------------".
PRINT " ".
PRINT " ".
WAIT 1.
PRINT "compte a rebours:".
PRINT " ".
PRINT " ".

//Il s'agit de notre boucle de compte à rebours, qui passe de 10 à 5
FROM {local countdown is 10.} UNTIL countdown = 5 STEP {SET countdown to countdown - 1.} DO {
    PRINT "..." + countdown + ".".
    WAIT 1. // Met en pause le script ici pendant 1 seconde.
	}.
	
PRINT "...5...Tous les Systemes sur ON.".
WAIT 1.

PRINT "...4.".
WAIT 1.

PRINT "...3.".
WAIT 1.


PRINT "...2.".
WAIT 1.

//SAS ON.
PRINT "...1...Thrust max.".
SET thrott TO 1.0.
LOCK THROTTLE to thrott.
LOCK STEERING TO HEADING(90, 90).
WAIT 1.

PRINT "...0...Decolage.".
PRINT " ".
STAGE.//Décolgage

PRINT "...On brule jusqua AP = 80km".
PRINT " ".

// Initialisation des ALTITUDE = 1; Pour valeur non ateinte
declare ALTITUDEa To 1.
declare ALTITUDEb to 1.
declare ALTITUDEc to 1.
declare ALTITUDEd to 1.
declare ALTITUDEe to 1.
declare ALTITUDEf to 1.
declare ALTITUDEg to 1.
declare ALTITUDEh to 1.
declare ALTITUDEi to 1.
declare ALTITUDEj to 1.
declare ALTITUDEk to 1.
declare ALTITUDEl to 1.
declare ALTITUDEm to 1.
declare ALTITUDEn to 1.
declare ALTITUDEo to 1.
declare ALTITUDEp to 1.
declare ALTITUDEq to 1.
declare ALTITUDEr to 1.
declare ALTITUDEs to 1.
declare ALTITUDEt to 1.

// PID-loop
SET g TO KERBIN:MU / KERBIN:RADIUS^2.
PRINT "...Gravite =" + round(g,2).
PRINT " ".
LOCK M to SHIP:MASS.
LOCK Thr to SHIP:MAXTHRUST.
LOCK Twr to Thr / (m * g).

SET Twr_setpoint TO 1.7.
PRINT "...Reglage de l'accelerateur pour TWR=1.7".
PRINT " ".

UNTIL SHIP:APOAPSIS > 80000 { //N'oubliez pas que toutes les altitudes seront en mètres, pas en kilomètres
	
	SET thrott TO Twr_setpoint/Twr.
	LOCK THROTTLE to thrott.
		
	//Gravity turn
	//5 degrés tous les 2 km jusqu'à 45 degrés à 20 km
		
	IF ALTITUDEa = 1 {
	WHEN SHIP:ALTITUDE > 1000 THEN {
	PRINT "...Debut du gravity turn.".
	PRINT " ".
	PRINT "...Inclinaison 5 degre est.".
	LOCK STEERING TO HEADING(90,85).
	SET ALTITUDEa to 0.
	}
	}
	
	WHEN ALTITUDEb = 1 THEN {
	WHEN SHIP:ALTITUDE > 2000 THEN {
	PRINT "...Inclinaison 10 degre est.".
	LOCK STEERING TO HEADING(90,80).
	SET ALTITUDEb to 0.
	}
	}
	
	WHEN ALTITUDEc = 1 THEN {
	WHEN SHIP:ALTITUDE > 4000 THEN {
	PRINT "...Inclinaison 15 degre est.".
	LOCK STEERING TO HEADING(90,75).
	SET ALTITUDEc to 0.
	}
	}
	
	WHEN ALTITUDEd = 1 THEN {
	WHEN SHIP:ALTITUDE > 6000 THEN {
	PRINT "...Inclinaison 20 degre est.".
	LOCK STEERING TO HEADING(90,70).
	SET ALTITUDEd to 0.
	}
	}
	
	WHEN ALTITUDEe = 1 THEN {
	WHEN SHIP:ALTITUDE > 9000 THEN {
	PRINT "...Inclinaison 25 degre est.".
	LOCK STEERING TO HEADING(90,65).
	SET ALTITUDEe to 0.

	}
	}
	
	WHEN ALTITUDEf = 1 THEN {
	WHEN SHIP:ALTITUDE > 12000 THEN {
	PRINT "...Inclinaison 30 degre est.".
	LOCK STEERING TO HEADING(90,60).
	SET ALTITUDEf to 0.
	}
	}
	
	WHEN ALTITUDEg = 1 THEN {
	WHEN SHIP:ALTITUDE > 15000 THEN {
	PRINT "...Inclinaison 35 degre est.".
	LOCK STEERING TO HEADING(90,55).
	SET ALTITUDEg to 0.
	}
	}
	
	WHEN ALTITUDEh = 1 THEN {
	WHEN SHIP:ALTITUDE > 18000 THEN {
	PRINT "...Inclinaison 40 degre est.".
	LOCK STEERING TO HEADING(90,50).
	SET ALTITUDEh to 0.
	}
	}
	
	WHEN ALTITUDEi = 1 THEN {
	WHEN SHIP:ALTITUDE > 21000 THEN {
	PRINT "...Inclinaison 45 degre est.".
	LOCK STEERING TO HEADING(90,45).
	SET ALTITUDEi to 0.
	}
	}
	
	WHEN ALTITUDEj = 1 THEN {
	WHEN SHIP:ALTITUDE > 24000 THEN {
	PRINT "...Inclinaison 50 degre est.".
	LOCK STEERING TO HEADING(90,40).
	SET ALTITUDEj to 0.
	}
	}
	
	WHEN ALTITUDEk = 1 THEN {
	WHEN SHIP:ALTITUDE > 27000 THEN {
	PRINT "...Inclinaison 55 degre est.".
	LOCK STEERING TO HEADING(90,35).
	SET ALTITUDEk to 0.
	}
	}
	
	WHEN ALTITUDEl = 1 THEN {
	WHEN SHIP:ALTITUDE > 30000 THEN {
	PRINT "...Inclinaison 60 degre est.".
	LOCK STEERING TO HEADING(90,30).
	SET ALTITUDEl to 0.
	}
	}
	
	WHEN ALTITUDEm = 1 THEN {
	WHEN SHIP:ALTITUDE > 32000 THEN {
	PRINT "...Inclinaison 65 degre est.".
	LOCK STEERING TO HEADING(90,25).
	SET ALTITUDEm to 0.
	}
	}
	
	WHEN ALTITUDEo = 1 THEN {
	WHEN SHIP:ALTITUDE > 34000 THEN {
	PRINT "...Inclinaison 70 degre est.".
	LOCK STEERING TO HEADING(90,20).
	SET ALTITUDEo to 0.
	}
	}
	
	WHEN ALTITUDEp = 1 THEN {
	WHEN SHIP:ALTITUDE > 37000 THEN {
	PRINT "...Inclinaison 75 degre est.".
	LOCK STEERING TO HEADING(90,15).
	SET ALTITUDEp to 0.
	}
	}
	
	WHEN ALTITUDEq = 1 THEN {
	WHEN SHIP:ALTITUDE > 42000 THEN {
	PRINT "...Inclinaison 80 degre est.".
	LOCK STEERING TO HEADING(90,10).
	SET ALTITUDEq to 0.
	}
	}
	
	WHEN ALTITUDEq = 1 THEN {
	WHEN SHIP:ALTITUDE > 52000 THEN {
	PRINT "...Inclinaison 85 degre est.".
	LOCK STEERING TO HEADING(90,5).
	SET ALTITUDEq to 0.
	}
	}
			
	WAIT 0.001.//liste des moteur actif et verifie si conbustion 
	GEAR OFF.
	LIST ENGINES IN elist.

	FOR e IN elist {
	IF e:FLAMEOUT and STAGE:READY {
        STAGE.
	PRINT "...Largage du 1er Moteur.".
	}
	}
}
SET thrott TO 0.
LOCK THROTTLE to thrott.
SET SHIP:CONTROL:PILOTMAINTHROTTLE TO 0.
PRINT "...Moteur sur OFF".
PRINT " ".

WAIT 5.
STAGE.
PRINT "...Largage du 2eme Moteur.".


PRINT "...Trajectoire Suborbitale finie!  APOAPSIS: " + round(SHIP:APOAPSIS).
PRINT " ".

WAIT UNTIL SHIP:ALTITUDE > 70000.
SET fairing TO SHIP:ModulesNamed("ModuleProceduralFairing")[0].
fairing:DoEvent("deploy").
PRINT "...Coiffe de protection Fairing ejecter.".
PRINT " ".

	
WAIT UNTIL SHIP:ALTITUDE > 71000.
Panels on.
PRINT "...Ouverture Des Panneaux Solaires.".
PRINT " ".


WAIT UNTIL SHIP:ALTITUDE > 72000.
	SET antenna TO SHIP:PARTSDUBBED("CommTech EXP-VR-2T").
	FOR ant IN antenna {
	ant:GETMODULE("ModuleRTAntenna"):DOEVENT("ACTIVATE").
	

PRINT "...CommTech EXP-VR-2T.".
PRINT " ".
}
circulp.ks calcule nd pour Apoapsis ou Periapsis, valeur cible
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

Code : Tout sélectionner

// Circularisation d'orbite
// declare parameter cible_otherapsis
// declare parameter position
CLEARSCREEN.
WAIT 1.
SET g TO KERBIN:MU / KERBIN:RADIUS^2.
set new_otherapsis to cible_otherapsis * 1000.

if position = 1 {
  set node_time to TIME:SECONDS + ETA:APOAPSIS.
  set otherapsis to PERIAPSIS.
  set burnapsis to APOAPSIS.
}
else if position = 0 {
  set node_time to TIME:SECONDS + ETA:PERIAPSIS.
  set otherapsis to APOAPSIS.
  set burnapsis to PERIAPSIS.
}
set v_old to sqrt(BODY:MU * (2/(burnapsis+BODY:RADIUS) -
                             1/SHIP:OBT:SEMIMAJORAXIS)).
set v_new to sqrt(BODY:MU * (2/(burnapsis+BODY:RADIUS) -
                 1/(BODY:RADIUS+(new_otherapsis+burnapsis)/2))).
set dv to v_new-v_old.
PRINT "...Calcule du point de maneuvre pour finalisation de l'orbite.".
PRINT " ".
PRINT ".temps avant Burn:" + round(ETA:APOAPSIS,2) + "s.".
PRINT ".Delta-v" + round(dv,2).

print "Setting up maneuver node. ETA=" + (node_time - TIME:SECONDS).
set nd to NODE(node_time, 0,0,dv).

add nd.
exnode.ks + exnodeAp.ks + exnodeTPO.ks (exécute les nœud de manœuvre)
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

Code : Tout sélectionner

// execute maneuver node
CLEARSCREEN.
PRINT "--------------------------------------------------".
PRINT "-                                                -".
PRINT "-           Programme d execution                -".
PRINT "-            de neud de maneuvre                 -".
PRINT "-                                                -".
PRINT "--------------------------------------------------".
set nd to nextnode.
LOCK STEERING TO nd:BURNVECTOR.
WAIT UNTIL VANG(SHIP:FACING:VECTOR, nd:BURNVECTOR) < 2.

PRINT ".Delta-v" + round(nd:BURNVECTOR:MAG,2).

// calculer l'accélération maximale initiale du navire
set max_acc_ini to ship:maxthrust/ship:mass.

 // Dans la poursuite de a1 ...
 // Quel est notre FAI efficace?
SET eIsp TO 0.

LIST engines IN my_engines.
FOR eng IN my_engines {
SET eIsp TO eIsp + eng:maxthrust / ship:maxthrust * eng:isp.
}

// Quelle est notre vitesse d'échappement effective?
SET Ve TO eIsp * 9.81.

// What's our final mass?
SET final_mass TO mass*CONSTANT():e^(-1*nd:BURNVECTOR:MAG/Ve).

 // Obtenez notre accélération finale.
SET max_acc_fin TO ship:maxthrust / final_mass.
 
 // Obtenez le temps nécessaire pour terminer la gravure.
SET treel TO nd:BURNVECTOR:MAG / ((max_acc_ini + max_acc_fin) / 2).
if treel < 10 { //si temps de burn < 10 sec alors dimminué throttle pour avoir 10 sec
SET tratio TO 10 / treel.
SET t TO tratio * treel.
}
else {
SET tratio TO 1.
SET t TO treel.
}


 // Définit les heures de début et de fin.
SET time_debut TO TIME:SECONDS + nd:ETA - t/2.
SET time_fin TO TIME:SECONDS + nd:ETA + t/2.
PRINT ".Estimation du temps de Burn: " + round(t,2) + "s".
PRINT " ".
print "T+" + (nd:eta - t/2 + 10 ) + " Warping to maneuver...".
run warp(nd:eta - t/2 - 20 ).


// Burn.changer ici par nodeAp ou nodeTPO pour grande pressicion  
WAIT UNTIL TIME:SECONDS >= time_debut.
LOCK throttle TO 1 / tratio.

WAIT UNTIL TIME:SECONDS >= time_fin.
LOCK throttle TO 0.
UNLOCK STEERING.
REMOVE nd. 
PRINT "...Fin du Burn.".
PRINT " ".
PRINT "Apoapsis= " + (round(SHIP:APOAPSIS)) + " ; Periapsis= " + round(SHIP:PERIAPSIS).
PRINT " ".

WAIT 1.

nodeAp.ks précision avec la valeur cible juste la fin du script a changer dans exnode.ks

Code : Tout sélectionner

// Burn.
lOCK Pa TO (SHIP:APOAPSIS).
WAIT UNTIL TIME:SECONDS >= time_debut.
LOCK throttle TO 1 / tratio.
WAIT UNTIL TIME:SECONDS >= (time_fin - 0.2).
SET tratio TO tratio * 10.
PRINT " tratio =" + tratio.
LOCK Burnfin TO (cible_otherapsis * 1000) - Pa.
WAIT UNTIL Burnfin < 10000.
SET tratio TO tratio * 10.
PRINT " tratio =" + tratio.
WAIT UNTIL Burnfin < 100.
SET tratio TO tratio * 10.
PRINT " tratio =" + tratio.
WAIT UNTIL Burnfin < 10.
SET tratio TO tratio * 10.
PRINT " tratio =" + tratio.
WAIT UNTIL Burnfin < 0.001.
PRINT "burnfin =" + burnfin.
LOCK throttle TO 0.

UNLOCK STEERING.
REMOVE nd. 
PRINT "...Fin du Burn.".
PRINT " ".
PRINT "Apoapsis= " + (round(SHIP:APOAPSIS)) + " ; Periapsis= " + round(SHIP:PERIAPSIS).
PRINT " ".

WAIT 1.
nodeTPO.ks précision avec la Période orbital cible (premiersat) juste la fin du script a changer dans exnode.ks

Code : Tout sélectionner

// Burn.
SET PoCible TO VESSEL("SatKosKerbinbas 1"):ORBIT:PERIOD.
LOCK PoA TO (SHIP:ORBIT:PERIOD).
WAIT UNTIL TIME:SECONDS >= time_debut.
LOCK throttle TO 1 / tratio.
WAIT UNTIL TIME:SECONDS >= (time_fin - t / 50).
PRINT " PoCible =" + PoCible.
WAIT UNTIL Burnfin < 100.
SET tratio TO tratio * 10.
PRINT " tratio =" + tratio.
SET tratio TO tratio * 10.
PRINT " tratio =" + tratio.
LOCK Burnfin TO PoCible - PoA.
WAIT UNTIL Burnfin < 10.
SET tratio TO tratio * 10.
PRINT " tratio =" + tratio.
WAIT UNTIL Burnfin < 0.1.
SET tratio TO tratio * 10.
PRINT " tratio =" + tratio.
WAIT UNTIL Burnfin < 0.01.
SET tratio TO tratio * 10.
PRINT " tratio =" + tratio.
WAIT UNTIL Burnfin < 0.001.
SET tratio TO tratio * 10.
PRINT " tratio =" + tratio.
WAIT UNTIL Burnfin < 0.0001.
LOCK throttle TO 0.
UNLOCK STEERING.
REMOVE nd. 
PRINT "...Fin du Burn.".
PRINT " ".
PRINT "Apoapsis= " + (round(SHIP:APOAPSIS)) + " ; Periapsis= " + round(SHIP:PERIAPSIS).
PRINT " ".

WAIT 1.

nodeAcs.ks Node ascendant et inclinaison 0° cible
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

Code : Tout sélectionner

CLEARSCREEN.

PRINT "--------------------------------------------------".
PRINT "-                                                -".
PRINT "-          Programme Node ascendant              -".
PRINT "-               et inclinaison                   -".
PRINT "-                                                -".
PRINT "--------------------------------------------------".
//Dédut du scrip pour l'implemantation d'un neud de maneuvre ascendant
// supriment l'angle l'inclinaison.
SET gm TO (constant:G * KERBIN:MASS).
SET r TO (SHIP:ALTITUDE + KERBIN:RADIUS).
SET P TO SHIP:ORBIT:PERIOD.
SET i TO SHIP:ORBIT:INCLINATION.
SET Tp to ETA:PERIAPSIS.
SET Ap TO SHIP:Orbit:ARGUMENTOFPERIAPSIS.

PRINT "GM= " + gm.
PRINT "ORBIT:PERIOD. = " + P.
PRINT "Rayon sat= " + r.
PRINT "Inclnaision. = " + i.
PRINT"Time periapsis=" + Tp.
PRINT"Argument of periapsis=" + Ap.

SET v TO SQRT( gm / r ).
PRINT "vecteur orbital. = " + V.

SET dv TO (2 * V) * (sin(i/2)).
PRINT "delta-v incl.= " + dv.

SET TAp TO (P * (Ap / 360 )).//Passer d'une valeur angulaire à une valeur de temps 
PRINT "Argument of periapsis Time=" + TAp.

SET node_time TO (Tp - TAp).

PRINT "Nodetime=" + node_time.

if node_time < 0 {
SET node_time TO P + node_time.
}
set nd to NODE(node_time + TIME:SECONDS,0,-dv,0).

add nd.
WAIT 1.
orbit.ks Transfère de Hohmann, et décalage angulaire pour 90° cible
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

Code : Tout sélectionner

CLEARSCREEN.
PRINT "--------------------------------------------------".
PRINT "-                                                -".
PRINT "-        Programme Transfert de hohmann          -".
PRINT "-              et angle de phase                 -".
PRINT "-                                                -".
PRINT "--------------------------------------------------".
SAS OFF.
SET ALTITUDEb TO 1200000.//en m altitude de positionnement
SET gm TO (constant:G * KERBIN:MASS).
SET rA TO (SHIP:ALTITUDE + KERBIN:RADIUS).
SET rB TO (ALTITUDEb + KERBIN:RADIUS).
SET P TO SHIP:ORBIT:PERIOD.

SET atx TO ((rA + rB) / 2).//Semi-major axis of transfer
SET ViA TO SQRT (gm / rA).//ini velocity on A
SET VfB TO SQRT (gm / rB).// final " B
SET VtxA to SQRT ( gm * (( 2 / rA) - ( 1 / atx ))).// velocity on transfer orb ini A
SET VtxB to SQRT ( gm * (( 2 / rB) - ( 1 / atx ))).// " final B
SET DvA TO VtxA - ViA.// ini velocity change
SET DvB TO VfB - VtxB.
SET DvT TO DvA + DvB.

PRINT " GM Kerbin =" + gm.
PRINT " altitude de positionnement =" + ALTITUDEb.
PRINT " altitude de Depart =" + SHIP:ALTITUDE.
PRINT " delta-v 1 burn = " + DvA.
PRINT " delta-v final burn = " + DvB.
PRINT " delta-v total burn = " + DvT.
SET th TO (Constant:PI) * SQRT ((( rA  + rB )^3) / ( 8 * gm )).//temps de transfere
PRINT " Temps du transfere = " + (th / 60).
SET w2 TO SQRT (gm / (rB^3)).
SET aa TO (Constant:PI) - (w2 * th).//calcul l alignement angulaire pour node
PRINT " L'alignement angulaire Rad = " + aa.
SET aad TO (aa * 360 ) / ( 2 * (Constant:PI)).
PRINT " L'alignement angulaire degre = " + aad.
SET TARGET TO VESSEL("SatKosKerbinbas 1").
// pour 1er Satellite à suprimer jusqua (SUP) et metre à la place //set node_time to TIME:SECONDS + ETA:APOAPSIS.
SET loA TO VESSEL("SatKosKerbinbas 1"):LONGITUDE.
PRINT "longitude = " + loA.
SET loB TO SHIP:LONGITUDE.
PRINT "longitude = " + loB.
PRINT "Decalage engulaire" + (LoA - LoB).

SET P2 TO  VESSEL("SatKosKerbinbas 1"):ORBIT:PERIOD.
SET phase TO (SQRT (gm / (rB^3))) - SQRT (gm / (rA^3)).//calcul décalage angulaire
PRINT " decalage angulaire Rad/h= " + phase.
SET angt TO ( loB - (loA - aad + degreSat  )).
if angt < 180 + aad {//pour nodetime positif
SET angt TO angt - 360 .
}
SET Tn TO angt / (phase * 180/(Constant:PI)).
PRINT "angle passer= " + angt.
SET node_time TO Tn.
PRINT "temps avant node s=" + node_time.
//(SUP)  pour 1er Satellite 
set nd to NODE(node_time + TIME:SECONDS,0,0,DvA).

add nd.
set nd2 to NODE(node_time + Th + TIME:SECONDS,0,0,Dvb).
add nd2.
 
antenne.ks
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

Code : Tout sélectionner

SAS OFF.
LOCK STEERING TO LOOKDIRUP( V(0,0,0), SUN:POSITION ).
PRINT "Tourne pour exposer les paneaux solaire".


SET P TO SHIP:PARTSDUBBED("Reflectron KR-7")[0].
SET M to p:GETMODULE("ModuleRTAntenna").
M:DOEVENT("activate").
M:SETFIELD("target", minmus).

SET P TO SHIP:PARTSDUBBED("HG-5 High Gain Antenna")[0].
SET M to p:GETMODULE("ModuleRTAntenna").
M:DOEVENT("activate").
M:SETFIELD("target", mun).

WAIT 30.
SAS ON.
warp.ks
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

Code : Tout sélectionner

declare parameter dt.
// warp (0:1) (1:5) (2:10) (3:50) (4:100) (5:1000)
set dt to round(dt).
set t0 to round(time:seconds).
set t1 to t0 + dt.
print "T+" + round(missiontime) + " Warp for " + dt + "s".
if dt > 3000 {
    print "T+" + round(missiontime) + " Warp 5.".
    set warp to 5.
}
if dt > 3000 {
    when time:seconds > t1 - 3000 then {
        print "T+" + round(missiontime) + " Warp 4.".
        set warp to 4.
    }
}
if dt > 300 and dt <= 3000 {
    print "T+" + round(missiontime) + " Warp 4.".
    set warp to 4.
}
if dt > 300 {
    when time:seconds > t1 - 300 then {
        print "T+" + round(missiontime) + " Warp 3.".
        set warp to 3.
    }
}
if dt > 10 and dt < 300 {
    print "T+" + round(missiontime) + " Warp 3.".
    set warp to 3.
}
if dt > 60 {
    when time:seconds > t1 - 60 then {
        print "T+" + round(missiontime) + " Warp 2.".
        set warp to 2.
    }
}
if dt > 30 {
    when time:seconds > t1 - 30 then {
        print "T+" + round(missiontime) + " Warp 1.".
        set warp to 1.
    }
}
if dt > 10 {
    when time:seconds > t1 - 10 then {
        print "T+" + round(missiontime) + " Realtime, " + round(t1-time:seconds) + "s remaining.".
        set warp to 0.
    }
}
wait until time:seconds > t1.
print "T+" + round(missiontime) + " Warp complete " + time:calendar + " " + time:clock.
Pour le premier Satellite il faut faire quelque modif car pas de cible pour décalage angulaire,
dans orbit.ks modifier la partie indiqué dans le script.
et dans satcom.ks pour le 2eme nœud de manœuvre du transfère de Hohmann mettre :RUNPATH ( "exnodeAp.ks" ).

Autre Point important le ciblage des satellites pour le décalage angulaire se fait toujours par rapport au premier sat,
la valeur est déclarer dans orbit.ks à la ligne 37.39.45 et dans exnodeTPO.ks à la ligne 58.
SET TARGET TO VESSEL("SatKosKerbinbas 1").
Après vous prouver changer et mettre le ciblage par rapport au dernier en changent à chaque sat le nom du dernier.
Devis Shadoks
- Ce n'est qu'en essayant continuellement que l'on finit par réussir....
En d'autres termes... Plus ça rate et plus on a de chances que ça marche...
- S'il n'y a pas de solution c'est qu'il n'y a pas de problème.

Avatar de l’utilisateur
Duna attack!
Messages : 20
Inscription : 26 mai 2014, 09:06
Contact :

Re: Carrière, Commande satellite par Kos

Message par Duna attack! » 07 avril 2017, 13:02

Mise en place d'un Télescope en orbite Géo-stationnaire de Kerbin (MOD:ResearchBodies).

Pour la réalisation de la mission, je me suis servis des mêmes scripts que pour Création d'un réseau de communication http://forum.kerbalspaceprogram.fr/view ... =10#p57525

En modifiant:
luncher.ks: selon équipement.
orbit.ks:
ligne 37: // SET TARGET TO "KSC Géo".//CIBLE (on saute la ligne)
ligne 39: SET loA TO KERBIN:LONGITUDE.//CIBLE
ligne 45: SET P2 TO KERBIN:ORBIT:PERIOD.//CIBLE
script principal:
vers la fin avant RUNPATH ( "orbit.ks" )
declare parameter ALTITUDEb TO 2863334.06.//geo stationaire
DECLARE degreSat TO + 284.5753 - KERBIN:LONGITUDE.
antenne.ks
selon équipement ou suprimer.
Devis Shadoks
- Ce n'est qu'en essayant continuellement que l'on finit par réussir....
En d'autres termes... Plus ça rate et plus on a de chances que ça marche...
- S'il n'y a pas de solution c'est qu'il n'y a pas de problème.

Avatar de l’utilisateur
Duna attack!
Messages : 20
Inscription : 26 mai 2014, 09:06
Contact :

Re: Carrière, Commande satellite par Kos

Message par Duna attack! » 07 avril 2017, 14:15

Mission allez explorer le Monolithe proche du KSC.
contrainte:
pas de parachute pour se posé.
pas de part d'aéro.
atteindre une hauteur de 500m.

le reglage du Trust pour se poser se fait par:
1/distance/vitesse*10
le tout à la puissance 2 pour plus de reactivité
vitesse - 2, pour garder une vitesse + 2m/s.

SET g TO KERBIN:MU / KERBIN:RADIUS^2.
LOCK M to SHIP:MASS.
LOCK Thr to SHIP:MAXTHRUST.
LOCK Twr to Thr / (M * g).//Twr max

LOCK ViVert TO SHIP:VERTICALSPEED.
LOCK ViHori TO SHIP:GROUNDSPEED.
LOCK ViSurface TO sqrt( ViVert^2 + ViHori^2).//vitesse de surface.

LOCK ALT TO SHIP:ALTITUDE.
LOCK ALTGeo TO ALT - SHIP:GEOPOSITION:TERRAINHEIGHT.// altitude par rapport au sol.

SET Twr_setpoint TO (1 / (ALTGeo / (( ViSurface - 2 )* 10 )))^2.
SET thrott TO Twr_setpoint/Twr.
LOCK THROTTLE to thrott.

code complet:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

Code : Tout sélectionner

SET X TO 90.
LOCK STEERING TO HEADING(-5,X).
PRINT "...1...Thrust max.".
SET thrott TO 1.0.
LOCK THROTTLE to thrott.
STAGE.//Décolgage

SET g TO KERBIN:MU / KERBIN:RADIUS^2.
PRINT "...Gravite =" + round(g,2).
PRINT " ".
LOCK M to SHIP:MASS.
LOCK Thr to SHIP:MAXTHRUST.
LOCK Twr to Thr / (m * g).

SET Twr_setpoint TO 1.6.
PRINT "...Reglage de l'accelerateur pour TWR=1.7".
PRINT " ".
RCS ON.
UNTIL SHIP:APOAPSIS > 1360 { 
LEGS OFF.
WAIT UNTIL SHIP:ALTITUDE > 300.
SET X TO 60.
SET thrott TO Twr_setpoint/Twr.
}
RCS OFF.
SET thrott TO 0.
LOCK THROTTLE to thrott.
SET SHIP:CONTROL:PILOTMAINTHROTTLE TO 0.

WAIT UNTIL SHIP:ALTITUDE < 1300.
RCS ON.
lock np to srfretrograde. 
LOCK STEERING TO np.

WAIT UNTIL SHIP:ALTITUDE < 1000 .
LEGS ON.

LOCK ViVert TO SHIP:VERTICALSPEED.
LOCK ViHori TO SHIP:GROUNDSPEED.
LOCK ViSurface TO sqrt( ViVert^2 + ViHori^2).
PRINT"Vitesse verical =" + ViVert.
PRINT"Vitesse Horizontal =" + ViHori.
PRINT"Vitesse Vaisseau =" + ViSurface.

// Set to surface prograde:

wait until abs(np:pitch - facing:pitch) < 2 and abs(np:yaw - facing:yaw) < 2.
SET g TO KERBIN:MU / KERBIN:RADIUS^2.
PRINT "...Gravite =" + round(g,2).
PRINT " ".
LOCK M to SHIP:MASS.
LOCK Thr to SHIP:MAXTHRUST.
LOCK Twr to Thr / (M * g).
SET Twr_setpoint TO 1.0.
LOCK ALT TO SHIP:ALTITUDE.
LOCK ALTGeo TO ALT - SHIP:GEOPOSITION:TERRAINHEIGHT.
PRINT "altitude= " + ALT.
PRINT "altitude Geo= " + ALTGeo.
SET thrott TO Twr_setpoint/Twr.
LOCK THROTTLE to thrott.
CLEARSCREEN.
UNTIL ALTGeo  < 3 {

	SET Twr_setpoint TO (1 / (ALTGeo / (( ViSurface - 2 )* 10 )))^2.
	SET thrott TO Twr_setpoint/Twr.
	PRINT"altitude= " +  round(ALTGeo,2) + " " at (5,3).
	PRINT"ViSurface= " +  round(ViSurface,2) + " " at (5,4).
	PRINT"Twr= " +  round(Twr,2) + " " at (5,5).
	PRINT"Thr Max= " +  round(Thr,2) + " " at (5,6).
	PRINT"Twr_setpoint= " +  round(Twr_setpoint,2) + " " at (5,7).

	WAIT 0.005.//liste des moteur actif et verifie si conbustion 
	
	
}
SET thrott TO 0.
LOCK THROTTLE to thrott.
SET SHIP:CONTROL:PILOTMAINTHROTTLE TO 0.
Devis Shadoks
- Ce n'est qu'en essayant continuellement que l'on finit par réussir....
En d'autres termes... Plus ça rate et plus on a de chances que ça marche...
- S'il n'y a pas de solution c'est qu'il n'y a pas de problème.

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit