finalized raden launch
wip landing script
This commit is contained in:
38
boosterDeorbit.ks
Normal file
38
boosterDeorbit.ks
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
//-126
|
||||||
|
function DeOrbit{
|
||||||
|
parameter burnLng, deltaV.
|
||||||
|
|
||||||
|
lock pos to SHIP:geoposition.
|
||||||
|
|
||||||
|
lock curLng to pos:lng.
|
||||||
|
|
||||||
|
DECLARE LOCAL tgtLng IS burnLng - 5.
|
||||||
|
if curLng > burnLng or curLng < tgtLng {
|
||||||
|
SET WARPMODE TO "RAILS".
|
||||||
|
SET WARP TO 3.
|
||||||
|
print "warping to " + tgtLng.
|
||||||
|
WAIT UNTIL curLng > tgtLng and curLng < burnLng.
|
||||||
|
SET WARP TO 0.
|
||||||
|
print "arived at dst " + tgtLng.
|
||||||
|
print "burn at " + burnLng.
|
||||||
|
}
|
||||||
|
print "currently at" + curLng.
|
||||||
|
|
||||||
|
BRAKES ON.
|
||||||
|
RCS ON.
|
||||||
|
LOCK steering to retrograde.
|
||||||
|
wait until curLng >= burnLng.
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function CalculateBurnDuration{
|
||||||
|
parameter dv.
|
||||||
|
|
||||||
|
// declare local isp is GetIsp().
|
||||||
|
// declare local finalMass is mass * exp(-dv / (isp * constant:g0)).
|
||||||
|
// declare local twr is ship:maxThrust / (((mass + finalMass)/2) * constant:g0).
|
||||||
|
|
||||||
|
|
||||||
|
// local t is dv / (twr * constant.g0).
|
||||||
|
// return t.
|
||||||
|
}
|
||||||
4
boot/radenBoot.ks
Normal file
4
boot/radenBoot.ks
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
wait until ship:unpacked.
|
||||||
|
clearscreen.
|
||||||
|
switch to 0.
|
||||||
|
run radenLaunch.
|
||||||
4
boot/sanaBoot.ks
Normal file
4
boot/sanaBoot.ks
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
wait until ship:unpacked.
|
||||||
|
clearscreen.
|
||||||
|
switch to 0.
|
||||||
|
run poweredLanding.
|
||||||
@@ -1,15 +1,30 @@
|
|||||||
declare function lerp{
|
declare function Lerp{
|
||||||
parameter a.
|
parameter a.
|
||||||
parameter b.
|
parameter b.
|
||||||
parameter t.
|
parameter t.
|
||||||
return a + (b - a) * t.
|
return a + (b - a) * t.
|
||||||
}
|
}
|
||||||
|
|
||||||
declare function map{
|
declare function Map{
|
||||||
parameter a1.
|
parameter value.
|
||||||
parameter b1.
|
parameter low1.
|
||||||
parameter a2.
|
parameter high1.
|
||||||
parameter b2.
|
parameter low2.
|
||||||
parameter v.
|
parameter high2.
|
||||||
return a2 + (v - a1) * (b2 - a2) / (b1 - a1).
|
return low2 + (high2 - low2) * ((value - low1) / (high1 - low1)).
|
||||||
|
}
|
||||||
|
|
||||||
|
declare function ApproximateExp {
|
||||||
|
parameter x.
|
||||||
|
local result is 1.0.
|
||||||
|
local xPower is 1.0.
|
||||||
|
local nFact is 1.0.
|
||||||
|
|
||||||
|
// Loop 4 times (for terms 1 through 4, total 5 terms)
|
||||||
|
from { local n is 1.} until n = 5 step {set n to n + 1.} do {
|
||||||
|
SET xPower TO xPower * x.
|
||||||
|
SET nFact TO nFact * n.
|
||||||
|
SET result TO result + (xPower / nFact).
|
||||||
|
}
|
||||||
|
RETURN result.
|
||||||
}
|
}
|
||||||
112
library/lib_vessel_utils.ks
Normal file
112
library/lib_vessel_utils.ks
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
run "library/lib_math".
|
||||||
|
|
||||||
|
declare function WaitForEngineStart{
|
||||||
|
wait until AnyEngineActive().
|
||||||
|
}
|
||||||
|
|
||||||
|
declare function AnyEngineActive{
|
||||||
|
list engines in allEngines.
|
||||||
|
for eng in allEngines{
|
||||||
|
if eng:ignition {
|
||||||
|
return true.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false.
|
||||||
|
}
|
||||||
|
|
||||||
|
declare function GetIsp{
|
||||||
|
LIST ENGINES IN allEngines.
|
||||||
|
declare local totalThrust is ship:maxThrust.
|
||||||
|
local sum is 0.
|
||||||
|
local weights is 0.
|
||||||
|
for eng in allEngines{
|
||||||
|
if eng:IGNITION and not eng:flameout{
|
||||||
|
local w is eng:AVAILABLETHRUST / totalThrust.
|
||||||
|
local ispW is eng:isp * w.
|
||||||
|
set sum to sum + ispW.
|
||||||
|
set weights to weights + w.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sum / weights.
|
||||||
|
}
|
||||||
|
|
||||||
|
declare function GetMaxMassFlow{
|
||||||
|
LIST ENGINES IN allEngines.
|
||||||
|
local sum is 0.
|
||||||
|
for eng in allEngines{
|
||||||
|
if eng:IGNITION and not eng:flameout{
|
||||||
|
set sum to sum + eng:maxmassflow.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sum.
|
||||||
|
}
|
||||||
|
|
||||||
|
declare function CalculateSuicideBurnAltitude
|
||||||
|
{
|
||||||
|
parameter vertSpeed.
|
||||||
|
parameter localGravity.
|
||||||
|
parameter tgtAltitude is 0.
|
||||||
|
|
||||||
|
local burnAltitude is ((vertSpeed^2) / (2 * CalculateAverageAcceleration(localGravity))).
|
||||||
|
return burnAltitude + tgtAltitude.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
declare function CalculateSuicideBurnDuration
|
||||||
|
{
|
||||||
|
parameter isp.
|
||||||
|
return CalculateBurnDuration(verticalSpeed, isp, ship:mass, GetMaxMassFlow() * 1000).
|
||||||
|
}
|
||||||
|
|
||||||
|
declare function CalculateBurnDuration
|
||||||
|
{
|
||||||
|
parameter dv.
|
||||||
|
parameter burnIsp.
|
||||||
|
parameter initialMass.
|
||||||
|
parameter massFlow.
|
||||||
|
|
||||||
|
set dv to abs(dv).
|
||||||
|
local exp is -dv / (burnIsp * constant:g0).
|
||||||
|
local massRatio is ApproximateExp(-exp).
|
||||||
|
local finalMass is initialMass / massRatio.
|
||||||
|
local fuelUsed is initialMass - finalMass.
|
||||||
|
|
||||||
|
if massFlow <= 0{
|
||||||
|
return 0.
|
||||||
|
}
|
||||||
|
|
||||||
|
return fuelUsed / massFlow.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
declare function CalculateAverageAcceleration{
|
||||||
|
parameter localGravity.
|
||||||
|
return ((ship:maxthrust * 1000) / ship:mass) - localGravity.
|
||||||
|
}
|
||||||
|
|
||||||
|
declare function GetLocalGravity{
|
||||||
|
parameter curAltitude is -1.
|
||||||
|
|
||||||
|
if curAltitude = -1 {
|
||||||
|
set curAltitude to altitude.
|
||||||
|
}
|
||||||
|
return body:mu / (curAltitude + body:radius)^2.
|
||||||
|
}
|
||||||
|
|
||||||
|
declare function CalculateTimeToImpact{
|
||||||
|
parameter vertSpeed.
|
||||||
|
parameter curAltitude.
|
||||||
|
parameter gravity.
|
||||||
|
parameter tgtAltitude is 0.
|
||||||
|
|
||||||
|
if gravity <= 0 or curAltitude <= 0{
|
||||||
|
print "[warn]: invalid altitude or gravity.".
|
||||||
|
return 0.
|
||||||
|
}
|
||||||
|
|
||||||
|
local vs is abs(vertSpeed).
|
||||||
|
local g is gravity.
|
||||||
|
local hRel is curAltitude - tgtAltitude.
|
||||||
|
local disc is ((vs^2) + (2 * g * hRel)).
|
||||||
|
return (vs + sqrt(disc)) / g.
|
||||||
|
}
|
||||||
@@ -1,58 +1,93 @@
|
|||||||
|
run "library/lib_vessel_utils".
|
||||||
|
run "library/lib_location_constants".
|
||||||
|
run tests.
|
||||||
|
|
||||||
//-126
|
CORE:PART:GETMODULE("kOSProcessor"):DOEVENT("Open Terminal").
|
||||||
function DeOrbit{
|
|
||||||
parameter burnLng, deltaV.
|
|
||||||
|
|
||||||
lock pos to SHIP:geoposition.
|
|
||||||
|
|
||||||
lock curLng to pos:lng.
|
|
||||||
|
|
||||||
DECLARE LOCAL tgtLng IS burnLng - 5.
|
|
||||||
if curLng > burnLng or curLng < tgtLng {
|
|
||||||
SET WARPMODE TO "RAILS".
|
|
||||||
SET WARP TO 3.
|
|
||||||
print "warping to " + tgtLng.
|
|
||||||
WAIT UNTIL curLng > tgtLng and curLng < burnLng.
|
|
||||||
SET WARP TO 0.
|
|
||||||
print "arived at dst " + tgtLng.
|
|
||||||
print "burn at " + burnLng.
|
|
||||||
}
|
|
||||||
print "currently at" + curLng.
|
|
||||||
|
|
||||||
BRAKES ON.
|
|
||||||
RCS ON.
|
|
||||||
LOCK steering to retrograde.
|
|
||||||
wait until curLng >= burnLng.
|
|
||||||
|
|
||||||
|
function TestSetup{
|
||||||
|
print "Setting up test".
|
||||||
|
lock throttle to 100.
|
||||||
|
wait until apoapsis > 5000.
|
||||||
|
lock steering to up.
|
||||||
|
lock throttle to 0.
|
||||||
|
unlock throttle.
|
||||||
}
|
}
|
||||||
|
|
||||||
function CalculateBurnDuration{
|
|
||||||
parameter dv.
|
|
||||||
|
|
||||||
declare local isp is GetIsp().
|
function LandAtPad{
|
||||||
declare local finalMass is mass * exp(-dv / (isp * constant:g0)).
|
print "Starting Landing".
|
||||||
declare local twr is ship:maxThrust / (((mass + finalMass)/2) * constant:g0).
|
gear on.
|
||||||
|
set pad to location_constants:kerbin:launchpad:position.
|
||||||
|
lock dist to pad.
|
||||||
|
lock steering to srfRetrograde.
|
||||||
|
rcs on.
|
||||||
|
|
||||||
|
set landingThrottle to 0.
|
||||||
|
lock throttle to landingThrottle.
|
||||||
|
set hoverPid to PIDLoop(5, 0.1, 30, 0, 1).
|
||||||
|
set tgtAlt to 100.
|
||||||
|
set hoverPid:setpoint to tgtAlt.
|
||||||
|
|
||||||
local t is dv / (twr * constant.g0).
|
set landed to false.
|
||||||
return t.
|
|
||||||
|
when abs(verticalSpeed) < 10 or verticalSpeed > 1 then{
|
||||||
|
lock steering to up.
|
||||||
|
preserve.
|
||||||
}
|
}
|
||||||
|
|
||||||
function GetIsp{
|
when verticalSpeed < -10 then{
|
||||||
LIST ENGINES IN allEngines.
|
lock steering to srfRetrograde.
|
||||||
declare local totalThrust is ship:maxThrust.
|
preserve.
|
||||||
local sum is 0.
|
|
||||||
local weights is 0.
|
|
||||||
for eng in allEngines{
|
|
||||||
if eng:IGNITION and not eng:flameout{
|
|
||||||
local w is eng:AVAILABLETHRUST / totalThrust.
|
|
||||||
local ispW is eng:isp * w.
|
|
||||||
set sum to sum + ispW.
|
|
||||||
set weights to weights + w.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sum / weights.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeOrbit(-126, 250).
|
until landed {
|
||||||
print CalculateBurnDuration(250).
|
set landingThrottle to hoverPid:update(time:seconds, alt:radar).
|
||||||
|
|
||||||
|
// print "offset " + dist.
|
||||||
|
wait 0.001.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function Descent{
|
||||||
|
print "Coasting to apoapsis.".
|
||||||
|
rcs on.
|
||||||
|
lock steering to up.
|
||||||
|
set warp to 1.
|
||||||
|
wait until verticalSpeed < -100.
|
||||||
|
set warp to 0.
|
||||||
|
print "Falling...".
|
||||||
|
lock steering to srfRetrograde.
|
||||||
|
brakes on.
|
||||||
|
|
||||||
|
local lock vertSpeed to verticalSpeed.
|
||||||
|
local lock isp to GetIsp().
|
||||||
|
local lock localGravity to GetLocalGravity(altitude).
|
||||||
|
local lock burnDuration to CalculateSuicideBurnDuration(isp).
|
||||||
|
local lock imactTime to CalculateTimeToImpact(abs(vertSpeed), alt:radar, localGravity).
|
||||||
|
local lock burnAlt to CalculateSuicideBurnAltitude(vertSpeed, localGravity).
|
||||||
|
local lock timeToBurn to imactTime - burnDuration.
|
||||||
|
|
||||||
|
until timeToBurn < 0.5 {
|
||||||
|
// print "time: " + round(timeToBurn) + " len: " + burnDuration + " impact: " + imactTime + " alt: " + burnAlt.
|
||||||
|
}
|
||||||
|
|
||||||
|
wait until timeToBurn < 0.5.
|
||||||
|
|
||||||
|
|
||||||
|
until abs(verticalSpeed) < 50{
|
||||||
|
lock throttle to 1.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SET V0 TO GETVOICE(0).
|
||||||
|
V0:PLAY( NOTE(400, 0.5) ).
|
||||||
|
lock throttle to 0.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
print "Launch to start.".
|
||||||
|
WaitForEngineStart().
|
||||||
|
TestSetup().
|
||||||
|
Descent().
|
||||||
|
LandAtPad().
|
||||||
|
|
||||||
|
|||||||
@@ -1,28 +1,47 @@
|
|||||||
run "library/lib_math".
|
run "library/lib_math".
|
||||||
|
run "library/lib_vessel_utils".
|
||||||
|
|
||||||
|
local athmoAccelTarget is 600.
|
||||||
|
|
||||||
|
CORE:PART:GETMODULE("kOSProcessor"):DOEVENT("Open Terminal").
|
||||||
|
|
||||||
clearScreen.
|
clearScreen.
|
||||||
BRAKES on.
|
BRAKES on.
|
||||||
|
print "Waiting for engine ignition".
|
||||||
|
WaitForEngineStart().
|
||||||
|
|
||||||
print "Preparing to launch".
|
print "Preparing to launch".
|
||||||
from { local c is 5.} until c = 0 step {set c to c - 1.} do {
|
from { local c is 5.} until c = 0 step {set c to c - 1.} do {
|
||||||
print c.
|
print c.
|
||||||
wait 1.
|
wait 1.
|
||||||
}
|
}
|
||||||
|
clearScreen.
|
||||||
print "Launching!".
|
print "Launching!".
|
||||||
lock throttle to 100.
|
// stage.
|
||||||
lock steering to heading(90, 0, 0).
|
lock throttle to 1.
|
||||||
|
lock steering to heading(90, 1).
|
||||||
|
brakes off.
|
||||||
|
sas off.
|
||||||
|
|
||||||
print "Phase: Takeoff".
|
print "Phase: Takeoff".
|
||||||
wait until surfaceSpeed > 140.
|
|
||||||
|
wait until groundspeed > 120.
|
||||||
|
|
||||||
print "Phase: Rotate".
|
print "Phase: Rotate".
|
||||||
lock steering to heading(90, 3, 0).
|
lock steering to heading(90, 4).
|
||||||
wait 1.
|
wait until altitude > 80.
|
||||||
print "Gear up".
|
print "Gear up".
|
||||||
gear off.
|
gear off.
|
||||||
|
|
||||||
|
print "Phase: Athmospheric Acceleration".
|
||||||
|
lock steering to heading(90, 3, 0).
|
||||||
|
wait until groundspeed > athmoAccelTarget.
|
||||||
|
|
||||||
print "Phase: Athmospheric Climb".
|
print "Phase: Athmospheric Climb".
|
||||||
lock steering to heading(90, 15, 0).
|
lock tgtPitch to Map(groundSpeed, athmoAccelTarget, 1600, 3, 15).
|
||||||
wait until altitude > 20000.
|
lock steering to heading(90, tgtPitch, 0).
|
||||||
|
|
||||||
|
wait until altitude > 25000.
|
||||||
|
|
||||||
print "Phase: Mode Switch".
|
print "Phase: Mode Switch".
|
||||||
ag1 on. //Switch engine mode
|
ag1 on. //Switch engine mode
|
||||||
@@ -31,20 +50,28 @@ wait until apoapsis > 80000.
|
|||||||
|
|
||||||
print "Phase: Sub-Orbital Coast".
|
print "Phase: Sub-Orbital Coast".
|
||||||
lock throttle to 0.
|
lock throttle to 0.
|
||||||
lock steering to prograde.
|
set warpmode to "physics".
|
||||||
|
set warp to 1.
|
||||||
|
|
||||||
when altitude > 70000 then {
|
wait until altitude > 70000.
|
||||||
print "Deploying Solar".
|
print "Deploying Solar".
|
||||||
ag2 on. //deploy solar
|
panels on. //deploy solar
|
||||||
print "Opening Docking Port".
|
print "Opening Docking Port".
|
||||||
ag3 on. //open docking port
|
ag3 on. //open docking port
|
||||||
}
|
lock steering to heading(90, 0, 0).
|
||||||
|
set warp to 0.
|
||||||
|
set warpmode to "rails".
|
||||||
|
set warp to 1.
|
||||||
|
|
||||||
|
|
||||||
lock distToApo to apoapsis - altitude.
|
lock distToApo to apoapsis - altitude.
|
||||||
wait until distToApo < 100.
|
wait until distToApo < 500.
|
||||||
|
|
||||||
print "Phase: Circularize".
|
print "Phase: Circularize".
|
||||||
lock throttle to 100.
|
lock steering to heading(90, 0, 0).
|
||||||
wait until periapsis > 79000.
|
rcs on.
|
||||||
|
lock throttle to 1.
|
||||||
|
wait until periapsis > 75000.
|
||||||
unlock throttle.
|
unlock throttle.
|
||||||
|
|
||||||
print "In orbit. Releasing controls".
|
print "In orbit. Releasing controls".
|
||||||
|
|||||||
Reference in New Issue
Block a user