View difference between Paste ID: 4i0eCPnG and eyMLEhqG
SHOW: | | - or go back to the newest paste.
1
//Approaching from 5km beneath station
2
clearscreen.
3
set pi to 3.1415926535897932384626433832795028841971693993751058209749445923.
4
set mu to 3.986*(10^14).
5
ag1 off.
6
set target to "LIESS".
7
set lateraloffset   to 0.
8
set verticaloffset to -5000.
9
rcs on.
10
sas off.
11
gear off.
12
lock steering to prograde + r(0,0,180).
13
14
set maneuverSpeed to 1.
15
16
//functions
17
function verticaldist {
18
  set vdist to target:altitude-ship:altitude.
19
	return vdist.
20
}.
21
function verticalinputFunction {
22
	if abs(verticalDistance2+extraH) > 10 {
23
		set vver to (verticalDistance2-verticalDistance1)/(dt).
24
		if verticaldistance2+extraH > 0 {
25
			set ms to -maneuverSpeed.
26
		}. else {
27
			set ms to  maneuverSpeed.
28
		}
29
		set vverError to ms-vver.
30
		set vertinput  to kpv*vverError.
31
    ///////////////////////////////////////////
32
	}. else {
33
		set sverError to (verticaldistance2+extraH).
34
		set vver to (verticalDistance2-verticalDistance1)/(dt).
35
		set vertinput to -((kps*sverError)+(kds*vver)).
36
	}.
37
	return vertinput.
38
}.
39
40
////////////////////////////////////////////////////////////////////////////////
41
//defining values and gains
42
set kpv to 1.
43
set kps to .1.
44
set kds to 2.
45
46
set latinput to 0.
47
set verticalinput to 0.
48
set extraH to verticaloffset.
49
set vver to 0.
50
51
set desireSMA to target:orbit:semimajoraxis-5000.
52
set desiredT to 2*pi*sqrt((desireSMA^3)/mu).
53
54
//Sub 5 KM station keeping
55
until ag1 {
56
	if 2 > 1 {
57
		set verticalDistance1 to verticaldist().
58
		set t1                to time:seconds.
59
		print "Vertical Difference "+round(verticalDistance1)+" m".
60
		print " ".
61
		print "Vertical Input "+round(100*verticalinput).
62
		wait 0.2.
63
		clearscreen.
64
		set verticalDistance2 to verticaldist().
65
		set t2                to time:seconds.
66
		set dt                to t2-t1.
67
	}. //this is just so i can hide it easily
68
	////////////////////////////////////////////
69
	set verticalinput to verticalinputfunction().
70
	///////////////////////////////////////////
71
	set ship:control:top       to verticalinput.
72
	set foreinput to 0.1*(desiredT-ship:orbit:period).
73
	set ship:control:fore to foreinput.
74
	print "Foreward Input "+(100*round(foreinput)).
75
}.
76
ag1 off.
77
78
unlock steering.
79
sas on.
80
set ang to 2. //between ship and target positions
81
set theta to 1.
82
until   ang < theta {
83
	set targpos to target:position+ship:body:position.
84
	set ang to vang(ship:body:position,targpos).
85
	set dist to 1000*13.8.//m. value obtained from space mech notes
86
	set theta to (180/pi)*(dist/ship:body:position:mag).
87
	print "Awaiting Burn".
88
	print "Loop ends at zero: "+round(1000*(ang-theta)).
89
	wait 0.1.
90
	clearscreen.
91
}
92
set warp to 0.
93
sas off.
94
lock steering to prograde + r(0,0,180).
95
96
//this is about 1.4 m/s dv prograde
97
//foreward acceleration averages .4 m/s2
98
set v0 to ship:velocity:orbit:mag.
99
set ship:control:fore to 1.
100
wait until ship:velocity:orbit:mag>(v0+3.4).
101
set ship:control:neutralize to true.
102
unlock steering.
103
sas on.
104
until ag1 {
105
	print "Altitude Difference: "+round(target:altitude-ship:altitude)+" meters".
106
	wait 0.1.
107
	clearscreen.
108
}
109
ag1 off.
110
run twokmclosing.