diff --git a/RoccarasoFlight/postprocessing/RCS/cadrega.m b/RoccarasoFlight/postprocessing/RCS/cadrega.m new file mode 100644 index 0000000000000000000000000000000000000000..5fc28273fff02c08c7b2863fcd2850ff2d6e5528 --- /dev/null +++ b/RoccarasoFlight/postprocessing/RCS/cadrega.m @@ -0,0 +1,36 @@ +clc; close all; clear; + +Meuroc_vera = 25.11; +v_tgt = 23; +[~, ~, ~, rho_tgt] = atmosisa(350 + 160); % Considerando l'elevazione di costancia +S = (0.58/0.93)^2*pi; +% S = 1.0; +Cd = 2*Meuroc_vera * 9.81 / (v_tgt^2 * rho_tgt*S); + +fprintf('Massa di Euroc = %4.2f kg\n', Meuroc_vera) +fprintf('Vel drogue Euroc target = %4.0f m/s\n', v_tgt) +fprintf('S di riferimento drogue = %4.2f m^2\n', S) +fprintf('Cd necessario a Euroc = %4.2f \n', Cd) + +Cd_roccaraso = 0.85; + +%% adding path and recall data +addpath("..\commonFunctions\"); +main = importData('main'); +Mroccaraso_vera = 21.95; +Mroccaraso_vera_minus_one = 20.95; + +plot(main.GPS(:,1), -main.GPS(:,7)) +grid on +axis tight +[~, ~, ~, rho_tgt_rocc] = atmosisa(350 + 1100); % Considerando l'elevazione di roccaraso + + +V_tgt_roccaraso = sqrt(2*Mroccaraso_vera*9.81 / (rho_tgt_rocc * S * Cd)); +V_tgt_roccaraso_minus_one = sqrt(2*Mroccaraso_vera_minus_one*9.81 / (rho_tgt_rocc * S * Cd)); + +V_vera_roccaraso = sqrt(2*Mroccaraso_vera*9.81 / (rho_tgt_rocc * S * Cd_roccaraso)); + +V_vera_expected_euroc = sqrt(2*Meuroc_vera*9.81 / (rho_tgt * S * Cd_roccaraso)); + + diff --git a/RoccarasoFlight/postprocessing/RCS/descentPostProcess.m b/RoccarasoFlight/postprocessing/RCS/descentPostProcess.m index c101dbfd8564efdcb5a4712e5f50bd08bf08287e..ea6b96f5ef98828373f4590a0089178befb6bb1d 100644 --- a/RoccarasoFlight/postprocessing/RCS/descentPostProcess.m +++ b/RoccarasoFlight/postprocessing/RCS/descentPostProcess.m @@ -27,6 +27,18 @@ xlabel('Time elapsed [s]') ylabel('Acceleration [g]') legend('x', 'y', 'z') +%% Plot of Altitude during all flight + +t_baro = main.STATIC_PRESSURE1(:,1); +baro = main.STATIC_PRESSURE1(:,2); + +plot(t_baro, atmospalt(baro)) +grid on +axis tight +plotEvent(main.EVENTData, 'e', [33, 87, 42, 7, 32, 96, 40, 15]) +xlabel('Time elapsed [s]') +ylabel('Pressure altitude [m]') + %% Drogue Descent Post droguePara = descentPost(main, droguedescent, h0, 'drogue', (0.58/0.93)^2*pi, 21.95); mainPara = descentPost(main, maindescent, h0, 'main', 7.34, 21.90); @@ -37,23 +49,24 @@ function para = descentPost(main, desc, h0, name, S, M) fun_palt = @(x) [x(:,1), atmospalt(x(:,2))]; -% Collecting barometers variable +% Collecting sensor data para.descent.pressureRCS = main.RCS_PRESSURE(main.RCS_PRESSURE(:,1)>desc(1) & main.RCS_PRESSURE(:,1)<desc(2),:); -para.descent.static1 = main.STATIC_PRESSURE1(main.STATIC_PRESSURE1(:,1)>desc(1) & main.STATIC_PRESSURE1(:,1)<desc(2),:); -para.descent.static2 = main.STATIC_PRESSURE2(main.STATIC_PRESSURE2(:,1)>desc(1) & main.STATIC_PRESSURE2(:,1)<desc(2),:); +static1 = main.STATIC_PRESSURE1(main.STATIC_PRESSURE1(:,1)>desc(1) & main.STATIC_PRESSURE1(:,1)<desc(2),:); +static2 = main.STATIC_PRESSURE2(main.STATIC_PRESSURE2(:,1)>desc(1) & main.STATIC_PRESSURE2(:,1)<desc(2),:); + +para.descent.static = [static1(:,1), 0.5*(static1(:,2) + static2(:,2))]; para.descent.pressureRCSalt = fun_palt(para.descent.pressureRCS); -para.descent.static1alt = fun_palt(para.descent.static1); -para.descent.static2alt = fun_palt(para.descent.static2); +para.descent.staticalt = fun_palt(para.descent.static); para.descent.NASalt = main.NASData(main.NASData(:,1)>desc(1) & main.NASData(:,1)<desc(2),[1,4]); -para.descent.altitudetime = [para.descent.pressureRCSalt(:,1); para.descent.static1alt(:,1); ... - para.descent.static2alt(:,1); para.descent.NASalt(:,1)]; -para.descent.altitude = [para.descent.pressureRCSalt(:,2); ... - para.descent.static1alt(:,2); para.descent.static2alt(:,2); -para.descent.NASalt(:,2) + h0]; +para.descent.altitudetime = [para.descent.pressureRCSalt(:,1); para.descent.static(:,1)]; +para.descent.altitude = [para.descent.pressureRCSalt(:,2); para.descent.static(:,2)]; % para.descent.altitude = movmean(para.descent.altitude, 100); +para.descent.GPS = main.GPS(main.GPS(:,1)>desc(1) & main.GPS(:,1)<desc(2),[1,7]); + % Post procesing of altitude values [para.descent.altitudetime, IC] = unique(para.descent.altitudetime); para.descent.altitude = para.descent.altitude(IC); @@ -81,6 +94,9 @@ para.descent.paraS = S; N = 100; problem.objective = @(x)errFun(x, para, baseline); problem.x0 = para.descent.cfit.p1*ones(N,1); +% problem.A = eye(N) - diag(ones(N-1, 1), 1); +% problem.A = problem.A(1:end-1,:); +% problem.B = zeros(N, 1); problem.lb = para.descent.cfit.p1*ones(N,1)*1.2; problem.ub = para.descent.cfit.p1*ones(N,1)*0.8; problem.nonlcon = @(x)nonlincon(x, para, baseline); @@ -98,10 +114,9 @@ para.descent.Cd_std = std(Cd_vec); % Plot Altitude profile figure('Name', [name, 'DescentAlt']) plot(para.descent.pressureRCSalt(:,1), para.descent.pressureRCSalt(:,2)); hold on -plot(para.descent.static1alt(:,1), para.descent.static1alt(:,2)) -plot(para.descent.static2alt(:,1), para.descent.static2alt(:,2)) +plot(para.descent.staticalt(:,1), para.descent.staticalt(:,2)) plot(para.descent.NASalt(:,1), -para.descent.NASalt(:,2)+h0) -legend('RCS analogic', 'STATIC 1', 'STATIC 2', 'NAS') +legend('RCS analogic', 'STATIC', 'NAS') xlim(desc) plot(para.descent.cfit); plot(tvec, hvec_int, 's-', 'DisplayName', 'Optimizer Result') @@ -113,12 +128,11 @@ ylabel('Altitude [m]') % Plot distance from baseline figure('Name', [name, 'DescentAlt from baseline']) plot(para.descent.pressureRCSalt(:,1), abs(para.descent.pressureRCSalt(:,2) - baseline(para.descent.pressureRCSalt(:,1)))./baseline(para.descent.pressureRCSalt(:,1))); hold on -plot(para.descent.static1alt(:,1), abs(para.descent.static1alt(:,2)- baseline(para.descent.static1alt(:,1)))./baseline(para.descent.static1alt(:,1))) -plot(para.descent.static2alt(:,1), abs(para.descent.static2alt(:,2)- baseline(para.descent.static2alt(:,1)))./baseline(para.descent.static2alt(:,1))) +plot(para.descent.staticalt(:,1), abs(para.descent.staticalt(:,2)- baseline(para.descent.staticalt(:,1)))./baseline(para.descent.staticalt(:,1))) plot(para.descent.NASalt(:,1), abs(-para.descent.NASalt(:,2)+h0- baseline(para.descent.NASalt(:,1)))./baseline(para.descent.NASalt(:,1))) plot(tvec, abs(hvec_int - baseline(tvec)')./ baseline(tvec)', 's-', 'DisplayName', 'Optimizer Result') -legend('RCS analogic', 'STATIC 1', 'STATIC 2', 'NAS', 'Optimizer Result') +legend('RCS analogic', 'STATIC', 'NAS', 'Optimizer Result') grid on axis tight xlabel('time [s]') @@ -128,11 +142,13 @@ figure('name',[name, ' Vertical speed']) yline(para.descent.cfit.p1); hold on plot(para.descent.NASvd(:,1), -para.descent.NASvd(:,2)) +plot(para.descent.GPS(:,1), -para.descent.GPS(:,2)) plot(tvec, V); +% fplot(baseline, desc) xlabel('Time [s]') ylabel('Vz [m/2]') grid on; axis tight -fprintf('%s Cd = %3.2f +/- %7.5f', name, para.descent.Cd, para.descent.Cd_std) +fprintf('%s Cd = %3.2f +/- %7.5f\n', name, para.descent.Cd, 3*para.descent.Cd_std) end @@ -174,5 +190,5 @@ hvec_int = hvec(1) + cumtrapz(tvec, V); ceq = []; -c = abs(hvec_int(:) - hvec(:))./hvec(:) - 0.005; +c = abs(hvec_int(:) - hvec(:)) - 10; end \ No newline at end of file