From 52f9a25a33de60e29698f2b7e594f1dd02840a83 Mon Sep 17 00:00:00 2001 From: "Pier Francesco A. Bachini" <pierfrancesco.bachini@skywarder.eu> Date: Sat, 26 Apr 2025 02:24:31 +0200 Subject: [PATCH] Update submodule and apply all necessary changes --- common | 2 +- .../miscellaneous/settingsEngineCut.m | 3 - .../odeFunctions/descentParachute_OLD.m | 219 ++++++++++++++++++ .../config2023_Gemini_Portugal_October.m | 4 +- .../config2024_Lyra_Portugal_October.m | 4 +- .../config2024_Lyra_Roccaraso_September.m | 4 +- .../config2025_Orion_Portugal_October.m | 4 +- .../config2025_Orion_Roccaraso_September.m | 4 +- simulator/configs/configControl.m | 2 +- simulator/configs/configMontecarlo.m | 14 +- simulator/configs/configPayload.m | 14 +- simulator/configs/configSimulator.m | 2 +- simulator/mainMontecarlo.m | 17 +- simulator/src/export_HILdataADA.m | 2 +- simulator/src/export_HILdataPRF.m | 4 +- simulator/src/std_run.m | 9 +- .../src/std_run_parts/std_setInitialParams.m | 3 +- simulator/src/std_run_parts/std_subsystems.m | 2 +- .../mainTrajectoryGeneration.m | 2 +- 19 files changed, 269 insertions(+), 46 deletions(-) create mode 100644 commonFunctions/odeFunctions/descentParachute_OLD.m diff --git a/common b/common index 45b95b54..83b0ff15 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit 45b95b54c58ffea5323c11d5a64cecc797a1ffb7 +Subproject commit 83b0ff154c229c9be30c2b7f98b11c3822a5f6ef diff --git a/commonFunctions/miscellaneous/settingsEngineCut.m b/commonFunctions/miscellaneous/settingsEngineCut.m index 69e54697..7be838a4 100644 --- a/commonFunctions/miscellaneous/settingsEngineCut.m +++ b/commonFunctions/miscellaneous/settingsEngineCut.m @@ -41,7 +41,6 @@ function [settings, rocket] = settingsEngineCut(settings, engineT0, rocket) end rocket.motor.cutoffTime = rocket.motor.cutoffTime + rocket.motor.cutoffTransient; - rocket.updateCutoff; elseif rocket.motor.cutoffTime >= (rocket.motor.time(end) - rocket.motor.cutoffTransient) @@ -50,7 +49,5 @@ function [settings, rocket] = settingsEngineCut(settings, engineT0, rocket) elseif rocket.motor.cutoffTime <= 0 error('rocket.motor.cutoffTime must be grater than zero'); end - - rocket.updateCutoff; end \ No newline at end of file diff --git a/commonFunctions/odeFunctions/descentParachute_OLD.m b/commonFunctions/odeFunctions/descentParachute_OLD.m new file mode 100644 index 00000000..0ac4ecff --- /dev/null +++ b/commonFunctions/odeFunctions/descentParachute_OLD.m @@ -0,0 +1,219 @@ +function [dY,parout] = descentParachute_OLD(t, Y, settings, uw, vw, ww, para, Q ,uncert) +%{ + +descentParachute - ode function of the 3DOF Rigid Rocket-Paraachute Model + +INPUTS: + - t, integration time; + - Y, state vector, [ x y z | u v w ]: + + * (x y z), NED{north, east, down} horizontal frame; + * (u v w), horizontal frame velocities. + + - settings, rocket data structure; + - uw, wind component along x; + - vw, wind component along y; + - ww, wind component along z; + - uncert, wind uncertanties; + - Hour, hour of the day of the needed simulation; + - Day, day of the month of the needed simulation; + +OUTPUTS: + - dY, state derivatives; + +Author: Ruben Di Battista +Skyward Experimental Rocketry | CRD Dept | crd@skywarder.eu +email: ruben.dibattista@skywarder.eu +April 2014; Last revision: 31.XII.2014 + +Author: Francesco Colombi +Skyward Experimental Rocketry | CRD Dept | crd@skywarder.eu +email: francesco.colombi@skywarder.eu +Release date: 16/04/2016 + +Author: Adriano Filippo Inno +Skyward Experimental Rocketry | AFD Dept | crd@skywarder.eu +email: adriano.filippo.inno@skywarder.eu +Release date: 13/01/2018 + +%} + +% recalling the state +% x = Y(1); +% y = Y(2); +z = Y(3); +u = Y(4); +v = Y(5); +w = Y(6); + + +local = settings.Local; +%% CONSTANTS +S = settings.para(para).S; % [m^2] Surface +CD = settings.para(para).CD; % [/] Parachute Drag Coefficient +CL = settings.para(para).CL; % [/] Parachute Lift Coefficient +if para == 1 + pmass = 0 ; % [kg] detached mass +else + pmass = sum(settings.para(1:para-1).mass) + settings.mnc; +end + + % [N/kg] magnitude of the gravitational field at zero + +m = settings.ms - pmass; % [kg] descend mass +g = settings.g0/(1 + (-z*1e-3/6371))^2; % [N/kg] module of gravitational field + +%% ADDING WIND (supposed to be added in NED axes); + +% if settings.wind.model +% +% if settings.stoch.N > 1 +% [uw, vw, ww] = windMatlabGenerator(settings, z, t, Hour, Day); +% else +% [uw, vw, ww] = windMatlabGenerator(settings, z, t); +% end +% +% elseif settings.wind.input +% [uw, vw, ww] = windInputGenerator(settings, z, uncert); +% +% elseif settings.wind.variable +% [uw, vw, ww] = windVariableGenerator(z, settings.stoch); +% end + +switch settings.windModel + + case "atmospherical" + [uw, vw, ww] = windMatlabGenerator(settings, z, t); + + case "multiplicative" + uncert = settings.wind.inputUncertainty; + [uw, vw, ww] = windInputGenerator(settings, z, uncert); + + case "constant" + uw = settings.constWind(1); vw = settings.constWind(2); ww = settings.constWind(3); +end + + +wind =[uw; vw; ww]; % body +Vels = [u; v; w]; + +% Relative velocities (plus wind); +ur = u - wind(1); +vr = v - wind(2); +wr = w - wind(3); + +V_norm = norm([ur vr wr]); + + +%% ATMOSPHERE DATA +if -z < 0 % z is directed as the gravity vector + z = 0; +end + +absoluteAltitude = -z + environment.z0; +[~, ~, P, rho] = atmosphereData(absoluteAltitude, g, local); + +%% REFERENCE FRAME +% The parachutes are approximated as rectangular surfaces with the normal +% vector perpendicular to the relative velocity + +t_vect = [ur vr wr]; % Tangenzial vector +h_vect = [vr -ur 0]; % horizontal vector + +if all(abs(h_vect) < 1e-8) + h_vect = [vw -uw 0]; +end + +n_vect = cross(t_vect, h_vect); % Normal vector + +if norm(t_vect) < 1e-8 + t_vers = [0 0 0]; +else + t_vers = t_vect/norm(t_vect); % Tangenzial versor +end + +if norm(n_vect) < 1e-8 + n_vers = [0 0 0]; +else + n_vers = n_vect/norm(n_vect); % normal versor +end + +if (n_vers(3) > 0) % If the normal vector is downward directed + n_vers = -n_vers; +end + + + +%% FORCES +D = -0.5*rho*V_norm^2*S*CD*t_vers'; % [N] Drag vector +L = 0.5*rho*V_norm^2*S*CL*n_vers'; % [N] Lift vector +Fg = m*g*[0 0 1]'; % [N] Gravitational Force vector +F = L + Fg + D; % [N] total forces vector + +F_acc = F-Fg; % [N] accelerometer felt forces + +%% STATE DERIVATIVES +% velocity +acc = F/m; + + +%% FINAL DERIVATIVE STATE ASSEMBLING +dY(1:3) = Vels; % ned +dY(4:6) = acc; + + +dY = dY'; + +%% SAVING THE QUANTITIES FOR THE PLOTS + +if nargout == 2 +% parout.integration.t = t; +% +% parout.interp.M = M_value; +% parout.interp.alpha = alpha_value; +% parout.interp.beta = beta_value; +% parout.interp.alt = -z; + parout.interp.mass = m; +% + parout.wind.NED_wind = [uw, vw, ww]; + parout.wind.body_wind = wind; + +% +% parout.rotations.dcm = dcm; +% +% parout.velocities = Vels; +% +% parout.forces.AeroDyn_Forces = [X, Y, Z]; +% parout.forces.T = T; +% + parout.air.rho = rho; + parout.air.P = P; +% + parout.accelerations.body_acc = acc; +% parout.accelerations.ang_acc = [dp, dq, dr]; + parout.accelerometer.body_acc = (F_acc/m)'; + +% parout.coeff.CA = CA; +% parout.coeff.CYB = CYB; +% parout.coeff.CNA = CNA; +% parout.coeff.Cl = Cl; +% parout.coeff.Clp = Clp; +% %-------------------------------------------- +% %parout.coeff.Clb = Clb; +% %-------------------------------------------- +% parout.coeff.Cma = Cma; +% parout.coeff.Cmad = Cmad; +% parout.coeff.Cmq = Cmq; +% parout.coeff.Cnb = Cnb; +% parout.coeff.Cnr = Cnr; +% parout.coeff.Cnp = Cnp; +% parout.coeff.XCPlon = XCPlon; +% parout.coeff.XCPlat = XCPlat; +% +% sgn = sign(dot(cross(Myz, Fyz), [1 0 0])); +% XCPtot = (sgn * norm(Myz)/norm(Fyz)); +% err = 100*abs((acosd(dot(Fyz/norm(Fyz), Myz/norm(Myz))) - 90)/90); +% XCPtot = XCPtot - polyval(settings.regPoli, err); +% parout.coeff.XCPtot = XCPtot; + +end \ No newline at end of file diff --git a/data/2023_Gemini_Portugal_October/config2023_Gemini_Portugal_October.m b/data/2023_Gemini_Portugal_October/config2023_Gemini_Portugal_October.m index c1e41f33..b5a72dd1 100644 --- a/data/2023_Gemini_Portugal_October/config2023_Gemini_Portugal_October.m +++ b/data/2023_Gemini_Portugal_October/config2023_Gemini_Portugal_October.m @@ -155,9 +155,9 @@ settings.ada.flag_apo = false; % Tr settings.ada.shadowmode = 18; if ~settings.parafoil - settings.ada.para.z_cut = rocket.parachutes(1,1).finalAltitude; + settings.ada.para.z_cut = rocket.parachutes{1,1}.finalAltitude; else - settings.ada.para.z_cut = rocket.parachutes(1,2).finalAltitude; + settings.ada.para.z_cut = rocket.parachutes{1,2}.finalAltitude; end %% MEA TUNING PARAMETERS / MOTOR SHUT DOWN TUNING PARAMETERS % motor model for kalman filter prediction/correction scheme diff --git a/data/2024_Lyra_Portugal_October/config2024_Lyra_Portugal_October.m b/data/2024_Lyra_Portugal_October/config2024_Lyra_Portugal_October.m index 0f658f06..c01a13e2 100644 --- a/data/2024_Lyra_Portugal_October/config2024_Lyra_Portugal_October.m +++ b/data/2024_Lyra_Portugal_October/config2024_Lyra_Portugal_October.m @@ -161,9 +161,9 @@ settings.ada.flag_apo = false; % Tr settings.ada.shadowmode = 18; if ~settings.parafoil - settings.ada.para.z_cut = rocket.parachutes(1,1).finalAltitude; + settings.ada.para.z_cut = rocket.parachutes{1,1}.finalAltitude; else - settings.ada.para.z_cut = rocket.parachutes(1,2).finalAltitude; + settings.ada.para.z_cut = rocket.parachutes{1,2}.finalAltitude; end %% MEA TUNING PARAMETERS / MOTOR SHUT DOWN TUNING PARAMETERS diff --git a/data/2024_Lyra_Roccaraso_September/config2024_Lyra_Roccaraso_September.m b/data/2024_Lyra_Roccaraso_September/config2024_Lyra_Roccaraso_September.m index c25bb3a3..24846125 100644 --- a/data/2024_Lyra_Roccaraso_September/config2024_Lyra_Roccaraso_September.m +++ b/data/2024_Lyra_Roccaraso_September/config2024_Lyra_Roccaraso_September.m @@ -157,9 +157,9 @@ settings.ada.altitude_confidence_thr = 5; % If settings.ada.shadowmode = 10; if ~settings.parafoil - settings.ada.z_cut = rocket.parachutes(1,1).finalAltitude; + settings.ada.z_cut = rocket.parachutes{1,1}.finalAltitude; else - settings.ada.z_cut = rocket.parachutes(1,2).finalAltitude; + settings.ada.z_cut = rocket.parachutes{1,2}.finalAltitude; end diff --git a/data/2025_Orion_Portugal_October/config2025_Orion_Portugal_October.m b/data/2025_Orion_Portugal_October/config2025_Orion_Portugal_October.m index 06324f98..34ef9882 100644 --- a/data/2025_Orion_Portugal_October/config2025_Orion_Portugal_October.m +++ b/data/2025_Orion_Portugal_October/config2025_Orion_Portugal_October.m @@ -158,9 +158,9 @@ settings.ada.altitude_confidence_thr = 5; % If settings.ada.shadowmode = 18; if ~settings.parafoil - settings.ada.z_cut = rocket.parachutes(1,1).finalAltitude; + settings.ada.z_cut = rocket.parachutes{1,1}.finalAltitude; else - settings.ada.z_cut = rocket.parachutes(1,2).finalAltitude; + settings.ada.z_cut = rocket.parachutes{1,2}.finalAltitude; end %% MEA TUNING PARAMETERS / MOTOR SHUT DOWN TUNING PARAMETERS diff --git a/data/2025_Orion_Roccaraso_September/config2025_Orion_Roccaraso_September.m b/data/2025_Orion_Roccaraso_September/config2025_Orion_Roccaraso_September.m index 2ca52bb3..f6127a3b 100644 --- a/data/2025_Orion_Roccaraso_September/config2025_Orion_Roccaraso_September.m +++ b/data/2025_Orion_Roccaraso_September/config2025_Orion_Roccaraso_September.m @@ -158,9 +158,9 @@ settings.ada.altitude_confidence_thr = 5; % If settings.ada.shadowmode = 10; if ~settings.parafoil - settings.ada.z_cut = rocket.parachutes(1,1).finalAltitude; + settings.ada.z_cut = rocket.parachutes{1,1}.finalAltitude; else - settings.ada.z_cut = rocket.parachutes(1,2).finalAltitude; + settings.ada.z_cut = rocket.parachutes{1,2}.finalAltitude; end %% MEA TUNING PARAMETERS / MOTOR SHUT DOWN TUNING PARAMETERS diff --git a/simulator/configs/configControl.m b/simulator/configs/configControl.m index 5ae96e56..c33919e8 100644 --- a/simulator/configs/configControl.m +++ b/simulator/configs/configControl.m @@ -138,4 +138,4 @@ contSettings.N_prediction_threshold = 5; %% Identification settings for algorithms rocket.airbrakes.identification = settings.identification; -rocket.parachutes(2,2).controlParams.identification = settings.identification; \ No newline at end of file +rocket.parachutes{2,2}.controlParams.identification = settings.identification; \ No newline at end of file diff --git a/simulator/configs/configMontecarlo.m b/simulator/configs/configMontecarlo.m index 33148454..79c56850 100644 --- a/simulator/configs/configMontecarlo.m +++ b/simulator/configs/configMontecarlo.m @@ -73,8 +73,13 @@ if settings.montecarlo end %%% - for i =1:N_sim - stoch.State.xcgTime(:,i) = rocket.coefficients.state.xcgTime/rocket.motor.time(end) .* stoch.expTime(i,end); % Xcg time + % xcgTime must be updated ONLY if rocket.dynamicDerivatives is + % enabled, otherwise the coefficients do not depend on xcg, and + % it can be handled directly by the Rocket class + if rocket.dynamicDerivatives + for i =1:N_sim + stoch.State.xcgTime(:,i) = rocket.coefficients.state.xcgTime/rocket.motor.time(end) .* stoch.expTime(i,end); % Xcg time + end end %%% Aero coefficients uncertainty @@ -84,7 +89,7 @@ if settings.montecarlo stoch.aer_percentage = normrnd(mu_aer,sigma_aer,N_sim,1); %%% wind parameters - wind = WindCustom(mission); + wind = Wind(mission); stoch.wind_params.altitudes = [0 140 500 1000 1500 2000 2500 3000 3500 4000]; wind.altitudes = stoch.wind_params.altitudes; @@ -136,7 +141,6 @@ if settings.montecarlo wind.elevationParameters = [stoch.wind_params.ElMean; stoch.wind_params.ElStd]; end - wind.updateAll(); stoch.wind = wind; %%% mass offset distribution @@ -177,7 +181,7 @@ if settings.montecarlo N_sim = length(Az); - wind = WindCustom(mission); + wind = Wind(mission); wind.altitudes = 0; wind.magnitudeDistribution = "u"; wind.azimuthDistribution = "u"; diff --git a/simulator/configs/configPayload.m b/simulator/configs/configPayload.m index 6fdf999d..42f60bea 100644 --- a/simulator/configs/configPayload.m +++ b/simulator/configs/configPayload.m @@ -37,13 +37,13 @@ payload.simParam.incControl = true; % payload.simParam.WES0 = environment.wind; % Windspeed considered in the subtraction % P and PI controller -rocket.parachutes(2,2).controlParams.Kp = 0.4; -rocket.parachutes(2,2).controlParams.Ki = 0.08; -rocket.parachutes(2,2).controlParams.uMax = 0.1; -rocket.parachutes(2,2).controlParams.uMin = -0.1; -rocket.parachutes(2,2).controlParams.deltaA_tau = 0.4; % [s], absolutely arbitrary value -rocket.parachutes(2,2).controlParams.deltaA_delay = 0; % [s], absolutely arbitrary value -rocket.parachutes(2,2).controlParams.deltaA_maxSpeed = deg2rad(300); +rocket.parachutes{2,2}.controlParams.Kp = 0.4; +rocket.parachutes{2,2}.controlParams.Ki = 0.08; +rocket.parachutes{2,2}.controlParams.uMax = 0.1; +rocket.parachutes{2,2}.controlParams.uMin = -0.1; +rocket.parachutes{2,2}.controlParams.deltaA_tau = 0.4; % [s], absolutely arbitrary value +rocket.parachutes{2,2}.controlParams.deltaA_delay = 0; % [s], absolutely arbitrary value +rocket.parachutes{2,2}.controlParams.deltaA_maxSpeed = deg2rad(300); %% Guidance algorithm % Algorithm selection: choose from "closed loop", "t-approach" diff --git a/simulator/configs/configSimulator.m b/simulator/configs/configSimulator.m index a1433d26..b30ca5be 100644 --- a/simulator/configs/configSimulator.m +++ b/simulator/configs/configSimulator.m @@ -20,7 +20,7 @@ configFlags; %% Mission parameters -mission = Mission(true); +mission = Mission(true, 'changeMatlabPath', true); rocket = Rocket(mission); environment = Environment(mission, rocket.motor); diff --git a/simulator/mainMontecarlo.m b/simulator/mainMontecarlo.m index d66be516..594c2851 100644 --- a/simulator/mainMontecarlo.m +++ b/simulator/mainMontecarlo.m @@ -115,19 +115,21 @@ for alg_index = 4 motor_K = settings.motor.K; parfor i = 1:N_sim - rocket_vec{i} = copy(rocket); + rocket_vec{i} = rocket; settings_mont = settings_mont_init; settings_mont.motor.expThrust = stoch.thrust(i,:); % initialize the thrust vector of the current simulation (parfor purposes) settings_mont.motor.expTime = stoch.expTime(i,:); % initialize the time vector for thrust of the current simulation (parfor purposes) settings_mont.motor.K = stoch.Kt(i,:); % - settings_mont.State.xcgTime = stoch.State.xcgTime(:,i); % initialize the baricenter position time vector settings_mont.mass_offset = stoch.mass_offset(i); settings_mont.OMEGA = stoch.OMEGA_rail(i); settings_mont.PHI = stoch.PHI_rail(i); + if isfield(stoch, 'State') + settings_mont.State.xcgTime = stoch.State.xcgTime(:,i); % initialize the baricenter position time vector + end + if isempty(wind_vec{i}) - wind_vec{i} = copy(stoch.wind); - wind_vec{i}.updateAll(); + wind_vec{i} = stoch.wind.updateAll(); end settings_mont.wind = wind_vec{i}; @@ -314,8 +316,7 @@ for alg_index = 4 p_50 = normcdf([settings.z_final-50, settings.z_final+50],apogee.altitude_mean,apogee.altitude_std); apogee.accuracy_gaussian_50 =( p_50(2) - p_50(1) )*100; - %% - clc + %% for ii = 1:N_sim if sum(save_thrust{ii}.sensors.ada.apo_times == -1) > 1 disp("Problems with ADA " + num2str(ii)); @@ -467,8 +468,8 @@ for alg_index = 4 if (settings.scenario == "descent" || settings.scenario == "full flight") && settings.parafoil fprintf(fid,'PARAFOIL \n\n'); fprintf(fid,'Guidance approach %s \n',contSettings.payload.guidance_alg); - fprintf(fid,'PID proportional gain %s \n',rocket.parachutes(2,2).controlParams.Kp); - fprintf(fid,'PID integral gain %s \n',rocket.parachutes(2,2).controlParams.Ki); + fprintf(fid,'PID proportional gain %s \n',rocket.parachutes{2,2}.controlParams.Kp); + fprintf(fid,'PID integral gain %s \n',rocket.parachutes{2,2}.controlParams.Ki); fprintf(fid,'Opening altitude %s \n', num2str(settings.ada.para.z_cut)); end fprintf(fid,'MASS: \n\n'); diff --git a/simulator/src/export_HILdataADA.m b/simulator/src/export_HILdataADA.m index 8004c43d..4c3d4e19 100644 --- a/simulator/src/export_HILdataADA.m +++ b/simulator/src/export_HILdataADA.m @@ -12,7 +12,7 @@ export configuration files for ADA algorithm (for our friends of software develo configValues = [settings.frequencies.ADAFrequency,settings.ada.shadowmode, ... settings.ada.v_thr+2.5,settings.ada.count_thr,settings.ada.Q(1,1), ... settings.ada.Q(2,2),settings.ada.Q(3,3),settings.ada.R,101250,288.15,... - settings.ada.P0(1,1),rocket.parachutes(1,1).finalAltitude]; + settings.ada.P0(1,1),rocket.parachutes{1,1}.finalAltitude]; configADAvarNames = {'ADA_FREQUENCY','ADA_SHADOWMODE',... 'ADA_VELOCITY_THRESHOLD','ADA_COUNTER_THRESHOLD','ADA_Q_11',... 'ADA_Q_22','ADA_Q_33','ADA_R','mslPressure','mslTemperature','P0',... diff --git a/simulator/src/export_HILdataPRF.m b/simulator/src/export_HILdataPRF.m index 523c2a6c..40e1cc3e 100644 --- a/simulator/src/export_HILdataPRF.m +++ b/simulator/src/export_HILdataPRF.m @@ -54,8 +54,8 @@ settings.payload.target(2),environment.z0,environment.lat0,... environment.lon0,environment.z0,wgs84Ellipsoid); configValues = [target_LAT, target_LON, contSettings.payload.mult_EMC,... - contSettings.payload.d, rocket.parachutes(2,2).controlParams.Kp,... - rocket.parachutes(2,2).controlParams.Ki]; + contSettings.payload.d, rocket.parachutes{2,2}.controlParams.Kp,... + rocket.parachutes{2,2}.controlParams.Ki]; configPRFvarNames = {'TARGET_LAT','TARGET_LON','MULT_EMC','D_EMTP','Kp', 'Ki'}; for i = 1:size(configValues,2) configPRF_export_table(1,i) = table(configValues(1,i)); diff --git a/simulator/src/std_run.m b/simulator/src/std_run.m index b1685d21..c18e077c 100644 --- a/simulator/src/std_run.m +++ b/simulator/src/std_run.m @@ -51,14 +51,16 @@ if nargin > 5 rocket.coefficients.total = settings_mont.Coeffs; wind = settings_mont.wind; - rocket.coefficients.state.xcgTime = settings_mont.State.xcgTime; + if isfield(settings_mont, 'State') + rocket.coefficients.state.xcgTime = settings_mont.State.xcgTime; + end environment.omega = settings_mont.OMEGA; environment.phi = settings_mont.PHI; end if ~exist("wind", "var") % If the wind was not already defined, generate new one - wind = WindCustom(mission); + wind = Wind(mission); end if settings.electronics % global variables slow down a bit the comunication over thread, we don't need these for montecarlo analysis @@ -114,7 +116,6 @@ end std_setInitialParams; rocket.massNoMotor = rocket.massNoMotor + settings.mass_offset; -rocket.updateMass; %% SENSORS INIT run(strcat('initSensors', mission.name)); @@ -529,7 +530,7 @@ while settings.flagStopIntegration && n_old < nmax % St t_change_ref_ABK = t1 + settings.servo.delay; end if t1-t_last_prf_control >= 1/settings.frequencies.prfFrequency - 1e-6 - t_change_ref_PRF = t1 + rocket.parachutes(2,2).controlParams.deltaA_delay; + t_change_ref_PRF = t1 + rocket.parachutes{2,2}.controlParams.deltaA_delay; end % assemble total state [n, ~] = size(Yf); diff --git a/simulator/src/std_run_parts/std_setInitialParams.m b/simulator/src/std_run_parts/std_setInitialParams.m index f7bda1ae..1b505d8a 100644 --- a/simulator/src/std_run_parts/std_setInitialParams.m +++ b/simulator/src/std_run_parts/std_setInitialParams.m @@ -18,6 +18,7 @@ end %% ADA Initialization settings.ada.t_ada = -1; % Apogee detection timestamp +settings.ada.t_para = -1; % Apogee detection timestamp settings.ada.flag_apo = false; % True when the apogee is detected settings.ada.flagOpenPara = false; % True when the main parachute should be opened @@ -86,7 +87,7 @@ deltaA_ref_new = 0; deltaA_ref_old = 0; deltaA_ref = [deltaA_ref_old,deltaA_ref_new]; % servo motor time delay - in ode it needs to be set to change reference value -t_change_ref_PRF = t0 + rocket.parachutes(2,2).controlParams.deltaA_delay; +t_change_ref_PRF = t0 + rocket.parachutes{2,2}.controlParams.deltaA_delay; t_last_prf_control = 0; diff --git a/simulator/src/std_run_parts/std_subsystems.m b/simulator/src/std_run_parts/std_subsystems.m index 1cd97027..99cece5c 100644 --- a/simulator/src/std_run_parts/std_subsystems.m +++ b/simulator/src/std_run_parts/std_subsystems.m @@ -143,7 +143,7 @@ if ~settings.flagAscent && settings.parafoil pos_est(3) = -pos_est(3)-environment.z0; [deltaA_ref_new,contSettings] = run_parafoilGuidance(pos_est, sensorData.nas.states(end,4:5), wind_est, ... - settings.payload.target, contSettings, rocket.parachutes(2,2).controlParams); + settings.payload.target, contSettings, rocket.parachutes{2,2}.controlParams); end end diff --git a/trajectoryGeneration/mainTrajectoryGeneration.m b/trajectoryGeneration/mainTrajectoryGeneration.m index 1fb42f04..548a073a 100644 --- a/trajectoryGeneration/mainTrajectoryGeneration.m +++ b/trajectoryGeneration/mainTrajectoryGeneration.m @@ -88,7 +88,7 @@ V0 = [0 0 0]'; W0 = [0 0 0]'; %%% wind initialization -wind = WindCustom(mission); +wind = Wind(mission); [uw, vw, ww] = wind.getVels(0); settings.constWind = [uw, vw, ww]; -- GitLab