diff options
Diffstat (limited to 'uav_uncertainty.m')
-rw-r--r-- | uav_uncertainty.m | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/uav_uncertainty.m b/uav_uncertainty.m index e1ddf76..6f28d8d 100644 --- a/uav_uncertainty.m +++ b/uav_uncertainty.m @@ -13,16 +13,46 @@ % UNCERT Struct of uncertainty transfer functions -function [uncert] = uav_performance(params, plot) +function [uncert] = uav_performance(params, do_plots) -W_malpha = tf(1,1); -W_momega = tf(1,1); -W_mState = tf(1,1); +s = tf('s'); + +% relative errors +eps_T = params.aerodynamics.ThrustOmegaPropUncertainty; +eps_r = params.mechanical.GyroscopicInertiaZUncertainty; +eps_S = params.aerodynamics.FlapAreaUncertainty; +eps_l = params.aerodynamics.LiftCoefficientUncertainty; +eps_d = params.aerodynamics.DragCoefficientsUncertainties(1); +% eps_0 = params.aerodynamics.DragCoefficients(2); + +eps_omega = max(.5 * eps_T, eps_r); +eps_alpha = max(eps_l + eps_S + 2 * eps_omega, eps_S + eps_d + eps_omega); + +% band pass parameters for W_malpha +wh = 20; % high freq +wl = .1; % low freq + +W_malpha = eps_alpha * (s / wl) / ((s / wh + 1) * (s / wl + 1)); +W_momega = eps_omega * 10 / (s + 10); +W_mState = .01 * 10 / (s + 10); uncert = struct(... 'FlapAngle', W_malpha * eye(4), ... 'Thrust', W_momega, ... 'StateLinApprox', W_mState * eye(12)); +if do_plots + % Bode plots of performance requirements + figure; hold on; + bodemag(W_malpha); + bodemag(W_momega); + bodemag(W_mState); + + grid on; + legend('$W_{m,\alpha}$', '$W_{m,\omega}$', '$W_{m,\mathbf{P}}$', ... + 'interpreter', 'latex') + title('Stability (Uncertainty) Requirement') +end + end % vim: ts=2 sw=2 et: |