Pin down more of the logic for flight control.

This commit is contained in:
Anna Rose 2021-07-19 00:54:32 -04:00
parent 5b9da6f0f1
commit 34ddc42b37
5 changed files with 78 additions and 17 deletions

View File

@ -2,7 +2,8 @@
// Install software. // Install software.
compile "0:/os/rocketos" to "1:/boot/rocketos". compile "0:/os/rocketos" to "1:/boot/rocketos".
compile "0:/lib/guidance" to "1:/lib/guidance". compile "0:/lib/navigation" to "1:/lib/navigation".
compile "0:/lib/throttle" to "1:/lib/throttle".
compile "0:/launch" to "1:/launch". compile "0:/launch" to "1:/launch".
// Set OS to boot and restart. // Set OS to boot and restart.

View File

@ -1,7 +1,10 @@
run once "lib/guidance". run once "lib/throttle".
run once "lib/navigation".
local APOAPSIS_TARGET is 80000. parameter APOAPSIS_TARGET is 80000.
local GRAVITY_TURN_START is 5000. parameter GRAVITY_TURN_START is 8000.
parameter GRAVITY_PITCH is 75.
parameter INITIAL_PITCH is 85.
SensorCheck(). SensorCheck().
// Configure subsystems. // Configure subsystems.
@ -13,9 +16,8 @@ SAS off.
print "Initiating automated launch sequence". print "Initiating automated launch sequence".
from { local x is 5. } until x = 0 step { set x to x - 1. } do { from { local x is 5. } until x = 0 step { set x to x - 1. } do {
print "..." + x. print "..." + x.
wait 1. wait 0.5.
} }
print "Launching".
// throttle controls // throttle controls
when TWR() > 1.5 then { when TWR() > 1.5 then {
@ -30,26 +32,55 @@ when TWR() > 1.5 then {
// Main ascent control. // Main ascent control.
lock THROTTLE to 1.0. lock THROTTLE to 1.0.
lock STEERING to heading(90,90,-90). lock STEERING to heading(90,90,270).
stage. stage.
// // DEBUG
// until false {
// lock STEERING to heading(90,90,-90).
// wait 3.
// lock STEERING to SHIP:SRFPROGRADE.
// wait 3.
// }
wait until SHIP:ALTITUDE > 200. wait until SHIP:ALTITUDE > 200.
lock STEERING to heading(90, 85, -90). lock STEERING to heading(90, GRAVITY_PITCH, 270).
wait until SHIP:ALTITUDE > GRAVITY_TURN_START. wait until SHIP:ALTITUDE > GRAVITY_TURN_START.
print "Beginning gravity turn".
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 { until SHIP:ORBIT:APOAPSIS > 80000 {
local adjustedPrograde is SHIP:ORBIT:PROGRADE * NORTH. // todo: we may need different values for bodies other than Kerbin.
local angle is max(30, adjustedPrograde:pitch). local newHeading is lookdirup(SHIP:SRFPROGRADE:FOREVECTOR,
print "Adjusted Prograde = " + adjustedPrograde. heading(90, 0, 270):TOPVECTOR).
print "Angle = " + angle. if GetPitch(newHeading:FOREVECTOR) < 40 {
lock STEERING to heading(90, angle, -90). set newHeading to heading(90, 40, 270).
}
lock STEERING to newHeading.
wait 0.001. wait 0.001.
} }
print "Releasing controls. Good luck, Kerman!". print "Releasing controls. Good luck, Kerman!".
set THROTTLE to 0.0. lock THROTTLE to 0.0.
wait 0.001.
unlock THROTTLE. unlock THROTTLE.
unlock STEERING. unlock STEERING.
SAS on.
wait 5. wait 5.
CORE:PART:GETMODULE("kOSProcessor"):DOEVENT("Close Terminal"). CORE:PART:GETMODULE("kOSProcessor"):DOEVENT("Close Terminal").

6
lib/navigation.ks Normal file
View File

@ -0,0 +1,6 @@
@lazyglobal off.
function GetPitch {
parameter v is SHIP:FACING:FOREVECTOR.
return 90 - vectorangle(SHIP:UP:FOREVECTOR, v).
}

View File

@ -1,13 +1,36 @@
function launchButtonPressed { function launchButtonPressed {
run "launch". run "launch"(
targetApo:TEXT:ToNumber(),
gravTurnStart:TEXT:ToNumber(),
initialPitch:TEXT:ToNumber()
).
} }
// Button panel // Button panel
local interface is gui(200). local interface is gui(200).
set interface:X to 150.
set interface:Y to 900.
// Launch button // Launch button
local launchButton is interface:addbutton("Launch"). local hBox is interface:AddHBox().
hBox:AddLabel("Initial Pitch").
local initialPitch is hBox:AddTextField("85").
local hBox is interface:AddHBox().
hBox:AddLabel("Gravity Turn @").
local gravTurnStart is hBox:AddTextField("8000").
local hBox is interface:AddHBox().
hBox:AddLabel("Gravity Pitch").
local gravPitch is hBox:AddTextField("75").
local hBox is interface:AddHBox().
hBox:AddLabel("Target Apoapsis").
local targetApo is hBox:AddTextField("80000").
local launchButton is interface:AddButton("Launch").
set launchButton:onClick to launchButtonPressed@. set launchButton:onClick to launchButtonPressed@.
interface:show(). interface:show().
wait until false. wait until false.