-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSB.py
110 lines (103 loc) · 4.22 KB
/
SB.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# -*- coding: utf-8 -*-
'''
Suicide Burn
Codigo original PesteRenam
Traduzido Por Mauricio Mazur e Andrey Oliveira
'''
import krpc, time
import controlePID
nome = 'sb'
conn = krpc.connect(nome)
ksp = conn.space_center
vessel = ksp.active_vessel
body = vessel.orbit.body
flight = vessel.flight(body.reference_frame)
controle = vessel.control
#variaveis de informações
surAlt = conn.add_stream(getattr, flight, 'surface_altitude')
horizontal = conn.add_stream(getattr, flight, 'horizontal_speed')
thrust_max = conn.add_stream(getattr, vessel, 'max_thrust')
massa = conn.add_stream(getattr, vessel, 'mass')
gravidade = conn.add_stream(getattr, body, 'surface_gravity')
velocidade = conn.add_stream(getattr, flight, 'speed')
situacao = conn.add_stream(getattr, vessel, 'situation')
#tempo
UT =conn.add_stream(getattr, ksp, 'ut')
pouso = False
pousado_agua = conn.space_center.VesselSituation.splashed
pousado = conn.space_center.VesselSituation.landed
prelancamento = conn.space_center.VesselSituation.pre_launch
distanciaDaQueima = float()
distanciaPouso = 9 # altura hover
TWRMax = float()
#from PID import ControlePID
from controlePID import ControladorPID
def atualizarvariaveis():
global TWRMax
TWRMax = thrust_max() / (massa() * gravidade())
acelMax = (TWRMax * gravidade()) - gravidade()
tempoDaQueima = velocidade() / acelMax
global distanciaDaQueima
distanciaDaQueima = velocidade() * tempoDaQueima + 1 / 2 * acelMax * (tempoDaQueima ** 2)
return TWRMax, acelMax, tempoDaQueima, distanciaDaQueima
class suicideBurn:
def suicide(self):
global pouso
global distanciaDaQueima
global TWRMax
if situacao == pousado or situacao == pousado_agua:
pouso = False
while pouso == False:
#definindo valores do PID
PID = controlePID.ControladorPID(0.021, 0.001, 1, UT(), UT()) #<================================= ajustes do PID
global distanciaDaQueima
global distanciaPouso
if surAlt() == distanciaPouso:
distanciaPouso -= 1
print("baixando")
atualizarvariaveis()
PID.setValorEntrada(surAlt())
PID.setValorLimite(distanciaPouso + distanciaDaQueima)
PID.setLimiteSaida(-1, 1)
atualizarvariaveis()
#verificações
# <============================================================== Controle de SAS
controle.sas = True
if horizontal() > 2 and surAlt() <= (distanciaPouso + 30 ) :
controle.sas_mode = controle.sas_mode.retrograde
elif horizontal() < 2 and surAlt() <= distanciaPouso:
controle.sas_mode = controle.sas_mode.radial
if surAlt() < 300: #<=========================== perninhas
controle.gear = True
else:
controle.gear = False
controle.brakes = True
#atualizar
atualizarvariaveis()
correcao = PID.saidaPID(UT(), 0.019)
# Imprimir informacoes
#print("TWR : %2.f" % TWRMax)
#print("Dist. Queima : %f" % distanciaDaQueima)
print("Altitude Voo : %3.f" % surAlt())
print("Valor : %f" %distanciaPouso)
print("Correcao : ", correcao) #PID.saidaPID(UT(), 0.025)
novaAcel = (1 / TWRMax + correcao) # <-------------------------------------------- calculo de aceleracao
print("Acc Calculada : %f" % novaAcel)
print(" ")
if situacao() == pousado or situacao() == pousado_agua:
controle.throttle = 0
pouso = True
else:
controle.throttle = novaAcel
#time.sleep(0.2)
burn = suicideBurn()
if situacao() == pousado or situacao() == prelancamento:
teste = surAlt() - 10
while teste < distanciaPouso:
teste = surAlt() - 15
print("Subindo...")
controle.gear = False
atualizarvariaveis()
controle.throttle = (float (1 / TWRMax * 1.5))
controle.throttle = 0
burn.suicide()