Skip to content

Commit 5fb47a5

Browse files
authored
Implementado função de log de erros
Agora o Auto-Rover gasta menos energia enquanto trafega, o mod cria um arquivo de erros em caso de falha, e implementei um arquivo de configuração do mod, para salvar dados, mas ainda não está completo. Todas as outras funções continuam.
1 parent d3acb74 commit 5fb47a5

9 files changed

Lines changed: 2072 additions & 1919 deletions

File tree

src/com/pesterenan/MechPeste.java

Lines changed: 226 additions & 205 deletions
Large diffs are not rendered by default.

src/com/pesterenan/funcoes/AutoRover.java

Lines changed: 367 additions & 340 deletions
Large diffs are not rendered by default.
Lines changed: 179 additions & 179 deletions
Original file line numberDiff line numberDiff line change
@@ -1,180 +1,180 @@
1-
package com.pesterenan.funcoes;
2-
3-
import java.io.IOException;
4-
5-
import com.pesterenan.MechPeste;
6-
import com.pesterenan.gui.GUI;
7-
import com.pesterenan.gui.Status;
8-
import com.pesterenan.utils.ControlePID;
9-
10-
import krpc.client.Connection;
11-
import krpc.client.RPCException;
12-
import krpc.client.Stream;
13-
import krpc.client.StreamException;
14-
import krpc.client.services.SpaceCenter;
15-
import krpc.client.services.SpaceCenter.Flight;
16-
import krpc.client.services.SpaceCenter.Node;
17-
import krpc.client.services.SpaceCenter.Vessel;
18-
import krpc.client.services.SpaceCenter.VesselSituation;
19-
20-
public class DecolagemOrbital {
21-
22-
private static SpaceCenter centroEspacial;
23-
private static Vessel naveAtual;
24-
private Flight parametrosVoo;
25-
26-
Stream<Double> tempoMissao;
27-
Stream<Double> altitude;
28-
Stream<Double> apoastro;
29-
Stream<Double> periastro;
30-
double pressaoAtual;
31-
32-
private float altInicioCurva = 250;
33-
private float altFimCurva = 80000;
34-
public static float altApoastroFinal = 80000;
35-
private int etapaAtual = 0;
36-
private int inclinacao = 90;
37-
private static int direcao = 90;
38-
private double anguloGiro;
39-
private static boolean executando = true;
40-
private Manobras manobras;
41-
ControlePID ctrlPressao = new ControlePID();
42-
43-
public DecolagemOrbital(Connection conexao)
44-
throws IOException, RPCException, InterruptedException, StreamException {
45-
// Declarar Variáveis:
46-
centroEspacial = SpaceCenter.newInstance(conexao);
47-
naveAtual = centroEspacial.getActiveVessel();
48-
parametrosVoo = naveAtual.flight(naveAtual.getOrbit().getBody().getReferenceFrame());
49-
naveAtual.getAutoPilot().setReferenceFrame(naveAtual.getSurfaceReferenceFrame());
50-
manobras = new Manobras(conexao, false);
51-
ctrlPressao.setAmostraTempo(25);
52-
ctrlPressao.setLimitePID(20);
53-
ctrlPressao.ajustarPID(0.25, 0.01, 0.025);
54-
ctrlPressao.limitarSaida(0.25, 1.0);
55-
// Iniciar Streams:
56-
tempoMissao = conexao.addStream(SpaceCenter.class, "getUT");
57-
altitude = conexao.addStream(parametrosVoo, "getMeanAltitude");
58-
apoastro = conexao.addStream(naveAtual.getOrbit(), "getApoapsisAltitude");
59-
periastro = conexao.addStream(naveAtual.getOrbit(), "getPeriapsisAltitude");
60-
61-
anguloGiro = 0;
62-
63-
GUI.setParametros("nome", naveAtual.getName());
64-
// Loop principal de subida
65-
while (executando) { // loop while sempre funcionando até um break
66-
switch (etapaAtual) {
67-
case 0:
68-
decolar();
69-
break;
70-
case 1:
71-
giroGravitacional();
72-
break;
73-
case 2:
74-
planejarOrbita();
75-
break;
76-
case 3:
77-
GUI.setStatus(Status.PRONTO.get());
78-
etapaAtual = 0;
79-
executando = false;
80-
break;
81-
}
82-
atualizarParametros();
83-
Thread.sleep(50);
84-
}
85-
tempoMissao.remove();
86-
altitude.remove();
87-
apoastro.remove();
88-
periastro.remove();
89-
MechPeste.finalizarTarefa();
90-
}
91-
92-
private void decolar() throws RPCException, StreamException, InterruptedException {
93-
GUI.setStatus("Iniciando Decolagem...");
94-
naveAtual.getControl().setSAS(false); // desligar SAS
95-
naveAtual.getControl().setRCS(false); // desligar RCS
96-
// Ligar Piloto Automatico e Mirar a Direção:
97-
naveAtual.getAutoPilot().engage(); // ativa o piloto auto
98-
naveAtual.getAutoPilot().targetPitchAndHeading(inclinacao, direcao); // direção
99-
GUI.setStatus("Lançamento!");
100-
if (naveAtual.getSituation().equals(VesselSituation.PRE_LAUNCH)) {
101-
aceleracao(1.0f); // acelerar ao máximo
102-
naveAtual.getControl().activateNextStage();
103-
} else {
104-
aceleracao(1.0f); // acelerar ao máximo
105-
}
106-
etapaAtual = 1;
107-
}
108-
109-
private void giroGravitacional() throws RPCException, StreamException, InterruptedException {
110-
double altitudeAtual = altitude.get();
111-
double apoastroAtual = apoastro.get();
112-
pressaoAtual = parametrosVoo.getDynamicPressure() / 1000;
113-
System.out.println(pressaoAtual);
114-
ctrlPressao.setEntradaPID(pressaoAtual);
115-
System.out.println("PID: " + ctrlPressao.computarPID());
116-
if (altitudeAtual > altInicioCurva && altitudeAtual < altFimCurva) {
117-
double incremento = Math.sqrt((altitudeAtual - altInicioCurva) / (altFimCurva - altInicioCurva));
118-
double novoAnguloGiro = incremento * inclinacao;
119-
if (Math.abs(novoAnguloGiro - anguloGiro) > 0.5) {
120-
anguloGiro = novoAnguloGiro;
121-
naveAtual.getAutoPilot().targetPitchAndHeading((float) (inclinacao - anguloGiro), direcao);
122-
aceleracao((float) ctrlPressao.computarPID());
123-
GUI.setStatus(String.format("Ângulo de Inclinação: %1$.1f °", anguloGiro));
124-
}
125-
}
126-
// Diminuir aceleração ao chegar perto do apoastro
127-
if (apoastroAtual > altApoastroFinal * 0.95) {
128-
GUI.setStatus("Se aproximando do apoastro...");
129-
aceleracao(0.25f); // mudar aceleração pra 25%
130-
}
131-
// Sair do giro ao chegar na altitude de apoastro:
132-
if (apoastroAtual >= altApoastroFinal) {
133-
GUI.setStatus("Apoastro alcançado.");
134-
aceleracao(0.0f);
135-
Thread.sleep(25);
136-
etapaAtual = 2;
137-
}
138-
}
139-
140-
private void planejarOrbita() throws RPCException, StreamException, InterruptedException, IOException {
141-
GUI.setStatus("Esperando sair da atmosfera.");
142-
if (altitude.get() > (altApoastroFinal * 0.8)) {
143-
GUI.setStatus("Planejando Manobra de circularização...");
144-
Node noDeManobra = manobras.circularizarApoastro();
145-
double duracaoDaQueima = manobras.calcularTempoDeQueima(noDeManobra);
146-
manobras.orientarNave(noDeManobra);
147-
GUI.setStatus("Executando Manobra de circularização...");
148-
manobras.executarQueima(noDeManobra, duracaoDaQueima);
149-
naveAtual.getAutoPilot().disengage();
150-
naveAtual.getControl().setSAS(true);
151-
naveAtual.getControl().setRCS(false);
152-
noDeManobra.remove();
153-
etapaAtual = 3;
154-
}
155-
}
156-
157-
private void aceleracao(float acel) throws RPCException {
158-
naveAtual.getControl().setThrottle((float) acel);
159-
}
160-
161-
private void atualizarParametros() throws RPCException, StreamException {
162-
GUI.setParametros("altitude", altitude.get());
163-
GUI.setParametros("apoastro", apoastro.get());
164-
GUI.setParametros("periastro", periastro.get());
165-
}
166-
167-
public static void setAltApoastro(float apoastroFinal) {
168-
altApoastroFinal = apoastroFinal;
169-
170-
}
171-
172-
public static void setDirecao(int direcaoOrbita) {
173-
direcao = direcaoOrbita;
174-
175-
}
176-
177-
public static void setExecutar(boolean estado) {
178-
executando = estado;
179-
}
1+
package com.pesterenan.funcoes;
2+
3+
import java.io.IOException;
4+
5+
import com.pesterenan.MechPeste;
6+
import com.pesterenan.gui.GUI;
7+
import com.pesterenan.gui.Status;
8+
import com.pesterenan.utils.ControlePID;
9+
10+
import krpc.client.Connection;
11+
import krpc.client.RPCException;
12+
import krpc.client.Stream;
13+
import krpc.client.StreamException;
14+
import krpc.client.services.SpaceCenter;
15+
import krpc.client.services.SpaceCenter.Flight;
16+
import krpc.client.services.SpaceCenter.Node;
17+
import krpc.client.services.SpaceCenter.Vessel;
18+
import krpc.client.services.SpaceCenter.VesselSituation;
19+
20+
public class DecolagemOrbital {
21+
22+
private static SpaceCenter centroEspacial;
23+
private static Vessel naveAtual;
24+
private Flight parametrosVoo;
25+
26+
Stream<Double> tempoMissao;
27+
Stream<Double> altitude;
28+
Stream<Double> apoastro;
29+
Stream<Double> periastro;
30+
double pressaoAtual;
31+
32+
private float altInicioCurva = 250;
33+
private float altFimCurva = 80000;
34+
public static float altApoastroFinal = 80000;
35+
private int etapaAtual = 0;
36+
private int inclinacao = 90;
37+
private static int direcao = 90;
38+
private double anguloGiro;
39+
private static boolean executando = true;
40+
private Manobras manobras;
41+
ControlePID ctrlPressao = new ControlePID();
42+
43+
public DecolagemOrbital(Connection conexao)
44+
throws IOException, RPCException, InterruptedException, StreamException {
45+
// Declarar Variáveis:
46+
centroEspacial = SpaceCenter.newInstance(conexao);
47+
naveAtual = centroEspacial.getActiveVessel();
48+
parametrosVoo = naveAtual.flight(naveAtual.getOrbit().getBody().getReferenceFrame());
49+
naveAtual.getAutoPilot().setReferenceFrame(naveAtual.getSurfaceReferenceFrame());
50+
manobras = new Manobras(conexao, false);
51+
ctrlPressao.setAmostraTempo(25);
52+
ctrlPressao.setLimitePID(20);
53+
ctrlPressao.ajustarPID(0.25, 0.01, 0.025);
54+
ctrlPressao.limitarSaida(0.25, 1.0);
55+
// Iniciar Streams:
56+
tempoMissao = conexao.addStream(SpaceCenter.class, "getUT");
57+
altitude = conexao.addStream(parametrosVoo, "getMeanAltitude");
58+
apoastro = conexao.addStream(naveAtual.getOrbit(), "getApoapsisAltitude");
59+
periastro = conexao.addStream(naveAtual.getOrbit(), "getPeriapsisAltitude");
60+
61+
anguloGiro = 0;
62+
63+
GUI.setParametros("nome", naveAtual.getName());
64+
// Loop principal de subida
65+
while (executando) { // loop while sempre funcionando até um break
66+
switch (etapaAtual) {
67+
case 0:
68+
decolar();
69+
break;
70+
case 1:
71+
giroGravitacional();
72+
break;
73+
case 2:
74+
planejarOrbita();
75+
break;
76+
case 3:
77+
GUI.setStatus(Status.PRONTO.get());
78+
etapaAtual = 0;
79+
executando = false;
80+
break;
81+
}
82+
atualizarParametros();
83+
Thread.sleep(50);
84+
}
85+
tempoMissao.remove();
86+
altitude.remove();
87+
apoastro.remove();
88+
periastro.remove();
89+
MechPeste.finalizarTarefa();
90+
}
91+
92+
private void decolar() throws RPCException, StreamException, InterruptedException {
93+
GUI.setStatus("Iniciando Decolagem...");
94+
naveAtual.getControl().setSAS(false); // desligar SAS
95+
naveAtual.getControl().setRCS(false); // desligar RCS
96+
// Ligar Piloto Automatico e Mirar a Direção:
97+
naveAtual.getAutoPilot().engage(); // ativa o piloto auto
98+
naveAtual.getAutoPilot().targetPitchAndHeading(inclinacao, direcao); // direção
99+
GUI.setStatus("Lançamento!");
100+
if (naveAtual.getSituation().equals(VesselSituation.PRE_LAUNCH)) {
101+
aceleracao(1.0f); // acelerar ao máximo
102+
naveAtual.getControl().activateNextStage();
103+
} else {
104+
aceleracao(1.0f); // acelerar ao máximo
105+
}
106+
etapaAtual = 1;
107+
}
108+
109+
private void giroGravitacional() throws RPCException, StreamException, InterruptedException {
110+
double altitudeAtual = altitude.get();
111+
double apoastroAtual = apoastro.get();
112+
pressaoAtual = parametrosVoo.getDynamicPressure() / 1000;
113+
System.out.println(pressaoAtual);
114+
ctrlPressao.setEntradaPID(pressaoAtual);
115+
System.out.println("PID: " + ctrlPressao.computarPID());
116+
if (altitudeAtual > altInicioCurva && altitudeAtual < altFimCurva) {
117+
double incremento = Math.sqrt((altitudeAtual - altInicioCurva) / (altFimCurva - altInicioCurva));
118+
double novoAnguloGiro = incremento * inclinacao;
119+
if (Math.abs(novoAnguloGiro - anguloGiro) > 0.5) {
120+
anguloGiro = novoAnguloGiro;
121+
naveAtual.getAutoPilot().targetPitchAndHeading((float) (inclinacao - anguloGiro), direcao);
122+
aceleracao((float) ctrlPressao.computarPID());
123+
GUI.setStatus(String.format("Ângulo de Inclinação: %1$.1f °", anguloGiro));
124+
}
125+
}
126+
// Diminuir aceleração ao chegar perto do apoastro
127+
if (apoastroAtual > altApoastroFinal * 0.95) {
128+
GUI.setStatus("Se aproximando do apoastro...");
129+
aceleracao(0.25f); // mudar aceleração pra 25%
130+
}
131+
// Sair do giro ao chegar na altitude de apoastro:
132+
if (apoastroAtual >= altApoastroFinal) {
133+
GUI.setStatus("Apoastro alcançado.");
134+
aceleracao(0.0f);
135+
Thread.sleep(25);
136+
etapaAtual = 2;
137+
}
138+
}
139+
140+
private void planejarOrbita() throws RPCException, StreamException, InterruptedException, IOException {
141+
GUI.setStatus("Esperando sair da atmosfera.");
142+
if (altitude.get() > (altApoastroFinal * 0.8)) {
143+
GUI.setStatus("Planejando Manobra de circularização...");
144+
Node noDeManobra = manobras.circularizarApoastro();
145+
double duracaoDaQueima = manobras.calcularTempoDeQueima(noDeManobra);
146+
manobras.orientarNave(noDeManobra);
147+
GUI.setStatus("Executando Manobra de circularização...");
148+
manobras.executarQueima(noDeManobra, duracaoDaQueima);
149+
naveAtual.getAutoPilot().disengage();
150+
naveAtual.getControl().setSAS(true);
151+
naveAtual.getControl().setRCS(false);
152+
noDeManobra.remove();
153+
etapaAtual = 3;
154+
}
155+
}
156+
157+
private void aceleracao(float acel) throws RPCException {
158+
naveAtual.getControl().setThrottle((float) acel);
159+
}
160+
161+
private void atualizarParametros() throws RPCException, StreamException {
162+
GUI.setParametros("altitude", altitude.get());
163+
GUI.setParametros("apoastro", apoastro.get());
164+
GUI.setParametros("periastro", periastro.get());
165+
}
166+
167+
public static void setAltApoastro(float apoastroFinal) {
168+
altApoastroFinal = apoastroFinal;
169+
170+
}
171+
172+
public static void setDirecao(int direcaoOrbita) {
173+
direcao = direcaoOrbita;
174+
175+
}
176+
177+
public static void setExecutar(boolean estado) {
178+
executando = estado;
179+
}
180180
}

0 commit comments

Comments
 (0)