From 324d9ab7a3558c3c0e3f15cd0cd30af02b2232ba Mon Sep 17 00:00:00 2001 From: annabunches Date: Sun, 8 Aug 2021 20:47:14 -0400 Subject: [PATCH] Fix satdeploy. --- lib/navigation.ks | 15 +++++---------- lib/node.ks | 3 ++- prog/circ.ks | 14 +++----------- prog/execnode.ks | 2 +- prog/satdeploy.ks | 24 +++++++++++++++++------- 5 files changed, 28 insertions(+), 30 deletions(-) diff --git a/lib/navigation.ks b/lib/navigation.ks index a4c33ca..959669f 100644 --- a/lib/navigation.ks +++ b/lib/navigation.ks @@ -25,26 +25,21 @@ function GetAscentVector { function CreateCircularizationNode { parameter where is "APO". - local dt is 0. - local a is 0. - local t is 0. + local t is TIME. if where:IsType("String") { if where = "APO" { - set dt to SHIP:ORBIT:ETA:APOAPSIS. - set a to SHIP:ORBIT:APOAPSIS. + set t to TIME + SHIP:ORBIT:ETA:APOAPSIS. } else if where = "PERI" { - set dt to SHIP:ORBIT:ETA:PERIAPSIS. - set a to SHIP:ORBIT:PERIAPSIS. + set t to TIME + SHIP:ORBIT:ETA:PERIAPSIS. } else { print "WARNING: Invalid string passed to CreateCirculazationNode(). Node is invalid.". } - - set t to TIME + dt. } else { + // we've been passed a time at which to circularize. set t to where. } - local Vc is sqrt(SHIP:BODY:MU/(SHIP:BODY:RADIUS + a)). + local Vc is sqrt(SHIP:BODY:MU/(PositionAt(SHIP, t) - SHIP:BODY:POSITION):MAG). local dV is Vc - VelocityAt(SHIP, t):ORBIT:MAG. local n is Node(t, 0, 0, dV). diff --git a/lib/node.ks b/lib/node.ks index f27bab9..ed7c14a 100644 --- a/lib/node.ks +++ b/lib/node.ks @@ -20,7 +20,8 @@ function ExecNode { } print "Adjusting heading". - lock STEERING to LookDirUp(NEXTNODE:DELTAV, SHIP:FACING:TOPVECTOR). + // The vector constant here should always align our "sides" with the universal up/down axis, so we can predictably place solar panels. + lock STEERING to LookDirUp(NEXTNODE:DELTAV, V(0,0,90)). wait until VAng(SHIP:FACING:FOREVECTOR, STEERINGMANAGER:TARGET:FOREVECTOR) <= 0.1. print "Warping to node.". diff --git a/prog/circ.ks b/prog/circ.ks index dc5ce57..b8827dc 100644 --- a/prog/circ.ks +++ b/prog/circ.ks @@ -2,14 +2,6 @@ runoncepath("/lib/navigation"). -parameter where is "a". -parameter whereStr is "apoapsis". - -local usePeri is false. -if where = "p" { - set usePeri to true. - set whereStr to "periapsis". -} - -CreateCircularizationNode(usePeri). -print "Circularization node created at " + whereStr. +parameter where. +add CreateCircularizationNode(where). +print "Circularization node created.". diff --git a/prog/execnode.ks b/prog/execnode.ks index 54c4c27..e99890e 100644 --- a/prog/execnode.ks +++ b/prog/execnode.ks @@ -1,4 +1,4 @@ @lazyglobal off. runoncepath("/lib/node"). -ExecuteNode(). +ExecNode(). diff --git a/prog/satdeploy.ks b/prog/satdeploy.ks index 903d6e4..5dddaaa 100644 --- a/prog/satdeploy.ks +++ b/prog/satdeploy.ks @@ -1,7 +1,7 @@ // Run this program on a staged multi-satellite deploy mission. (e.g. using a fairing with interstage nodes and stack separators) To use: // // 1. Make sure the next stage will decouple a satellite and activate its engines. -// 2. Pull up the PAW for the satellite's probe core and "Control from Here". +// 2. Pull up the PAW for the satellite's probe core and "Control from Here", so KSP stays focused on the satellite after deploy. // 3. Run this program from that satellite's computer. // // This program will decouple the satellite and circularize its orbit. Ideally done on a resonant satellite injection orbit. @@ -14,13 +14,23 @@ runoncepath("/lib/navigation"). runoncepath("/lib/node"). stage. -PANELS on. -set SHIP:NAME to name. -add CreateCircularizationNode(TIME + 2). -ExecNode(). +wait until SHIP:UNPACKED. +wait 0.001. + +// KSP does not intelligently figure out staging on the fly here, so stage again +stage. + +set SHIP:NAME to name. + +PANELS on. for p in SHIP:PARTS { - if p:MODULES:Find("ModuleRTAntenna") > -1 { - p:GetModule("ModuleRTAntenna"):DoEvent("ACTIVATE"). + if p:MODULES:Find("ModuleRTAntenna") > -1 and p:GetModule("ModuleRTAntenna"):ALLEVENTS:Find("Activate") > -1 { + p:GetModule("ModuleRTAntenna"):DoEvent("Activate"). } } + +//add CreateCircularizationNode(TIME + 5). +add CreateCircularizationNode("PERI"). +ExecNode(). +