Use a time-based approach for the pitch instead of just a lead angle and a prayer.
This commit is contained in:
parent
d659889b82
commit
15c479cd18
|
@ -53,6 +53,7 @@ function compileFile {
|
||||||
|
|
||||||
if debug {
|
if debug {
|
||||||
CopyPath("0:" + src + ".ks", "1:" + dest + ".ks").
|
CopyPath("0:" + src + ".ks", "1:" + dest + ".ks").
|
||||||
|
return.
|
||||||
}
|
}
|
||||||
|
|
||||||
compile "0:" + src.
|
compile "0:" + src.
|
||||||
|
|
|
@ -22,12 +22,24 @@ function getPitch {
|
||||||
return 90 - vectorangle(SHIP:UP:FOREVECTOR, v).
|
return 90 - vectorangle(SHIP:UP:FOREVECTOR, v).
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Given a target (end) pitch, a target duration, and a start time,
|
||||||
|
// returns the correct current heading.
|
||||||
|
function pitchProgram {
|
||||||
|
parameter endPitch, duration, startTime.
|
||||||
|
|
||||||
|
// what percent through the duration are we?
|
||||||
|
local elapsedP is (TIME:SECONDS - startTime) / duration.
|
||||||
|
local p is endPitch * elapsedP.
|
||||||
|
return Heading(90, 90 - p, 270).
|
||||||
|
}
|
||||||
|
|
||||||
function Launch {
|
function Launch {
|
||||||
parameter apoapsisTarget is 80000.
|
parameter apoapsisTarget is 80000.
|
||||||
parameter atmoTWR is 2.0.
|
parameter atmoTWR is 2.0.
|
||||||
parameter leadAngle is 2.
|
// parameter leadAngle is 2.
|
||||||
parameter minPitch is 5.
|
parameter minPitch is 5.
|
||||||
parameter initialPitch is 10.
|
parameter initialPitch is 20.
|
||||||
|
parameter pitchTime is 30.
|
||||||
parameter autoStage is true.
|
parameter autoStage is true.
|
||||||
|
|
||||||
// Configure subsystems.
|
// Configure subsystems.
|
||||||
|
@ -71,8 +83,9 @@ function Launch {
|
||||||
wait until SHIP:VERTICALSPEED > 100.
|
wait until SHIP:VERTICALSPEED > 100.
|
||||||
|
|
||||||
print "Phase 2: Initial Pitch.".
|
print "Phase 2: Initial Pitch.".
|
||||||
lock STEERING to getAscentDir(leadAngle, minPitch).
|
local startTime is TIME:SECONDS.
|
||||||
wait until getPitch(SHIP:SRFPROGRADE:FOREVECTOR) <= 90-initialPitch.
|
lock STEERING to pitchProgram(initialPitch, pitchTime, startTime).
|
||||||
|
wait pitchTime.
|
||||||
|
|
||||||
print "Phase 3: Stable Prograde Boost.".
|
print "Phase 3: Stable Prograde Boost.".
|
||||||
lock STEERING to getAscentDir(0, minPitch).
|
lock STEERING to getAscentDir(0, minPitch).
|
||||||
|
|
|
@ -94,7 +94,7 @@ MakeMenu(
|
||||||
List(
|
List(
|
||||||
List("Target Apoapsis", "SCALAR", "80000"),
|
List("Target Apoapsis", "SCALAR", "80000"),
|
||||||
List("Initial Pitch", "SCALAR", "20"),
|
List("Initial Pitch", "SCALAR", "20"),
|
||||||
List("Lead Angle", "SCALAR", "2"),
|
List("Pitch Time", "SCALAR", "45"),
|
||||||
List("Atmo TWR", "SCALAR", "2.0"),
|
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["Lead Angle"]:TEXT:ToNumber(),
|
|
||||||
options["Minimum Pitch"]:TEXT:ToNumber(),
|
options["Minimum Pitch"]:TEXT:ToNumber(),
|
||||||
options["Initial Pitch"]:TEXT:ToNumber(),
|
options["Initial Pitch"]:TEXT:ToNumber(),
|
||||||
|
options["Pitch Time"]:TEXT:ToNumber(),
|
||||||
options["Autostage"]:PRESSED
|
options["Autostage"]:PRESSED
|
||||||
).
|
).
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user