summaryrefslogtreecommitdiff
path: root/Flight_Dynamics.mo
diff options
context:
space:
mode:
Diffstat (limited to 'Flight_Dynamics.mo')
-rw-r--r--Flight_Dynamics.mo404
1 files changed, 404 insertions, 0 deletions
diff --git a/Flight_Dynamics.mo b/Flight_Dynamics.mo
new file mode 100644
index 0000000..0435c35
--- /dev/null
+++ b/Flight_Dynamics.mo
@@ -0,0 +1,404 @@
+package Flight_Dynamics
+ extends Modelica.Icons.Package;
+
+ class Components
+ block ForceMoment_Gen
+ import Modelica.Math.Matrices.*;
+ import Modelica.SIunits.*;
+ import Modelica.Blocks.Interfaces.*;
+ import Modelica.Math.Vectors.*;
+ parameter Real rho = 1.225;
+ parameter Real g = 9.81;
+ parameter Real m = 1043.26;
+ //1.56 for zagi
+ parameter Real S_ref = 16.1651;
+ //reference area
+ parameter Real C_bar = 1.493;
+ //average chord
+ parameter Real b = 10.911;
+ //span
+ parameter Real CD0 = 0.036;
+ //= 0.01631;for Zagi
+ parameter Real K_drag = 0.0830304;
+ //for cessna
+ parameter Real CD_beta = 0.17;
+ //for cessna
+ parameter Real CD_alpha = 0.2108;
+ parameter Real CD_q = 0;
+ parameter Real CD_delta_e = 0.3045;
+ //side force
+ parameter Real Cy_beta = -0.31;
+ //for cessna
+ parameter Real Cy_p = -0.037;
+ //for cessna
+ parameter Real Cy_r = 0.21;
+ //for cessna
+ parameter Real Cy_delta_r = 0.187;
+ //for cessna
+ parameter Real Cy_delta_a = 0;
+ //for cessna
+ // lift
+ parameter Real CL0 = 0.25;
+ //for cessna
+ parameter Real CL_alpha = 4.47;
+ //for cessna
+ parameter Real CL_q = 3.9;
+ //for cessna
+ parameter Real CL_delta_e = 0.3476;
+ //for cessna
+ // rolling moment
+ parameter Real Cl_beta = -0.089;
+ //for cessna
+ parameter Real Cl_p = -0.47;
+ //for cessna
+ parameter Real Cl_r = 0.096;
+ //for cessna
+ parameter Real Cl_delta_a = -0.09;
+ //for cessna
+ parameter Real Cl_delta_r = 0.0147;
+ //for cessna
+ // pitching moment
+ parameter Real Cm0 = -0.02;
+ //for cessna
+ parameter Real Cm_alpha = -1.8;
+ //for cessna
+ parameter Real Cm_q = -12.4;
+ //for cessna
+ parameter Real Cm_delta_e = -1.28;
+ //for cessna
+ // yawing moment
+ parameter Real Cn_beta = 0.065;
+ //for cessna
+ parameter Real Cn_p = -0.03;
+ //for cessna
+ parameter Real Cn_r = -0.99;
+ //for cessna
+ parameter Real Cn_delta_a = -0.0053;
+ //for cessna
+ parameter Real Cn_delta_r = -0.0657;
+ //for cessna
+ Real CL;
+ Real CD;
+ Real CY;
+ Real Cl;
+ Real Cm;
+ Real Cn;
+ Real CX;
+ Real CZ;
+ RealInput thrust annotation(
+ Placement(visible = true, transformation(origin = {-110, 0}, extent = {{-20, -20}, {20, 20}}, rotation = 0), iconTransformation(origin = {-110, 0}, extent = {{-20, -20}, {20, 20}}, rotation = 0)));
+ //Thrust force
+ RealInput[3] delta annotation(
+ Placement(visible = true, transformation(origin = {-110, -50}, extent = {{-20, -20}, {20, 20}}, rotation = 0), iconTransformation(origin = {-110, -50}, extent = {{-20, -20}, {20, 20}}, rotation = 0)));
+ RealInput[3] VAB annotation(
+ Placement(visible = true, transformation(origin = {-33, 110}, extent = {{-20, -20}, {20, 20}}, rotation = -90), iconTransformation(origin = {-33, 110}, extent = {{-20, -20}, {20, 20}}, rotation = -90)));
+ //V, alpha, beta
+ RealInput[3] omega annotation(
+ Placement(visible = true, transformation(origin = {33, 110}, extent = {{-20, -20}, {20, 20}}, rotation = -90), iconTransformation(origin = {33, 110}, extent = {{-20, -20}, {20, 20}}, rotation = -90)));
+ //Angular velocities
+ Real V = VAB[1];
+ Real alpha = VAB[2];
+ Real beta = VAB[3];
+ Real p = omega[1];
+ Real q = omega[2];
+ Real r = omega[3];
+ Real deltaE = delta[1];
+ Real deltaR = delta[2];
+ Real deltaA = delta[3];
+ Real qbar = 0.5 * rho * V ^ 2;
+ RealOutput Force[3] annotation(
+ Placement(visible = true, transformation(origin = {110, 33}, extent = {{-20, -20}, {20, 20}}, rotation = 0), iconTransformation(origin = {110, 33}, extent = {{-20, -20}, {20, 20}}, rotation = 0)));
+ //Thrust force
+ RealOutput Moment[3] annotation(
+ Placement(visible = true, transformation(origin = {110, -33}, extent = {{-20, -20}, {20, 20}}, rotation = 0), iconTransformation(origin = {110, -33}, extent = {{-20, -20}, {20, 20}}, rotation = 0)));
+ //Thrust force
+ equation
+ CL = CL0 + CL_alpha * alpha + CL_q * q * C_bar / (2 * V) + CL_delta_e * deltaE;
+//CD = CD0+CD_alpha*alpha+((CD_q*q*C_bar)/(2*V))+CD_delta_e*abs(deltaE) ;
+ CD = CD0 + K_drag * CL ^ 2;
+ CY = Cy_beta * beta + Cy_p * (p * b) / (2 * V) + Cy_r * (r * b) / (2 * V) + Cy_delta_a * deltaA + Cy_delta_r * deltaR;
+//Sideslip coeff
+ Cl = Cl_beta * beta + Cl_p * (p * b) / (2 * V) + Cl_r * (r * b) / (2 * V) + Cl_delta_a * deltaA + Cl_delta_r * deltaR;
+//Rolling coeff
+ Cm = Cm0 + Cm_alpha * alpha + Cm_q * q * C_bar / (2 * V) + Cm_delta_e * deltaE;
+//pitching coeff
+ Cn = Cn_beta * beta + Cn_p * (p * b) / (2 * V) + Cn_r * (r * b) / (2 * V) + Cn_delta_a * deltaA + Cn_delta_r * deltaR;
+//Yawing coeff
+ CX = (-CD * cos(alpha)) + CL * sin(alpha);
+ CZ = (-CD * sin(alpha)) - CL * cos(alpha);
+ Force[1] = thrust * cos(alpha) * cos(beta) - 0.5 * rho * V ^ 2 * S_ref * (CD * cos(beta) - CY * sin(beta));
+ Force[2] = (-thrust * cos(alpha) * sin(beta)) + 0.5 * rho * V ^ 2 * S_ref * (CY * cos(beta) + CD * sin(beta));
+ Force[3] = 0.5 * rho * V ^ 2 * S_ref * CL + thrust * sin(alpha);
+ Moment[2] = Cm * qbar * S_ref * C_bar;
+ Moment[1] = Cl * qbar * S_ref * b;
+ Moment[3] = Cn * qbar * S_ref * b;
+ end ForceMoment_Gen;
+
+ block Flight6DOF
+ import Modelica.Math.Matrices.*;
+ import SI = Modelica.SIunits;
+ import Modelica.Blocks.Interfaces.*;
+ parameter Real g = 9.81;
+ parameter Real m = 1043.26;
+ //1.56 for zagi
+ parameter Real[3, 3] J = {{1285.31, 0.0, 0.0}, {0.0, 1824.93, 0.0}, {0.0, 0.0, 2666.893}};
+ //12 states
+ RealOutput[3] omega(start = {0.0, 0.0, 0}) annotation(
+ Placement(visible = true, transformation(origin = {110, -33}, extent = {{-20, -20}, {20, 20}}, rotation = 0), iconTransformation(origin = {110, -33}, extent = {{-20, -20}, {20, 20}}, rotation = 0)));
+ //omega
+ Real OMEGA[3, 3] = skew(omega);
+ //Skew symmetric matrix form of the angular velocity term
+ Real V(start = 39.8858);
+ Real alpha(start = 0.1);
+ Real beta(start = 0);
+ RealOutput[3] VAB annotation(
+ Placement(visible = true, transformation(origin = {110, 33}, extent = {{-20, -20}, {20, 20}}, rotation = 0), iconTransformation(origin = {110, 33}, extent = {{-20, -20}, {20, 20}}, rotation = 0)));
+ //V, alpha, beta
+ Real x(start = 0);
+ Real y(start = 0);
+ Real z(start = 100);
+ Real mu(start = 0);
+ Real gamma(start = 0);
+ Real chi(start = 0);
+ RealInput Force[3] annotation(
+ Placement(visible = true, transformation(origin = {-110, 33}, extent = {{-20, -20}, {20, 20}}, rotation = 0), iconTransformation(origin = {-110, 33}, extent = {{-20, -20}, {20, 20}}, rotation = 0)));
+ //Thrust force
+ RealInput Moment[3] annotation(
+ Placement(visible = true, transformation(origin = {-110, -33}, extent = {{-20, -20}, {20, 20}}, rotation = 0), iconTransformation(origin = {-110, -33}, extent = {{-20, -20}, {20, 20}}, rotation = 0)));
+ //Thrust force
+ Real Vdot;
+ Real alphadot;
+ Real betadot;
+ Real[3] omegadot;
+ Real mudot;
+ Real gammadot;
+ Real chidot;
+ Real xdot;
+ Real ydot;
+ Real zdot;
+ equation
+ Vdot = der(V);
+ alphadot = der(alpha);
+ betadot = der(beta);
+ omegadot = der(omega);
+ xdot = der(x);
+ ydot = der(y);
+ zdot = der(z);
+ mudot = der(mu);
+ gammadot = der(gamma);
+ chidot = der(chi);
+ Vdot = 1 / m * (Force[1] - m * g * sin(gamma));
+ alphadot = omega[2] - 1 / cos(beta) * ((omega[1] * cos(alpha) + omega[3] * sin(alpha)) * sin(beta) - g / V * cos(gamma) * cos(mu) + Force[3] / (m * V));
+ betadot = omega[1] * sin(alpha) - omega[3] * cos(alpha) + 1 / (m * V) * (Force[2] + m * g * cos(gamma) * sin(mu));
+ omegadot = inv(J) * (Moment - OMEGA * J * omega);
+ xdot = V * cos(gamma) * cos(chi);
+ ydot = V * cos(gamma) * sin(chi);
+ zdot = -V * sin(gamma);
+ mudot = omega[1] + tan(gamma) * sin(mu) * omega[2] + tan(gamma) * cos(mu) * omega[3];
+ gammadot = cos(mu) * omega[2] - sin(mu) * omega[3];
+ chidot = 1 / cos(gamma) * sin(mu) * omega[2] + 1 / cos(gamma) * cos(mu) * omega[3];
+ VAB = {V, alpha, beta};
+ annotation(
+ uses(Modelica(version = "3.2.2")));
+ end Flight6DOF;
+ end Components;
+
+ class Test_Cases
+ model CessnaTrim
+ // The initial values for delta[2] (elevator), alpha, thrust, and V are obtained by executing Trim_Conditions_Cessna.mo.
+ parameter Real m = 1043.26;
+ //1.56 for zagi
+ parameter Real s = 16.1651;
+ //reference area
+ parameter Real cbar = 1.493;
+ //average chord
+ parameter Real b = 10.911;
+ //span
+ parameter Real W[3] = m * {0, 0, 9.81};
+ //gravitational force
+ //parameter Real b= 1.4224, cbar = 0.3302,s = 0.2589;
+ parameter Real CD0 = 0.036;
+ //= 0.01631;for Zagi
+ parameter Real K_drag = 0.0830304;
+ //for cessna
+ parameter Real CD_beta = 0.17;
+ //for cessna
+ parameter Real CD_alpha = 0.2108;
+ parameter Real CD_q = 0;
+ parameter Real CD_delta_e = 0.3045;
+ //side force
+ parameter Real Cy_beta = -0.31;
+ //for cessna
+ parameter Real Cy_p = -0.037;
+ //for cessna
+ parameter Real Cy_r = 0.21;
+ //for cessna
+ parameter Real Cy_delta_r = 0.187;
+ //for cessna
+ parameter Real Cy_delta_a = 0;
+ //for cessna
+ // lift
+ parameter Real CL0 = 0.25;
+ //for cessna
+ parameter Real CL_alpha = 4.47;
+ //for cessna
+ parameter Real CL_q = 3.9;
+ //for cessna
+ parameter Real CL_delta_e = 0.3476;
+ //for cessna
+ // rolling moment
+ parameter Real Cl_beta = -0.089;
+ //for cessna
+ parameter Real Cl_p = -0.47;
+ //for cessna
+ parameter Real Cl_r = 0.096;
+ //for cessna
+ parameter Real Cl_delta_a = -0.09;
+ //for cessna
+ parameter Real Cl_delta_r = 0.0147;
+ //for cessna
+ // pitching moment
+ parameter Real Cm0 = -0.02;
+ //for cessna
+ parameter Real Cm_alpha = -1.8;
+ //for cessna
+ parameter Real Cm_q = -12.4;
+ //for cessna
+ parameter Real Cm_delta_e = -1.28;
+ //for cessna
+ // yawing moment
+ parameter Real Cn_beta = 0.065;
+ //for cessna
+ parameter Real Cn_p = -0.03;
+ //for cessna
+ parameter Real Cn_r = -0.99;
+ //for cessna
+ parameter Real Cn_delta_a = -0.0053;
+ //for cessna
+ parameter Real Cn_delta_r = -0.0657;
+ //for cessna
+ //Initial conditions. (delta[2], thrust[1] and the others are straightforward)
+ parameter Real del[3] = {-0.15625, 0, 0};
+ parameter Real thrust = 1112.82;
+ Flight_Dynamics.Components.ForceMoment_Gen forceMoment_Gen1 annotation(
+ Placement(visible = true, transformation(origin = {-18, 4}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
+ Flight_Dynamics.Components.Flight6DOF flight6DOF1 annotation(
+ Placement(visible = true, transformation(origin = {24, 4}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
+ equation
+ connect(forceMoment_Gen1.omega, flight6DOF1.omega) annotation(
+ Line(points = {{-14, 16}, {-14, 16}, {-14, 40}, {62, 40}, {62, 0}, {36, 0}, {36, 0}}, color = {0, 0, 127}, thickness = 0.5));
+ connect(flight6DOF1.VAB, forceMoment_Gen1.VAB) annotation(
+ Line(points = {{36, 8}, {42, 8}, {42, 32}, {-20, 32}, {-20, 16}, {-22, 16}}, color = {0, 0, 127}, thickness = 0.5));
+ connect(forceMoment_Gen1.Moment, flight6DOF1.Moment) annotation(
+ Line(points = {{-6, 0}, {12, 0}, {12, 0}, {14, 0}}, color = {0, 0, 127}, thickness = 0.5));
+ connect(forceMoment_Gen1.Force, flight6DOF1.Force) annotation(
+ Line(points = {{-6, 8}, {12, 8}, {12, 8}, {14, 8}}, color = {0, 0, 127}, thickness = 0.5));
+ forceMoment_Gen1.thrust = thrust;
+ forceMoment_Gen1.delta = del;
+ annotation(
+ experiment(StartTime = 0, StopTime = 100, Tolerance = 1e-3, Interval = 0.001),
+ uses(Modelica(version = "3.2.2")));
+ end CessnaTrim;
+
+ model CessnaPerturbed
+ //The initial values for delta[2] (elevator), alpha, thrust, and V are obtained by executing Trim_Conditions_Cessna.mo.
+ parameter Real m = 1043.26;
+ //1.56 for zagi
+ parameter Real s = 16.1651;
+ //reference area
+ parameter Real cbar = 1.493;
+ //average chord
+ parameter Real b = 10.911;
+ //span
+ parameter Real W[3] = m * {0, 0, 9.81};
+ //gravitational force
+ //parameter Real b= 1.4224, cbar = 0.3302,s = 0.2589;
+ parameter Real CD0 = 0.036;
+ //= 0.01631;for Zagi
+ parameter Real K_drag = 0.0830304;
+ //for cessna
+ parameter Real CD_beta = 0.17;
+ //for cessna
+ parameter Real CD_alpha = 0.2108;
+ parameter Real CD_q = 0;
+ parameter Real CD_delta_e = 0.3045;
+ //side force
+ parameter Real Cy_beta = -0.31;
+ //for cessna
+ parameter Real Cy_p = -0.037;
+ //for cessna
+ parameter Real Cy_r = 0.21;
+ //for cessna
+ parameter Real Cy_delta_r = 0.187;
+ //for cessna
+ parameter Real Cy_delta_a = 0;
+ //for cessna
+ // lift
+ parameter Real CL0 = 0.25;
+ //for cessna
+ parameter Real CL_alpha = 4.47;
+ //for cessna
+ parameter Real CL_q = 3.9;
+ //for cessna
+ parameter Real CL_delta_e = 0.3476;
+ //for cessna
+ // rolling moment
+ parameter Real Cl_beta = -0.089;
+ //for cessna
+ parameter Real Cl_p = -0.47;
+ //for cessna
+ parameter Real Cl_r = 0.096;
+ //for cessna
+ parameter Real Cl_delta_a = -0.09;
+ //for cessna
+ parameter Real Cl_delta_r = 0.0147;
+ //for cessna
+ // pitching moment
+ parameter Real Cm0 = -0.02;
+ //for cessna
+ parameter Real Cm_alpha = -1.8;
+ //for cessna
+ parameter Real Cm_q = -12.4;
+ //for cessna
+ parameter Real Cm_delta_e = -1.28;
+ //for cessna
+ // yawing moment
+ parameter Real Cn_beta = 0.065;
+ //for cessna
+ parameter Real Cn_p = -0.03;
+ //for cessna
+ parameter Real Cn_r = -0.99;
+ //for cessna
+ parameter Real Cn_delta_a = -0.0053;
+ //for cessna
+ parameter Real Cn_delta_r = -0.0657;
+ //for cessna
+ //Initial conditions. (delta[2], thrust[1] and the others are straightforward)
+ parameter Real del[3] = {-0.15625, 0, 0};
+ parameter Real thrust = 1112.82;
+ Flight_Dynamics.Components.ForceMoment_Gen forceMoment_Gen1 annotation(
+ Placement(visible = true, transformation(origin = {-23, 7}, extent = {{-23, -23}, {23, 23}}, rotation = 0)));
+ Flight_Dynamics.Components.Flight6DOF flight6DOF1 annotation(
+ Placement(visible = true, transformation(origin = {52, 6}, extent = {{-26, -26}, {26, 26}}, rotation = 0)));
+ Modelica.Blocks.Sources.RealExpression delta annotation(
+ Placement(visible = true, transformation(origin = {-142, -5}, extent = {{-26, -47}, {26, 47}}, rotation = 0)));
+ equation
+ connect(delta.y, forceMoment_Gen1.delta) annotation(
+ Line(points = {{-113, -5}, {-50, -5}, {-50, -4}, {-48, -4}}, color = {0, 0, 127}, thickness = 0.5));
+ connect(forceMoment_Gen1.omega, flight6DOF1.omega) annotation(
+ Line(points = {{-16, 32}, {-16, 32}, {-16, 78}, {98, 78}, {98, -2}, {80, -2}, {80, -2}}, color = {0, 0, 127}, thickness = 0.5));
+ connect(forceMoment_Gen1.VAB, flight6DOF1.VAB) annotation(
+ Line(points = {{-30, 32}, {-28, 32}, {-28, 64}, {84, 64}, {84, 14}, {80, 14}}, color = {0, 0, 127}, thickness = 0.5));
+ connect(forceMoment_Gen1.Force, flight6DOF1.Force) annotation(
+ Line(points = {{2, 14}, {22, 14}, {22, 14}, {24, 14}}, color = {0, 0, 127}, thickness = 0.5));
+ connect(forceMoment_Gen1.Moment, flight6DOF1.Moment) annotation(
+ Line(points = {{2, 0}, {26, 0}, {26, -2}, {24, -2}}, color = {0, 0, 127}, thickness = 0.5));
+ forceMoment_Gen1.thrust = thrust;
+ annotation(
+ experiment(StartTime = 0, StopTime = 300, Tolerance = 1e-3, Interval = 0.001),
+ uses(Modelica(version = "3.2.2")));
+ end CessnaPerturbed;
+ end Test_Cases;
+ annotation(
+ uses(Modelica(version = "3.2.2")));
+end Flight_Dynamics; \ No newline at end of file