Improvements to auto-launch script, inspired partially by the discussion at https://amyparent.com/blog/automating-rocket-launches.html
This commit is contained in:
parent
aa59db4f82
commit
18f7e996a7
|
@ -24,10 +24,10 @@ function getPitch {
|
||||||
|
|
||||||
function Launch {
|
function Launch {
|
||||||
parameter apoapsisTarget is 80000.
|
parameter apoapsisTarget is 80000.
|
||||||
parameter atmoTWR is 1.8.
|
parameter atmoTWR is 2.0.
|
||||||
parameter gravityTurnStart is 8000.
|
parameter leadAngle is 2.
|
||||||
parameter leadAngle is 5.
|
|
||||||
parameter minPitch is 5.
|
parameter minPitch is 5.
|
||||||
|
parameter initialPitch is 10.
|
||||||
parameter autoStage is true.
|
parameter autoStage is true.
|
||||||
|
|
||||||
// Configure subsystems.
|
// Configure subsystems.
|
||||||
|
@ -53,33 +53,40 @@ function Launch {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hold throttle to maintain target TWR.
|
// Drag controls
|
||||||
// We do *not* use a PID Loop here because we can
|
when SHIP:VERTICALSPEED > 340 then {
|
||||||
// calculate the correct value discretely.
|
print "Throttling for drag control.".
|
||||||
lock THROTTLE to ThrottleToTWR(atmoTWR).
|
lock THROTTLE to ThrottleToTWR(atmoTWR).
|
||||||
print "Throttling to maintain a TWR of " + atmoTWR.
|
// TODO: if we have a pressure sensor we can use it to decide when to kick the throttle up instead, neat solution for e.g. Duna and Eve.
|
||||||
|
when SHIP:ALTITUDE > 32000 then {
|
||||||
|
lock THROTTLE to 1.0.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Main ascent control.
|
|
||||||
|
print "Phase 1: Vertical Ascent.".
|
||||||
|
lock THROTTLE to 1.0.
|
||||||
lock STEERING to Heading(90,90,270).
|
lock STEERING to Heading(90,90,270).
|
||||||
stage.
|
stage.
|
||||||
|
wait until SHIP:VERTICALSPEED > 100.
|
||||||
wait until SHIP:ALTITUDE > gravityTurnStart.
|
|
||||||
|
print "Phase 2: Initial Pitch.".
|
||||||
print "Turning gravity...".
|
|
||||||
lock STEERING to getAscentDir(leadAngle, minPitch).
|
lock STEERING to getAscentDir(leadAngle, minPitch).
|
||||||
wait until SHIP:ALTITUDE > 32000. // todo: if we have a pressure sensor we can use it to decide when to kick the throttle up instead, neat solution for e.g. Duna and Eve.
|
wait until getPitch(SHIP:SRFPROGRADE:FOREVECTOR) <= 90-initialPitch.
|
||||||
|
|
||||||
lock THROTTLE to 1.0.
|
print "Phase 3: Stable Prograde Boost.".
|
||||||
|
lock STEERING to getAscentDir(0, minPitch).
|
||||||
wait until SHIP:ORBIT:APOAPSIS > apoapsisTarget.
|
wait until SHIP:ORBIT:APOAPSIS > apoapsisTarget.
|
||||||
|
|
||||||
|
// TODO: A smoother approach based on target orbital velocity should be considered.
|
||||||
|
print "Phase 4: Circularization Maneuver.".
|
||||||
lock THROTTLE to 0.0.
|
lock THROTTLE to 0.0.
|
||||||
set SHIP:CONTROL:PILOTMAINTHROTTLE to 0.
|
set SHIP:CONTROL:PILOTMAINTHROTTLE to 0.
|
||||||
wait 0.001. // make sure these control updates get applied
|
wait 0.001. // make sure these control updates get applied
|
||||||
|
|
||||||
print "Target apoapsis acquired. Creating maneuver node.".
|
|
||||||
add CreateCircularizationNode().
|
add CreateCircularizationNode().
|
||||||
ExecNode().
|
ExecNode().
|
||||||
print "Orbit acquired. Releasing controls. Good luck, Kerman.".
|
|
||||||
|
print "Ascent Complete.".
|
||||||
unlock THROTTLE.
|
unlock THROTTLE.
|
||||||
unlock STEERING.
|
unlock STEERING.
|
||||||
SAS on.
|
SAS on.
|
||||||
|
|
|
@ -93,9 +93,9 @@ MakeMenu(
|
||||||
MakeButton(rows[2], "LNCH"),
|
MakeButton(rows[2], "LNCH"),
|
||||||
List(
|
List(
|
||||||
List("Target Apoapsis", "SCALAR", "80000"),
|
List("Target Apoapsis", "SCALAR", "80000"),
|
||||||
List("Atmo TWR", "SCALAR", "1.8"),
|
List("Initial Pitch", "SCALAR", "20"),
|
||||||
List("Gravity Turn Alt", "SCALAR", "8000"),
|
List("Lead Angle", "SCALAR", "2"),
|
||||||
List("Lead Angle", "SCALAR", "5"),
|
List("Atmo TWR", "SCALAR", "2.0"),
|
||||||
List("Minimum Pitch", "SCALAR", "5"),
|
List("Minimum Pitch", "SCALAR", "5"),
|
||||||
List("Autostage", "BOOL", true)
|
List("Autostage", "BOOL", true)
|
||||||
),
|
),
|
||||||
|
@ -105,9 +105,9 @@ MakeMenu(
|
||||||
Launch(
|
Launch(
|
||||||
options["Target Apoapsis"]:TEXT:ToNumber(),
|
options["Target Apoapsis"]:TEXT:ToNumber(),
|
||||||
options["Atmo TWR"]:TEXT:ToNumber(),
|
options["Atmo TWR"]:TEXT:ToNumber(),
|
||||||
options["Gravity Turn Alt"]:TEXT:ToNumber(),
|
|
||||||
options["Lead Angle"]:TEXT:ToNumber(),
|
options["Lead Angle"]:TEXT:ToNumber(),
|
||||||
options["Minimum Pitch"]:TEXT:ToNumber(),
|
options["Minimum Pitch"]:TEXT:ToNumber(),
|
||||||
|
options["Initial Pitch"]:TEXT:ToNumber(),
|
||||||
options["Autostage"]:PRESSED
|
options["Autostage"]:PRESSED
|
||||||
).
|
).
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user