Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clearscreen.
- print "Yup, it's phase time, boiyos".
- set mu to 3.986e14.
- set g to 9.81.
- set pi to 3.1415926535897932384626433832795028841971693993751058209749445923.
- set transThrust to 4.41. //.530 for 3 clowns 0.26 for resupply
- set foreThrust to 8.67. //1.06 for 3 clowns 0.52 for resupply
- set bodyRadius to 6371000.
- lights on.
- function vectorheading {
- parameter vector.
- set northvec to ship:north:vector.
- set westvec to vcrs(northvec,ship:up:vector).
- set vcrossup to vcrs(vector,ship:up:vector).
- if vang(vcrossup,northvec) > 90 {
- set hdg to -vang(vcrossup,westvec).
- } else {
- set hdg to vang(vcrossup,westvec).
- }
- return hdg.
- }
- function targetAngle {
- set targetPosition to -ship:body:position+target:position.
- set theta to vang(targetPosition,-ship:body:position).
- return theta.
- }
- function degreesPerOrbit {
- set DPO to 360*((target:orbit:period/ship:orbit:period)-1).
- return DPO.
- }
- function relativeInclination {
- set targpos to target:position-ship:body:position.
- set htarg to vcrs(targpos,target:velocity:orbit).
- set hship to -vcrs(ship:body:position,ship:velocity:orbit).
- set relinc to vang(htarg,hship).
- return relinc.
- }
- lock steering to prograde+R(0,0,180).
- set ship:control:pilotmainthrottle to 0.
- lock throttle to 0.
- sas off.
- rcs on.
- wait 10.
- sas on.
- unlock steering.
- wait 3.
- set targAngle to targetAngle.
- set dpo to degreesPerOrbit.
- //FIRST PHASING ORBIT
- set t0 to time:seconds.
- set kuniverse:timewarp:warp to 1.
- wait until time:seconds>(t0+10).
- set t0 to time:seconds.
- set kuniverse:timewarp:warp to 2.
- wait until time:seconds > (t0+100).
- set kuniverse:timewarp:warp to 3.
- until targangle<(2.1*dpo) {
- set targAngle to targetAngle.
- set dpo to degreesPerOrbit.
- print "Target/Chaser angle: "+(round(10*targAngle)/10)+" degrees".
- print "Degrees per Orbit: "+(round(10*dpo)/10)+" degrees".
- wait 0.1.
- clearscreen.
- }
- //Warping to apogee
- until ship:verticalspeed > 0 and abs(ship:altitude-ship:apoapsis) <10000 {
- set targAngle to targetAngle.
- set dpo to degreesPerOrbit.
- print "Target/Chaser angle: "+(round(10*targAngle)/10)+" degrees".
- print "Degrees per Orbit: "+(round(10*dpo)/10)+" degrees".
- wait 0.1.
- clearscreen.
- }
- //DE-WARPING SLOWLY
- print "De-Warping".
- set kuniverse:timewarp:warp to 2.
- wait until abs(ship:altitude-ship:apoapsis) < 500.
- set kuniverse:timewarp:warp to 1.
- wait until abs(ship:altitude-ship:apoapsis) < 5.
- set kuniverse:timewarp:warp to 0.
- //Circularizing at Apogee
- lock steering to prograde+R(0,0,180).
- sas off.
- wait 10.
- clearscreen.
- print "Circularizing".
- lock throttle to 1.
- set orbitalv to sqrt(mu/(ship:body:position:mag)).
- until ship:velocity:orbit:mag > orbitalv {
- lock steering to heading(vectorheading(ship:velocity:orbit),0)+R(0,0,180).
- set ship:control:top to 3*ship:verticalspeed.
- wait 0.05.
- }
- set ship:control:neutralize to true.
- //Warping to next phasing burn
- clearscreen.
- print "Phasing and Warping to next burn".
- lock throttle to 0.
- unlock steering.
- sas on.
- wait 5.
- //SECOND PHASING ORBIT
- set t0 to time:seconds.
- set kuniverse:timewarp:warp to 1.
- wait until time:seconds>(t0+10).
- set t0 to time:seconds.
- set kuniverse:timewarp:warp to 2.
- wait until time:seconds > (t0+100).
- set kuniverse:timewarp:warp to 3.
- set targAngle to targetAngle.
- set dpo to degreesPerOrbit.
- until targangle<(1.1*dpo) {
- set targAngle to targetAngle.
- set dpo to degreesPerOrbit.
- print "Target/Chaser angle: "+(round(10*targAngle)/10)+" degrees".
- print "Degrees per Orbit: "+(round(10*dpo)/10)+" degrees".
- wait 0.1.
- clearscreen.
- }
- //Warping and Dewarping to station apsis
- if target:verticalspeed < 0 {
- until abs(target:periapsis-target:altitude)<100 {
- set targAngle to targetAngle.
- set dpo to degreesPerOrbit.
- print "Target/Chaser angle: "+(round(10*targAngle)/10)+" degrees".
- print "Degrees per Orbit: "+(round(10*dpo)/10)+" degrees".
- wait 0.1.
- clearscreen.
- }
- set kuniverse:timewarp:warp to 2.
- until abs(target:periapsis-target:altitude)<10 {
- set targAngle to targetAngle.
- set dpo to degreesPerOrbit.
- print "Target/Chaser angle: "+(round(10*targAngle)/10)+" degrees".
- print "Degrees per Orbit: "+(round(10*dpo)/10)+" degrees".
- wait 0.1.
- clearscreen.
- }
- set kuniverse:timewarp:warp to 1.
- until abs(target:periapsis-target:altitude)<1 {
- set targAngle to targetAngle.
- set dpo to degreesPerOrbit.
- print "Target/Chaser angle: "+(round(10*targAngle)/10)+" degrees".
- print "Degrees per Orbit: "+(round(10*dpo)/10)+" degrees".
- wait 0.1.
- clearscreen.
- }
- set kuniverse:timewarp:warp to 0.
- } else {
- until abs(target:apoapsis-target:altitude)<100 {
- set targAngle to targetAngle.
- set dpo to degreesPerOrbit.
- print "Target/Chaser angle: "+(round(10*targAngle)/10)+" degrees".
- print "Degrees per Orbit: "+(round(10*dpo)/10)+" degrees".
- wait 0.1.
- clearscreen.
- }
- set kuniverse:timewarp:warp to 2.
- until abs(target:apoapsis-target:altitude)<10 {
- set targAngle to targetAngle.
- set dpo to degreesPerOrbit.
- print "Target/Chaser angle: "+(round(10*targAngle)/10)+" degrees".
- print "Degrees per Orbit: "+(round(10*dpo)/10)+" degrees".
- wait 0.1.
- clearscreen.
- }
- set kuniverse:timewarp:warp to 1.
- until abs(target:apoapsis-target:altitude)<1 {
- set targAngle to targetAngle.
- set dpo to degreesPerOrbit.
- print "Target/Chaser angle: "+(round(10*targAngle)/10)+" degrees".
- print "Degrees per Orbit: "+(round(10*dpo)/10)+" degrees".
- wait 0.1.
- clearscreen.
- }
- set kuniverse:timewarp:warp to 0.
- }
- if target:verticalspeed > 0 { //this helps determine if the next target apsis is apogee or perigee
- set isApo to 1.
- } else {
- set isApo to 0.
- }
- wait 5.
- //Waiting to burn then burning. Raising apogee to 5km below station apsis
- lock steering to prograde+R(0,0,180).
- sas off.
- set waitTime to (ship:body:position:mag*targAngle*pi/180)/ship:velocity:orbit:mag.
- set initialmissiontime to time:seconds.
- sas on.
- set kuniverse:timewarp:warp to 1.
- wait until time:seconds>(initialmissiontime+(0.8*waittime)).
- set kuniverse:timewarp:warp to 0.
- sas off.
- wait until time:seconds>(initialmissiontime+waittime).
- clearscreen.
- print "Raising Apogee to -5km".
- lock throttle to 1.
- if isApo = 1 {
- until ship:apoapsis > (target:periapsis-5500) {
- set ship:control:top to 3*ship:verticalspeed.
- lock steering to heading(vectorheading(ship:velocity:orbit),0)+R(0,0,180).
- wait 0.1.
- }
- } else {
- until ship:apoapsis > (target:apoapsis-5500){
- set ship:control:top to 3*ship:verticalspeed.
- lock steering to heading(vectorheading(ship:velocity:orbit),0)+R(0,0,180).
- wait 0.1.
- }
- }
- set ship:control:neutralize to true.
- lock throttle to 0.
- //Raising Perigee to 5km below apsis
- clearscreen.
- print "Warping to next burn".
- lock throttle to 0.
- unlock steering.
- sas on.
- wait 5.
- set t0 to time:seconds.
- set kuniverse:timewarp:warp to 1.
- wait until time:seconds>(t0+10).
- set t0 to time:seconds.
- set kuniverse:timewarp:warp to 2.
- wait until time:seconds > (t0+100).
- set kuniverse:timewarp:warp to 3.
- wait until abs(ship:altitude-ship:apoapsis) < 5000.
- set kuniverse:timewarp:warp to 2.
- wait until abs(ship:altitude-ship:apoapsis) < 500.
- set kuniverse:timewarp:warp to 1.
- wait until abs(ship:altitude-ship:apoapsis) < 5.
- set kuniverse:timewarp:warp to 0.
- wait 10.
- sas off.
- lock steering to prograde+R(0,0,180).
- clearscreen.
- print "Raising Perigee to -5km".
- lock throttle to 1.
- if isApo = 1 {
- until ship:apoapsis > (target:apoapsis-5500){
- set ship:control:top to 3*ship:verticalspeed.
- lock steering to heading(vectorheading(ship:velocity:orbit),0)+R(0,0,180).
- wait 0.1.
- }
- } else {
- until ship:periapsis > (target:periapsis-5500) {
- set ship:control:top to 3*ship:verticalspeed.
- lock steering to heading(vectorheading(ship:velocity:orbit),0)+R(0,0,180).
- wait 0.1.
- }
- }
- set ship:control:neutralize to true.
- lock throttle to 0.
- wait 5.
- //Matching Vertical Speeds of chaser and station
- until abs(ship:verticalspeed-target:verticalspeed)<0.01 {
- print "Matching Vertical Speeds".
- print " ".
- print "Chaser VS: "+(round(ship:verticalspeed*100)/100)+" m/s".
- print "Station VS: "+(round(target:verticalspeed*100)/100)+" m/s".
- set VSerror to target:verticalspeed-ship:verticalspeed.
- set ship:control:top to -15*VSerror.
- wait 0.1.
- clearscreen.
- }
- set ship:control:neutralize to true.
- unlock steering.
- sas on.
- //Warping ahead to match planes
- set kuniverse:timewarp:warp to 2.
- set killLoop to 1000.
- until killLoop < 0.001{
- set tvh to vectorheading(target:velocity:orbit).
- set svh to vectorheading(ship:velocity:orbit).
- set ri to relativeInclination().
- set killLoop to abs(svh-tvh-ri).
- print "Preparing to match planes: "+killLoop.
- wait 0.1.
- clearscreen.
- }
- set kuniverse:timewarp:warp to 1.
- set killLoop to 1000.
- until killLoop < 0.0001 {
- set tvh to vectorheading(target:velocity:orbit).
- set svh to vectorheading(ship:velocity:orbit).
- set ri to relativeInclination().
- set killLoop to abs(svh-tvh-ri).
- print "Preparing to match planes: "+killLoop.
- wait 0.1.
- clearscreen.
- }
- //Matching planes
- set kuniverse:timewarp:warp to 0.
- wait 5.
- sas off.
- lock steering to prograde+r(0,0,180).
- clearscreen.
- print "Matching Planes".
- set ship:control:starboard to 1.
- set initialPeriod to ship:orbit:period.
- set killLoop to -1.
- wait 3.
- until killLoop > 0 {
- clearscreen.
- print "Matching Planes".
- set r1 to relativeInclination().
- print "Relative Inclination is: "+(round(10000*r1)/10000)+" degrees".
- set ship:control:fore to initialPeriod-ship:orbit:period.
- wait 0.1.
- set r2 to relativeInclination().
- set killLoop to r2-r1.
- }
- clearscreen.
- set ship:control:neutralize to true.
- wait 10.
- unlock steering.
- sas on.
- set t0 to time:seconds.
- set kuniverse:timewarp:warp to 1.
- wait until time:seconds>(t0+10).
- set t0 to time:seconds.
- set kuniverse:timewarp:warp to 2.
- wait until time:seconds > (t0+100).
- set kuniverse:timewarp:warp to 3.
- //warping to intercept burn
- set yburn to 2.
- set y to 30000000.
- until y<(yburn+20000) {
- set targang to targetAngle().
- set y to (targang/360)*2*pi*(bodyRadius+target:altitude).
- set yburn to ((target:altitude-ship:altitude)*2.35)+8000.
- print "Loop One".
- print "Commencing burn at Y = "+round(yburn).
- print "Current Y value = "+round(y).
- wait 0.1.
- clearscreen.
- }
- set kuniverse:timewarp:warp to 2.
- until y<(yburn+4000) {
- set targang to targetAngle().
- set y to (targang/360)*2*pi*(bodyRadius+target:altitude).
- set yburn to ((target:altitude-ship:altitude)*2.35)+8000.
- print "Loop Two".
- print "Commencing burn at Y = "+round(yburn).
- print "Current Y value = "+round(y).
- wait 0.1.
- clearscreen.
- }
- set kuniverse:timewarp:warp to 1.
- until y<(yburn+150) {
- set targang to targetAngle().
- set y to (targang/360)*2*pi*(bodyRadius+target:altitude).
- set yburn to ((target:altitude-ship:altitude)*2.35)+8000.
- print "Loop Three".
- print "Commencing burn at Y = "+round(yburn).
- print "Current Y value = "+round(y).
- wait 0.1.
- clearscreen.
- }
- set kuniverse:timewarp:warp to 0.
- sas off.
- lock steering to prograde+r(0,0,180).
- until y<(yburn) {
- set targang to targetAngle().
- set y to (targang/360)*2*pi*(bodyRadius+target:altitude).
- set yburn to ((target:altitude-ship:altitude)*2.35)+8000.
- print "Commencing burn at Y = "+round(yburn).
- print "Current Y value = "+round(y).
- wait 0.1.
- clearscreen.
- }
- //calculating and beginning intercept burn
- set w to 2*pi/ship:orbit:period.
- set dv to .25*w*(target:altitude-ship:altitude).
- set a to foreThrust/ship:mass.
- set t to dv/a.
- set ship:control:fore to 1.
- set t0 to time:seconds.
- until time:seconds > (t0+t) { //intercept 8km aft of station
- lock steering to heading(vectorheading(ship:velocity:orbit),0)+R(0,0,180).
- clearscreen.
- print "Initiating Final Transfer Burn".
- wait 0.05.
- }
- set ship:control:fore to 0.
- set ship:control:neutralize to true.
- unlock steering.
- sas on.
- wait 5.
- clearscreen.
- print "Please Run the finalapproach.ks file".
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement