88
99import com .pesterenan .utils .ControlePID ;
1010import com .pesterenan .utils .Modulos ;
11+ import com .pesterenan .utils .Navegacao ;
1112import com .pesterenan .utils .Vetor ;
1213import com .pesterenan .view .MainGui ;
1314import com .pesterenan .view .StatusJPanel ;
1415
1516import krpc .client .RPCException ;
1617import krpc .client .StreamException ;
17- import krpc .client .services .SpaceCenter .SASMode ;
1818
1919public class LandingController extends FlightController implements Runnable {
2020
21- private static final int ALTITUDE_POUSO_AUTOMATICO = 10000 ;
21+ private static final int ALTITUDE_POUSO_AUTOMATICO = 8000 ;
2222 private static final int ALTITUDE_TREM_DE_POUSO = 200 ;
2323
2424 private ControlePID altitudeAcelPID = new ControlePID ();
2525 private ControlePID velocidadeAcelPID = new ControlePID ();
26+ private Navegacao navegacao = new Navegacao ();
2627
2728 private static double velP = 0.025 , velI = 0.001 , velD = 0.01 ;
2829
@@ -48,7 +49,7 @@ public void run() {
4849 if (comandos .get (Modulos .MODULO .get ()).equals (Modulos .MODULO_POUSO_SOBREVOAR .get ())) {
4950 this .altitudeDeSobrevoo = Double .parseDouble (comandos .get (Modulos .ALTITUDE_SOBREVOO .get ()));
5051 executandoSobrevoo = true ;
51- velocidadeAcelPID .limitarSaida (-10 , 10 );
52+ altitudeAcelPID .limitarSaida (-0.5 , 1 );
5253 sobrevoarArea ();
5354 }
5455 if (comandos .get (Modulos .MODULO .get ()).equals (Modulos .MODULO_POUSO .get ())) {
@@ -58,13 +59,15 @@ public void run() {
5859
5960 private void sobrevoarArea () {
6061 decolar ();
61-
62+
6263 while (executandoSobrevoo ) {
6364 try {
6465 informarCtrlPIDs (altitudeDeSobrevoo );
65- velocidadeAcelPID .setLimitePID (altitudeAcelPID .computarPID () * 10 );
66- velocidadeAcelPID .setEntradaPID (velVertical .get ());
67- acelerar ((float ) (velocidadeAcelPID .computarPID ()));
66+ double altPID = altitudeAcelPID .computarPID ();
67+ velocidadeAcelPID .setLimitePID (altPID * acelGravidade );
68+ double velPID = velocidadeAcelPID .computarPID ();
69+ acelerar ((float ) (velPID ));
70+ System .out .println (altPID + " " + velPID );
6871 if (descerDoSobrevoo == true ) {
6972 altitudeDeSobrevoo = 0 ;
7073 checarPouso ();
@@ -80,9 +83,6 @@ private void pousarAutomaticamente() {
8083 try {
8184 acelerar (0.0f );
8285 StatusJPanel .setStatus ("Iniciando pouso automático em: " + corpoCeleste );
83- naveAtual .getControl ().setSAS (true );
84- naveAtual .getControl ().setSASMode (SASMode .STABILITY_ASSIST );
85-
8686 checarAltitudeParaPouso ();
8787 comecarPousoAutomatico ();
8888 } catch (RPCException | StreamException | InterruptedException e ) {
@@ -94,9 +94,9 @@ private void checarAltitudeParaPouso() throws RPCException, StreamException, Int
9494 while (!executandoPousoAutomatico ) {
9595 distanciaDaQueima = calcularDistanciaDaQueima ();
9696 if (altitudeSup .get () < ALTITUDE_POUSO_AUTOMATICO ) {
97+ navegacao .mirarRetrogrado ();
9798 naveAtual .getControl ().setBrakes (true );
9899 if (altitudeSup .get () < distanciaDaQueima && velVertical .get () < -1 ) {
99- naveAtual .getControl ().setSASMode (SASMode .RETROGRADE );
100100 executandoPousoAutomatico = true ;
101101 }
102102 }
@@ -106,37 +106,46 @@ private void checarAltitudeParaPouso() throws RPCException, StreamException, Int
106106
107107 private void comecarPousoAutomatico () {
108108 StatusJPanel .setStatus ("Iniciando Pouso Automático!" );
109- while (executandoPousoAutomatico ) {
110- try {
109+ try {
110+ naveAtual .getAutoPilot ().engage ();
111+ while (executandoPousoAutomatico ) {
111112 distanciaDaQueima = calcularDistanciaDaQueima ();
112113 informarCtrlPIDs (distanciaDaQueima );
113114 checarAltitude ();
114115 checarPouso ();
115116 Thread .sleep (25 );
116- } catch (RPCException | InterruptedException | StreamException | IOException e ) {
117117 }
118+ } catch (RPCException | InterruptedException | StreamException | IOException e ) {
118119 }
119120 }
120121
121122 private void informarCtrlPIDs (double distanciaDaQueima ) throws RPCException , StreamException {
123+ altitudeAcelPID .setEntradaPID (ControlePID .interpolacaoLinear (distanciaDaQueima , altitudeSup .get (), 0.75 ));
124+ velocidadeAcelPID .setEntradaPID (velVertical .get ());
122125 double valorTEP = calcularTEP ();
123- altitudeAcelPID .ajustarPID (valorTEP * velP , valorTEP * velI , valorTEP * velD );
124126 velocidadeAcelPID .ajustarPID (valorTEP * velP , valorTEP * velI , valorTEP * velD );
125127 altitudeAcelPID .setLimitePID (distanciaDaQueima );
126- altitudeAcelPID .setEntradaPID (ControlePID .interpolacaoLinear (distanciaDaQueima , altitudeSup .get (), 1 ));
127- velocidadeAcelPID .setEntradaPID (velVertical .get ());
128128 }
129129
130- private void checarAltitude () throws RPCException , StreamException {
131- if (altitudeSup .get () > ALTITUDE_TREM_DE_POUSO ) {
132- velocidadeAcelPID .setLimitePID (velVertical .get ());
133- acelerar (altitudeAcelPID .computarPID ());
130+ private void checarAltitude () throws RPCException , StreamException , IOException , InterruptedException {
131+ if (velHorizontal .get () > 3 ) {
132+ navegacao .mirarRetrogrado ();
133+ } else {
134+ navegacao .mirarRadialDeFora ();
135+ }
136+
137+ double limiarDoPouso = calcularAcelMaxima () * 3 ;
138+ velocidadeAcelPID .setLimitePID (-6 );
139+ if (altitudeSup .get () - limiarDoPouso > limiarDoPouso ) {
140+ // velocidadeAcelPID.setLimitePID(velVertical.get());
134141 } else {
135- acelerar (velocidadeAcelPID .computarPID ());
136142 naveAtual .getControl ().setGear (true );
137- naveAtual .getControl ().setSASMode (SASMode .RADIAL );
138- velocidadeAcelPID .setLimitePID (-acelGravidade / 2 );
139143 }
144+
145+ double acel = altitudeAcelPID .computarPID ();
146+ double vel = velocidadeAcelPID .computarPID ();
147+ double limite = (altitudeSup .get () - limiarDoPouso ) / limiarDoPouso ;
148+ acelerar (ControlePID .interpolacaoLinear (vel , acel , limite ));
140149 }
141150
142151 private void checarPouso () throws RPCException , IOException , InterruptedException {
@@ -151,6 +160,7 @@ private void checarPouso() throws RPCException, IOException, InterruptedExceptio
151160 naveAtual .getControl ().setSAS (true );
152161 naveAtual .getControl ().setRCS (true );
153162 naveAtual .getControl ().setBrakes (false );
163+ naveAtual .getAutoPilot ().disengage ();
154164 default :
155165 break ;
156166 }
@@ -166,6 +176,6 @@ private double calcularDistanciaDaQueima() throws RPCException, StreamException
166176
167177 public static void descer () {
168178 descerDoSobrevoo = true ;
169-
179+
170180 }
171181}
0 commit comments