View difference between Paste ID: LujPdiGG and EWmzC25s
SHOW: | | - or go back to the newest paste.
1
clearscreen.
2
set pi to 3.1415926535897932384626433832795028841971693993751058209749445923.
3
set mu to 3.986*(10^14).
4
ag1 off.
5
6
function launchHeading {
7
  set azimuth to arcsin(cos(target:orbit:inclination)/cos(ship:latitude)).
8
  return azimuth.
9
}
10
function orbitHeading {
11
  set azimuth to arcsin(cos(ship:orbit:inclination)/cos(ship:latitude)).
12
  return azimuth.
13
}
14
function pitchAngle {
15
  set ang to 90-(vang(ship:velocity:surface,ship:up:vector)).
16
  return ang.
17
} //for ascent
18
function relativeInclination {
19
  set targpos to target:position-ship:body:position.
20
  set htarg to vcrs(targpos,target:velocity:orbit).
21
  set hship to -vcrs(ship:body:position,ship:velocity:orbit).
22
  set relinc to vang(htarg,hship).
23
  return relinc.
24
}
25
function distancefromPlane {
26
  set targpos to target:position-ship:body:position.
27
  set htarg to vcrs(targpos,target:velocity:orbit).
28
  set hship to vcrs(ship:body:position,ship:velocity:orbit).
29
  set relinc to vang(htarg,hship).
30
  set descendingNode to vcrs(htarg,hship).
31
  set ang to (pi/180)*vang(descendingNode,ship:body:position).
32
  set hypoteneuse to ang*ship:body:position:mag.
33
  set dist to sin(relinc)*hypoteneuse.
34
  return dist.
35
}
36
function pitchUp { //for space
37
  set r to ship:body:position:mag.
38
  set v to ship:velocity:orbit:mag.
39
  set ag to (mu/(r^2))-((v^2)/r)+alevel.
40
  set hypoteneuseAcc to ship:maxthrust/ship:mass.
41
  set theta to arcsin(ag/hypoteneuseAcc).
42
  return theta.
43
}
44
45
set gturnAngle to 3.
46
set gturnVelocity to 42.
47
set doglegAcc to 2.
48
set apheight to 220000.
49
set periap to apheight-10000.
50
set kpPitch to 1.
51
set kiPitch to 0.1.
52
53
lock steering to heading(launchHeading(),90)+r(0,0,180).
54
print "Liftoff!".
55
lock throttle to 1.
56
stage.
57
set t0 to time:seconds.
58
59
wait until ship:verticalspeed > gturnVelocity.
60
61
lock steering to heading(launchHeading(),90-gturnAngle)+r(0,0,180).
62
print "T+"+round(time:seconds-t0)+" Seconds. Beginning Roll Program".
63
64
wait until vang(ship:velocity:surface,ship:up:vector)>gturnAngle.
65
print "T+"+round(time:seconds-t0)+" Seconds. Roll Program Complete".
66
67
lock steering to heading(launchHeading(),pitchAngle())+r(0,0,180).
68
69
//staging
70
wait until (time:seconds-t0)>154.
71
lock throttle to 0.
72
print "T+"+round(time:seconds-t0)+" Seconds. MECO".
73
wait until (time:seconds-t0)>158.
74
print "T+"+round(time:seconds-t0)+" Seconds. First Stage Separation. RCS on".
75
76
stage.
77
rcs on.
78
lock throttle to 1.
79
wait until (time:seconds-t0)>161.
80
print "T+"+round(time:seconds-t0)+" Seconds. Second Stage Ignition".
81
stage.
82
83
84
set newPitch to pitchAngle().
85
until ship:apoapsis > apheight {
86
  lock steering to heading(orbitHeading(),newPitch)+r(0,0,180).
87
  wait 0.1.
88
}
89
90
set a to 0.
91
until a > doglegAcc {
92
  lock steering to heading(orbitHeading(),0)+r(0,0,180).
93
  set v to (sin(relativeInclination())*ship:velocity:orbit:mag).
94
  set x to distancefromPlane().
95
  set a to (1/(2*x))*(v^2).
96
  wait 0.1.
97
}
98
99
100
print "T+"+round(time:seconds-t0)+" Seconds. Beginning Dogleg Maneuver".
101
set upAngle to 0.
102
set alevel to 0.
103
until alevel > 1  and ship:verticalspeed < 0 {
104
  set relativeInc to relativeInclination().
105
  if relativeInc > 0.05 {
106
    set v to (sin(relativeInc)*ship:velocity:orbit:mag).
107
    set x to distancefromPlane().
108
    set a to ((1/(2*x))*(v^2)).
109
    set thrustacc to (ship:maxthrust/ship:mass)*cos(upAngle).
110
    set offsetAngle to arcsin(a/thrustacc).
111
  }. else {
112
    set offsetAngle to 0.
113
  }.
114
  set vlevel to ship:verticalspeed.
115
  set hdiff to ship:altitude-periap.
116
  set alevel to (1/(2*hdiff))*(vlevel^2).
117
118
119
120
  lock steering to heading(orbitHeading()-offsetAngle,upAngle)+r(0,0,180).
121
}
122
print "T+"+round(time:seconds-t0)+" Seconds. Leveling off at 210 km".
123
until ship:verticalspeed > -0.5 {
124
  set relativeInc to relativeInclination().
125
  if relativeInc > 0.05 {
126
    set v to (sin(relativeInc)*ship:velocity:orbit:mag).
127
    set x to distancefromPlane().
128
    set a to ((1/(2*x))*(v^2))+1.
129
    set thrustacc to (ship:maxthrust/ship:mass)*cos(upAngle).
130
    set offsetAngle to arcsin(a/thrustacc).
131
  }. else {
132
    set offsetAngle to 0.
133
  }.
134
135
  set vlevel to ship:verticalspeed.
136
  set hdiff to ship:altitude-periap.
137
  set alevel to (1/(2*hdiff))*(vlevel^2).
138
139
  set upAngle to pitchUp().
140
  lock steering to heading(orbitHeading()-offsetAngle,upAngle)+r(0,0,180).
141
}
142
143
set alevel to 0.
144
set vsInt to 0.
145
until ship:periapsis > 0 {
146
  set relativeInc to relativeInclination().
147
  if relativeInc > 0.05{
148
    set v to (sin(relativeInc)*ship:velocity:orbit:mag).
149
    set x to distancefromPlane().
150
    set a to ((1/(2*x))*(v^2))+1.
151
    set thrustacc to (ship:maxthrust/ship:mass)*cos(upAngle).
152
    set offsetAngle to arcsin(a/thrustacc)..
153
  }. else {
154
    set offsetAngle to 0.
155
  }.
156
157
  set vs1 to ship:verticalspeed.
158
  set t1 to time:seconds.
159
  wait 0.1.
160
  set vs2 to ship:verticalspeed.
161
  set t2 to time:seconds.
162
  set dt to t2-t1.
163
164
  set vsInt to vsInt+(dt*(vs2+vs1)/2).
165
166
  set anglediff to (-kpPitch*(ship:verticalspeed))+(-kiPitch*vsInt).
167
  set upAngle to pitchUp()+anglediff.
168
  lock steering to heading(orbitHeading()-offsetAngle,upAngle)+r(0,0,180).
169
}
170
171
lock steering to prograde +r(0,0,180).
172
ag2 on.
173
wait until ship:apoapsis > 390000.
174
lock throttle to 0.
175
print "T+"+round(time:seconds-t0)+" Seconds. SECO".
176
wait 10.
177
stage.
178
print "T+"+round(time:seconds-t0)+" Seconds. Spacecraft Separation".
179
print "Remember to engage persistent rotation".
180
set ship:control:fore to 1.
181
lock steering to prograde +r(0,0,180).
182
183
wait until ship:apoapsis>400000.
184
185
set ship:control:neutralize to true.
186
run rendezvous.