run once "lib/throttle". run once "lib/navigation". parameter APOAPSIS_TARGET is 80000. parameter GRAVITY_TURN_START is 8000. parameter GRAVITY_PITCH is 75. parameter INITIAL_PITCH is 85. SensorCheck(). // Configure subsystems. CORE:PART:GETMODULE("kOSProcessor"):DOEVENT("Open Terminal"). RCS off. SAS off. // Countdowns are cute. print "Initiating automated launch sequence". from { local x is 5. } until x = 0 step { set x to x - 1. } do { print "..." + x. wait 0.5. } // throttle controls when TWR() > 1.5 then { if SHIP:ALTITUDE > 32000 { lock THROTTLE to 1.0. return false. } lock THROTTLE to ThrottleToTWR(1.5). return true. } // Main ascent control. lock THROTTLE to 1.0. lock STEERING to heading(90,90,270). stage. wait until SHIP:ALTITUDE > 200. lock STEERING to heading(90, GRAVITY_PITCH, 270). wait until SHIP:ALTITUDE > GRAVITY_TURN_START. print "Pitching for gravity turn". // Perform initial pitch... lock STEERING to heading(90, GRAVITY_PITCH, 270). // Wait until we have rotated to that pitch... wait until vectorangle( SHIP:FACING:FOREVECTOR, STEERINGMANAGER:TARGET:FOREVECTOR) < 0.5. // then wait until Prograde catches up. wait until vectorangle( SHIP:SRFPROGRADE:FOREVECTOR, STEERINGMANAGER:TARGET:FOREVECTOR) < 0.5. print "Locking to prograde". until SHIP:ORBIT:APOAPSIS > 80000 { // todo: we may need different values for bodies other than Kerbin. local newHeading is lookdirup(SHIP:SRFPROGRADE:FOREVECTOR, heading(90, 0, 270):TOPVECTOR). if GetPitch(newHeading:FOREVECTOR) < 40 { set newHeading to heading(90, 40, 270). } lock STEERING to newHeading. wait 0.001. } SHIP:ADD(CreateCircularizationNode(SHIP:ORBIT:ETA:APOAPSIS)). print "Releasing controls. Circularization maneuver added. Good luck, Kerman!". set SHIP:CONTROL:PILOTMAINTHROTTLE to 0. unlock THROTTLE. unlock STEERING. SAS on. wait 5. CORE:PART:GETMODULE("kOSProcessor"):DOEVENT("Close Terminal").