Migration to OpenModelica 1.25 and FMUs Generation
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
within;
|
||||
package AIDAModelica "AIDA Modelica Libraries"
|
||||
annotation(dateModified="2018-04-03 09:30:06Z");
|
||||
end AIDAModelica;
|
||||
@@ -0,0 +1,32 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model AccelerationToSpeed "Acceleration to speed convector"
|
||||
Modelica.Blocks.Interfaces.RealInput Acceleration[3](each quantity = "Mechanics.Translation.Accel", each displayUnit = "m/s²") "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-26, -30}, extent = {{-120, 10}, {-80, 50}}), iconTransformation(origin = {0, -100}, extent = {{-20, -20}, {20, 20}}, rotation = 90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput Speed[3](each quantity = "Mechanics.Translation.Velocity", each displayUnit = "m/s") "'output Real' as connector" annotation(
|
||||
Placement(transformation(origin = {104, -30}, extent = {{-5, 20}, {15, 40}}), iconTransformation(origin = {0, 100}, extent = {{-10, -10}, {10, 10}}, rotation = 90)));
|
||||
Modelica.Blocks.Continuous.Integrator integrator1 annotation(
|
||||
Placement(transformation(origin = {20, 10}, extent = {{-60, 50}, {-40, 70}})));
|
||||
Modelica.Blocks.Continuous.Integrator integrator2 annotation(
|
||||
Placement(transformation(origin = {20, -30}, extent = {{-60, 20}, {-40, 40}})));
|
||||
Modelica.Blocks.Continuous.Integrator integrator3 annotation(
|
||||
Placement(transformation(origin = {20, -72}, extent = {{-60, -10}, {-40, 10}})));
|
||||
equation
|
||||
connect(integrator1.u, Acceleration[1]) annotation(
|
||||
Line(points = {{-42, 70}, {-95, 70}, {-95, 0}, {-126, 0}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator2.u, Acceleration[2]) annotation(
|
||||
Line(points = {{-42, 0}, {-126, 0}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator3.u, Acceleration[3]) annotation(
|
||||
Line(points = {{-42, -72}, {-94, -72}, {-94, 0}, {-126, 0}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator1.y, Speed[1]) annotation(
|
||||
Line(points = {{-19, 70}, {0, 70}, {0, 0}, {109, 0}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator2.y, Speed[2]) annotation(
|
||||
Line(points = {{-19, 0}, {109, 0}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator3.y, Speed[3]) annotation(
|
||||
Line(points = {{-19, -72}, {35, -72}, {35, 0}, {109, 0}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
Acceleration(flags = 2),
|
||||
Speed(flags = 2),
|
||||
Icon(graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 100}, {100, -100}})}),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.001));
|
||||
end AccelerationToSpeed;
|
||||
@@ -0,0 +1,230 @@
|
||||
within AIDAModelica;
|
||||
model AcquirePositioningSignal "Acquire Positioning Signal"
|
||||
Modelica.Blocks.Interfaces.RealOutput Measured_positioning_signal[4] "'output Real' as connector" annotation(Placement(
|
||||
transformation(origin = {110, 0}, extent = {{-10, -10}, {10, 10}}),
|
||||
iconTransformation(extent={{90,-10},{110,10}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Positioning_signal[4] "'input Real' as connector" annotation(Placement(
|
||||
transformation(origin = {-120, 0}, extent = {{-20, -20}, {20, 20}}),
|
||||
iconTransformation(extent={{-120,-20},{-80,20}})));
|
||||
equation
|
||||
// enter your equations here
|
||||
Measured_positioning_signal = Positioning_signal;
|
||||
annotation(Icon(graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-100,100},{100,-100}}),
|
||||
Bitmap(
|
||||
imageSource="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
|
||||
uryBtgAAAABJRU5ErkJggg==",
|
||||
extent={{-100,-100},{100,100}})}));
|
||||
end AcquirePositioningSignal;
|
||||
@@ -0,0 +1,58 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model AllocationControl "Allocation Coltrol Model"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput TotalThrustAP(quantity = "Mechanics.Translation.Force", displayUnit = "N") "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-46, 20}, extent = {{-95, 40}, {-55, 80}}), iconTransformation(extent = {{-120, 55}, {-80, 95}})));
|
||||
Modelica.Blocks.Interfaces.RealInput TotalThrustManual(quantity = "Mechanics.Translation.Force", displayUnit = "N") "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-48, -18}, extent = {{-95, 0}, {-55, 40}}), iconTransformation(extent = {{-120, 5}, {-80, 45}})));
|
||||
Modelica.Blocks.Interfaces.RealInput MomentumsConsign[3](each quantity = "Mechanics.Rotation.Torque", each displayUnit = "Nm") "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-90, -46}, extent = {{-50, -15}, {-10, 25}}), iconTransformation(extent = {{-120, -45}, {-80, -5}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput Motor1Rate(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "'output Real' as connector" annotation(
|
||||
Placement(transformation(origin = {66, 26}, extent = {{35, 45}, {55, 65}}), iconTransformation(extent = {{90, 65}, {110, 85}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput Motor2Rate(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "'output Real' as connector" annotation(
|
||||
Placement(transformation(origin = {64, 0}, extent = {{35, 30}, {55, 50}}), iconTransformation(extent = {{90, 15}, {110, 35}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput Motor3Rate(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "'output Real' as connector" annotation(
|
||||
Placement(transformation(origin = {66, -60}, extent = {{35, 10}, {55, 30}}), iconTransformation(extent = {{90, -35}, {110, -15}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput Motor4Rate(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "'output Real' as connector" annotation(
|
||||
Placement(transformation(origin = {66, -86}, extent = {{35, -5}, {55, 15}}), iconTransformation(extent = {{90, -85}, {110, -65}})));
|
||||
Modelica.Blocks.Interfaces.BooleanInput SelectedControlMode "'input Boolean' as connector" annotation(
|
||||
Placement(transformation(origin = {-26, 0}, extent = {{-115, 20}, {-75, 60}}), iconTransformation(extent = {{-120, -95}, {-80, -55}})));
|
||||
AIDAModelica.ComputeMotorRate computeMotorRate1 annotation(
|
||||
Placement(visible = true, transformation(extent = {{-5, 20}, {15, 45}}, rotation = 0)));
|
||||
Modelica.Blocks.Logical.Switch SelectTotalThrustConsign annotation(
|
||||
Placement(transformation(extent = {{-50, 30}, {-30, 50}})));
|
||||
equation
|
||||
connect(SelectTotalThrustConsign.y, computeMotorRate1.TotalThrust) annotation(
|
||||
Line(points = {{-29, 40}, {-5, 40}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeMotorRate1.Motor4Rate, Motor4Rate) annotation(
|
||||
Line(points = {{15, 25}, {40, 25}, {40, -81}, {111, -81}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeMotorRate1.Motor3Rate, Motor3Rate) annotation(
|
||||
Line(points = {{15, 30}, {40, 30}, {40, -40}, {111, -40}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeMotorRate1.Motor2Rate, Motor2Rate) annotation(
|
||||
Line(points = {{15, 35}, {40, 35}, {40, 40}, {109, 40}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeMotorRate1.Motor1Rate, Motor1Rate) annotation(
|
||||
Line(points = {{15, 40}, {40, 40}, {40, 81}, {111, 81}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeMotorRate1.MomentumConsign[:], MomentumsConsign[:]) annotation(
|
||||
Line(points = {{-5, 25}, {-25, 25}, {-25, 5}, {-30, 5}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(SelectTotalThrustConsign.u1, TotalThrustAP) annotation(
|
||||
Line(points = {{-52, 48}, {-70, 48}, {-70, 80}, {-121, 80}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(SelectTotalThrustConsign.u2, SelectedControlMode) annotation(
|
||||
Line(points = {{-52, 40}, {-121, 40}}, color = {255, 0, 255}, thickness = 0.0625));
|
||||
connect(SelectTotalThrustConsign.u3, TotalThrustManual) annotation(
|
||||
Line(points = {{-52, 32}, {-70, 32}, {-70, 2}, {-123, 2}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
TotalThrustAP(flags = 2),
|
||||
TotalThrustManual(flags = 2),
|
||||
MomentumsConsign(flags = 2),
|
||||
Motor1Rate(flags = 2),
|
||||
Motor2Rate(flags = 2),
|
||||
Motor3Rate(flags = 2),
|
||||
Motor4Rate(flags = 2),
|
||||
SelectedControlMode(flags = 2),
|
||||
computeMotorRate1(TotalThrust(flags = 2), MomentumConsign(flags = 2), Motor1Rate(flags = 2), Motor2Rate(flags = 2), Motor3Rate(flags = 2), Motor4Rate(flags = 2), P4(flags = 2), M4(flags = 2), AngVelVector(flags = 2), TMomVector(flags = 2), ParamCosSin(flags = 2)),
|
||||
SelectTotalThrustConsign(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2)),
|
||||
Icon(coordinateSystem(extent = {{-100, -125}, {100, 125}}, initialScale = 0.1), graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 126.7}, {100, -126.7}}), Text(origin = {-57, 21}, extent = {{-11, 5}, {105, -39}}, textString = "AllocationControl")}),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end AllocationControl;
|
||||
@@ -0,0 +1,94 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model AttitudeControl "Attitude Control Model"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
parameter Boolean Test_CstMomentumActiv = false;
|
||||
parameter Boolean Test_open_loop[3] = {false, false, false} "parameter";
|
||||
parameter Real Test_CstMomentumValues[3] = {0.0, 0.0, 0.0};
|
||||
Modelica.Blocks.Interfaces.RealInput AttitudeConsignAP[2](each quantity = "Mechanics.Rotation.Angle", each displayUnit = "rad") "Desired phi and teta angles input" annotation(
|
||||
Placement(visible = true, transformation(extent = {{-166, 23}, {-126, 63}}, rotation = 0), iconTransformation(origin = {-50, 100}, extent = {{-20, -20}, {20, 20}}, rotation = 270)));
|
||||
Modelica.Blocks.Interfaces.RealInput AttitudeRCConsign[2](each quantity = "Mechanics.Rotation.Angle", each displayUnit = "rad") "Desired phi and teta angles input sac" annotation(
|
||||
Placement(visible = true,transformation(extent = {{-163, -45}, {-123, -5}}, rotation = 0), iconTransformation(extent = {{-120, -20}, {-80, 20}}, rotation = 0)));
|
||||
Modelica.Blocks.Interfaces.RealInput YawConsign(quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "Desired yaw angle input" annotation(
|
||||
Placement(transformation(extent = {{-80, -70}, {-40, -30}}), iconTransformation(extent = {{-120, -70}, {-80, -30}})));
|
||||
Modelica.Blocks.Interfaces.RealInput AngularSpeed[3](each quantity = "Mechanics.Rotation.RotVelocity", each displayUnit = "rad/s") "Real angular velocities feedback input" annotation(
|
||||
Placement(transformation(origin = {-50, 2}, extent = {{-89.7, 58}, {-49.7, 98}}), iconTransformation(origin = {-50, -100}, extent = {{-20, -20}, {20, 20}}, rotation = 90)));
|
||||
Modelica.Blocks.Interfaces.RealInput Attitude[3](each quantity = "Mechanics.Rotation.Angle", each displayUnit = "rad") "Real attitude feedback input" annotation(
|
||||
Placement(transformation(origin = {-122, -124}, extent = {{-40, 45}, {0, 85}}), iconTransformation(origin = {0, -100}, extent = {{-20, -20}, {20, 20}}, rotation = 90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput MomentumsConsign[3](each quantity = "Mechanics.Rotation.Torque", each displayUnit = "Nm") "Desired moments output" annotation(
|
||||
Placement(transformation(origin = {10, 4}, extent = {{90, -15}, {110, 5}}), iconTransformation(extent = {{90, -10}, {110, 10}})));
|
||||
Modelica.Blocks.Interfaces.RealInput RCYawCommand(quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "RC yaw angle input" annotation(
|
||||
Placement(transformation(extent = {{-80, -100}, {-40, -60}}), iconTransformation(origin = {-100, 50}, extent = {{-20, -20}, {20, 20}})));
|
||||
Modelica.Blocks.Interfaces.BooleanInput SelectedControlMode "'input Boolean' as connector" annotation(
|
||||
Placement(visible = true, transformation(extent = {{-164, -11}, {-124, 29}}, rotation = 0), iconTransformation(origin = {50, -100}, extent = {{-20, -20}, {20, 20}}, rotation = -270)));
|
||||
AIDAModelica.ControlRollAngle controlRollAngle1(xAngularSpeedErrorModel1(Kwphi = 3), PID(k = 0.09, Ti = 1.5, Td = 0.03, Add(k1 = 1, k2 = 1, k3 = 1))) annotation(
|
||||
Placement(visible = true, transformation(extent = {{49, -8}, {69, 12}}, rotation = 0)));
|
||||
AIDAModelica.ControlPitchAngle controlPitchAngle1(yAngularSpeedErrorModel1(Kwteta = 1.5), PID1(Add(k1 = 1, k2 = 1, k3 = 1))) annotation(
|
||||
Placement(visible = true, transformation(extent = {{49, 20}, {69, 40}}, rotation = 0)));
|
||||
AIDAModelica.ControlYawAngle controlYawAngle1(PID2(k = 0.05, Ti = 2, Td = 0.03, Add(k1 = 1, k2 = 1, k3 = 1))) annotation(
|
||||
Placement(visible = true, transformation(extent = {{48, -37}, {68, -17}}, rotation = 0)));
|
||||
Modelica.Blocks.Logical.Switch SelectRollConsign annotation(
|
||||
Placement(visible = true, transformation(extent = {{-56, -20}, {-36, 0}}, rotation = 0)));
|
||||
Modelica.Blocks.Logical.Switch SelectPitchConsign annotation(
|
||||
Placement(visible = true, transformation(extent = {{-56, 17}, {-36, 37}}, rotation = 0)));
|
||||
Modelica.Blocks.Math.Add computeYawConsign annotation(
|
||||
Placement(transformation(extent = {{-35, -75}, {-15, -55}})));
|
||||
equation
|
||||
connect(SelectRollConsign.u1, AttitudeConsignAP[1]) annotation(
|
||||
Line(points = {{-58, -2}, {-106, -2}, {-106, 43}, {-146, 43}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(SelectRollConsign.u2, SelectedControlMode) annotation(
|
||||
Line(points = {{-58, -10}, {-78, -10}, {-78, 9}, {-144, 9}}, color = {255, 0, 255}, thickness = 0.0625));
|
||||
connect(SelectRollConsign.u3, AttitudeRCConsign[1]) annotation(
|
||||
Line(points = {{-58, -18}, {-94, -18}, {-94, -25}, {-143, -25}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(controlRollAngle1.RollConsign, SelectRollConsign.y) annotation(
|
||||
Line(points = {{49, 7}, {8, 7}, {8, -10}, {-35, -10}}, color = {0, 0, 127}));
|
||||
connect(SelectPitchConsign.u1, AttitudeConsignAP[2]) annotation(
|
||||
Line(points = {{-58, 35}, {-106, 35}, {-106, 43}, {-146, 43}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(SelectPitchConsign.u2, SelectedControlMode) annotation(
|
||||
Line(points = {{-58, 27}, {-78, 27}, {-78, 9}, {-144, 9}}, color = {255, 0, 255}, thickness = 0.0625));
|
||||
connect(SelectPitchConsign.u3, AttitudeRCConsign[2]) annotation(
|
||||
Line(points = {{-58, 19}, {-94, 19}, {-94, -25}, {-143, -25}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(controlPitchAngle1.PitchCosign, SelectPitchConsign.y) annotation(
|
||||
Line(points = {{49, 35}, {22, 35}, {22, 27}, {-35, 27}}, color = {0, 0, 127}));
|
||||
connect(controlYawAngle1.YawConsign, computeYawConsign.y) annotation(
|
||||
Line(points = {{48, -22}, {-9, -22}, {-9, -65}, {-14, -65}}, color = {0, 0, 127}));
|
||||
// la sortie est soit celle caclulée par le contrôleur soit fixée selon la valeur du paramètre Test_CstMomentumActiv et Test_CstMomentumValues
|
||||
MomentumsConsign[3] = if Test_CstMomentumActiv then Test_CstMomentumValues[3] else controlYawAngle1.MomentumZ;
|
||||
MomentumsConsign[2] = if Test_CstMomentumActiv then Test_CstMomentumValues[2] else controlPitchAngle1.MomentumY;
|
||||
MomentumsConsign[1] = if Test_CstMomentumActiv then Test_CstMomentumValues[1] else controlRollAngle1.MomentumX;
|
||||
controlRollAngle1.AngularSpeedX = if Test_open_loop[1] then 0 else AngularSpeed[1] annotation(
|
||||
Line(points = {{36, 18}, {-25, 18}, {-25, 35}, {-30, 35}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
controlRollAngle1.Roll = if Test_open_loop[1] then 0 else Attitude[1] annotation(
|
||||
Line(points = {{36, 23}, {4, 23}, {4, 36}, {-4, 36}}, color = {0, 0, 127}));
|
||||
controlYawAngle1.AngularSpeedZ = if Test_open_loop[3] then 0 else AngularSpeed[3] annotation(
|
||||
Line(points = {{36, -34}, {-25, -34}, {-25, 35}, {-30, 35}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
controlYawAngle1.Yaw = if Test_open_loop[3] then 0 else Attitude[3] annotation(
|
||||
Line(points = {{36, -29}, {2, -29}, {2, 36}, {-4, 36}}, color = {0, 0, 127}));
|
||||
controlPitchAngle1.AngularSpeedY = if Test_open_loop[2] then 0 else AngularSpeed[2] annotation(
|
||||
Line(points = {{36, -8}, {-25, -8}, {-25, 35}, {-30, 35}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
controlPitchAngle1.Pitch = if Test_open_loop[2] then 0 else Attitude[2] annotation(
|
||||
Line(points = {{36, -3}, {2, -3}, {2, 36}, {-4, 36}}, color = {0, 0, 127}));
|
||||
connect(computeYawConsign.u2, RCYawCommand) annotation(
|
||||
Line(points = {{-37, -71}, {-42, -71}, {-55, -71}, {-55, -80}, {-60, -80}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeYawConsign.u1, YawConsign) annotation(
|
||||
Line(points = {{-37, -59}, {-42, -59}, {-55, -59}, {-55, -50}, {-60, -50}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
AttitudeConsignAP(flags = 2),
|
||||
AttitudeRCConsign(flags = 2),
|
||||
YawConsign(flags = 2),
|
||||
AngularSpeed(flags = 2),
|
||||
Attitude(flags = 2),
|
||||
MomentumsConsign(flags = 2),
|
||||
RCYawCommand(flags = 2),
|
||||
SelectedControlMode(flags = 2),
|
||||
controlRollAngle1(RollConsign(flags = 2), Roll(flags = 2), AngularSpeedX(flags = 2), MomentumX(flags = 2), xAngularSpeedErrorModel1(RollConsign(flags = 2), Roll(flags = 2), AngularSpeedX(flags = 2), AngularSpeedXError(flags = 2), ephi(flags = 2), wxd(flags = 2)), PID(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2)))),
|
||||
controlPitchAngle1(PitchCosign(flags = 2), Pitch(flags = 2), AngularSpeedY(flags = 2), MomentumY(flags = 2), yAngularSpeedErrorModel1(PitchCosign(flags = 2), Pitch(flags = 2), AngularSpeedY(flags = 2), AngularSpeedYError(flags = 2), eteta(flags = 2), wyd(flags = 2)), PID1(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2)))),
|
||||
controlYawAngle1(YawConsign(flags = 2), Yaw(flags = 2), AngularSpeedZ(flags = 2), MomentumZ(flags = 2), zAngularSpeedErrorModel1(YawCosign(flags = 2), Yaw(flags = 2), AngularSpeedZ(flags = 2), AngularSpeedZError(flags = 2), eyaw(flags = 2), wzd(flags = 2)), PID2(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2)))),
|
||||
SelectRollConsign(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2)),
|
||||
SelectPitchConsign(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2)),
|
||||
computeYawConsign(u1(flags = 2), u2(flags = 2), y(flags = 2)),
|
||||
Icon(graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 100}, {100, -100}}), Text(textString = "Control Attitude", fillPattern = FillPattern.None, extent = {{-29, 11}, {29, -11}}, origin = {1, 3})}),
|
||||
experiment(StopTime = 30, StartTime = 0, Interval = 0.002, Tolerance = 1e-06),
|
||||
__OpenModelica_simulationFlags(jacobian = "coloredNumerical", s = "dassl", lv = "LOG_STATS"));
|
||||
end AttitudeControl;
|
||||
@@ -0,0 +1,35 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ComputationAccelerationModel "Computation Acceleration Model"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput TotalThrust(quantity = "Mechanics.Rotation.Torque", displayUnit = "Nm") "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-66, -14}, extent = {{-75, 15}, {-35, 55}}), iconTransformation(extent = {{-95, 5}, {-55, 45}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Attitude[3](each quantity = "Mechanics.Rotation.Angle", each displayUnit = "rad") "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-66, 6}, extent = {{-75, 55}, {-35, 95}}), iconTransformation(origin = {-25, 75}, extent = {{-20, -20}, {20, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput DroneAcceleration[3](each quantity = "Mechanics.Translation.Accel", each displayUnit = "m/s²") "'output Real' as connector" annotation(
|
||||
Placement(transformation(origin = {34, 26}, extent = {{65, -15}, {85, 5}}), iconTransformation(extent = {{61.7, -10}, {81.7, 10}})));
|
||||
Modelica.Blocks.Interfaces.RealInput ExternalForce[3] "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-80, -20}, extent = {{-60, -40}, {-20, 0}}), iconTransformation(extent = {{-95, -45}, {-55, -5}})));
|
||||
parameter Real m(quantity = "Basics.Mass", displayUnit = "kg") = 1.8 "Quadcopter mass";
|
||||
parameter Real g(quantity = "Mechanics.Translation.Accel", displayUnit = "m/s²") = 9.8 "Parameter g";
|
||||
parameter Real e3[3] = {0, 0, 1} "Unit vector";
|
||||
Real Reb[3, 3] "From the ABCF to the EFCF rotation matrix";
|
||||
Real Rz[3, 3] "Z rotation matrix";
|
||||
Real Ry[3, 3] "Y rotation matrix";
|
||||
Real Rx[3, 3] "X rotation matrix";
|
||||
equation
|
||||
// enter your equations here
|
||||
Rz = {{cos(Attitude[3]), sin(Attitude[3]), 0}, {-sin(Attitude[3]), cos(Attitude[3]), 0}, {0, 0, 1}};
|
||||
Ry = {{cos(Attitude[2]), 0, -sin(Attitude[2])}, {0, 1, 0}, {sin(Attitude[2]), 0, cos(Attitude[2])}};
|
||||
Rx = {{1, 0, 0}, {0, cos(Attitude[1]), sin(Attitude[1])}, {0, -sin(Attitude[1]), cos(Attitude[1])}};
|
||||
Reb = transpose(Rz) * transpose(Ry) * transpose(Rx);
|
||||
DroneAcceleration = g * e3 - TotalThrust / m * Reb * e3 + ExternalForce / m;
|
||||
annotation(
|
||||
TotalThrust(flags = 2),
|
||||
Attitude(flags = 2),
|
||||
DroneAcceleration(flags = 2),
|
||||
ExternalForce(flags = 2),
|
||||
Icon(coordinateSystem(extent = {{-75, -75}, {75, 75}}, initialScale = 0.1), graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-76.7, 76.7}, {80, -76.7}}), Text(origin = {-6, 4}, extent = {{-12, 6}, {12, -6}}, textString = "%name")}),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end ComputationAccelerationModel;
|
||||
@@ -0,0 +1,17 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ComputationAngularAccelerationModel "Computation Angular Acceleration Model"
|
||||
import Modelica.Math;
|
||||
Modelica.Blocks.Interfaces.RealInput Moments[3](each quantity = "Mechanics.Rotation.Torque", each displayUnit = "Nm") "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-120, 0}, extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-95, -20}, {-55, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput DroneAngularAcceleration[3](each quantity = "Mechanics.Rotation.RotAccel", each displayUnit = "rad/s²") "'output Real' as connector" annotation(
|
||||
Placement(transformation(origin = {110, 0}, extent = {{-10, -10}, {10, 10}}), iconTransformation(extent = {{61.7, -10}, {81.7, 10}})));
|
||||
parameter Real J[3, 3] = {{0.009074, 0, 0}, {0, 0.009074, 0}, {0, 0, 0.013279}} "Diagonal matrix of inertia";
|
||||
Real invJ[3, 3] "Inverse of matrix J";
|
||||
equation
|
||||
// enter your equations here
|
||||
invJ = Modelica.Math.Matrices.inv(J);
|
||||
DroneAngularAcceleration = invJ * Moments;
|
||||
annotation(
|
||||
Icon(coordinateSystem(extent = {{-75, -50}, {75, 50}}, initialScale = 0.1), graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-76.7, 50}, {76.7, -50}}), Text(origin = {-5, 4}, extent = {{-11, 6}, {11, -6}}, textString = "%name")}));
|
||||
end ComputationAngularAccelerationModel;
|
||||
@@ -0,0 +1,27 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ComputationChangeAngleVelocity "Computation ChangeAngle Velocity"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput DronAngularVelocities[3](each quantity = "Mechanics.Rotation.RotVelocity", each displayUnit = "rad/s") "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-120, 60}, extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-95, 5}, {-55, 45}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Attitude[3](each quantity = "Mechanics.Rotation.Angle", each displayUnit = "rad") "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-120, -60}, extent = {{-20, -20}, {20, 20}}), iconTransformation(origin = {-75, -25}, extent = {{-20, -20}, {20, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput ChangeAngleVelocity[3](each quantity = "Mechanics.Rotation.RotVelocity", each displayUnit = "rad/s") "'output Real' as connector" annotation(
|
||||
Placement(transformation(origin = {110, 0}, extent = {{-10, -10}, {10, 10}}), iconTransformation(extent = {{61.7, -10}, {81.7, 10}})));
|
||||
Real W[3, 3] "Matrix W";
|
||||
equation
|
||||
// enter your equations here
|
||||
W[1, 1] = 1;
|
||||
W[1, 2] = tan(Attitude[2]) * sin(Attitude[1]);
|
||||
W[1, 3] = tan(Attitude[2]) * cos(Attitude[1]);
|
||||
W[2, 1] = 0;
|
||||
W[2, 2] = cos(Attitude[1]);
|
||||
W[2, 3] = -sin(Attitude[1]);
|
||||
W[3, 1] = 0;
|
||||
W[3, 2] = sin(Attitude[1]) / cos(Attitude[2]);
|
||||
W[3, 3] = cos(Attitude[1]) * cos(Attitude[2]);
|
||||
ChangeAngleVelocity = W * DronAngularVelocities;
|
||||
annotation(
|
||||
Icon(coordinateSystem(extent = {{-75, -75}, {75, 75}}, initialScale = 0.1), graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-80, 76.7}, {76.7, -76.7}}), Text(origin = {-5, 1}, extent = {{-19, 7}, {19, -7}}, textString = "%name")}));
|
||||
end ComputationChangeAngleVelocity;
|
||||
@@ -0,0 +1,40 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ComputeAltitudeConsign "[SF2.4.1] Compute altitude consign"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput RCVerticalSpeedCommand(quantity = "Mechanics.Translation.Velocity", displayUnit = "m/s") "RC vertical speed consign" annotation(
|
||||
Placement(transformation(origin = {10, 16}, extent = {{-150, 25}, {-110, 65}}), iconTransformation(extent = {{-120, 30}, {-80, 70}})));
|
||||
Modelica.Blocks.Interfaces.RealInput VSpeed(quantity = "Mechanics.Translation.Velocity", displayUnit = "m/s") "Real drone speed feedback" annotation(
|
||||
Placement(transformation(origin = {10, -46}, extent = {{-150, -35}, {-110, 5}}), iconTransformation(extent = {{-120, -70}, {-80, -30}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput AccelerationConsign(quantity = "Mechanics.Translation.Accel", displayUnit = "m/s²") "Drone acceleration consign " annotation(
|
||||
Placement(transformation(origin = {36, -36}, extent = {{65, 25}, {85, 45}}), iconTransformation(extent = {{90, -10}, {110, 10}})));
|
||||
Modelica.Blocks.Continuous.PID PID1(k = 250, Ti = 1.5, Td = 0.02, initType = Modelica.Blocks.Types.Init.NoInit) annotation(
|
||||
Placement(transformation(origin = {8, -36}, extent = {{15, 25}, {35, 45}})));
|
||||
AIDAModelica.SpeedErrorModelSAC speedErrorModelSAC1 annotation(
|
||||
Placement(transformation(origin = {14, -40}, extent = {{-55, 30}, {-35, 50}})));
|
||||
equation
|
||||
connect(speedErrorModelSAC1.SpeedError, PID1.u) annotation(
|
||||
Line(points = {{-21, 0}, {8, 0}, {8, -1}, {21, -1}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(RCVerticalSpeedCommand, speedErrorModelSAC1.SpeedConsign) annotation(
|
||||
Line(points = {{-120, 61}, {-60, 61}, {-60, 0}, {-41, 0}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(VSpeed, speedErrorModelSAC1.Speed) annotation(
|
||||
Line(points = {{-120, -61}, {-31, -61}, {-31, -10}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(PID1.y, AccelerationConsign) annotation(
|
||||
Line(points = {{44, -1}, {111, -1}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
Speed(flags = 2),
|
||||
RCVerticalSpeedCommand(flags = 2),
|
||||
AccelerationConsign(flags = 2),
|
||||
PID1(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2))),
|
||||
speedErrorModelSAC1(SpeedConsign(flags = 2), Speed(flags = 2), SpeedError(flags = 2), vzd(flags = 2), vz(flags = 2), ASE(flags = 2)),
|
||||
Icon(graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 100}, {100, -100}})}),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"),
|
||||
Speed(flags = 2),
|
||||
RCVerticalSpeedCommand(flags = 2),
|
||||
AccelerationConsign(flags = 2),
|
||||
PID1(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2))),
|
||||
speedErrorModelSAC1(SpeedConsign(flags = 2), Speed(flags = 2), SpeedError(flags = 2), vzd(flags = 2), vz(flags = 2), ASE(flags = 2)),
|
||||
Icon(graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 100}, {100, -100}}), Text(origin = {-1, 4}, extent = {{-35, 10}, {35, -10}}, textString = "%name")}, coordinateSystem(initialScale = 0.1)),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end ComputeAltitudeConsign;
|
||||
@@ -0,0 +1,39 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ComputeDroneAngularsVelocities "[SimuD4 DM] Compute drone angulars velocities"
|
||||
Modelica.Blocks.Interfaces.RealInput Moments[3](each quantity = "Mechanics.Rotation.Torque", each displayUnit = "Nm") "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-120, 20}, {-80, 60}}), iconTransformation(extent = {{-95, -20}, {-55, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput DroneAngularVelocities[3](each quantity = "Mechanics.Translation.Velocity", each displayUnit = "m/s") "'output Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{90, 30}, {110, 50}}), iconTransformation(extent = {{61.7, -10}, {81.7, 10}})));
|
||||
ComputationAngularAccelerationModel computationAngularAccelerationModel1 annotation(
|
||||
Placement(transformation(extent = {{-40, 35}, {-25, 45}})));
|
||||
Modelica.Blocks.Continuous.Integrator integrator1 annotation(
|
||||
Placement(transformation(extent = {{40, 60}, {60, 80}})));
|
||||
Modelica.Blocks.Continuous.Integrator integrator2 annotation(
|
||||
Placement(transformation(extent = {{40, 30}, {60, 50}})));
|
||||
Modelica.Blocks.Continuous.Integrator integrator3 annotation(
|
||||
Placement(transformation(extent = {{40, 0}, {60, 20}})));
|
||||
equation
|
||||
connect(computationAngularAccelerationModel1.Moments[:], Moments[:]) annotation(
|
||||
Line(points = {{-40, 40}, {-45, 40}, {-95, 40}, {-100, 40}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator1.u, computationAngularAccelerationModel1.DroneAngularAcceleration[1]) annotation(
|
||||
Line(points = {{38, 70}, {33, 70}, {-20.3, 70}, {-20.3, 40}, {-25.3, 40}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator2.u, computationAngularAccelerationModel1.DroneAngularAcceleration[2]) annotation(
|
||||
Line(points = {{38, 40}, {33, 40}, {-20.3, 40}, {-25.3, 40}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator3.u, computationAngularAccelerationModel1.DroneAngularAcceleration[3]) annotation(
|
||||
Line(points = {{38, 10}, {33, 10}, {-20.3, 10}, {-20.3, 40.3}, {-25.3, 40.3}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator1.y, DroneAngularVelocities[1]) annotation(
|
||||
Line(points = {{61, 70}, {66, 70}, {95, 70}, {95, 40}, {100, 40}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator2.y, DroneAngularVelocities[2]) annotation(
|
||||
Line(points = {{61, 40}, {66, 40}, {95, 40}, {100, 40}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator3.y, DroneAngularVelocities[3]) annotation(
|
||||
Line(points = {{61, 10}, {66, 10}, {95, 10}, {95, 40}, {100, 40}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
Moments(flags = 2),
|
||||
DroneAngularVelocities(flags = 2),
|
||||
integrator1(u(flags = 2), y(flags = 2)),
|
||||
integrator2(u(flags = 2), y(flags = 2)),
|
||||
integrator3(u(flags = 2), y(flags = 2)),
|
||||
Icon(coordinateSystem(extent = {{-75, -50}, {75, 50}}, initialScale = 0.1), graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-76.7, 50}, {76.7, -50}}), Text(origin = {-13, 4}, extent = {{-13, 4}, {13, -4}}, textString = "%name")}),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.001));
|
||||
end ComputeDroneAngularsVelocities;
|
||||
@@ -0,0 +1,47 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ComputeDroneAttitude "[SimuD6 KM] Compute drone attitude"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput DroneAngularVelocities[3](each quantity = "Mechanics.Rotation.RotVelocity", each displayUnit = "rad/s") "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-135, 5}, {-95, 45}}), iconTransformation(extent = {{-95, -20}, {-55, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealInput AttitudeFB[3](each quantity = "Mechanics.Rotation.Angle", each displayUnit = "rad") "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-135, -25}, {-95, 15}}), iconTransformation(origin = {-25, -50}, extent = {{-20, -20}, {20, 20}}, rotation = -270)));
|
||||
Modelica.Blocks.Interfaces.RealOutput Attitude[3](each quantity = "Mechanics.Rotation.Angle", each displayUnit = "rad") "'output Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{75, 5}, {95, 25}}), iconTransformation(extent = {{61.7, -10}, {81.7, 10}})));
|
||||
ComputationChangeAngleVelocity computationChangeAngleVelocity1 annotation(
|
||||
Placement(transformation(extent = {{-60, 10}, {-45, 25}})));
|
||||
Modelica.Blocks.Continuous.Integrator integrator7 annotation(
|
||||
Placement(transformation(extent = {{10, 35}, {30, 55}})));
|
||||
Modelica.Blocks.Continuous.Integrator integrator8 annotation(
|
||||
Placement(transformation(extent = {{10, 5}, {30, 25}})));
|
||||
Modelica.Blocks.Continuous.Integrator integrator9 annotation(
|
||||
Placement(transformation(extent = {{10, -25}, {30, -5}})));
|
||||
equation
|
||||
connect(computationChangeAngleVelocity1.DronAngularVelocities[:], DroneAngularVelocities[:]) annotation(
|
||||
Line(points = {{-60, 20}, {-65, 20}, {-110, 20}, {-110, 25}, {-115, 25}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator7.u, computationChangeAngleVelocity1.ChangeAngleVelocity[1]) annotation(
|
||||
Line(points = {{8, 45}, {3, 45}, {-40.3, 45}, {-40.3, 17.3}, {-45.3, 17.3}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator8.u, computationChangeAngleVelocity1.ChangeAngleVelocity[2]) annotation(
|
||||
Line(points = {{8, 15}, {3, 15}, {-40.3, 15}, {-40.3, 17.3}, {-45.3, 17.3}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator9.u, computationChangeAngleVelocity1.ChangeAngleVelocity[3]) annotation(
|
||||
Line(points = {{8, -15}, {3, -15}, {-40.3, -15}, {-40.3, 17.7}, {-45.3, 17.7}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator7.y, Attitude[1]) annotation(
|
||||
Line(points = {{31, 45}, {36, 45}, {80, 45}, {80, 15}, {85, 15}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator8.y, Attitude[2]) annotation(
|
||||
Line(points = {{31, 15}, {36, 15}, {80, 15}, {85, 15}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator9.y, Attitude[3]) annotation(
|
||||
Line(points = {{31, -15}, {36, -15}, {80, -15}, {80, 15}, {85, 15}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computationChangeAngleVelocity1.Attitude[:], AttitudeFB[:]) annotation(
|
||||
Line(points = {{-60, 15}, {-65, 15}, {-110, 15}, {-110, -5}, {-115, -5}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
DroneAngularVelocities(flags = 2),
|
||||
AttitudeFB(flags = 2),
|
||||
Attitude(flags = 2),
|
||||
computationChangeAngleVelocity1(DronAngularVelocities(flags = 2), Attitude(flags = 2), ChangeAngleVelocity(flags = 2), W(flags = 2)),
|
||||
integrator7(u(flags = 2), y(flags = 2)),
|
||||
integrator8(u(flags = 2), y(flags = 2)),
|
||||
integrator9(u(flags = 2), y(flags = 2)),
|
||||
Icon(coordinateSystem(extent = {{-75, -50}, {75, 50}}, initialScale = 0.1), graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-76.7, 50}, {76.7, -50}}), Text(origin = {-3, 3}, extent = {{-13, 5}, {13, -5}}, textString = "%name")}),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end ComputeDroneAttitude;
|
||||
@@ -0,0 +1,37 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ComputeDronePosition "[SimuD5 KM] Compute drone position"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput DronVelocity[3](each quantity = "Mechanics.Translation.Velocity", each displayUnit = "m/s") "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-125, -15}, {-85, 25}}), iconTransformation(extent = {{-95, -20}, {-55, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput Position[3](each quantity = "Mechanics.Translation.Displace", each displayUnit = "m") "'output Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{50, -5}, {70, 15}}), iconTransformation(extent = {{61.7, -10}, {81.7, 10}})));
|
||||
Modelica.Blocks.Continuous.Integrator integrator10(y_start = -0.5) annotation(
|
||||
Placement(transformation(extent = {{-20, -35}, {0, -15}})));
|
||||
Modelica.Blocks.Continuous.Integrator integrator11(y_start = 39) annotation(
|
||||
Placement(transformation(extent = {{-20, -5}, {0, 15}})));
|
||||
Modelica.Blocks.Continuous.Integrator integrator12 annotation(
|
||||
Placement(transformation(extent = {{-20, 25}, {0, 45}})));
|
||||
equation
|
||||
connect(integrator12.u, DronVelocity[1]) annotation(
|
||||
Line(points = {{-22, 35}, {-27, 35}, {-100, 35}, {-100, 5}, {-105, 5}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator11.u, DronVelocity[2]) annotation(
|
||||
Line(points = {{-22, 5}, {-27, 5}, {-100, 5}, {-105, 5}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator10.u, DronVelocity[3]) annotation(
|
||||
Line(points = {{-22, -25}, {-27, -25}, {-100, -25}, {-100, 5}, {-105, 5}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator12.y, Position[1]) annotation(
|
||||
Line(points = {{1, 35}, {6, 35}, {55, 35}, {55, 5}, {60, 5}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator11.y, Position[2]) annotation(
|
||||
Line(points = {{1, 5}, {6, 5}, {55, 5}, {60, 5}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator10.y, Position[3]) annotation(
|
||||
Line(points = {{1, -25}, {6, -25}, {55, -25}, {55, 5}, {60, 5}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
DronVelocity(flags = 2),
|
||||
Position(flags = 2),
|
||||
integrator10(u(flags = 2), y(flags = 2)),
|
||||
integrator11(u(flags = 2), y(flags = 2)),
|
||||
integrator12(u(flags = 2), y(flags = 2)),
|
||||
Icon(coordinateSystem(extent = {{-75, -50}, {75, 50}}, initialScale = 0.1), graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-76.7, 50}, {76.7, -50}}), Text(origin = {-5, 1}, extent = {{-11, 5}, {11, -5}}, textString = "%name")}),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.001));
|
||||
end ComputeDronePosition;
|
||||
@@ -0,0 +1,57 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ComputeDroneVelocity "[SimuD3 DM] Compute drone velocity"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput TotalThrust(quantity = "Mechanics.Translation.Force", displayUnit = "N") "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-75, 25}, {-35, 65}}), iconTransformation(extent = {{-120, 5}, {-80, 45}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput Accelerations[3] "Accelerations" annotation(
|
||||
Placement(transformation(extent = {{70, -40}, {90, -20}}), iconTransformation(extent = {{90, -35}, {110, -15}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Attitude[3](each quantity = "Mechanics.Rotation.Angle", each displayUnit = "rad") "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-75, -10}, {-35, 30}}), iconTransformation(origin = {0, 50}, extent = {{-20, -20}, {20, 20}}, rotation = -90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput DroneVelocity[3](each quantity = "Mechanics.Translation.Velocity", each displayUnit = "m/s") "'output Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{120, 20}, {140, 40}}), iconTransformation(extent = {{90, 15}, {110, 35}})));
|
||||
Modelica.Blocks.Interfaces.RealInput ExternalForce[3] annotation(
|
||||
Placement(transformation(extent = {{-75, -40}, {-35, 0}}), iconTransformation(extent = {{-120, -45}, {-80, -5}})));
|
||||
ComputationAccelerationModel computationAccelerationModel1 annotation(
|
||||
Placement(transformation(extent = {{5, 20}, {20, 35}})));
|
||||
Modelica.Blocks.Continuous.Integrator integrator4 annotation(
|
||||
Placement(transformation(extent = {{70, -10}, {90, 10}})));
|
||||
Modelica.Blocks.Continuous.Integrator integrator5 annotation(
|
||||
Placement(transformation(extent = {{70, 20}, {90, 40}})));
|
||||
Modelica.Blocks.Continuous.Integrator integrator6 annotation(
|
||||
Placement(transformation(extent = {{70, 50}, {90, 70}})));
|
||||
equation
|
||||
connect(computationAccelerationModel1.Attitude[:], Attitude) annotation(
|
||||
Line(points = {{10, 35}, {10, 40}, {-20, 40}, {-20, 10}, {-50, 10}, {-55, 10}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computationAccelerationModel1.TotalThrust, TotalThrust) annotation(
|
||||
Line(points = {{5, 30}, {0, 30}, {-50, 30}, {-50, 45}, {-55, 45}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator6.u, computationAccelerationModel1.DroneAcceleration[1]) annotation(
|
||||
Line(points = {{68, 60}, {63, 60}, {24.7, 60}, {24.7, 27.3}, {19.7, 27.3}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator5.u, computationAccelerationModel1.DroneAcceleration[2]) annotation(
|
||||
Line(points = {{68, 30}, {63, 30}, {24.7, 30}, {24.7, 27.3}, {19.7, 27.3}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator4.u, computationAccelerationModel1.DroneAcceleration[3]) annotation(
|
||||
Line(points = {{68, 0}, {63, 0}, {24.7, 0}, {24.7, 27.7}, {19.7, 27.7}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator6.y, DroneVelocity[1]) annotation(
|
||||
Line(points = {{91, 60}, {96, 60}, {125, 60}, {125, 30}, {130, 30}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator5.y, DroneVelocity[2]) annotation(
|
||||
Line(points = {{91, 30}, {96, 30}, {125, 30}, {130, 30}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(integrator4.y, DroneVelocity[3]) annotation(
|
||||
Line(points = {{91, 0}, {96, 0}, {125, 0}, {125, 30}, {130, 30}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computationAccelerationModel1.ExternalForce[:], ExternalForce[:]) annotation(
|
||||
Line(points = {{5, 25}, {0, 25}, {-1, -20}, {-50, -20}, {-55, -20}}, color = {0, 0, 127}, thickness = 0.0625),
|
||||
AutoRoute = false);
|
||||
connect(computationAccelerationModel1.DroneAcceleration[:], Accelerations[:]) annotation(
|
||||
Line(points = {{19.7, 27.3}, {24.7, 27.3}, {25, -30}, {75, -30}, {80, -30}}, color = {0, 0, 127}, thickness = 0.0625),
|
||||
AutoRoute = false);
|
||||
annotation(
|
||||
TotalThrust(flags = 2),
|
||||
Attitude(flags = 2),
|
||||
DroneVelocity(flags = 2),
|
||||
computationAccelerationModel1(TotalThrust(flags = 2), Attitude(flags = 2), DroneAcceleration(flags = 2), ExternalForce(flags = 2)),
|
||||
integrator4(u(flags = 2), y(flags = 2)),
|
||||
integrator5(u(flags = 2), y(flags = 2)),
|
||||
integrator6(u(flags = 2), y(flags = 2)),
|
||||
Icon(coordinateSystem(extent = {{-100, -50}, {100, 50}}, initialScale = 0.1), graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 53.3}, {103.3, -53.3}}), Text(origin = {-5, -3}, extent = {{-15, 5}, {15, -5}}, textString = "%name")}),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end ComputeDroneVelocity;
|
||||
@@ -0,0 +1,28 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ComputeMoments "[SimuD2 CEM] Compute moments"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput Motor1AngularVelocity(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-95, 55}, {-55, 95}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Motor2AngularVelocity(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-95, 5}, {-55, 45}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Motor3AngularVelocity(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-95, -45}, {-55, -5}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Motor4AngularVelocity(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-95, -95}, {-55, -55}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput Moments[3](each quantity = "Mechanics.Rotation.Torque", each displayUnit = "Nm") "'output Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-10, -10}, {10, 10}}), iconTransformation(extent = {{65, -35}, {85, -15}})));
|
||||
parameter Real d(quantity = "Basics.Length", displayUnit = "m") = 0.33 "Distance from body centre mass to motor centre mass";
|
||||
parameter Real cT(quantity = "Mechanics.Translation.Force", displayUnit = "N") = 3.438e-7 "Parameter cT";
|
||||
parameter Real coef_cT(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") = 0.10471975511965977 "Parameter";
|
||||
parameter Real cM(quantity = "Mechanics.Rotation.Torque", displayUnit = "Nm") = 5.7e-9 "Parameter cM";
|
||||
parameter Real coef_cM(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") = 0.10471975511965977 "Parameter";
|
||||
equation
|
||||
// enter your equations here
|
||||
Moments[1] = d * (cT / coef_cT ^ 2) * (sqrt(2) / 2) * (Motor1AngularVelocity ^ 2 - Motor2AngularVelocity ^ 2 - Motor3AngularVelocity ^ 2 + Motor4AngularVelocity ^ 2);
|
||||
Moments[2] = d * (cT / coef_cT ^ 2) * (sqrt(2) / 2) * (Motor1AngularVelocity ^ 2 + Motor2AngularVelocity ^ 2 - Motor3AngularVelocity ^ 2 - Motor4AngularVelocity ^ 2);
|
||||
Moments[3] = cM / coef_cM ^ 2 * (Motor1AngularVelocity ^ 2 - Motor2AngularVelocity ^ 2 + Motor3AngularVelocity ^ 2 - Motor4AngularVelocity ^ 2);
|
||||
annotation(
|
||||
Icon(coordinateSystem(extent = {{-75, -125}, {75, 125}}, initialScale = 0.1), graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-76.7, 126.7}, {73.3, -126.7}}), Text(origin = {-6, -6}, extent = {{-16, 8}, {16, -8}}, textString = "%name")}));
|
||||
end ComputeMoments;
|
||||
@@ -0,0 +1,40 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ComputeMotorRate "[SF2.5] Compute thrust"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
import Modelica.Math;
|
||||
Modelica.Blocks.Interfaces.RealInput TotalThrust(quantity = "Mechanics.Translation.Force", displayUnit = "N") "Desired total thrust " annotation(
|
||||
Placement(transformation(origin = {-120, 68}, extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-120, 55}, {-80, 95}})));
|
||||
Modelica.Blocks.Interfaces.RealInput MomentumConsign[3](each quantity = "Mechanics.Rotation.Torque", each displayUnit = "Nm") "Desired momentums consign" annotation(
|
||||
Placement(transformation(origin = {-120, -52}, extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-120, -95}, {-80, -55}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput Motor1Rate(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "Desired angular speed of 1 motor" annotation(
|
||||
Placement(transformation(origin = {110, 84}, extent = {{-10, -10}, {10, 10}}), iconTransformation(extent = {{90, 65}, {110, 85}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput Motor2Rate(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "Desired angular speed of 2 motor" annotation(
|
||||
Placement(transformation(origin = {110, 44}, extent = {{-10, -10}, {10, 10}}), iconTransformation(extent = {{90, 15}, {110, 35}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput Motor3Rate(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "Desired angular speed of 3 motor " annotation(
|
||||
Placement(transformation(origin = {110, -36}, extent = {{-10, -10}, {10, 10}}), iconTransformation(extent = {{90, -35}, {110, -15}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput Motor4Rate(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "Desired angular speed of 4 motor" annotation(
|
||||
Placement(transformation(origin = {110, -76}, extent = {{-10, -10}, {10, 10}}), iconTransformation(extent = {{90, -85}, {110, -65}})));
|
||||
Real M4[4, 4] "Control effectiveness model matrix M";
|
||||
parameter Real d(quantity = "Basics.Length", displayUnit = "m") = 0.33 "Parameter d";
|
||||
parameter Real cT(quantity = "Mechanics.Translation.Force", displayUnit = "N") = 3.438e-7 "Parameter cT";
|
||||
parameter Real coef_cT(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") = 0.10471975511965977 "coefficient cT";
|
||||
parameter Real cM(quantity = "Mechanics.Rotation.Torque", displayUnit = "Nm") = 5.7e-9 "Parameter cM";
|
||||
parameter Real coef_cM(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") = 0.10471975511965977 "coefficient cM";
|
||||
Real AngVelVector[4](each quantity = "Mechanics.Rotation.RotVelocity", each displayUnit = "rpm") "Vector of desired angular velocities";
|
||||
Real TMomVector[4] "Totat thust and moments vector";
|
||||
Real ParamCosSin "Parameter Cos Sin 45";
|
||||
equation
|
||||
// enter your equations here
|
||||
ParamCosSin = sqrt(2)/2;
|
||||
TMomVector = {TotalThrust, MomentumConsign[1], MomentumConsign[2], MomentumConsign[3]};
|
||||
M4 = {{cT/coef_cT^2, cT/coef_cT^2, cT/coef_cT^2, cT/coef_cT^2}, {d*(cT/coef_cT^2)*ParamCosSin, -d*(cT/coef_cT^2)*ParamCosSin, -d*(cT/coef_cT^2)*ParamCosSin, d*(cT/coef_cT^2)*ParamCosSin}, {d*(cT/coef_cT^2)*ParamCosSin, d*(cT/coef_cT^2)*ParamCosSin, -d*(cT/coef_cT^2)*ParamCosSin, -d*(cT/coef_cT^2)*ParamCosSin}, {cM/coef_cM^2, -cM/coef_cM^2, cM/coef_cM^2, -cM/coef_cM^2}};
|
||||
M4*AngVelVector = TMomVector;
|
||||
Motor1Rate = sqrt(abs(AngVelVector[1]));
|
||||
Motor2Rate = sqrt(abs(AngVelVector[2]));
|
||||
Motor3Rate = sqrt(abs(AngVelVector[3]));
|
||||
Motor4Rate = sqrt(abs(AngVelVector[4]));
|
||||
annotation(
|
||||
Icon(coordinateSystem(extent = {{-100, -125}, {100, 125}}), graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 126.7}, {103.3, -126.7}}), Text(textString = "%name", fillPattern = FillPattern.None, extent = {{-39, 15}, {39, -15}}, origin = {-9, 5})}));
|
||||
end ComputeMotorRate;
|
||||
@@ -0,0 +1,233 @@
|
||||
within AIDAModelica;
|
||||
model ComputePositionAndTime "Compute drone position and time "
|
||||
Modelica.Blocks.Interfaces.RealOutput Drone_position[3](
|
||||
each quantity="Basics.Length",
|
||||
each displayUnit="mm") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(extent={{90,40},{110,60}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput Time(
|
||||
quantity="Basics.Time",
|
||||
displayUnit="s") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(extent={{90,-10},{110,10}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Measured_positioning_signal[4] "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(extent={{-120,30},{-80,70}})));
|
||||
algorithm
|
||||
equation
|
||||
// enter your equations here
|
||||
Drone_position[1] = Measured_positioning_signal[1];
|
||||
Drone_position[2] = Measured_positioning_signal[2];
|
||||
Drone_position[3] = Measured_positioning_signal[3];
|
||||
Time = Measured_positioning_signal[4];
|
||||
annotation(Icon(graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-100,100},{100,-100}}),
|
||||
Bitmap(
|
||||
imageSource="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
|
||||
Kt+F8EpZ/j9fKh5c+K8EfgAAAABJRU5ErkJggg==",
|
||||
extent={{-76.90000000000001,26.1},{-0.2,76.7}}),
|
||||
Bitmap(
|
||||
imageSource="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
|
||||
A4dnvJ/1vZrtAAAAAElFTkSuQmCC",
|
||||
extent={{-0.3,-83.5},{79.7,-10.2}})}));
|
||||
end ComputePositionAndTime;
|
||||
@@ -0,0 +1,59 @@
|
||||
within AIDAModelica;
|
||||
model ComputeThrustAndAttitudeConsign "[SF2.1.4] Compute thrust and attitude consign"
|
||||
import Modelica.Math;
|
||||
Modelica.Blocks.Interfaces.RealInput AccelerationConsign[3](
|
||||
each quantity="Mechanics.Translation.Accel",
|
||||
each displayUnit="m/s²") "Acceleration consign" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(extent={{-120,30},{-80,70}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Attitude[3](
|
||||
each quantity="Mechanics.Rotation.Angle",
|
||||
each displayUnit="rad") "Real drone attitude feedback " annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(extent={{-120,-70},{-80,-30}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput AttitudeAPConsigns[2](
|
||||
each quantity="Mechanics.Rotation.Angle",
|
||||
each displayUnit="rad") "Desired drone attitude autopilot mode consign" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(extent={{86.7,40},{106.7,60}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput TotalThrustAP(
|
||||
quantity="Mechanics.Translation.Force",
|
||||
displayUnit="N") "Total thrust autopilot mode" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(extent={{90,-60},{110,-40}})));
|
||||
Real HAC[2](
|
||||
each quantity="Mechanics.Translation.Velocity",
|
||||
each displayUnit="m/s") "Horizontal acceleration consign";
|
||||
Real Rpsi[2,2] "Rpsi matrix";
|
||||
Real Apsi[2,2] "Apsi martix";
|
||||
Real InvApsi[2,2] "Inverse Apsi matrix";
|
||||
parameter Real ConstMatr[2,2]={{0, -1}, {1, 0}} "Constant Matrix";
|
||||
parameter Real g(
|
||||
quantity="Mechanics.Translation.Accel",
|
||||
displayUnit="m/s²")=9.8 "Parameter g";
|
||||
parameter Real m(
|
||||
quantity="Basics.Mass",
|
||||
displayUnit="kg")=1.8 "Parameter m";
|
||||
Real AAC(
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
displayUnit="m/s") "Altitude autopilot consign";
|
||||
equation
|
||||
// enter your equations here
|
||||
HAC = {AccelerationConsign[1], AccelerationConsign[2]};
|
||||
Rpsi = {{cos(Attitude[3]), -sin(Attitude[3])}, {sin(Attitude[3]), cos(Attitude[3])}};
|
||||
Apsi = Rpsi * ConstMatr;
|
||||
InvApsi = Modelica.Math.Matrices.inv(Apsi);
|
||||
AttitudeAPConsigns = 1 / g * InvApsi * HAC;
|
||||
AAC = AccelerationConsign[3];
|
||||
TotalThrustAP = if AAC < 0 then -m * AAC else 0;
|
||||
annotation(Icon(graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-100,100},{100,-100}}),
|
||||
Text(
|
||||
textString="%name",
|
||||
fillPattern=FillPattern.None,
|
||||
extent={{-31,10},{31,-10}},
|
||||
origin={-3,4})}));
|
||||
end ComputeThrustAndAttitudeConsign;
|
||||
@@ -0,0 +1,23 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ComputeTotalThrust "[SimuD1 CEM] Compute total thrust"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput Motor1AngularVelocity(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-95, 55}, {-55, 95}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Motor2AngularVelocity(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-95, 5}, {-55, 45}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Motor3AngularVelocity(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-95, -45}, {-55, -5}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Motor4AngularVelocity(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-95, -95}, {-55, -55}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput TotalThrust(quantity = "Mechanics.Translation.Force", displayUnit = "N") "'output Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-10, -10}, {10, 10}}), iconTransformation(extent = {{65, 15}, {85, 35}})));
|
||||
parameter Real cT(quantity = "Mechanics.Translation.Force", displayUnit = "N") = 3.438e-7 "parameter cT";
|
||||
parameter Real coef_cT(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") = 0.10471975511965977 "parameter";
|
||||
equation
|
||||
// enter your equations here
|
||||
TotalThrust = cT / coef_cT ^ 2 * (Motor1AngularVelocity ^ 2 + Motor2AngularVelocity ^ 2 + Motor3AngularVelocity ^ 2 + Motor4AngularVelocity ^ 2);
|
||||
annotation(
|
||||
Icon(coordinateSystem(extent = {{-75, -125}, {75, 125}}, initialScale = 0.1), graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-76.7, 126.7}, {76.7, -126.7}}), Text(origin = {-2, -3}, extent = {{-12, 9}, {12, -9}}, textString = "%name")}));
|
||||
end ComputeTotalThrust;
|
||||
@@ -0,0 +1,57 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model ComputeTotalThrustCA "[SF2.4.2] Compute total thrust"
|
||||
Modelica.Blocks.Interfaces.RealInput AccelerationConsign(
|
||||
quantity="Mechanics.Translation.Accel",
|
||||
displayUnit="m/s²") "Acceleration consign" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(extent={{-120,-20},{-80,20}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput TotalThrustAP(
|
||||
quantity="Mechanics.Translation.Force",
|
||||
displayUnit="N") "Total thrust autopilot mode" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(extent={{90,-10},{110,10}})));
|
||||
parameter Real m(
|
||||
quantity="Basics.Mass",
|
||||
displayUnit="kg")=1.8 "Parameter m";
|
||||
Real AC(
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
displayUnit="m/s") "Altitude consign";
|
||||
parameter Real N=-1 "Acceleration linear threshold";
|
||||
equation
|
||||
// enter your equations here
|
||||
AC = AccelerationConsign;
|
||||
|
||||
//TotalThrustAP =if AC<0 then -m*AC else 0;
|
||||
//to prevent loss of attitude control due to a nul thrust
|
||||
TotalThrustAP =if AC<N then -m*AC else -m*N*exp(1/N*(AC-N));
|
||||
annotation(
|
||||
Icon(graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-100,100},{100,-100}}),
|
||||
Text(
|
||||
textString="* m",
|
||||
fillPattern=FillPattern.None,
|
||||
extent={{-70,26.7},{73.3,-30}}),
|
||||
Line(
|
||||
points={{-3.3,76.7},{-3.3,76.7},{0,-76.7}},
|
||||
color={192,192,192},
|
||||
arrow={Arrow.Filled,Arrow.None}),
|
||||
Line(
|
||||
points={{-1.1,51.1},{-1.1,51.1},{8.4,-104.1}},
|
||||
color={192,192,192},
|
||||
arrow={Arrow.Filled,Arrow.None},
|
||||
origin={24.4,-63.7},
|
||||
rotation=-93),
|
||||
Line(
|
||||
points={{-81.09999999999999,95.59999999999999},{8.9,-47.8},{72.2,-47.8}},
|
||||
origin={-8.9,-18.9})}),
|
||||
experiment(
|
||||
StopTime=1,
|
||||
StartTime=0,
|
||||
Interval=0.002,
|
||||
MaxInterval="0.001"));
|
||||
end ComputeTotalThrustCA;
|
||||
@@ -0,0 +1,33 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model ComputeTotalThrustMM "[SF2.4.2] Compute total thrust"
|
||||
Modelica.Blocks.Interfaces.RealInput SpeedConsign(
|
||||
quantity="Mechanics.Translation.Accel",
|
||||
displayUnit="m/s²") "Speed consign" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(extent={{-120,-20},{-80,20}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput TotalThrustManualConsign(
|
||||
quantity="Mechanics.Translation.Force",
|
||||
displayUnit="N") "Total thrust manual mode" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(extent={{90,-10},{110,10}})));
|
||||
parameter Real g(
|
||||
quantity="Mechanics.Translation.Accel",
|
||||
displayUnit="m/s²")=9.8 "Parameter g";
|
||||
parameter Real m(
|
||||
quantity="Basics.Mass",
|
||||
displayUnit="kg")=1.8 "Parameter m";
|
||||
Real AC(
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
displayUnit="m/s") "Altitude consign";
|
||||
equation
|
||||
// enter your equations here
|
||||
AC = SpeedConsign;
|
||||
TotalThrustManualConsign = m*(g+AC);
|
||||
annotation(Icon(graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-100,100},{100,-100}})}));
|
||||
end ComputeTotalThrustMM;
|
||||
@@ -0,0 +1,33 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ControlAltitude "[SF2.4] Control altitude"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealOutput TotalThrustManual(quantity = "Mechanics.Translation.Force", displayUnit = "N") "Desired total thrust autopilot mode output" annotation(
|
||||
Placement(transformation(origin = {80, -30}, extent = {{20, 20}, {40, 40}}), iconTransformation(origin = {100, 0}, extent = {{-10, -10}, {10, 10}})));
|
||||
Modelica.Blocks.Interfaces.RealInput VSpeed(quantity = "Mechanics.Translation.Velocity", displayUnit = "m/s") "Real drone speed feedback" annotation(
|
||||
Placement(transformation(origin = {-38, -56}, extent = {{-105, -5}, {-65, 35}}), iconTransformation(extent = {{-120, 30}, {-80, 70}})));
|
||||
Modelica.Blocks.Interfaces.RealInput RCVerticalSpeedCommand(quantity = "Mechanics.Translation.Velocity", displayUnit = "m/s") "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-36, 16}, extent = {{-105, 25}, {-65, 65}}), iconTransformation(origin = {-100, -50}, extent = {{-20, -20}, {20, 20}})));
|
||||
ComputeTotalThrustCA computeTotalThrustCA1 annotation(
|
||||
Placement(transformation(origin = {30, -30}, extent = {{-10, 20}, {10, 40}})));
|
||||
ComputeAltitudeConsign computeAltitudeConsign1 annotation(
|
||||
Placement(transformation(origin = {0, -30}, extent = {{-55, 20}, {-35, 40}})));
|
||||
equation
|
||||
connect(computeAltitudeConsign1.VSpeed, VSpeed) annotation(
|
||||
Line(points = {{-55, -5}, {-76, -5}, {-76, -41}, {-123, -41}}, color = {0, 0, 127}));
|
||||
connect(computeTotalThrustCA1.AccelerationConsign, computeAltitudeConsign1.AccelerationConsign) annotation(
|
||||
Line(points = {{20, 0}, {-35, 0}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeAltitudeConsign1.RCVerticalSpeedCommand, RCVerticalSpeedCommand) annotation(
|
||||
Line(points = {{-55, 5}, {-80, 5}, {-80, 61}, {-121, 61}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeTotalThrustCA1.TotalThrustAP, TotalThrustManual) annotation(
|
||||
Line(points = {{40, 0}, {110, 0}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
Speed(flags = 2),
|
||||
TotalThrustManual(flags = 2),
|
||||
RCVerticalSpeedCommand(flags = 2),
|
||||
computeTotalThrustCA1(AccelerationConsign(flags = 2), TotalThrustAP(flags = 2), AC(flags = 2)),
|
||||
computeAltitudeConsign1(RCVerticalSpeedCommand(flags = 2), AccelerationConsign(flags = 2), PID1(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2))), speedErrorModelSAC1(SpeedConsign(flags = 2), Speed(flags = 2), SpeedError(flags = 2), vzd(flags = 2), vz(flags = 2), ASE(flags = 2))),
|
||||
Icon(graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 100}, {100, -100}})}),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end ControlAltitude;
|
||||
@@ -0,0 +1,44 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ControlAltitudeEx "[SF2.4] Control altitude Ex"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealOutput TotalThrustManual(quantity = "Mechanics.Translation.Force", displayUnit = "N") "Desired total thrust autopilot mode output" annotation(
|
||||
Placement(transformation(extent = {{80, -20}, {100, 0}}), iconTransformation(origin = {100, 0}, extent = {{-10, -10}, {10, 10}})));
|
||||
Modelica.Blocks.Interfaces.RealInput VSpeed(quantity = "Mechanics.Translation.Velocity", displayUnit = "m/s") "Real drone speed feedback" annotation(
|
||||
Placement(transformation(extent = {{-145, -15}, {-105, 25}}), iconTransformation(origin = {-50, -100}, extent = {{-20, -20}, {20, 20}}, rotation = 90)));
|
||||
Modelica.Blocks.Interfaces.RealInput RCVerticalSpeedCommand(quantity = "Mechanics.Translation.Velocity", displayUnit = "m/s") "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-145, 35}, {-105, 75}}), iconTransformation(origin = {-100, 0}, extent = {{-20, -20}, {20, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Acceleration(quantity = "Acceleration", displayUnit = "m/s²") "To prevent PID derivation of speed" annotation(
|
||||
Placement(transformation(extent = {{-125, -75}, {-85, -35}}), iconTransformation(origin = {50, -100}, extent = {{-20, -20}, {20, 20}}, rotation = 90)));
|
||||
ComputeTotalThrustCA computeTotalThrustCA1 annotation(
|
||||
Placement(transformation(extent = {{25, -20}, {45, 0}})));
|
||||
AIDAModelica.ComputeAltitudeConsign computeAltitudeConsign1 annotation(
|
||||
Placement(visible = true, transformation(extent = {{-11, 28}, {9, 48}}, rotation = 0)));
|
||||
PID_2 pID_2 annotation(
|
||||
Placement(transformation(extent = {{-15, -20}, {5, 0}})));
|
||||
equation
|
||||
connect(computeAltitudeConsign1.VSpeed, VSpeed) annotation(
|
||||
Line(points = {{-11, 33}, {-120, 33}, {-120, 5}, {-125, 5}}, color = {0, 0, 127}));
|
||||
connect(computeAltitudeConsign1.RCVerticalSpeedCommand, RCVerticalSpeedCommand) annotation(
|
||||
Line(points = {{-11, 43}, {-120, 43}, {-120, 55}, {-125, 55}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeTotalThrustCA1.TotalThrustAP, TotalThrustManual) annotation(
|
||||
Line(points = {{45, -10}, {50, -10}, {85, -10}, {90, -10}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(RCVerticalSpeedCommand, pID_2.Consign) annotation(
|
||||
Line(points = {{-125, 55}, {-120, 55}, {-20, 55}, {-20, -10}, {-15, -10}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(VSpeed, pID_2.u) annotation(
|
||||
Line(points = {{-125, 5}, {-120, 5}, {-120, -25}, {-10, -25}, {-10, -20}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(Acceleration, pID_2.du) annotation(
|
||||
Line(points = {{-105, -55}, {-100, -55}, {0, -55}, {0, -25}, {0, -20}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(pID_2.y, computeTotalThrustCA1.AccelerationConsign) annotation(
|
||||
Line(points = {{6, -10}, {11, -10}, {20, -10}, {25, -10}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
Speed(flags = 2),
|
||||
TotalThrustManual(flags = 2),
|
||||
RCVerticalSpeedCommand(flags = 2),
|
||||
computeTotalThrustCA1(AccelerationConsign(flags = 2), TotalThrustAP(flags = 2), AC(flags = 2)),
|
||||
computeAltitudeConsign1(RCVerticalSpeedCommand(flags = 2), AccelerationConsign(flags = 2), PID1(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2))), speedErrorModelSAC1(SpeedConsign(flags = 2), Speed(flags = 2), SpeedError(flags = 2), vzd(flags = 2), vz(flags = 2), ASE(flags = 2))),
|
||||
Icon(graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 100}, {100, -100}}), Text(origin = {0, 3}, extent = {{-40, 13}, {40, -13}}, textString = "Control Altitude")}, coordinateSystem(initialScale = 0.1)),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"),
|
||||
Diagram(graphics = {Text(origin = {26, 54}, extent = {{-8, 4}, {72, -26}}, textString = "Initial solution, with no acceleration as input"), Text(origin = {32, 27}, extent = {{-10, -3}, {76, 23}}, textString = "Need for speed derivation, bad choice in cosimulation")}));
|
||||
end ControlAltitudeEx;
|
||||
@@ -0,0 +1,54 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ControlDroneNavigation "[SF4] Control drone navigation"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealOutput YawConsign(each quantity = "Mechanics.Rotation.Angle", each displayUnit = "rad") "Yaw consign" annotation(
|
||||
Placement(transformation(origin = {56, 6}, extent = {{45, -15}, {65, 5}}), iconTransformation(origin = {260, 0}, extent = {{90, -10}, {110, 10}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput DronPositionConsign[3](each quantity = "Mechanics.Translation.Displace", each displayUnit = "m") "Dron position consign" annotation(
|
||||
Placement(transformation(origin = {100, 50}, extent = {{0, 20}, {20, 40}}), iconTransformation(origin = {260, 24}, extent = {{90, 40}, {110, 60}})));
|
||||
Modelica.Blocks.Interfaces.BooleanInput APEngagement "'input Boolean' as connector" annotation(
|
||||
Placement(transformation(origin = {-28, -38}, extent = {{-113, -63}, {-73, -23}}), iconTransformation(origin = {-24, 30}, extent = {{-120, 30}, {-80, 70}})));
|
||||
Modelica.Blocks.Interfaces.BooleanOutput SelectedControlMode "'output Boolean' as connector" annotation(
|
||||
Placement(transformation(origin = {90, -46}, extent = {{10, -45}, {30, -25}}), iconTransformation(origin = {260, -24}, extent = {{90, -60}, {110, -40}})));
|
||||
Modelica.Blocks.Interfaces.BooleanInput IndicatorYawConsign "'input Boolean' as connector" annotation(
|
||||
Placement(transformation(origin = {-22, 54}, extent = {{-118, 5}, {-78, 45}}), iconTransformation(origin = {-24, 0}, extent = {{-120, -20}, {-80, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Yaw "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-20, 14}, extent = {{-120, -35}, {-80, 5}}), iconTransformation(origin = {-24, -28}, extent = {{-120, -70}, {-80, -30}})));
|
||||
AIDAModelica.RunFlightPlan runFlightPlan1 annotation(
|
||||
Placement(transformation(extent = {{-42, 19}, {-22, 39}})));
|
||||
Modelica.Blocks.Logical.Switch SelectYawConsign annotation(
|
||||
Placement(transformation(extent = {{10, -15}, {30, 5}})));
|
||||
AIDAModelica.YawConsignProducing yawConsignProducing1 annotation(
|
||||
Placement(transformation(extent = {{-48, -20}, {-28, 0}})));
|
||||
equation
|
||||
connect(yawConsignProducing1.YRC, APEngagement) annotation(
|
||||
Line(points = {{-48, -4}, {-80, -4}, {-80, -81}, {-121, -81}}, color = {255, 0, 255}));
|
||||
connect(SelectYawConsign.u2, APEngagement) annotation(
|
||||
Line(points = {{8, -5}, {-22, -5}, {-22, -81}, {-121, -81}}, color = {255, 0, 255}));
|
||||
connect(APEngagement, SelectedControlMode) annotation(
|
||||
Line(points = {{-121, -81}, {110, -81}}, color = {255, 0, 255}));
|
||||
connect(yawConsignProducing1.Yaw, Yaw) annotation(
|
||||
Line(points = {{-48, -15}, {-87, -15}, {-87, -1}, {-120, -1}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(runFlightPlan1.DronPositionConsign[:], DronPositionConsign[:]) annotation(
|
||||
Line(points = {{-22, 34}, {-4, 34}, {-4, 30}, {10, 30}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(SelectYawConsign.y, YawConsign) annotation(
|
||||
Line(points = {{31, -5}, {71, -5}, {71, 1}, {111, 1}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(yawConsignProducing1.DesiredYaw, SelectYawConsign.u3) annotation(
|
||||
Line(points = {{-28, -10}, {3, -10}, {3, -13}, {8, -13}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(SelectYawConsign.u1, runFlightPlan1.YawConsign) annotation(
|
||||
Line(points = {{8, 3}, {3, 3}, {-17, 3}, {-17, 24}, {-22, 24}}, color = {0, 0, 127}));
|
||||
annotation(
|
||||
selectControlMode1(SelectedControlMode(flags = 2), APEngagement(flags = 2), Main_State(flags = 2)),
|
||||
YawConsign(flags = 2),
|
||||
DronPositionConsign(flags = 2),
|
||||
APEngagement(flags = 2),
|
||||
SelectedControlMode(flags = 2),
|
||||
IndicatorYawConsign(flags = 2),
|
||||
Yaw(flags = 2),
|
||||
runFlightPlan1(DronPositionConsign(flags = 2), YawConsign(flags = 2), X_coordinate_map(u(flags = 2), y(flags = 2)), timeSource1(TimeOutput(flags = 2)), Y_coordinate_map(u(flags = 2), y(flags = 2)), Z_coordinate_map(u(flags = 2), y(flags = 2)), YawAngle(u(flags = 2), y(flags = 2))),
|
||||
SelectYawConsign(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2)),
|
||||
yawConsignProducing1(Yaw(flags = 2), DesiredYaw(flags = 2), YRC(flags = 2), YawOld(flags = 2)),
|
||||
Icon(graphics = {Rectangle(origin = {127, 0},fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-230, 100}, {223, -100}}), Text(origin = {120, 7}, extent = {{-220, 13}, {220, -13}}, textString = "%name", fontSize = 18)}, coordinateSystem(initialScale = 0.1)),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end ControlDroneNavigation;
|
||||
@@ -0,0 +1,54 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ControlEffectivenessModel "Control effectiveness model"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput Motor1AngularVelocity(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "Angular velocity of 1 motor input" annotation(
|
||||
Placement(transformation(extent = {{-135, 40}, {-95, 80}}), iconTransformation(extent = {{-120, 55}, {-80, 95}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Motor2AngularVelocity(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "Angular velocity of 2 motor input" annotation(
|
||||
Placement(transformation(extent = {{-135, 10}, {-95, 50}}), iconTransformation(extent = {{-120, 5}, {-80, 45}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Motor3AngularVelocity(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "Angular velocity of 3 motor input" annotation(
|
||||
Placement(transformation(extent = {{-135, -20}, {-95, 20}}), iconTransformation(extent = {{-120, -45}, {-80, -5}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Motor4AngularVelocity(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "Angular velocity of 4 motor input" annotation(
|
||||
Placement(transformation(extent = {{-135, -50}, {-95, -10}}), iconTransformation(extent = {{-120, -95}, {-80, -55}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput TotalThrust(quantity = "Mechanics.Translation.Force", displayUnit = "N") "Total thrust output" annotation(
|
||||
Placement(transformation(extent = {{55, -35}, {75, -15}}), iconTransformation(extent = {{90, 65}, {110, 85}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput Moments[3](each quantity = "Mechanics.Rotation.Torque", each displayUnit = "Nm") "Moments output" annotation(
|
||||
Placement(transformation(extent = {{55, 45}, {75, 65}}), iconTransformation(extent = {{90, -85}, {110, -65}})));
|
||||
ComputeMoments computeMoments1 annotation(
|
||||
Placement(transformation(extent = {{-20, 45}, {-5, 70}})));
|
||||
ComputeTotalThrust computeTotalThrust1 annotation(
|
||||
Placement(transformation(extent = {{-20, -40}, {-5, -15}})));
|
||||
equation
|
||||
connect(computeMoments1.Motor1AngularVelocity, Motor1AngularVelocity) annotation(
|
||||
Line(points = {{-20, 65}, {-25, 65}, {-110, 65}, {-110, 60}, {-115, 60}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeMoments1.Motor2AngularVelocity, Motor2AngularVelocity) annotation(
|
||||
Line(points = {{-20, 60}, {-25, 60}, {-110, 60}, {-110, 30}, {-115, 30}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeMoments1.Motor3AngularVelocity, Motor3AngularVelocity) annotation(
|
||||
Line(points = {{-20, 55}, {-25, 55}, {-110, 55}, {-110, 0}, {-115, 0}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeMoments1.Motor4AngularVelocity, Motor4AngularVelocity) annotation(
|
||||
Line(points = {{-20, 50}, {-25, 50}, {-110, 50}, {-110, -30}, {-115, -30}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeTotalThrust1.Motor1AngularVelocity, Motor1AngularVelocity) annotation(
|
||||
Line(points = {{-20, -20}, {-25, -20}, {-110, -20}, {-110, 60}, {-115, 60}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeTotalThrust1.Motor2AngularVelocity, Motor2AngularVelocity) annotation(
|
||||
Line(points = {{-20, -25}, {-25, -25}, {-110, -25}, {-110, 30}, {-115, 30}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeTotalThrust1.Motor3AngularVelocity, Motor3AngularVelocity) annotation(
|
||||
Line(points = {{-20, -30}, {-25, -30}, {-110, -30}, {-110, 0}, {-115, 0}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeTotalThrust1.Motor4AngularVelocity, Motor4AngularVelocity) annotation(
|
||||
Line(points = {{-20, -35}, {-25, -35}, {-110, -35}, {-110, -30}, {-115, -30}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeMoments1.Moments[:], Moments[:]) annotation(
|
||||
Line(points = {{-5, 55}, {0, 55}, {60, 55}, {65, 55}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeTotalThrust1.TotalThrust, TotalThrust) annotation(
|
||||
Line(points = {{-5, -25}, {0, -25}, {60, -25}, {65, -25}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
Motor1AngularVelocity(flags = 2),
|
||||
Motor2AngularVelocity(flags = 2),
|
||||
Motor3AngularVelocity(flags = 2),
|
||||
Motor4AngularVelocity(flags = 2),
|
||||
TotalThrust(flags = 2),
|
||||
Moments(flags = 2),
|
||||
computeMoments1(Motor1AngularVelocity(flags = 2), Motor2AngularVelocity(flags = 2), Motor3AngularVelocity(flags = 2), Motor4AngularVelocity(flags = 2), Moments(flags = 2)),
|
||||
computeTotalThrust1(Motor1AngularVelocity(flags = 2), Motor2AngularVelocity(flags = 2), Motor3AngularVelocity(flags = 2), Motor4AngularVelocity(flags = 2), TotalThrust(flags = 2)),
|
||||
Icon(coordinateSystem(extent = {{-100, -125}, {100, 125}}, initialScale = 0.1), graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 106.7}, {100, -106.7}}), Text(origin = {-7, 3}, extent = {{-15, 11}, {15, -11}}, textString = "%name")}),
|
||||
experiment(StopTime = 10, StartTime = 0, Interval = 0.02, MaxInterval = "0.001"));
|
||||
end ControlEffectivenessModel;
|
||||
@@ -0,0 +1,18 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ControlMotor "[SF1.1/2/3/4.1] Control motor"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput DAngVel(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "Desired angular velocity" annotation(
|
||||
Placement(transformation(extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-120, -20}, {-80, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput ComdKD "Desired command of k-ht motor" annotation(
|
||||
Placement(transformation(extent = {{-10, -10}, {10, 10}}), iconTransformation(extent = {{90, -10}, {110, 10}})));
|
||||
parameter Real cR(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") = 626.51735092990043 "Parameter cR";
|
||||
parameter Real wb(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") = 222.30956814352572 "Parameter wb";
|
||||
equation
|
||||
// enter your equations here
|
||||
ComdKD = (DAngVel - wb) / cR;
|
||||
|
||||
annotation(
|
||||
Icon(graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 100}, {103.3, -100}}), Text(origin = {-7, 44}, extent = {{-39, 12}, {39, -12}}, textString = "%name")}, coordinateSystem(initialScale = 0.1)));
|
||||
end ControlMotor;
|
||||
@@ -0,0 +1,38 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ControlPitchAngle "[SF2.3.3] Control pitch angle"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput PitchCosign(quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "Choosed pitch consign" annotation(
|
||||
Placement(transformation(extent = {{-105, 60}, {-65, 100}}), iconTransformation(extent = {{-120, 30}, {-80, 70}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Pitch(quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "Real drone pitch angle feedback" annotation(
|
||||
Placement(transformation(extent = {{-105, 15}, {-65, 55}}), iconTransformation(extent = {{-120, -20}, {-80, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealInput AngularSpeedY(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rad/s") "Real drone angular Y speed feedback" annotation(
|
||||
Placement(transformation(extent = {{-135, -25}, {-95, 15}}), iconTransformation(extent = {{-120, -70}, {-80, -30}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput MomentumY(quantity = "Mechanics.Rotation.Torque", displayUnit = "Nm") "Desired momentum at axe Y" annotation(
|
||||
Placement(transformation(extent = {{107, -19}, {127, 1}}), iconTransformation(extent = {{90, -10}, {110, 10}})));
|
||||
YAngularSpeedErrorModel yAngularSpeedErrorModel1 annotation(
|
||||
Placement(transformation(extent = {{-25, 25}, {-5, 45}})));
|
||||
Modelica.Blocks.Continuous.PID PID1(k = 0.09, Ti = 1.5, Td = 0.03, initType = Modelica.Blocks.Types.Init.InitialState, Add(k1 = -1, k2 = -1, k3 = -1)) annotation(
|
||||
Placement(transformation(extent = {{16, 25}, {36, 45}})));
|
||||
equation
|
||||
connect(AngularSpeedY, yAngularSpeedErrorModel1.AngularSpeedY) annotation(
|
||||
Line(points = {{-115, -5}, {-110, -5}, {-30, -5}, {-30, 30}, {-25, 30}}, color = {0, 0, 127}));
|
||||
connect(PID1.u, yAngularSpeedErrorModel1.AngularSpeedYError) annotation(
|
||||
Line(points = {{14, 35}, {-5.3, 35}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(yAngularSpeedErrorModel1.PitchCosign, PitchCosign) annotation(
|
||||
Line(points = {{-25, 40}, {-80, 40}, {-80, 80}, {-85, 80}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(yAngularSpeedErrorModel1.Pitch, Pitch) annotation(
|
||||
Line(points = {{-25, 35}, {-30, 35}, {-80, 35}, {-85, 35}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(PID1.y, MomentumY) annotation(
|
||||
Line(points = {{37, 35}, {42, 35}, {112, 35}, {112, -9}, {117, -9}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
PitchCosign(flags = 2),
|
||||
Pitch(flags = 2),
|
||||
AngularSpeedY(flags = 2),
|
||||
MomentumY(flags = 2),
|
||||
yAngularSpeedErrorModel1(PitchCosign(flags = 2), Pitch(flags = 2), AngularSpeedY(flags = 2), AngularSpeedYError(flags = 2), eteta(flags = 2), wyd(flags = 2)),
|
||||
PID1(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2))),
|
||||
Icon(graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 100}, {100, -100}}), Text(textString = "%name", fillPattern = FillPattern.None, extent = {{-12, 8}, {12, -8}}, origin = {-4, 0})}),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end ControlPitchAngle;
|
||||
@@ -0,0 +1,73 @@
|
||||
within AIDAModelica;
|
||||
model ControlPosition "[SF2.1.1] Control position"
|
||||
Modelica.Blocks.Interfaces.RealInput DronePositionConsign[3](
|
||||
each quantity="Mechanics.Translation.Displace",
|
||||
each displayUnit="m") "Desired drone position consign" annotation(Placement(
|
||||
transformation(origin = {-120, -60}, extent = {{-20, -20}, {20, 20}}),
|
||||
iconTransformation(extent={{-120,-20},{-80,20}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Position[3](
|
||||
each quantity="Mechanics.Translation.Displace",
|
||||
each displayUnit="m") "Real drone position feedback" annotation(Placement(
|
||||
transformation(origin = {-120, 60}, extent = {{-20, -20}, {20, 20}}),
|
||||
iconTransformation(
|
||||
origin={0,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput NavigationSpeedConsign[3](
|
||||
each quantity="Mechanics.Translation.Velocity",
|
||||
each displayUnit="m/s") "Desired drone speed consign" annotation(Placement(
|
||||
transformation(origin = {110, 0}, extent = {{-10, -10}, {10, 10}}),
|
||||
iconTransformation(extent={{85,-15},{115,15}})));
|
||||
Real DHP[2](
|
||||
each quantity="Mechanics.Translation.Displace",
|
||||
each displayUnit="m") "Desired horizontal position of the drone";
|
||||
Real HP[2](
|
||||
each quantity="Mechanics.Translation.Displace",
|
||||
each displayUnit="m") "Real horizontal position of the drone";
|
||||
Real DZP(
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "Desired altitude position";
|
||||
Real ZP(
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "Real altitude position";
|
||||
Real HNSC[2](
|
||||
each quantity="Mechanics.Translation.Velocity",
|
||||
each displayUnit="m/s") "Horizontal Navigation Speed Consign";
|
||||
Real ASC(
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
displayUnit="m/s") "AltitudeSpeedConsign";
|
||||
parameter Real Kph[2,2]={{1,0},{0,1}} "Proportional regulator gain attitude chanel";
|
||||
parameter Real kpz=1.5 "Proportional regulator gain altitude chanel";
|
||||
equation
|
||||
// enter your equations here
|
||||
DHP = {DronePositionConsign[1],DronePositionConsign[2]};
|
||||
HP = {Position[1],Position[2]};
|
||||
HNSC = Kph*(DHP-HP);
|
||||
DZP = DronePositionConsign[3];
|
||||
ZP = Position[3];
|
||||
ASC = kpz*(DZP-ZP);
|
||||
NavigationSpeedConsign = {HNSC[1],HNSC[2],ASC};
|
||||
annotation(Icon(graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-100,100},{100,-100}}),
|
||||
Ellipse(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-35,37},{35,-33}}),
|
||||
Text(
|
||||
textString="+",
|
||||
fillPattern=FillPattern.None,
|
||||
extent={{-33.8,17},{-0.4,-19.6}}),
|
||||
Text(
|
||||
textString="-",
|
||||
fillPattern=FillPattern.None,
|
||||
extent={{-15,-6.6},{18.4,-43.2}}),
|
||||
Text(
|
||||
textString="kh/kz",
|
||||
fillPattern=FillPattern.None,
|
||||
extent={{33.5,30.5},{93.5,-22.9}}),
|
||||
Line(points={{-36.7,0},{-86.7,0.3}}),
|
||||
Line(points={{0,-83.3},{0,-31.7}})}));
|
||||
end ControlPosition;
|
||||
@@ -0,0 +1,48 @@
|
||||
within AIDAModelica;
|
||||
model ControlPositionSAC "[SF2.1.1] Control position SAC"
|
||||
Modelica.Blocks.Interfaces.RealInput DronePositionConsign[3](
|
||||
each quantity="Mechanics.Translation.Displace",
|
||||
each displayUnit="m") "Desired drone position consign" annotation(Placement(
|
||||
transformation(origin = {-122, -60}, extent = {{-20, -20}, {20, 20}}),
|
||||
iconTransformation(extent={{-120,-20},{-80,20}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Position[3](
|
||||
each quantity="Mechanics.Translation.Displace",
|
||||
each displayUnit="m") "Real drone position feedback" annotation(Placement(
|
||||
transformation(origin = {-120, 0}, extent = {{-20, -20}, {20, 20}}),
|
||||
iconTransformation(extent={{-120,-70},{-80,-30}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput NavigationSpeedConsign[3](
|
||||
each quantity="Mechanics.Translation.Velocity",
|
||||
each displayUnit="m/s") "Desired drone speed consign" annotation(Placement(
|
||||
transformation(origin = {110, 0}, extent = {{-10, -10}, {10, 10}}),
|
||||
iconTransformation(extent={{90,-10},{110,10}})));
|
||||
Modelica.Blocks.Interfaces.RealInput RCVErticalSpeedCommand(
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
displayUnit="m/s") "RC vertical speed consign" annotation(Placement(
|
||||
transformation(origin = {-120, 60}, extent = {{-20, -20}, {20, 20}}),
|
||||
iconTransformation(extent={{-120,30},{-80,70}})));
|
||||
Real DHP[2](
|
||||
each quantity="Mechanics.Translation.Displace",
|
||||
each displayUnit="m") "Desired horizontal position of the drone";
|
||||
Real HP[2](
|
||||
each quantity="Mechanics.Translation.Displace",
|
||||
each displayUnit="m") "Real horizontal position of the drone";
|
||||
Real HNSC[2](
|
||||
each quantity="Mechanics.Translation.Velocity",
|
||||
each displayUnit="m/s") "Horizontal Navigation Speed Consign";
|
||||
Real ASC(
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
displayUnit="m/s") "AltitudeSpeedConsign";
|
||||
parameter Real Kph[2,2]={{1,0},{0,1}} "Proportional regulator gain attitude chanel";
|
||||
equation
|
||||
// enter your equations here
|
||||
DHP = {DronePositionConsign[1],DronePositionConsign[2]};
|
||||
HP = {Position[1],Position[2]};
|
||||
HNSC = Kph*(DHP-HP);
|
||||
ASC = RCVErticalSpeedCommand;
|
||||
NavigationSpeedConsign = {HNSC[1],HNSC[2],ASC};
|
||||
annotation(Icon(graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-100,100},{100,-100}})}));
|
||||
end ControlPositionSAC;
|
||||
@@ -0,0 +1,262 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ControlPositionV0 "ControlPosition_Modelica.ism"
|
||||
Modelica.Blocks.Interfaces.RealOutput Position_command[3] "'output Real' as connector" annotation(
|
||||
Placement(transformation(origin = {60, -60}, extent = {{40, 50}, {60, 70}}), iconTransformation(extent = {{90, -10}, {110, 10}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Drone_position_consign[3] "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-140, 40}, {-100, 80}}), iconTransformation(extent = {{-120, -70}, {-80, -30}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Drone_position[3] "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-54, -64}, extent = {{-85, -15}, {-45, 25}}), iconTransformation(extent = {{-120, 30}, {-80, 70}})));
|
||||
Modelica.Blocks.Continuous.LimPID PID[3](controllerType = Modelica.Blocks.Types.SimpleController.P, k = {1.26, 1.26, 1.26}, Ti = {0.5, 0.5, 0.5}, Td = {0.1, 0.1, 0.1}, yMax = {1000, 1000, 1000}, initType = Modelica.Blocks.Types.InitPID.SteadyState, limitsAtInit = {false, false, false}, y_start = {1, 58, 0}) "P, PI, PD, and PID controller with limited output, anti-windup compensation and setpoint weighting" annotation(
|
||||
Placement(transformation(origin = {20, -60}, extent = {{-30, 50}, {-10, 70}})));
|
||||
equation
|
||||
connect(PID.y, Position_command[:]) annotation(
|
||||
Line(points = {{-9, 60}, {-4, 60}, {45, 60}, {50, 60}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(Drone_position_consign[:], PID.u_s) annotation(
|
||||
Line(points = {{-120, 60}, {-115, 60}, {-37, 60}, {-32, 60}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(Drone_position[:], PID.u_m) annotation(
|
||||
Line(points = {{-65, 5}, {-60, 5}, {-20, 5}, {-20, 43}, {-20, 48}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
Icon(graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 100}, {100, -100}}), Bitmap(imageSource = "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
|
||||
9jUAAAAASUVORK5CYII=", extent = {{-100, -60.9}, {100, 60.9}})}),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end ControlPositionV0;
|
||||
@@ -0,0 +1,38 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ControlRollAngle "[SF2.3.4] Control roll angle"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput RollConsign(quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "Choosed roll consign" annotation(
|
||||
Placement(transformation(extent = {{-130, 45}, {-90, 85}}), iconTransformation(extent = {{-120, 30}, {-80, 70}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Roll(quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "Real drone roll angle feedback" annotation(
|
||||
Placement(transformation(extent = {{-125, 10}, {-85, 50}}), iconTransformation(extent = {{-120, -20}, {-80, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealInput AngularSpeedX(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rad/s") "Real drone angular X speed feedback" annotation(
|
||||
Placement(transformation(extent = {{-125, -15}, {-85, 25}}), iconTransformation(extent = {{-120, -70}, {-80, -30}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput MomentumX(quantity = "Mechanics.Rotation.Torque", displayUnit = "Nm") "Desired momentum at axe X" annotation(
|
||||
Placement(transformation(extent = {{60, 20}, {80, 40}}), iconTransformation(extent = {{86.7, -10}, {106.7, 10}})));
|
||||
XAngularSpeedErrorModel xAngularSpeedErrorModel1(Kwphi = 1) "X angular speed error calculation model" annotation(
|
||||
Placement(transformation(extent = {{-30, 20}, {-10, 40}})));
|
||||
Modelica.Blocks.Continuous.PID PID(k = 0.09, Ti = 1.5, Td = 0.03, initType = Modelica.Blocks.Types.Init.InitialState, Add(k1 = -1, k2 = -1, k3 = -1)) annotation(
|
||||
Placement(transformation(extent = {{20, 20}, {40, 40}})));
|
||||
equation
|
||||
connect(PID.y, MomentumX) annotation(
|
||||
Line(points = {{41, 30}, {46, 30}, {65, 30}, {70, 30}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(xAngularSpeedErrorModel1.RollConsign, RollConsign) annotation(
|
||||
Line(points = {{-30, 35}, {-35, 35}, {-105, 35}, {-105, 65}, {-110, 65}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(xAngularSpeedErrorModel1.Roll, Roll) annotation(
|
||||
Line(points = {{-30, 30}, {-35, 30}, {-100, 30}, {-105, 30}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(xAngularSpeedErrorModel1.AngularSpeedX, AngularSpeedX) annotation(
|
||||
Line(points = {{-30, 25}, {-35, 25}, {-100, 25}, {-100, 5}, {-105, 5}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(xAngularSpeedErrorModel1.AngularSpeedXError, PID.u) annotation(
|
||||
Line(points = {{-10.3, 30}, {-5.3, 30}, {13, 30}, {18, 30}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
RollConsign(flags = 2),
|
||||
Roll(flags = 2),
|
||||
AngularSpeedX(flags = 2),
|
||||
MomentumX(flags = 2),
|
||||
xAngularSpeedErrorModel1(RollConsign(flags = 2), Roll(flags = 2), AngularSpeedX(flags = 2), AngularSpeedXError(flags = 2), ephi(flags = 2), wxd(flags = 2)),
|
||||
PID(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2))),
|
||||
Icon(graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 100}, {100, -100}}), Text(origin = {19, -5}, extent = {{-45, 19}, {1, 1}}, textString = "%name")}, coordinateSystem(initialScale = 0.1)),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end ControlRollAngle;
|
||||
@@ -0,0 +1,49 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ControlSpeed "[SF2.1.3] Control Speed"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput SpeedConsign[3](each quantity = "Mechanics.Translation.Velocity", each displayUnit = "m/s") "Choosed drone speed consign " annotation(
|
||||
Placement(transformation(extent = {{-120, 30}, {-80, 70}}), iconTransformation(extent = {{-120, 30}, {-80, 70}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Speed[3](each quantity = "Mechanics.Translation.Velocity", each displayUnit = "m/s") "Real drone speed feedback" annotation(
|
||||
Placement(visible = true,transformation(extent = {{-122, -28}, {-82, 12}}, rotation = 0), iconTransformation(extent = {{-120, -70}, {-80, -30}}, rotation = 0)));
|
||||
Modelica.Blocks.Interfaces.RealOutput AccelerationConsign[3](each quantity = "Mechanics.Translation.Accel", each displayUnit = "m/s²") "Drone acceleration consign " annotation(
|
||||
Placement(transformation(extent = {{65, 20}, {85, 40}}), iconTransformation(extent = {{90, -10}, {110, 10}})));
|
||||
AIDAModelica.SpeedErrorModel speedErrorModel1 annotation(
|
||||
Placement(visible = true, transformation(extent = {{-60, 22}, {-40, 42}}, rotation = 0)));
|
||||
Modelica.Blocks.Continuous.PID PID(Td = 1.5, Ti = 8, initType = Modelica.Blocks.Types.Init.InitialState, k = 1.5) "PID-controller in additive description form" annotation(
|
||||
Placement(transformation(extent = {{15, 50}, {35, 70}})));
|
||||
Modelica.Blocks.Continuous.PID PID2(Td = 1.5, Ti = 8, initType = Modelica.Blocks.Types.Init.InitialState, k = 1.5) annotation(
|
||||
Placement(transformation(extent = {{15, 20}, {35, 40}})));
|
||||
Modelica.Blocks.Continuous.PID PID1(Td = 1, Ti = 3, initType = Modelica.Blocks.Types.Init.InitialState, k = 1.8) annotation(
|
||||
Placement(transformation(extent = {{15, -10}, {35, 10}})));
|
||||
equation
|
||||
connect(PID1.u, speedErrorModel1.SpeedError[3]) annotation(
|
||||
Line(points = {{14, 0}, {-40, 0}, {-40, 32}}, color = {0, 0, 127}));
|
||||
connect(PID2.u, speedErrorModel1.SpeedError[2]) annotation(
|
||||
Line(points = {{14, 30}, {-15, 30}, {-15, 32}, {-40, 32}}, color = {0, 0, 127}));
|
||||
connect(PID.u, speedErrorModel1.SpeedError[1]) annotation(
|
||||
Line(points = {{14, 60}, {-40, 60}, {-40, 32}}, color = {0, 0, 127}));
|
||||
connect(speedErrorModel1.Speed, Speed) annotation(
|
||||
Line(points = {{-50, 22}, {-98, 22}, {-98, -8}, {-102, -8}}, color = {0, 0, 127}));
|
||||
connect(speedErrorModel1.SpeedConsign, SpeedConsign) annotation(
|
||||
Line(points = {{-60, 32}, {-92, 32}, {-92, 50}, {-100, 50}}, color = {0, 0, 127}));
|
||||
connect(PID1.y, AccelerationConsign[3]) annotation(
|
||||
Line(points = {{36, 0}, {68, 0}, {68, 30}, {76, 30}}, color = {0, 0, 127}));
|
||||
connect(PID2.y, AccelerationConsign[2]) annotation(
|
||||
Line(points = {{36, 30}, {70, 30}, {70, 30}, {76, 30}}, color = {0, 0, 127}));
|
||||
connect(PID.y, AccelerationConsign[1]) annotation(
|
||||
Line(points = {{36, 60}, {68, 60}, {68, 30}, {76, 30}}, color = {0, 0, 127}));
|
||||
// enter your equations here
|
||||
equation
|
||||
annotation(
|
||||
SpeedConsign(flags = 2),
|
||||
Speed(flags = 2),
|
||||
AccelerationConsign(flags = 2),
|
||||
speedErrorModel1(SpeedConsign(flags = 2), Speed(flags = 2), SpeedError(flags = 2), vhd(flags = 2), vh(flags = 2), vzd(flags = 2), vz(flags = 2), HSE(flags = 2), ASE(flags = 2)),
|
||||
PID(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2))),
|
||||
PID2(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2))),
|
||||
PID1(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2))),
|
||||
Icon(graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 100}, {100, -100}}), Text(origin = {-23, 130}, extent = {{-33, 12}, {95, -22}}, textString = "%name")}, coordinateSystem(initialScale = 0.1)),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end ControlSpeed;
|
||||
@@ -0,0 +1,96 @@
|
||||
within AIDAModelica;
|
||||
model ControlYawAngle "[SF2.3.5] Control yaw angle"
|
||||
Modelica.Blocks.Interfaces.RealInput YawConsign(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "Desired momentum at axe Z" annotation(Placement(
|
||||
transformation(extent={{-135,30},{-95,70}}),
|
||||
iconTransformation(extent={{-120,30},{-80,70}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Yaw(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-135,0},{-95,40}}),
|
||||
iconTransformation(extent={{-120,-20},{-80,20}})));
|
||||
Modelica.Blocks.Interfaces.RealInput AngularSpeedZ(
|
||||
quantity="Mechanics.Rotation.RotVelocity",
|
||||
displayUnit="rad/s") "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-135,-30},{-95,10}}),
|
||||
iconTransformation(extent={{-120,-70},{-80,-30}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput MomentumZ(
|
||||
quantity="Mechanics.Rotation.Torque",
|
||||
displayUnit="Nm") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{30,10},{50,30}}),
|
||||
iconTransformation(extent={{86.7,-10},{106.7,10}})));
|
||||
ZAngularSpeedErrorModel zAngularSpeedErrorModel1 "Z angular speed error calculation model" annotation(Placement(transformation(extent={{-55,10},{-35,30}})));
|
||||
Modelica.Blocks.Continuous.PID PID2(
|
||||
k=0.1,
|
||||
Ti=2,
|
||||
Td=0.1,
|
||||
initType=Modelica.Blocks.Types.Init.InitialState,
|
||||
Add(
|
||||
k1=-1,
|
||||
k2=-1,
|
||||
k3=-1)) "PID-controller in additive description form" annotation(Placement(transformation(extent={{-10,10},{10,30}})));
|
||||
equation
|
||||
connect(PID2.y,MomentumZ) annotation(Line(
|
||||
points={{11,20},{16,20},{35,20},{40,20}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
|
||||
|
||||
|
||||
connect(zAngularSpeedErrorModel1.YawCosign,YawConsign) annotation(Line(
|
||||
points={{-55,25},{-60,25},{-110,25},{-110,50},{-115,50}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(zAngularSpeedErrorModel1.Yaw,Yaw) annotation(Line(
|
||||
points={{-55,20},{-60,20},{-110,20},{-115,20}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(zAngularSpeedErrorModel1.AngularSpeedZ,AngularSpeedZ) annotation(Line(
|
||||
points={{-55,15},{-60,15},{-110,15},{-110,-10},{-115,-10}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(PID2.u,zAngularSpeedErrorModel1.AngularSpeedZError) annotation(Line(
|
||||
points={{-12,20},{-17,20},{-30.3,20},{-35.3,20}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
annotation(
|
||||
YawConsign(flags=2),
|
||||
Yaw(flags=2),
|
||||
AngularSpeedZ(flags=2),
|
||||
MomentumZ(flags=2),
|
||||
zAngularSpeedErrorModel1(
|
||||
YawCosign(flags=2),
|
||||
Yaw(flags=2),
|
||||
AngularSpeedZ(flags=2),
|
||||
AngularSpeedZError(flags=2),
|
||||
eyaw(flags=2),
|
||||
wzd(flags=2)),
|
||||
PID2(
|
||||
u(flags=2),
|
||||
y(flags=2),
|
||||
P(
|
||||
u(flags=2),
|
||||
y(flags=2)),
|
||||
I(
|
||||
u(flags=2),
|
||||
y(flags=2)),
|
||||
D(
|
||||
u(flags=2),
|
||||
y(flags=2),
|
||||
x(flags=2)),
|
||||
Gain(
|
||||
u(flags=2),
|
||||
y(flags=2)),
|
||||
Add(
|
||||
u1(flags=2),
|
||||
u2(flags=2),
|
||||
u3(flags=2),
|
||||
y(flags=2))),
|
||||
Icon(graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 100}, {100, -103.3}}), Text(origin = {-4, 0}, extent = {{-16, 8}, {16, -8}}, textString = "%name")}, coordinateSystem(initialScale = 0.1)),
|
||||
experiment(
|
||||
StopTime=1,
|
||||
StartTime=0,
|
||||
Interval=0.002,
|
||||
MaxInterval="0.001"));
|
||||
end ControlYawAngle;
|
||||
@@ -0,0 +1,30 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model CreateMotion "[SF1.1/2/3/4.2] Create motion"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput ThrottleCommandK "Throttle command of k-th motor" annotation(
|
||||
Placement(transformation(extent = {{-125, -10}, {-85, 30}}), iconTransformation(extent = {{-120, -20}, {-80, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput MotorKAngularVelocity(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "Angular velocity of k-th motor" annotation(
|
||||
Placement(transformation(extent = {{75, 0}, {95, 20}}), iconTransformation(extent = {{86.7, -10}, {106.7, 10}})));
|
||||
Modelica.Blocks.Continuous.FirstOrder W(T = 0.2, initType = Modelica.Blocks.Types.Init.InitialState, y_start = 377.59565222) annotation(
|
||||
Placement(transformation(extent = {{30, 0}, {50, 20}})));
|
||||
AIDAModelica.WSSModel wSSModel1 annotation(
|
||||
Placement(transformation(extent = {{-40, 0}, {-20, 20}})));
|
||||
equation
|
||||
connect(wSSModel1.WSSOut, W.u) annotation(
|
||||
Line(points = {{-20, 10}, {-15, 10}, {23, 10}, {28, 10}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
//le moteur tourne dans un seul sens
|
||||
/*MotorKAngularVelocity=max(0,W.y);*/
|
||||
connect(wSSModel1.CmdKIn, ThrottleCommandK) annotation(
|
||||
Line(points = {{-40, 10}, {-45, 10}, {-100, 10}, {-105, 10}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(W.y, MotorKAngularVelocity) annotation(
|
||||
Line(points = {{51, 10}, {56, 10}, {80, 10}, {85, 10}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
ThrottleCommandK(flags = 2),
|
||||
MotorKAngularVelocity(flags = 2),
|
||||
W(u(flags = 2), y(flags = 2)),
|
||||
wSSModel1(CmdKIn(flags = 2), WSSOut(flags = 2)),
|
||||
Icon(coordinateSystem(extent = {{-100, -50}, {100, 50}}, initialScale = 0.1), graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 50}, {100, -50}}), Text(origin = {-4, 0}, extent = {{-36, 8}, {36, -8}}, textString = "%name")}),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end CreateMotion;
|
||||
@@ -0,0 +1,153 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model GeneratePositioningSignal "Generate Positioning Signal"
|
||||
Modelica.Blocks.Interfaces.RealInput Drone_coordinates[3] "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(extent={{-120,-20},{-80,20}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput Positioning_signal[4] "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(extent={{90,-10},{110,10}})));
|
||||
equation
|
||||
// enter your equations here
|
||||
Positioning_signal[1:3] = Drone_coordinates[1:3];
|
||||
Positioning_signal[4] = time;
|
||||
annotation(Icon(graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-100,100},{100,-103.3}}),
|
||||
Bitmap(
|
||||
imageSource="iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAABGdBTUEAALGPC/xhBQAAAAlwSFlz
|
||||
AAAOvAAADrwBlbxySQAAACVJREFUaEPtwTEBAAAAwqD1T+1nCiAAAAAAAAAAAAAAAAAAgKsBOHwA
|
||||
AQdXZHsAAAAASUVORK5CYII=",
|
||||
extent={{-100,-100},{100,100}}),
|
||||
Bitmap(
|
||||
imageSource="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",
|
||||
extent={{-100,-100},{100,100}})}));
|
||||
end GeneratePositioningSignal;
|
||||
@@ -0,0 +1,127 @@
|
||||
within AIDAModelica;
|
||||
model LowLevelFlightControlSystem "Low level Flight Control System"
|
||||
Modelica.Blocks.Interfaces.RealInput DronePositionConsign[3](each quantity = "Mechanics.Translation.Displace", each displayUnit = "m") "Desired position input" annotation(
|
||||
Placement(transformation(extent = {{-55, 84}, {-35, 105}}), iconTransformation(extent = {{-160, 64.5}, {-140, 85.5}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Accelerations[3] "Accelerations in Ground reference" annotation(
|
||||
Placement(visible = true, transformation(extent = {{-135, 35}, {-115, 60}}, rotation = 0), iconTransformation(origin = {95, -125.333}, extent = {{-10, -10.5}, {10, 10.5}}, rotation = 90)));
|
||||
Modelica.Blocks.Interfaces.RealInput AngularSpeed[3](each quantity = "Mechanics.Rotation.RotVelocity", each displayUnit = "rad/s") "Real angular velocities feedback input" annotation(
|
||||
Placement(transformation(extent = {{20, -71}, {40, -50}}), iconTransformation(origin = {-100, -125}, extent = {{-10, -10.5}, {10, 10.5}}, rotation = 90)));
|
||||
Modelica.Blocks.Interfaces.RealInput Position[3](each quantity = "Mechanics.Translation.Displace", each displayUnit = "m") "Real position feedback input" annotation(
|
||||
Placement(transformation(extent = {{-71, 75}, {-51, 96}}), iconTransformation(origin = {0, -125}, extent = {{-10, -10.5}, {10, 10.5}}, rotation = 90)));
|
||||
Modelica.Blocks.Interfaces.RealInput YawConsign(quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "Desired yaw angle input" annotation(
|
||||
Placement(transformation(extent = {{-10, 4}, {10, 25}}), iconTransformation(extent = {{-160, -35.5}, {-140, -14.5}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Attitude[3](each quantity = "Mechanics.Rotation.Angle", each displayUnit = "rad") "Real attitude feedback input" annotation(
|
||||
Placement(transformation(extent = {{40, -96}, {60, -75}}), iconTransformation(origin = {-50, -125}, extent = {{-10, -10.5}, {10, 10.5}}, rotation = 90)));
|
||||
Modelica.Blocks.Interfaces.RealInput Speed[3](each quantity = "Mechanics.Translation.Velocity", each displayUnit = "m/s") "Real velocity feedback input" annotation(
|
||||
Placement(visible = true, transformation(extent = {{-72, 59}, {-52, 80}}, rotation = 0), iconTransformation(origin = {46, -125}, extent = {{-10, -10.5}, {10, 10.5}}, rotation = 90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput ThrottleCommand1 "Command 1 output" annotation(
|
||||
Placement(transformation(extent = {{160, 70}, {180, 90}}), iconTransformation(extent = {{140, 65}, {160, 85}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput ThrottleCommand2 "Command 2 output" annotation(
|
||||
Placement(transformation(extent = {{160, 50}, {180, 70}}), iconTransformation(extent = {{140, 15}, {160, 35}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput ThrottleCommand3 "Command 3 output" annotation(
|
||||
Placement(transformation(extent = {{160, 30}, {180, 50}}), iconTransformation(extent = {{140, -35}, {160, -15}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput ThrottleCommand4 "Command 4 output" annotation(
|
||||
Placement(transformation(extent = {{160, 10}, {180, 30}}), iconTransformation(extent = {{140, -85}, {160, -65}})));
|
||||
Modelica.Blocks.Interfaces.RealInput RCVerticalSpeedCommand(quantity = "Mechanics.Translation.Velocity", displayUnit = "m/s") "RC vertical speed consign" annotation(
|
||||
Placement(transformation(extent = {{-125, 79}, {-105, 100}}), iconTransformation(origin = {-75, 125}, extent = {{-10, -10.5}, {10, 10.5}}, rotation = -90)));
|
||||
Modelica.Blocks.Interfaces.RealInput RCAttitudeCommands[2](each quantity = "Mechanics.Rotation.Angle", each displayUnit = "rad") "RC attitude consign" annotation(
|
||||
Placement(transformation(extent = {{-135, 19}, {-115, 40}}), iconTransformation(origin = {-25, 125}, extent = {{-10, -10.5}, {10, 10.5}}, rotation = -90)));
|
||||
Modelica.Blocks.Interfaces.RealInput RCYawCommand(quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "RC yaw consign" annotation(
|
||||
Placement(transformation(extent = {{-120, -41}, {-100, -20}}), iconTransformation(origin = {25, 125}, extent = {{-10, -10.5}, {10, 10.5}}, rotation = -90)));
|
||||
Modelica.Blocks.Interfaces.BooleanInput SelectedControlMode "Control mode" annotation(
|
||||
Placement(transformation(extent = {{110, -30}, {130, -10}}), iconTransformation(extent = {{-170, -95}, {-130, -55}})));
|
||||
MotorControl motorControl1 annotation(
|
||||
Placement(transformation(extent = {{115, 75}, {135, 85}})));
|
||||
MotorControl motorControl2 "Motor Control Model" annotation(
|
||||
Placement(transformation(extent = {{115, 55}, {135, 65}})));
|
||||
MotorControl motorControl3 annotation(
|
||||
Placement(transformation(extent = {{115, 35}, {135, 45}})));
|
||||
MotorControl motorControl4 annotation(
|
||||
Placement(transformation(extent = {{115, 15}, {135, 25}})));
|
||||
AIDAModelica.AllocationControl allocationControl1 annotation(
|
||||
Placement(visible = true, transformation(extent = {{82, 46}, {102, 71}}, rotation = 0)));
|
||||
AIDAModelica.ControlAltitudeEx controlAltitude1 annotation(
|
||||
Placement(visible = true, transformation(extent = {{1, 53}, {21, 73}}, rotation = 0)));
|
||||
AttitudeControl attitudeControl1 annotation(
|
||||
Placement(transformation(extent = {{45, 20}, {65, 40}})));
|
||||
PositionControl positionControl1 annotation(
|
||||
Placement(transformation(extent = {{-20, 80}, {0, 100}})));
|
||||
equation
|
||||
connect(allocationControl1.SelectedControlMode, SelectedControlMode) annotation(
|
||||
Line(points = {{82, 51}, {75, 51}, {75, -20}, {120, -20}}, color = {255, 0, 255}, thickness = 0.0625));
|
||||
connect(allocationControl1.Motor4Rate, motorControl4.MotorKRate) annotation(
|
||||
Line(points = {{102, 51}, {110, 51}, {110, 20}, {115, 20}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(allocationControl1.Motor1Rate, motorControl1.MotorKRate) annotation(
|
||||
Line(points = {{102, 66}, {110, 66}, {110, 80}, {115, 80}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(allocationControl1.Motor2Rate, motorControl2.MotorKRate) annotation(
|
||||
Line(points = {{102, 61}, {110, 61}, {110, 60}, {115, 60}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(allocationControl1.Motor3Rate, motorControl3.MotorKRate) annotation(
|
||||
Line(points = {{102, 56}, {108.5, 56}, {108.5, 40}, {115, 40}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(attitudeControl1.MomentumsConsign[:], allocationControl1.MomentumsConsign[:]) annotation(
|
||||
Line(points = {{65, 30}, {75, 30}, {75, 56}, {82, 56}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(positionControl1.TotalThrustAP, allocationControl1.TotalThrustAP) annotation(
|
||||
Line(points = {{0, 95}, {75, 95}, {75, 66}, {82, 66}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(controlAltitude1.TotalThrustManual, allocationControl1.TotalThrustManual) annotation(
|
||||
Line(points = {{21, 63}, {54.5, 63}, {54.5, 61}, {82, 61}}, color = {0, 0, 127}));
|
||||
connect(attitudeControl1.RCYawCommand, RCYawCommand) annotation(
|
||||
Line(points = {{46, 36}, {-106, 36}, {-106, -30}, {-110, -30}}, color = {0, 0, 127}));
|
||||
connect(controlAltitude1.Acceleration, Accelerations[3]) annotation(
|
||||
Line(points = {{16, 53}, {16, 47.7}, {-125, 47.7}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(controlAltitude1.VSpeed, Speed[3]) annotation(
|
||||
Line(points = {{6, 53}, {6, 50}, {-23.3, 50}, {-23.3, 69.7}, {-62, 69.7}}, color = {0, 0, 127}));
|
||||
connect(controlAltitude1.RCVerticalSpeedCommand, RCVerticalSpeedCommand) annotation(
|
||||
Line(points = {{1, 63}, {-110, 63}, {-110, 90}, {-114, 90}}, color = {0, 0, 127}));
|
||||
connect(attitudeControl1.SelectedControlMode, SelectedControlMode) annotation(
|
||||
Line(points = {{60, 20}, {60, 15}, {60, -20}, {115, -20}, {120, -20}}, color = {255, 0, 255}, thickness = 0.0625));
|
||||
connect(positionControl1.Position[:], Position[:]) annotation(
|
||||
Line(points = {{-20, 90}, {-25, 90}, {-56, 90}, {-56, 85.7}, {-61, 85.7}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(positionControl1.Speed[:], Speed[:]) annotation(
|
||||
Line(points = {{-20, 85}, {-25, 85}, {-57, 85}, {-57, 69.7}, {-62, 69.7}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(motorControl1.ThrottleCommandK, ThrottleCommand1) annotation(
|
||||
Line(points = {{135, 80}, {140, 80}, {165, 80}, {170, 80}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(motorControl2.ThrottleCommandK, ThrottleCommand2) annotation(
|
||||
Line(points = {{135, 60}, {140, 60}, {165, 60}, {170, 60}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(motorControl3.ThrottleCommandK, ThrottleCommand3) annotation(
|
||||
Line(points = {{135, 40}, {140, 40}, {165, 40}, {170, 40}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(motorControl4.ThrottleCommandK, ThrottleCommand4) annotation(
|
||||
Line(points = {{135, 20}, {140, 20}, {165, 20}, {170, 20}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(attitudeControl1.AngularSpeed[:], AngularSpeed[:]) annotation(
|
||||
Line(points = {{50, 20}, {50, 15}, {50, -60.3}, {35, -60.3}, {30, -60.3}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(attitudeControl1.Attitude[:], Attitude[:]) annotation(
|
||||
Line(points = {{55, 20}, {55, 15}, {55, -85.3}, {50, -85.3}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(attitudeControl1.YawConsign, YawConsign) annotation(
|
||||
Line(points = {{45, 25}, {40, 25}, {5, 25}, {5, 14.7}, {0, 14.7}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(positionControl1.DronPositionConsign[:], DronePositionConsign[:]) annotation(
|
||||
Line(points = {{-20, 95}, {-25, 95}, {-40, 95}, {-40, 94.7}, {-45, 94.7}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(positionControl1.Attitude[:], Attitude[:]) annotation(
|
||||
Line(points = {{-15, 80}, {-15, 75}, {-15, -85.3}, {45, -85.3}, {50, -85.3}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(positionControl1.AttitudeConsignAP[:], attitudeControl1.AttitudeConsignAP[:]) annotation(
|
||||
Line(points = {{0, 85}, {5, 85}, {50, 85}, {50, 45}, {50, 40}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(RCAttitudeCommands[:], attitudeControl1.AttitudeRCConsign[:]) annotation(
|
||||
Line(points = {{-125, 29.7}, {-120, 29.7}, {40, 29.7}, {40, 30}, {45, 30}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
DronePositionConsign(flags = 2),
|
||||
AngularSpeed(flags = 2),
|
||||
Position(flags = 2),
|
||||
YawConsign(flags = 2),
|
||||
Attitude(flags = 2),
|
||||
Speed(flags = 2),
|
||||
ThrottleCommand1(flags = 2),
|
||||
ThrottleCommand2(flags = 2),
|
||||
ThrottleCommand3(flags = 2),
|
||||
ThrottleCommand4(flags = 2),
|
||||
RCVerticalSpeedCommand(flags = 2),
|
||||
RCAttitudeCommands(flags = 2),
|
||||
RCYawCommand(flags = 2),
|
||||
SelectedControlMode(flags = 2),
|
||||
motorControl1(MotorKRate(flags = 2), ThrottleCommandK(flags = 2), controlMotor1(DAngVel(flags = 2), ComdKD(flags = 2))),
|
||||
motorControl2(MotorKRate(flags = 2), ThrottleCommandK(flags = 2), controlMotor1(DAngVel(flags = 2), ComdKD(flags = 2))),
|
||||
motorControl3(MotorKRate(flags = 2), ThrottleCommandK(flags = 2), controlMotor1(DAngVel(flags = 2), ComdKD(flags = 2))),
|
||||
motorControl4(MotorKRate(flags = 2), ThrottleCommandK(flags = 2), controlMotor1(DAngVel(flags = 2), ComdKD(flags = 2))),
|
||||
allocationControl1(TotalThrustAP(flags = 2), TotalThrustManual(flags = 2), MomentumsConsign(flags = 2), Motor1Rate(flags = 2), Motor2Rate(flags = 2), Motor3Rate(flags = 2), Motor4Rate(flags = 2), SelectedControlMode(flags = 2), computeMotorRate1(TotalThrust(flags = 2), MomentumConsign(flags = 2), Motor1Rate(flags = 2), Motor2Rate(flags = 2), Motor3Rate(flags = 2), Motor4Rate(flags = 2), P4(flags = 2), M4(flags = 2), AngVelVector(flags = 2), TMomVector(flags = 2), ParamCosSin(flags = 2)), SelectTotalThrustConsign(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2))),
|
||||
controlAltitude1(TotalThrustManual(flags = 2), RCVerticalSpeedCommand(flags = 2), computeTotalThrustCA1(AccelerationConsign(flags = 2), TotalThrustAP(flags = 2), AC(flags = 2)), computeAltitudeConsign1(RCVerticalSpeedCommand(flags = 2), AccelerationConsign(flags = 2), PID1(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2))), speedErrorModelSAC1(SpeedConsign(flags = 2), Speed(flags = 2), SpeedError(flags = 2), vzd(flags = 2), vz(flags = 2), ASE(flags = 2)))),
|
||||
attitudeControl1(AttitudeConsignAP(flags = 2), AttitudeRCConsign(flags = 2), YawConsign(flags = 2), AngularSpeed(flags = 2), Attitude(flags = 2), MomentumsConsign(flags = 2), RCYawCommand(flags = 2), SelectedControlMode(flags = 2), controlRollAngle1(RollConsign(flags = 2), Roll(flags = 2), AngularSpeedX(flags = 2), MomentumX(flags = 2), xAngularSpeedErrorModel1(RollConsign(flags = 2), Roll(flags = 2), AngularSpeedX(flags = 2), AngularSpeedXError(flags = 2), ephi(flags = 2), wxd(flags = 2)), PID(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2)))), controlPitchAngle1(PitchCosign(flags = 2), Pitch(flags = 2), AngularSpeedY(flags = 2), MomentumY(flags = 2), yAngularSpeedErrorModel1(PitchCosign(flags = 2), Pitch(flags = 2), AngularSpeedY(flags = 2), AngularSpeedYError(flags = 2), eteta(flags = 2), wyd(flags = 2)), PID1(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2)))), controlYawAngle1(YawConsign(flags = 2), Yaw(flags = 2), AngularSpeedZ(flags = 2), MomentumZ(flags = 2), zAngularSpeedErrorModel1(YawCosign(flags = 2), Yaw(flags = 2), AngularSpeedZ(flags = 2), AngularSpeedZError(flags = 2), eyaw(flags = 2), wzd(flags = 2)), PID2(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2)))), SelectRollConsign(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2)), SelectPitchConsign(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2)), computeYawConsign(u1(flags = 2), u2(flags = 2), y(flags = 2))),
|
||||
positionControl1(DronPositionConsign(flags = 2), Position(flags = 2), TotalThrustAP(flags = 2), AttitudeConsignAP(flags = 2), Attitude(flags = 2), Speed(flags = 2), controlPosition1(DronePositionConsign(flags = 2), Position(flags = 2), NavigationSpeedConsign(flags = 2), DHP(flags = 2), HP(flags = 2), DZP(flags = 2), ZP(flags = 2), HNSC(flags = 2), ASC(flags = 2)), controlSpeed1(SpeedConsign(flags = 2), Speed(flags = 2), AccelerationConsign(flags = 2), speedErrorModel1(SpeedConsign(flags = 2), Speed(flags = 2), SpeedError(flags = 2), vhd(flags = 2), vh(flags = 2), vzd(flags = 2), vz(flags = 2), HSE(flags = 2), ASE(flags = 2)), PID(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2))), PID2(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2))), PID1(u(flags = 2), y(flags = 2), P(u(flags = 2), y(flags = 2)), I(u(flags = 2), y(flags = 2)), D(u(flags = 2), y(flags = 2), x(flags = 2)), Gain(u(flags = 2), y(flags = 2)), Add(u1(flags = 2), u2(flags = 2), u3(flags = 2), y(flags = 2)))), computeThrustAndAttitudeConsign1(AccelerationConsign(flags = 2), Attitude(flags = 2), AttitudeAPConsigns(flags = 2), TotalThrustAP(flags = 2), HAC(flags = 2), Rpsi(flags = 2), Apsi(flags = 2), InvApsi(flags = 2), AAC(flags = 2)), selectSpeedConsign1(NavigationVelocityConsign(flags = 2), VelocityConsign(flags = 2))),
|
||||
Icon(coordinateSystem(extent = {{-150, -125}, {150, 125}}, initialScale = 0.1), graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-150, 126.7}, {150, -126.7}}), Text(origin = {0, 18}, extent = {{-88, 26}, {88, -26}}, textString = "%name")}),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end LowLevelFlightControlSystem;
|
||||
@@ -0,0 +1,514 @@
|
||||
within AIDAModelica;
|
||||
class ModelicaLicense2 "Modelica License 2"
|
||||
|
||||
annotation (Documentation(info="<html>
|
||||
<head>
|
||||
<title>The Modelica License 2</title>
|
||||
<style type=\"text/css\">
|
||||
* { font-size: 10pt; font-family: Arial,sans-serif; }
|
||||
code { font-size: 9pt; font-family: Courier,monospace;}
|
||||
h6 { font-size: 10pt; font-weight: bold; color: green; }
|
||||
h5 { font-size: 11pt; font-weight: bold; color: green; }
|
||||
h4 { font-size: 13pt; font-weight: bold; color: green; }
|
||||
address { font-weight: normal}
|
||||
td { solid #000; vertical-align:top; }
|
||||
th { solid #000; vertical-align:top; font-weight: bold; }
|
||||
table { solid #000; border-collapse: collapse;}
|
||||
</style>
|
||||
</head>
|
||||
<body lang=\"en-US\">
|
||||
<p>All files in this directory and in all subdirectories are released under
|
||||
the "Modelica License 2" (if not explicitly noted
|
||||
otherwise).</p>
|
||||
<p><a href=\"#The_Modelica_License_2-outline\">The Modelica
|
||||
License 2</a><br>
|
||||
<a href=\"#How_to_Apply_the_Modelica_License_2-outline\">How to Apply the
|
||||
Modelica License 2</a><br>
|
||||
<a href=\"#Frequently_Asked_Questions-outline\">Frequently Asked
|
||||
Questions</a><br></p>
|
||||
<hr>
|
||||
<h4><a name=\"The_Modelica_License_2-outline\" id=
|
||||
\"The_Modelica_License_2-outline\"></a>The Modelica License 2</h4>
|
||||
<p><strong>Preamble.</strong> The goal of this license is that Modelica
|
||||
related model libraries, software, images, documents, data files etc. can
|
||||
be used freely in the original or a modified form, in open source and in
|
||||
commercial environments (as long as the license conditions below are
|
||||
fulfilled, in particular sections 2c) and 2d). The Original Work is
|
||||
provided free of charge and the use is completely at your own risk.
|
||||
Developers of free Modelica packages are encouraged to utilize this license
|
||||
for their work.</p>
|
||||
<p>The Modelica License applies to any Original Work that contains the
|
||||
following licensing notice adjacent to the copyright notice(s) for this
|
||||
Original Work:</p>
|
||||
<p><strong>Licensed by <name of Licensor> under the Modelica
|
||||
License 2</strong></p>
|
||||
<p><strong>1. Definitions.</strong></p>
|
||||
<ol type=\"a\">
|
||||
<li>"License" is this Modelica License.</li>
|
||||
<li>"Original Work" is any work of authorship, including
|
||||
software, images, documents, data files, that contains the above
|
||||
licensing notice or that is packed together with a licensing notice
|
||||
referencing it.</li>
|
||||
<li>"Licensor" is the provider of the Original Work who has
|
||||
placed this licensing notice adjacent to the copyright notice(s) for
|
||||
the Original Work. The Original Work is either directly provided by the
|
||||
owner of the Original Work, or by a licensee of the owner.</li>
|
||||
<li>"Derivative Work" is any modification of the Original
|
||||
Work which represents, as a whole, an original work of authorship. For
|
||||
the matter of clarity and as examples:
|
||||
<ol type=\"a\">
|
||||
<li>Derivative Work shall not include work that remains
|
||||
separable from the Original Work, as well as merely extracting
|
||||
a part of the Original Work without modifying it.</li>
|
||||
<li>Derivative Work shall not include (a) fixing of errors
|
||||
and/or (b) adding vendor specific Modelica annotations and/or
|
||||
(c) using a subset of the classes of a Modelica package, and/or
|
||||
(d) using a different representation, e.g., a binary
|
||||
representation.</li>
|
||||
<li>Derivative Work shall include classes that are copied from
|
||||
the Original Work where declarations, equations or the
|
||||
documentation are modified.</li>
|
||||
<li>Derivative Work shall include executables to simulate the
|
||||
models that are generated by a Modelica translator based on the
|
||||
Original Work (of a Modelica package).</li>
|
||||
</ol>
|
||||
</li>
|
||||
<li>"Modified Work" is any modification of the Original
|
||||
Work with the following exceptions: (a) fixing of errors and/or (b)
|
||||
adding vendor specific Modelica annotations and/or (c) using a subset
|
||||
of the classes of a Modelica package, and/or (d) using a different
|
||||
representation, e.g., a binary representation.</li>
|
||||
<li>"Source Code" means the preferred form of the Original
|
||||
Work for making modifications to it and all available documentation
|
||||
describing how to modify the Original Work.</li>
|
||||
<li>"You" means an individual or a legal entity exercising
|
||||
rights under, and complying with all of the terms of, this
|
||||
License.</li>
|
||||
<li>"Modelica package" means any Modelica library that is
|
||||
defined with the
|
||||
"<code><strong>package</strong> <Name> ... <strong>end</strong> <Name>;</code>"
|
||||
Modelica language element.</li>
|
||||
</ol>
|
||||
<p><strong>2. Grant of Copyright License.</strong> Licensor grants You a
|
||||
worldwide, royalty-free, non-exclusive, sublicensable license, for the
|
||||
duration of the copyright, to do the following:</p>
|
||||
<ol type=\"a\">
|
||||
<li>
|
||||
<p>To reproduce the Original Work in copies, either alone or as
|
||||
part of a collection.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>To create Derivative Works according to Section 1d) of this
|
||||
License.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>To distribute or communicate to the public copies of the
|
||||
<u>Original Work</u> or a <u>Derivative Work</u> under <u>this
|
||||
License</u>. No fee, neither as a copyright-license fee, nor as a
|
||||
selling fee for the copy as such may be charged under this License.
|
||||
Furthermore, a verbatim copy of this License must be included in
|
||||
any copy of the Original Work or a Derivative Work under this
|
||||
License.<br>
|
||||
For the matter of clarity, it is permitted A) to distribute or
|
||||
communicate such copies as part of a (possible commercial)
|
||||
collection where other parts are provided under different licenses
|
||||
and a license fee is charged for the other parts only and B) to
|
||||
charge for mere printing and shipping costs.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>To distribute or communicate to the public copies of a
|
||||
<u>Derivative Work</u>, alternatively to Section 2c), under
|
||||
<u>any other license</u> of your choice, especially also under a
|
||||
license for commercial/proprietary software, as long as You comply
|
||||
with Sections 3, 4 and 8 below.<br>
|
||||
For the matter of clarity, no restrictions regarding fees, either
|
||||
as to a copyright-license fee or as to a selling fee for the copy
|
||||
as such apply.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>To perform the Original Work publicly.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>To display the Original Work publicly.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<p><strong>3. Acceptance.</strong> Any use of the Original Work or a
|
||||
Derivative Work, or any action according to either Section 2a) to 2f)
|
||||
above constitutes Your acceptance of this License.</p>
|
||||
<p><strong>4. Designation of Derivative Works and of Modified
|
||||
Works.</strong> The identifying designation of Derivative Work and of
|
||||
Modified Work must be different to the corresponding identifying
|
||||
designation of the Original Work. This means especially that the
|
||||
(root-level) name of a Modelica package under this license must be changed
|
||||
if the package is modified (besides fixing of errors, adding vendor
|
||||
specific Modelica annotations, using a subset of the classes of a Modelica
|
||||
package, or using another representation, e.g. a binary
|
||||
representation).</p>
|
||||
<p><strong>5. Grant of Patent License.</strong> Licensor grants You a
|
||||
worldwide, royalty-free, non-exclusive, sublicensable license, under patent
|
||||
claims owned by the Licensor or licensed to the Licensor by the owners of
|
||||
the Original Work that are embodied in the Original Work as furnished by
|
||||
the Licensor, for the duration of the patents, to make, use, sell, offer
|
||||
for sale, have made, and import the Original Work and Derivative Works
|
||||
under the conditions as given in Section 2. For the matter of clarity,
|
||||
the license regarding Derivative Works covers patent claims to the extent
|
||||
as they are embodied in the Original Work only.</p>
|
||||
<p><strong>6. Provision of Source Code.</strong> Licensor agrees to provide
|
||||
You with a copy of the Source Code of the Original Work but reserves the
|
||||
right to decide freely on the manner of how the Original Work is
|
||||
provided.<br>
|
||||
For the matter of clarity, Licensor
|
||||
might provide only a binary representation of the Original Work. In that
|
||||
case, You may (a) either reproduce the Source Code from the binary
|
||||
representation if this is possible (e.g., by performing a copy of an
|
||||
encrypted Modelica package, if encryption allows the copy operation) or (b)
|
||||
request the Source Code from the Licensor who will provide it to You.</p>
|
||||
<p><strong>7. Exclusions from License Grant.</strong> Neither the names of
|
||||
Licensor, nor the names of any contributors to the Original Work, nor any
|
||||
of their trademarks or service marks, may be used to endorse or promote
|
||||
products derived from this Original Work without express prior permission
|
||||
of the Licensor. Except as otherwise expressly stated in this License and
|
||||
in particular in Sections 2 and 5, nothing in this License grants any
|
||||
license to Licensor's trademarks, copyrights, patents, trade secrets or any
|
||||
other intellectual property, and no patent license is granted to make, use,
|
||||
sell, offer for sale, have made, or import embodiments of any patent
|
||||
claims.<br>
|
||||
No license is granted to the trademarks
|
||||
of Licensor even if such trademarks are included in the Original Work,
|
||||
except as expressly stated in this License. Nothing in this License shall
|
||||
be interpreted to prohibit Licensor from licensing under terms different
|
||||
from this License any Original Work that Licensor otherwise would have a
|
||||
right to license.</p>
|
||||
<p><strong>8. Attribution Rights.</strong> You must retain in the Source
|
||||
Code of the Original Work and of any Derivative Works that You create, all
|
||||
author, copyright, patent, or trademark notices, as well as any descriptive
|
||||
text identified therein as an "Attribution Notice". The same
|
||||
applies to the licensing notice of this License in the Original Work. For
|
||||
the matter of clarity, "author notice" means the notice that
|
||||
identifies the original author(s).<br>
|
||||
You must cause the Source Code for any
|
||||
Derivative Works that You create to carry a prominent Attribution Notice
|
||||
reasonably calculated to inform recipients that You have modified the
|
||||
Original Work.<br>
|
||||
In case the Original Work or Derivative
|
||||
Work is not provided in Source Code, the Attribution Notices shall be
|
||||
appropriately displayed, e.g., in the documentation of the Derivative
|
||||
Work.</p>
|
||||
<p><strong>9. Disclaimer of Warranty.<br></strong> <u><strong>The Original
|
||||
Work is provided under this License on an "as is" basis and
|
||||
without warranty, either express or implied, including, without limitation,
|
||||
the warranties of non-infringement, merchantability or fitness for a
|
||||
particular purpose. The entire risk as to the quality of the Original Work
|
||||
is with You.</strong></u> This disclaimer of warranty constitutes an
|
||||
essential part of this License. No license to the Original Work is granted
|
||||
by this License except under this disclaimer.</p>
|
||||
<p><strong>10. Limitation of Liability.</strong> Under no circumstances and
|
||||
under no legal theory, whether in tort (including negligence), contract, or
|
||||
otherwise, shall the Licensor, the owner or a licensee of the Original Work
|
||||
be liable to anyone for any direct, indirect, general, special, incidental,
|
||||
or consequential damages of any character arising as a result of this
|
||||
License or the use of the Original Work including, without limitation,
|
||||
damages for loss of goodwill, work stoppage, computer failure or
|
||||
malfunction, or any and all other commercial damages or losses. This
|
||||
limitation of liability shall not apply to the extent applicable law
|
||||
prohibits such limitation.</p>
|
||||
<p><strong>11. Termination.</strong> This License conditions your rights to
|
||||
undertake the activities listed in Section 2 and 5, including your
|
||||
right to create Derivative Works based upon the Original Work, and doing so
|
||||
without observing these terms and conditions is prohibited by copyright law
|
||||
and international treaty. Nothing in this License is intended to affect
|
||||
copyright exceptions and limitations. This License shall terminate
|
||||
immediately and You may no longer exercise any of the rights granted to You
|
||||
by this License upon your failure to observe the conditions of this
|
||||
license.</p>
|
||||
<p><strong>12. Termination for Patent Action.</strong> This License shall
|
||||
terminate automatically and You may no longer exercise any of the rights
|
||||
granted to You by this License as of the date You commence an action,
|
||||
including a cross-claim or counterclaim, against Licensor, any owners of
|
||||
the Original Work or any licensee alleging that the Original Work infringes
|
||||
a patent. This termination provision shall not apply for an action alleging
|
||||
patent infringement through combinations of the Original Work under
|
||||
combination with other software or hardware.</p>
|
||||
<p><strong>13. Jurisdiction.</strong> Any action or suit relating to this
|
||||
License may be brought only in the courts of a jurisdiction wherein the
|
||||
Licensor resides and under the laws of that jurisdiction excluding its
|
||||
conflict-of-law provisions. The application of the United Nations
|
||||
Convention on Contracts for the International Sale of Goods is expressly
|
||||
excluded. Any use of the Original Work outside the scope of this License or
|
||||
after its termination shall be subject to the requirements and penalties of
|
||||
copyright or patent law in the appropriate jurisdiction. This section shall
|
||||
survive the termination of this License.</p>
|
||||
<p><strong>14. Attorneys' Fees.</strong> In any action to enforce the terms
|
||||
of this License or seeking damages relating thereto, the prevailing party
|
||||
shall be entitled to recover its costs and expenses, including, without
|
||||
limitation, reasonable attorneys' fees and costs incurred in connection
|
||||
with such action, including any appeal of such action. This section shall
|
||||
survive the termination of this License.</p>
|
||||
<p><strong>15. Miscellaneous.</strong></p>
|
||||
<ol type=\"a\">
|
||||
<li>If any provision of this License is held to be unenforceable, such
|
||||
provision shall be reformed only to the extent necessary to make it
|
||||
enforceable.</li>
|
||||
<li>No verbal ancillary agreements have been made. Changes and
|
||||
additions to this License must appear in writing to be valid. This also
|
||||
applies to changing the clause pertaining to written form.</li>
|
||||
<li>You may use the Original Work in all ways not otherwise restricted
|
||||
or conditioned by this License or by law, and Licensor promises not to
|
||||
interfere with or be responsible for such uses by You.</li>
|
||||
</ol>
|
||||
<hr>
|
||||
<h4><a name=\"How_to_Apply_the_Modelica_License_2-outline\" id=
|
||||
\"How_to_Apply_the_Modelica_License_2-outline\"></a> How to Apply the
|
||||
Modelica License 2</h4>
|
||||
<p>At the top level of your Modelica package and at every important
|
||||
subpackage, add the following notices in the info layer of the package:</p>
|
||||
<p>Licensed by <Licensor> under the Modelica License 2<br>
|
||||
Copyright © <year1>-<year2>, <name of copyright
|
||||
holder(s)>.</p>
|
||||
<p><em>This Modelica package is <u>free</u> software and the use is
|
||||
completely at <u>your own risk</u>; it can be redistributed and/or modified
|
||||
under the terms of the Modelica License 2. For license conditions
|
||||
(including the disclaimer of warranty) see <a href=
|
||||
\"modelica://Modelica.UsersGuide.ModelicaLicense2\">Modelica.UsersGuide.ModelicaLicense2</a>
|
||||
or visit <a href=
|
||||
\"http://www.modelica.org/licenses/ModelicaLicense2\">http://www.modelica.org/licenses/ModelicaLicense2</a>.</em></p>
|
||||
<p>Include a copy of the Modelica License 2 under
|
||||
<strong><library>.UsersGuide.ModelicaLicense2</strong> (use <a href=
|
||||
\"http://www.modelica.org/licenses/ModelicaLicense2.mo\">http://www.modelica.org/licenses/ModelicaLicense2.mo</a>).
|
||||
Furthermore, add the list of authors and contributors under
|
||||
<strong><library>.UsersGuide.Contributors</strong> or
|
||||
<strong><library>.UsersGuide.Contact</strong>.</p>
|
||||
<p>For example, sublibrary Modelica.Blocks of the Modelica Standard Library
|
||||
may have the following notices:</p>
|
||||
<p>Licensed by Modelica Association under the Modelica License 2<br>
|
||||
Copyright © 1998-2008, Modelica Association.</p>
|
||||
<p><em>This Modelica package is <u>free</u> software and the use is
|
||||
completely at <u>your own risk</u>; it can be redistributed and/or modified
|
||||
under the terms of the Modelica License 2. For license conditions
|
||||
(including the disclaimer of warranty) see <a href=
|
||||
\"modelica://Modelica.UsersGuide.ModelicaLicense2\">Modelica.UsersGuide.ModelicaLicense2</a>
|
||||
or visit <a href=
|
||||
\"http://www.modelica.org/licenses/ModelicaLicense2\">http://www.modelica.org/licenses/ModelicaLicense2</a>.</em></p>
|
||||
<p>For C-source code and documents, add similar notices in the
|
||||
corresponding file.</p>
|
||||
<p>For images, add a "readme.txt" file to the directories where
|
||||
the images are stored and include a similar notice in this file.</p>
|
||||
<p>In these cases, save a copy of the Modelica License 2 in one
|
||||
directory of the distribution, e.g., <a href=
|
||||
\"http://www.modelica.org/licenses/ModelicaLicense2.html\">http://www.modelica.org/licenses/ModelicaLicense2.html</a>
|
||||
in directory
|
||||
<strong><library>/Resources/Documentation/ModelicaLicense2.html</strong>.</p>
|
||||
<hr>
|
||||
<h5><a name=\"Frequently_Asked_Questions-outline\" id=
|
||||
\"Frequently_Asked_Questions-outline\"></a> Frequently Asked Questions</h5>
|
||||
<p>This section contains questions/answer to users and/or distributors of
|
||||
Modelica packages and/or documents under Modelica License 2. Note, the
|
||||
answers to the questions below are not a legal interpretation of the
|
||||
Modelica License 2. In case of a conflict, the language of the license
|
||||
shall prevail.</p>
|
||||
<h6>Using or Distributing a Modelica <u>Package</u> under the Modelica
|
||||
License 2</h6>
|
||||
<p><strong>What are the main differences to the previous version of the
|
||||
Modelica License?</strong></p>
|
||||
<ol>
|
||||
<li>
|
||||
<p>Modelica License 1 is unclear whether the licensed Modelica
|
||||
package can be distributed under a different license.
|
||||
Version 2 explicitly allows that "Derivative Work"
|
||||
can be distributed under any license of Your choice, see examples
|
||||
in Section 1d) as to what qualifies as Derivative Work (so,
|
||||
version 2 is clearer).</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If You modify a Modelica package under Modelica License 2
|
||||
(besides fixing of errors, adding vendor specific Modelica
|
||||
annotations, using a subset of the classes of a Modelica package,
|
||||
or using another representation, e.g., a binary representation),
|
||||
you must rename the root-level name of the package for your
|
||||
distribution. In version 1 you could keep the name (so,
|
||||
version 2 is more restrictive). The reason of this restriction
|
||||
is to reduce the risk that Modelica packages are available that
|
||||
have identical names, but different functionality.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Modelica License 1 states that "It is not allowed to
|
||||
charge a fee for the original version or a modified version of the
|
||||
software, besides a reasonable fee for distribution and
|
||||
support". Version 2 has a similar intention for all
|
||||
Original Work under <u>Modelica License 2</u> (to remain free
|
||||
of charge and open source) but states this more clearly as
|
||||
"No fee, neither as a copyright-license fee, nor as a selling
|
||||
fee for the copy as such may be charged". Contrary to
|
||||
version 1, Modelica License 2 has no restrictions on fees
|
||||
for Derivative Work that is provided under a different license (so,
|
||||
version 2 is clearer and has fewer restrictions).</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Modelica License 2 introduces several useful provisions for
|
||||
the licensee (articles 5, 6, 12), and for the licensor
|
||||
(articles 7, 12, 13, 14) that have no counter part in
|
||||
version 1.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Modelica License 2 can be applied to all type of work,
|
||||
including documents, images and data files, contrary to
|
||||
version 1 that was dedicated for software only (so,
|
||||
version 2 is more general).</p>
|
||||
</li>
|
||||
</ol>
|
||||
<p><strong>Can I distribute a Modelica package (under Modelica
|
||||
License 2) as part of my commercial Modelica modeling and simulation
|
||||
environment?</strong></p>
|
||||
<p>Yes, according to Section 2c). However, you are not allowed to
|
||||
charge a fee for this part of your environment. Of course, you can charge
|
||||
for your part of the environment.</p>
|
||||
<p><strong>Can I distribute a Modelica package (under Modelica
|
||||
License 2) under a different license?</strong></p>
|
||||
<p>No. The license of an unmodified Modelica package cannot be changed
|
||||
according to Sections 2c) and 2d). This means that you cannot
|
||||
<u>sell</u> copies of it, any distribution has to be free of charge.</p>
|
||||
<p><strong>Can I distribute a Modelica package (under Modelica
|
||||
License 2) under a different license when I first encrypt the
|
||||
package?</strong></p>
|
||||
<p>No. Merely encrypting a package does not qualify for Derivative Work and
|
||||
therefore the encrypted package has to stay under Modelica
|
||||
License 2.</p>
|
||||
<p><strong>Can I distribute a Modelica package (under Modelica
|
||||
License 2) under a different license when I first add classes to the
|
||||
package?</strong></p>
|
||||
<p>No. The package itself remains unmodified, i.e., it is Original Work,
|
||||
and therefore the license for this part must remain under Modelica
|
||||
License 2. The newly added classes can be, however, under a different
|
||||
license.</p>
|
||||
<p><strong>Can I copy a class out of a Modelica package (under Modelica
|
||||
License 2) and include it</strong> <u><strong>unmodified</strong></u>
|
||||
<strong>in a Modelica package under a</strong>
|
||||
<u><strong>commercial/proprietary</strong></u>
|
||||
<strong>license?</strong></p>
|
||||
<p>No, according to article 2c). However, you can include model,
|
||||
block, function, package, record and connector classes in your Modelica
|
||||
package under <u>Modelica License 2</u>. This means that your Modelica
|
||||
package could be under a commercial/proprietary license, but one or more
|
||||
classes of it are under Modelica License 2.<br>
|
||||
Note, a "type" class (e.g., type Angle =
|
||||
Real(unit="rad")) can be copied and included unmodified under a
|
||||
commercial/proprietary license (for details, see the next question).</p>
|
||||
<p><strong>Can I copy a type class or</strong> <u><strong>part</strong></u>
|
||||
<strong>of a model, block, function, record, connector class, out of a
|
||||
Modelica package (under Modelica License 2) and include it modified or
|
||||
unmodified in a Modelica package under a</strong>
|
||||
<u><strong>commercial/proprietary</strong></u>
|
||||
<strong>license?</strong></p>
|
||||
<p>Yes, according to article 2d), since this will in the end usually
|
||||
qualify as Derivative Work. The reasoning is the following: A type class or
|
||||
part of another class (e.g., an equation, a declaration, part of a class
|
||||
description) cannot be utilized "by its own". In order to make
|
||||
this "usable", you have to add additional code in order that
|
||||
the class can be utilized. This is therefore usually Derivative Work and
|
||||
Derivative Work can be provided under a different license. Note, this only
|
||||
holds, if the additional code introduced is sufficient to qualify for
|
||||
Derivative Work. Merely, just copying a class and changing, say, one
|
||||
character in the documentation of this class would be no Derivative Work
|
||||
and therefore the copied code would have to stay under Modelica
|
||||
License 2.</p>
|
||||
<p><strong>Can I copy a class out of a Modelica package (under Modelica
|
||||
License 2) and include it in</strong> <u><strong>modified</strong></u>
|
||||
<strong>form in a</strong> <u><strong>commercial/proprietary</strong></u>
|
||||
<strong>Modelica package?</strong></p>
|
||||
<p>Yes. If the modification can be seen as a "Derivative Work",
|
||||
you can place it under your commercial/proprietary license. If the
|
||||
modification does not qualify as "Derivative Work" (e.g., bug
|
||||
fixes, vendor specific annotations), it must remain under Modelica
|
||||
License 2. This means that your Modelica package could be under a
|
||||
commercial/proprietary license, but one or more parts of it are under
|
||||
Modelica License 2.</p>
|
||||
<p><strong>Can I distribute a "save total model" under my
|
||||
commercial/proprietary license, even if classes under Modelica
|
||||
License 2 are included?</strong></p>
|
||||
<p>Your classes of the "save total model" can be distributed
|
||||
under your commercial/proprietary license, but the classes under Modelica
|
||||
License 2 must remain under Modelica License 2. This means you
|
||||
can distribute a "save total model", but some parts might be
|
||||
under Modelica License 2.</p>
|
||||
<p><strong>Can I distribute a Modelica package (under Modelica
|
||||
License 2) in encrypted form?</strong></p>
|
||||
<p>Yes. Note, if the encryption does not allow "copying" of
|
||||
classes (in to unencrypted Modelica source code), you have to send the
|
||||
Modelica source code of this package to your customer, if he/she wishes it,
|
||||
according to article 6.</p>
|
||||
<p><strong>Can I distribute an executable under my commercial/proprietary
|
||||
license, if the model from which the executable is generated uses models
|
||||
from a Modelica package under Modelica License 2?</strong></p>
|
||||
<p>Yes, according to article 2d), since this is seen as Derivative
|
||||
Work. The reasoning is the following: An executable allows the simulation
|
||||
of a concrete model, whereas models from a Modelica package (without
|
||||
pre-processing, translation, tool run-time library) are not able to be
|
||||
simulated without tool support. By the processing of the tool and by its
|
||||
run-time libraries, significant new functionality is added (a model can be
|
||||
simulated whereas previously it could not be simulated) and functionality
|
||||
available in the package is removed (e.g., to build up a new model by
|
||||
dragging components of the package is no longer possible with the
|
||||
executable).</p>
|
||||
<p><strong>Is my modification to a Modelica package (under Modelica
|
||||
License 2) a Derivative Work?</strong></p>
|
||||
<p>It is not possible to give a general answer to it. To be regarded as
|
||||
"an original work of authorship", a derivative work must be
|
||||
different enough from the original or must contain a substantial amount of
|
||||
new material. Making minor changes or additions of little substance to a
|
||||
preexisting work will not qualify the work as a new version for such
|
||||
purposes.</p>
|
||||
<h6>Using or Distributing a Modelica <u>Document</u> under the Modelica
|
||||
License 2</h6>
|
||||
<p>This section is devoted especially for the following applications:</p>
|
||||
<ol type=\"a\">
|
||||
<li>
|
||||
<p>A Modelica tool extracts information out of a Modelica package
|
||||
and presents the result in form of a "manual" for this
|
||||
package in, e.g., html, doc, or pdf format.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The Modelica language specification is a document defining the
|
||||
Modelica language. It will be licensed under Modelica
|
||||
License 2.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Someone writes a book about the Modelica language and/or
|
||||
Modelica packages and uses information which is available in the
|
||||
Modelica language specification and/or the corresponding Modelica
|
||||
package.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<p><strong>Can I sell a manual that was basically derived by extracting
|
||||
information automatically from a Modelica package under Modelica
|
||||
License 2 (e.g., a "reference guide" of the Modelica
|
||||
Standard Library)?</strong></p>
|
||||
<p>Yes. Extracting information from a Modelica package, and providing it in
|
||||
a human readable, suitable format, like html, doc or pdf format, where the
|
||||
content is significantly modified (e.g. tables with interface information
|
||||
are constructed from the declarations of the public variables) qualifies as
|
||||
Derivative Work and there are no restrictions to charge a fee for
|
||||
Derivative Work under alternative 2d).</p>
|
||||
<p><strong>Can I copy a text passage out of a Modelica document (under
|
||||
Modelica License 2) and use it</strong>
|
||||
<u><strong>unmodified</strong></u> <strong>in my document (e.g. the
|
||||
Modelica syntax description in the Modelica Specification)?</strong></p>
|
||||
<p>Yes. In case you distribute your document, the copied parts are still
|
||||
under Modelica License 2 and you are not allowed to charge a license
|
||||
fee for this part. You can, of course, charge a fee for the rest of your
|
||||
document.</p>
|
||||
<p><strong>Can I copy a text passage out of a Modelica document (under
|
||||
Modelica License 2) and use it in</strong>
|
||||
<u><strong>modified</strong></u> <strong>form in my document?</strong></p>
|
||||
<p>Yes, the creation of Derivative Works is allowed. In case the content is
|
||||
significantly modified this qualifies as Derivative Work and there are no
|
||||
restrictions to charge a fee for Derivative Work under
|
||||
alternative 2d).</p>
|
||||
<p><strong>Can I sell a printed version of a Modelica document (under
|
||||
Modelica License 2), e.g., the Modelica Language
|
||||
Specification?</strong></p>
|
||||
<p>No, if you are not the copyright-holder, since article 2c) does not
|
||||
allow a selling fee for a (in this case physical) copy. However, mere
|
||||
printing and shipping costs may be recovered.</p>
|
||||
</body>
|
||||
</html>"));
|
||||
end ModelicaLicense2;
|
||||
@@ -0,0 +1,22 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model MotorControl "Motor Control Model"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319
|
||||
Modelica.Blocks.Interfaces.RealInput MotorKRate(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "Desired angular velocity of k-th motor" annotation(
|
||||
Placement(transformation(extent = {{-65, -40}, {-25, 0}}), iconTransformation(origin = {-100, 0}, extent = {{-20, -20}, {20, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput ThrottleCommandK(quantity = "Basics.Unitless", displayUnit = "-") "K-th command output" annotation(
|
||||
Placement(transformation(extent = {{60, -30}, {80, -10}}), iconTransformation(extent = {{90, -10}, {110, 10}})));
|
||||
ControlMotor controlMotor1 annotation(
|
||||
Placement(transformation(extent = {{10, -30}, {30, -10}})));
|
||||
equation
|
||||
connect(controlMotor1.ComdKD, ThrottleCommandK) annotation(
|
||||
Line(points = {{30, -20}, {35, -20}, {65, -20}, {70, -20}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(controlMotor1.DAngVel, MotorKRate) annotation(
|
||||
Line(points = {{10, -20}, {5, -20}, {-40, -20}, {-45, -20}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
MotorKRate(flags = 2),
|
||||
ThrottleCommandK(flags = 2),
|
||||
Icon(coordinateSystem(extent = {{-100, -50}, {100, 50}}, initialScale = 0.1), graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 50}, {103.3, -50}}), Text(origin = {-3, 0}, extent = {{-31, 8}, {31, -8}}, textString = "%name")}),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end MotorControl;
|
||||
@@ -0,0 +1,23 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model MotorPropellerModel "Motor-Propeller model"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput ThrottleCommandK "K-th command input" annotation(
|
||||
Placement(transformation(extent = {{-140, 40}, {-100, 80}}), iconTransformation(extent = {{-120, -20}, {-80, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput MotorKAngularVelocity(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "Angular velocity of the k-th motor-propeller system" annotation(
|
||||
Placement(transformation(extent = {{-35, 50}, {-15, 70}}), iconTransformation(extent = {{90, -10}, {110, 10}})));
|
||||
CreateMotion createMotion1 annotation(
|
||||
Placement(transformation(extent = {{-75, 55}, {-55, 65}})));
|
||||
equation
|
||||
connect(createMotion1.ThrottleCommandK, ThrottleCommandK) annotation(
|
||||
Line(points = {{-75, 60}, {-80, 60}, {-115, 60}, {-120, 60}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(createMotion1.MotorKAngularVelocity, MotorKAngularVelocity) annotation(
|
||||
Line(points = {{-55.3, 60}, {-50.3, 60}, {-30, 60}, {-25, 60}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
ThrottleCommandK(flags = 2),
|
||||
MotorKAngularVelocity(flags = 2),
|
||||
createMotion1(ThrottleCommandK(flags = 2), MotorKAngularVelocity(flags = 2), W(u(flags = 2), y(flags = 2)), wSSModel1(CmdKIn(flags = 2), WSSOut(flags = 2))),
|
||||
Icon(coordinateSystem(extent = {{-100, -125}, {100, 125}}, initialScale = 0.1), graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-99.9, 49.9}, {100, -50}}), Text(origin = {-5, 2}, extent = {{-33, 12}, {33, -12}}, textString = "%name")}),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end MotorPropellerModel;
|
||||
115
SimulationModels/OpenModelica 1.25/AIDAModelica/PID_2.mo
Normal file
115
SimulationModels/OpenModelica 1.25/AIDAModelica/PID_2.mo
Normal file
@@ -0,0 +1,115 @@
|
||||
within AIDAModelica;
|
||||
model PID_2 "PID_2"
|
||||
import Modelica.Blocks.Types.Init;
|
||||
import Modelica.Blocks;
|
||||
Modelica.Blocks.Interfaces.RealInput u "'input Real' as connector" annotation(Placement(
|
||||
transformation(
|
||||
origin={-126,86},
|
||||
extent={{-14,-14},{14,14}}),
|
||||
iconTransformation(
|
||||
origin={-50,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput du "'input Real' as connector" annotation(Placement(
|
||||
transformation(
|
||||
origin={-116,-82},
|
||||
extent={{-14,-14},{14,14}}),
|
||||
iconTransformation(
|
||||
origin={50,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Blocks.Interfaces.RealOutput y annotation(Placement(
|
||||
transformation(
|
||||
origin={110,0},
|
||||
extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(
|
||||
origin={110,0},
|
||||
extent={{-10,-10},{10,10}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Consign "'input Real' as connector" annotation(Placement(
|
||||
transformation(
|
||||
origin={-126,30},
|
||||
extent={{-12,-12},{12,12}}),
|
||||
iconTransformation(
|
||||
origin={-100,0},
|
||||
extent={{-20,-20},{20,20}})));
|
||||
parameter Real k(unit="1")=1 "Gain";
|
||||
parameter Real Ti(
|
||||
min=Modelica.Constants.small,
|
||||
start=0.5) "Time Constant of Integrator";
|
||||
parameter Real Td(
|
||||
min=0,
|
||||
start=0.1) "Time Constant of Derivative block";
|
||||
parameter Modelica.Blocks.Types.Init initType = Modelica.Blocks.Types.Init.NoInit "Type of initialization (NoInit, SteadyState, InitialState, InitialOutput)" annotation(
|
||||
Evaluate=true,
|
||||
Dialog(group="Initialization"));
|
||||
parameter Real xi_start=0 "Initial or guess value value for integrator output (= integrator state)" annotation(Dialog(group="Initialization"));
|
||||
parameter Real xd_start=0 "Initial or guess value for state of derivative block" annotation(Dialog(group="Initialization"));
|
||||
parameter Real y_start=0 "Initial value of output" annotation(Dialog(
|
||||
group="Initialization",
|
||||
enable=initType == Init.InitialOutput));
|
||||
constant Real unitTime=1 annotation(HideResult=true);
|
||||
Modelica.Blocks.Math.Gain P(k=1) "Proportional part of PID controller" annotation(Placement(transformation(
|
||||
origin={-28,68},
|
||||
extent={{-10,-10},{10,10}})));
|
||||
Modelica.Blocks.Math.Gain D(k=Td) "Derivative part of PID controller, with derivate received at input du" annotation(Placement(transformation(
|
||||
origin={-27,-41},
|
||||
extent={{-9,-9},{9,9}})));
|
||||
Modelica.Blocks.Continuous.Integrator I(
|
||||
k=unitTime / Ti,
|
||||
initType=if initType == Init.SteadyState then Init.SteadyState else if initType == Init.InitialState or initType == Init.InitialState then Init.InitialState else Init.NoInit,
|
||||
y_start=xi_start) "Integral part of PID controller" annotation(Placement(transformation(
|
||||
origin={-28,30},
|
||||
extent={{-10,-10},{10,10}})));
|
||||
Blocks.Math.Gain Gain(k=k) "Gain of PID controller" annotation(Placement(transformation(extent={{60,-10},{80,10}})));
|
||||
Blocks.Math.Add3 Add annotation(Placement(transformation(extent={{20,-10},{40,10}})));
|
||||
Modelica.Blocks.Math.Feedback feedback1 annotation(Placement(transformation(
|
||||
origin={-68,30},
|
||||
extent={{-14,14},{14,-14}})));
|
||||
Modelica.Blocks.Math.Feedback feedback2 annotation(Placement(transformation(
|
||||
origin={-64,-42},
|
||||
extent={{-10,-10},{10,10}})));
|
||||
Modelica.Blocks.Continuous.Derivative derivative1 annotation(Placement(transformation(
|
||||
origin={-90,-42},
|
||||
extent={{-10,-10},{10,10}})));
|
||||
initial equation
|
||||
if initType == Init.InitialOutput then
|
||||
y = y_start;
|
||||
end if;
|
||||
equation
|
||||
connect(derivative1.y, feedback2.u1) annotation(
|
||||
Line(points = {{-79, -42}, {-79, -44}, {-72, -44}, {-72, -42}}, color = {0, 0, 127}));
|
||||
connect(Consign, derivative1.u) annotation(
|
||||
Line(points = {{-126, 30}, {-102, 30}, {-102, -42}}, color = {0, 0, 127}));
|
||||
connect(du, feedback2.u2) annotation(
|
||||
Line(points = {{-116, -82}, {-64, -82}, {-64, -50}}, color = {0, 0, 127}));
|
||||
connect(feedback2.y,D.u) annotation(Line(
|
||||
points={{-55,-42},{-50,-42},{-42.7,-42},{-42.7,-41},{-37.7,-41}},
|
||||
color={0,0,127}));
|
||||
connect(D.y, Add.u3) annotation(
|
||||
Line(points = {{-17, -41}, {0, -41}, {0, -8}, {18, -8}}, color = {0, 0, 127}));
|
||||
connect(Consign,feedback1.u1) annotation(Line(
|
||||
points={{-126,30},{-121,30},{-84.3,30},{-79.3,30}},
|
||||
color={0,0,127}));
|
||||
connect(u,feedback1.u2) annotation(Line(
|
||||
points={{-126,86},{-121,86},{-68,86},{-68,46.3},{-68,41.3}},
|
||||
color={0,0,127}));
|
||||
connect(feedback1.y,P.u) annotation(Line(
|
||||
points={{-55.3,30},{-50.3,30},{-45,30},{-45,68},{-40,68}},
|
||||
color={0,0,127}));
|
||||
connect(I.u,feedback1.y) annotation(Line(
|
||||
points={{-40,30},{-45,30},{-50.3,30},{-55.3,30}},
|
||||
color={0,0,127}));
|
||||
connect(I.y, Add.u2) annotation(
|
||||
Line(points = {{-17, 30}, {-0.5, 30}, {-0.5, 0}, {18, 0}}, color = {0, 0, 127}));
|
||||
connect(P.y, Add.u1) annotation(
|
||||
Line(points = {{-17, 68}, {0, 68}, {0, 8}, {18, 8}}, color = {0, 0, 127}));
|
||||
connect(y,Gain.y) annotation(Line(
|
||||
points={{110,0},{105,0},{86,0},{81,0}},
|
||||
color={0,0,127}));
|
||||
connect(Add.y, Gain.u) annotation(
|
||||
Line(points = {{41, 0}, {58, 0}}, color = {0, 0, 127}));
|
||||
annotation(experiment(
|
||||
StopTime=1,
|
||||
StartTime=0,
|
||||
Interval=0.001));
|
||||
end PID_2;
|
||||
@@ -0,0 +1,199 @@
|
||||
within AIDAModelica;
|
||||
model PositionControl "Position Control Model"
|
||||
Modelica.Blocks.Interfaces.RealInput DronPositionConsign[3](
|
||||
each quantity="Mechanics.Translation.Displace",
|
||||
each displayUnit="m") "Desired drone position consign" annotation(Placement(
|
||||
transformation(extent={{-163,56},{-123,96}}),
|
||||
iconTransformation(extent={{-120,30},{-80,70}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Position[3](
|
||||
each quantity="Mechanics.Translation.Displace",
|
||||
each displayUnit="m") "Real drone position feedback" annotation(Placement(
|
||||
transformation(extent={{-125,15},{-85,55}}),
|
||||
iconTransformation(extent={{-120,-20},{-80,20}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput TotalThrustAP(
|
||||
each quantity="Mechanics.Translation.Force",
|
||||
each displayUnit="N") "Desired total thrust autopilot mode output" annotation(Placement(
|
||||
transformation(
|
||||
origin={71,29},
|
||||
extent={{-16,-16},{16,16}}),
|
||||
iconTransformation(
|
||||
origin={100,50},
|
||||
extent={{-10,-10},{10,10}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput AttitudeConsignAP[2](
|
||||
each quantity="Mechanics.Rotation.Angle",
|
||||
each displayUnit="rad") "Desired attitude autopilot mode consign" annotation(Placement(
|
||||
transformation(
|
||||
origin={81,61},
|
||||
extent={{-16,-16},{16,16}}),
|
||||
iconTransformation(
|
||||
origin={100,-50},
|
||||
extent={{-10,-10},{10,10}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Attitude[3](
|
||||
each quantity="Mechanics.Rotation.Angle",
|
||||
each displayUnit="rad") "Real drone attitude feedback" annotation(Placement(
|
||||
transformation(extent={{-15,-25},{25,15}}),
|
||||
iconTransformation(
|
||||
origin={-50,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput Speed[3](
|
||||
each quantity="Mechanics.Translation.Velocity",
|
||||
each displayUnit="m/s") "Real drone speed feedback" annotation(Placement(
|
||||
transformation(extent={{-60,-25},{-20,15}}),
|
||||
iconTransformation(extent={{-120,-70},{-80,-30}})));
|
||||
ControlPosition controlPosition1 annotation(Placement(transformation(extent={{-75,60},{-55,80}})));
|
||||
ControlSpeed controlSpeed1 annotation(Placement(transformation(extent={{-5,55},{15,75}})));
|
||||
ComputeThrustAndAttitudeConsign computeThrustAndAttitudeConsign1 annotation(Placement(transformation(extent={{25,50},{45,70}})));
|
||||
SelectSpeedConsign selectSpeedConsign1 annotation(Placement(transformation(extent={{-45,65},{-25,75}})));
|
||||
equation
|
||||
connect(computeThrustAndAttitudeConsign1.AttitudeAPConsigns,AttitudeConsignAP) annotation(Line(
|
||||
points={{44.7,64.7},{49.7,64.7},{76,64.7},{76,61},{81,61}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(computeThrustAndAttitudeConsign1.TotalThrustAP, TotalThrustAP) annotation(
|
||||
Line(points = {{45, 55}, {60, 55}, {60, 29}, {71, 29}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(controlPosition1.DronePositionConsign,DronPositionConsign) annotation(Line(
|
||||
points={{-75,69.3},{-80,69.3},{-138,69.3},{-138,76},{-143,76}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(selectSpeedConsign1.NavigationVelocityConsign,controlPosition1.NavigationSpeedConsign) annotation(Line(
|
||||
points={{-45,69.3},{-50,69.3},{-50,70.3},{-55,70.3}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(controlSpeed1.SpeedConsign,selectSpeedConsign1.VelocityConsign) annotation(Line(
|
||||
points={{-5,69.3},{-10,69.3},{-20,69.3},{-20,69.7},{-25,69.7}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(controlPosition1.Position,Position) annotation(Line(
|
||||
points={{-66,60},{-66,55},{-66,35},{-100,35},{-105,35}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(controlSpeed1.Speed,Speed) annotation(Line(
|
||||
points={{-5,59.3},{-10,59.3},{-35,59.3},{-35,-5},{-40,-5}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(computeThrustAndAttitudeConsign1.AccelerationConsign,controlSpeed1.AccelerationConsign) annotation(Line(
|
||||
points={{25,64.3},{20,64.3},{20,64.7},{15,64.7}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(computeThrustAndAttitudeConsign1.Attitude,Attitude) annotation(Line(
|
||||
points={{25,54.3},{20,54.3},{10,54.3},{10,-5},{5,-5}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
annotation(
|
||||
DronPositionConsign(flags=2),
|
||||
Position(flags=2),
|
||||
TotalThrustAP(flags=2),
|
||||
AttitudeConsignAP(flags=2),
|
||||
Attitude(flags=2),
|
||||
Speed(flags=2),
|
||||
controlPosition1(
|
||||
DronePositionConsign(flags=2),
|
||||
Position(flags=2),
|
||||
NavigationSpeedConsign(flags=2),
|
||||
DHP(flags=2),
|
||||
HP(flags=2),
|
||||
DZP(flags=2),
|
||||
ZP(flags=2),
|
||||
HNSC(flags=2),
|
||||
ASC(flags=2)),
|
||||
controlSpeed1(
|
||||
SpeedConsign(flags=2),
|
||||
Speed(flags=2),
|
||||
AccelerationConsign(flags=2),
|
||||
speedErrorModel1(
|
||||
SpeedConsign(flags=2),
|
||||
Speed(flags=2),
|
||||
SpeedError(flags=2)),
|
||||
PID(
|
||||
u(flags=2),
|
||||
y(flags=2),
|
||||
P(
|
||||
u(flags=2),
|
||||
y(flags=2)),
|
||||
I(
|
||||
u(flags=2),
|
||||
y(flags=2)),
|
||||
D(
|
||||
u(flags=2),
|
||||
y(flags=2),
|
||||
x(flags=2)),
|
||||
Gain(
|
||||
u(flags=2),
|
||||
y(flags=2)),
|
||||
Add(
|
||||
u1(flags=2),
|
||||
u2(flags=2),
|
||||
u3(flags=2),
|
||||
y(flags=2))),
|
||||
PID2(
|
||||
u(flags=2),
|
||||
y(flags=2),
|
||||
P(
|
||||
u(flags=2),
|
||||
y(flags=2)),
|
||||
I(
|
||||
u(flags=2),
|
||||
y(flags=2)),
|
||||
D(
|
||||
u(flags=2),
|
||||
y(flags=2),
|
||||
x(flags=2)),
|
||||
Gain(
|
||||
u(flags=2),
|
||||
y(flags=2)),
|
||||
Add(
|
||||
u1(flags=2),
|
||||
u2(flags=2),
|
||||
u3(flags=2),
|
||||
y(flags=2))),
|
||||
PID1(
|
||||
u(flags=2),
|
||||
y(flags=2),
|
||||
P(
|
||||
u(flags=2),
|
||||
y(flags=2)),
|
||||
I(
|
||||
u(flags=2),
|
||||
y(flags=2)),
|
||||
D(
|
||||
u(flags=2),
|
||||
y(flags=2),
|
||||
x(flags=2)),
|
||||
Gain(
|
||||
u(flags=2),
|
||||
y(flags=2)),
|
||||
Add(
|
||||
u1(flags=2),
|
||||
u2(flags=2),
|
||||
u3(flags=2),
|
||||
y(flags=2)))),
|
||||
computeThrustAndAttitudeConsign1(
|
||||
AccelerationConsign(flags=2),
|
||||
Attitude(flags=2),
|
||||
AttitudeAPConsigns(flags=2),
|
||||
TotalThrustAP(flags=2),
|
||||
HAC(flags=2),
|
||||
Rpsi(flags=2),
|
||||
Apsi(flags=2),
|
||||
InvApsi(flags=2),
|
||||
AAC(flags=2)),
|
||||
selectSpeedConsign1(
|
||||
NavigationVelocityConsign(flags=2),
|
||||
VelocityConsign(flags=2)),
|
||||
Icon(graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-100,100},{100,-100}}),
|
||||
Text(
|
||||
textString="%name",
|
||||
fillPattern=FillPattern.None,
|
||||
extent={{5,-7},{105,-31}},
|
||||
origin={-57,21})}),
|
||||
experiment(
|
||||
StopTime=1,
|
||||
StartTime=0,
|
||||
Interval=0.002,
|
||||
MaxInterval="0.001"));
|
||||
end PositionControl;
|
||||
@@ -0,0 +1,64 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model PositionConvector "PositionConvector"
|
||||
Modelica.Blocks.Interfaces.RealInput Latitude(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="deg") "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(
|
||||
origin={-50,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput Longitude(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="deg") "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(
|
||||
origin={50,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput XCoordinate(
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(
|
||||
origin={-50,100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput YCoordinate(
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(
|
||||
origin={50,100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=90)));
|
||||
parameter Real a(
|
||||
quantity="Basics.Length",
|
||||
displayUnit="m")=6378137 "Radius semi-major axis";
|
||||
parameter Real e2=0.00669437999 "First numerical eccentricity of the elipsoid";
|
||||
parameter Real pi=3.14159265359 "Parameter pi";
|
||||
Real Lat(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "Latitude";
|
||||
Real Lon(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "Longitude";
|
||||
Real R(
|
||||
quantity="Basics.Length",
|
||||
displayUnit="m") "The prime vertical radius of curvature";
|
||||
parameter Real h=0 "Height above the elipsoide";
|
||||
equation
|
||||
// enter your equations here
|
||||
Lat = Latitude*(pi/180);
|
||||
Lon = Longitude*(pi/180);
|
||||
R = a/sqrt(1-e2*((1-cos(2*Lat))/2));
|
||||
XCoordinate = (R+h)*cos(Lat)*cos(Lon);
|
||||
YCoordinate = -1*((R+h)*cos(Lat)*sin(Lon));
|
||||
annotation(Icon(graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-100,100},{100,-100}})}));
|
||||
end PositionConvector;
|
||||
@@ -0,0 +1,232 @@
|
||||
within AIDAModelica;
|
||||
model ProSIVICToSimXInterface "Pro-SIVIC to Simulation X Interface"
|
||||
Modelica.Blocks.Interfaces.RealInput roll(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "IMU roll" annotation(Placement(
|
||||
transformation(extent={{-140,15},{-100,55}}),
|
||||
iconTransformation(
|
||||
origin={-275,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput pitch(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "IMU pitch" annotation(Placement(
|
||||
transformation(extent={{-105,15},{-65,55}}),
|
||||
iconTransformation(
|
||||
origin={-175,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput yaw(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "IMU yaw" annotation(Placement(
|
||||
transformation(extent={{-135,-10},{-95,30}}),
|
||||
iconTransformation(
|
||||
origin={-225,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput rollRate(
|
||||
quantity="Mechanics.Rotation.RotVelocity",
|
||||
displayUnit="rad/s") "IMU roll rate" annotation(Placement(
|
||||
transformation(extent={{-70,15},{-30,55}}),
|
||||
iconTransformation(
|
||||
origin={-125,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput pitchRate(
|
||||
quantity="Mechanics.Rotation.RotVelocity",
|
||||
displayUnit="rad/s") "IMU pitch rate" annotation(Placement(
|
||||
transformation(extent={{-35,15},{5,55}}),
|
||||
iconTransformation(
|
||||
origin={-75,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput yawRate(
|
||||
quantity="Mechanics.Rotation.RotVelocity",
|
||||
displayUnit="rad/s") "IMU yaw rate" annotation(Placement(
|
||||
transformation(extent={{-65,-10},{-25,30}}),
|
||||
iconTransformation(
|
||||
origin={-25,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput accelerationX(
|
||||
quantity="Mechanics.Translation.Accel",
|
||||
displayUnit="m/s²") "IMU acceleration X" annotation(Placement(
|
||||
transformation(extent={{5,-15},{45,25}}),
|
||||
iconTransformation(
|
||||
origin={25,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput accelerationY(
|
||||
quantity="Mechanics.Translation.Accel",
|
||||
displayUnit="m/s²") "IMU acceleration Y" annotation(Placement(
|
||||
transformation(extent={{35,-15},{75,25}}),
|
||||
iconTransformation(
|
||||
origin={75,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput accelerationZ(
|
||||
quantity="Mechanics.Translation.Accel",
|
||||
displayUnit="m/s²") "IMU acceleration Z" annotation(Placement(
|
||||
transformation(extent={{15,-40},{55,0}}),
|
||||
iconTransformation(
|
||||
origin={125,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput accurateLatitude(
|
||||
quantity="Geometry.Angle",
|
||||
displayUnit="deg") "GPS accurate latitude" annotation(Placement(
|
||||
transformation(extent={{70,-15},{110,25}}),
|
||||
iconTransformation(
|
||||
origin={175,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput accurateLongitude(
|
||||
quantity="Geometry.Angle",
|
||||
displayUnit="deg") "GPS accurate longitude" annotation(Placement(
|
||||
transformation(extent={{100,-40},{140,0}}),
|
||||
iconTransformation(
|
||||
origin={225,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput distance(
|
||||
quantity="Geometry.Length",
|
||||
displayUnit="m") "Lidar distance" annotation(Placement(
|
||||
transformation(extent={{110,-15},{150,25}}),
|
||||
iconTransformation(
|
||||
origin={275,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput Attitude[3](
|
||||
each quantity="Mechanics.Rotation.Angle",
|
||||
each displayUnit="rad") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-80,70},{-60,90}}),
|
||||
iconTransformation(
|
||||
origin={-225,100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput AngularVelocities[3](
|
||||
each quantity="Mechanics.Rotation.RotVelocity",
|
||||
each displayUnit="rad/s") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,70},{10,90}}),
|
||||
iconTransformation(
|
||||
origin={-75,100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput Speed[3](
|
||||
each quantity="Mechanics.Translation.Velocity",
|
||||
each displayUnit="m/s") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{50,70},{70,90}}),
|
||||
iconTransformation(
|
||||
origin={225,100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput Position[3](
|
||||
each quantity="Mechanics.Translation.Displace",
|
||||
each displayUnit="m") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{150,70},{170,90}}),
|
||||
iconTransformation(
|
||||
origin={75,100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=90)));
|
||||
AccelerationToSpeed accelerationToSpeed1 annotation(Placement(transformation(extent={{40,30},{60,50}})));
|
||||
PositionConvector positionConvector1 annotation(Placement(transformation(extent={{110,30},{130,50}})));
|
||||
equation
|
||||
connect(roll,Attitude[1]) annotation(
|
||||
Line(
|
||||
points={{-120,35},{-115,35},{-100,35},{-100,80},{-70,80}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(pitch,Attitude[2]) annotation(
|
||||
Line(
|
||||
points={{-85,35},{-80,35},{-90,35},{-90,80},{-70,80}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(yaw,Attitude[3]) annotation(
|
||||
Line(
|
||||
points={{-115,10},{-110,10},{-95,10},{-95,80},{-70,80}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(rollRate,AngularVelocities[1]) annotation(
|
||||
Line(
|
||||
points={{-50,35},{-45,35},{-30,35},{-30,80},{0,80}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(pitchRate,AngularVelocities[2]) annotation(
|
||||
Line(
|
||||
points={{-15,35},{-10,35},{-20,35},{-20,80},{0,80}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(yawRate,AngularVelocities[3]) annotation(
|
||||
Line(
|
||||
points={{-45,10},{-40,10},{-25,10},{-25,80},{0,80}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(accelerationToSpeed1.Speed[:],Speed[:]) annotation(Line(
|
||||
points={{50,50},{50,55},{50,80},{55,80},{60,80}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(accelerationX,accelerationToSpeed1.Acceleration[1]) annotation(Line(
|
||||
points={{25,5},{30,5},{49.3,5},{49.3,25},{49.3,30}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(accelerationY,accelerationToSpeed1.Acceleration[2]) annotation(Line(
|
||||
points={{55,5},{50,5},{50,25},{50,30}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(accelerationZ,accelerationToSpeed1.Acceleration[3]) annotation(Line(
|
||||
points={{35,-20},{40,-20},{50.3,-20},{50.3,25},{50.3,30}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(accurateLatitude,positionConvector1.Latitude) annotation(Line(
|
||||
points={{90,5},{95,5},{115,5},{115,25},{115,30}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(accurateLongitude,positionConvector1.Longitude) annotation(Line(
|
||||
points={{120,-20},{125,-20},{125,25},{125,30}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(positionConvector1.XCoordinate,Position[1]) annotation(Line(
|
||||
points={{115,50},{115,55},{115,80},{155,80},{160,80}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(positionConvector1.YCoordinate,Position[2]) annotation(Line(
|
||||
points={{125,50},{125,55},{125,80},{155,80},{160,80}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(distance,Position[3]) annotation(
|
||||
Line(
|
||||
points={{130,5},{150,5},{150,42.3},{150,80},{160,80}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
annotation(
|
||||
roll(flags=2),
|
||||
pitch(flags=2),
|
||||
yaw(flags=2),
|
||||
rollRate(flags=2),
|
||||
pitchRate(flags=2),
|
||||
yawRate(flags=2),
|
||||
accelerationX(flags=2),
|
||||
accelerationY(flags=2),
|
||||
accelerationZ(flags=2),
|
||||
accurateLatitude(flags=2),
|
||||
accurateLongitude(flags=2),
|
||||
distance(flags=2),
|
||||
Attitude(flags=2),
|
||||
AngularVelocities(flags=2),
|
||||
Speed(flags=2),
|
||||
Position(flags=2),
|
||||
accelerationToSpeed1(
|
||||
Acceleration(flags=2),
|
||||
Speed(flags=2)),
|
||||
Icon(
|
||||
coordinateSystem(extent={{-325,-100},{325,100}}),
|
||||
graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-326,100},{326.7,-100}})}),
|
||||
experiment(
|
||||
StopTime=1,
|
||||
StartTime=0,
|
||||
Interval=0.001));
|
||||
end ProSIVICToSimXInterface;
|
||||
@@ -0,0 +1,181 @@
|
||||
within AIDAModelica;
|
||||
model ProSIVICToSimXInterfaceTest "Pro-SIVIC to Simulation X Interface Test"
|
||||
Modelica.Blocks.Interfaces.RealInput roll(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "IMU roll" annotation(Placement(
|
||||
transformation(extent={{-140,15},{-100,55}}),
|
||||
iconTransformation(
|
||||
origin={-275,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput pitch(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "IMU pitch" annotation(Placement(
|
||||
transformation(extent={{-105,15},{-65,55}}),
|
||||
iconTransformation(
|
||||
origin={-225,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput yaw(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "IMU yaw" annotation(Placement(
|
||||
transformation(extent={{-135,-10},{-95,30}}),
|
||||
iconTransformation(
|
||||
origin={-175,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput rollRate(
|
||||
quantity="Mechanics.Rotation.RotVelocity",
|
||||
displayUnit="rad/s") "IMU roll rate" annotation(Placement(
|
||||
transformation(extent={{-70,15},{-30,55}}),
|
||||
iconTransformation(
|
||||
origin={-125,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput pitchRate(
|
||||
quantity="Mechanics.Rotation.RotVelocity",
|
||||
displayUnit="rad/s") "IMU pitch rate" annotation(Placement(
|
||||
transformation(extent={{-35,15},{5,55}}),
|
||||
iconTransformation(
|
||||
origin={-75,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput yawRate(
|
||||
quantity="Mechanics.Rotation.RotVelocity",
|
||||
displayUnit="rad/s") "IMU yaw rate" annotation(Placement(
|
||||
transformation(extent={{-65,-10},{-25,30}}),
|
||||
iconTransformation(
|
||||
origin={-25,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput SpeedX(
|
||||
quantity="Mechanics.Translation.Accel",
|
||||
displayUnit="m/s²") "IMU acceleration X" annotation(Placement(
|
||||
transformation(extent={{0,15},{40,55}}),
|
||||
iconTransformation(
|
||||
origin={25,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput SpeedY(
|
||||
quantity="Mechanics.Translation.Accel",
|
||||
displayUnit="m/s²") "IMU acceleration Y" annotation(Placement(
|
||||
transformation(extent={{30,15},{70,55}}),
|
||||
iconTransformation(
|
||||
origin={75,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput SpeedZ(
|
||||
quantity="Mechanics.Translation.Accel",
|
||||
displayUnit="m/s²") "IMU acceleration Z" annotation(Placement(
|
||||
transformation(extent={{5,-10},{45,30}}),
|
||||
iconTransformation(
|
||||
origin={125,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput X(
|
||||
quantity="Geometry.Angle",
|
||||
displayUnit="deg") "GPS accurate latitude" annotation(Placement(
|
||||
transformation(extent={{65,15},{105,55}}),
|
||||
iconTransformation(
|
||||
origin={175,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput Y(
|
||||
quantity="Geometry.Angle",
|
||||
displayUnit="deg") "GPS accurate longitude" annotation(Placement(
|
||||
transformation(extent={{75,-10},{115,30}}),
|
||||
iconTransformation(
|
||||
origin={225,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput Z(
|
||||
quantity="Geometry.Length",
|
||||
displayUnit="m") "Lidar distance" annotation(Placement(
|
||||
transformation(extent={{100,15},{140,55}}),
|
||||
iconTransformation(
|
||||
origin={275,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput Attitude[3](
|
||||
each quantity="Mechanics.Rotation.Angle",
|
||||
each displayUnit="rad") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-80,70},{-60,90}}),
|
||||
iconTransformation(
|
||||
origin={-225,100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput AngularVelocities[3](
|
||||
each quantity="Mechanics.Rotation.RotVelocity",
|
||||
each displayUnit="rad/s") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,70},{10,90}}),
|
||||
iconTransformation(
|
||||
origin={-75,100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput Speed[3](
|
||||
each quantity="Mechanics.Translation.Velocity",
|
||||
each displayUnit="m/s") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{50,70},{70,90}}),
|
||||
iconTransformation(
|
||||
origin={225,100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput Position[3](
|
||||
each quantity="Mechanics.Translation.Displace",
|
||||
each displayUnit="m") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{150,70},{170,90}}),
|
||||
iconTransformation(
|
||||
origin={75,100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=90)));
|
||||
parameter Real Longitude0 "Long repère AIDA";
|
||||
parameter Real Latitude0 "Lat repère AIDA";
|
||||
parameter Real Rt=6378.137 "Rayon terre en m";
|
||||
constant Real Pi=3.14159 "Pi";
|
||||
parameter Real K;
|
||||
Real Xn;
|
||||
Real Yw;
|
||||
initial equation
|
||||
Latitude0=X;
|
||||
Longitude0=Y;
|
||||
K=Rt*Pi/180;
|
||||
equation
|
||||
// enter your equations here
|
||||
Attitude = {roll,-1*pitch,-1*yaw};
|
||||
AngularVelocities = {rollRate,-1*pitchRate,-1*yawRate};
|
||||
|
||||
//convertion lat/long
|
||||
Xn=(X-Latitude0)*K;
|
||||
Yw=cos(X*Pi/180)*(Longitude0-Y)*K;
|
||||
Position = {Xn,-Yw,-1*Z};
|
||||
Speed = {K*SpeedX,K*SpeedY*cos(X*Pi/180),-1*SpeedZ};
|
||||
annotation(
|
||||
roll(flags=2),
|
||||
pitch(flags=2),
|
||||
yaw(flags=2),
|
||||
rollRate(flags=2),
|
||||
pitchRate(flags=2),
|
||||
yawRate(flags=2),
|
||||
SpeedX(flags=2),
|
||||
SpeedY(flags=2),
|
||||
SpeedZ(flags=2),
|
||||
X(flags=2),
|
||||
Y(flags=2),
|
||||
Z(flags=2),
|
||||
Attitude(flags=2),
|
||||
AngularVelocities(flags=2),
|
||||
Speed(flags=2),
|
||||
Position(flags=2),
|
||||
Icon(
|
||||
coordinateSystem(extent={{-325,-100},{325,100}}),
|
||||
graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-326,100},{326.7,-100}})}),
|
||||
experiment(
|
||||
StopTime=1,
|
||||
StartTime=0,
|
||||
Interval=0.002,
|
||||
MaxInterval="0.001"));
|
||||
end ProSIVICToSimXInterfaceTest;
|
||||
1718
SimulationModels/OpenModelica 1.25/AIDAModelica/QuadcopterModel.mo
Normal file
1718
SimulationModels/OpenModelica 1.25/AIDAModelica/QuadcopterModel.mo
Normal file
File diff suppressed because it is too large
Load Diff
165
SimulationModels/OpenModelica 1.25/AIDAModelica/RemoteControl.mo
Normal file
165
SimulationModels/OpenModelica 1.25/AIDAModelica/RemoteControl.mo
Normal file
@@ -0,0 +1,165 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model RemoteControl "RemoteControl"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Real VerticalSpeedCommand_i(start = 0) "commande interne non filtree";
|
||||
Modelica.Blocks.Interfaces.RealOutput VerticalSpeedCommand(quantity = "Mechanics.Translation.Velocity", displayUnit = "m/s") "'output Real' as connector" annotation(
|
||||
Placement(transformation(origin = {90.4, -44.4}, extent = {{9.6, 22.4}, {25.6, 38.4}}), iconTransformation(origin = {-75, -100}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
|
||||
Real RollCommand_i(start = 0) "commande interne non filtree";
|
||||
Modelica.Blocks.Interfaces.RealOutput RollCommand(quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "'output Real' as connector" annotation(
|
||||
Placement(transformation(origin = {55.2, 1.6}, extent = {{44.8, 6.4}, {60.8, 22.4}}), iconTransformation(origin = {-25, -100}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
|
||||
Real PitchCommand_i(start = 0) "commande interne non filtree";
|
||||
Modelica.Blocks.Interfaces.RealOutput PitchCommand(quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "'output Real' as connector" annotation(
|
||||
Placement(transformation(origin = {130.4, 94.8}, extent = {{-30.4, -36.8}, {-14.4, -20.8}}), iconTransformation(origin = {25, -100}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
|
||||
Real YawCommand_i(start = 0) "commande interne non filtree";
|
||||
Modelica.Blocks.Interfaces.RealOutput YawCommand(quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "'output Real' as connector" annotation(
|
||||
Placement(transformation(origin = {85.6, -18.4}, extent = {{14.4, -41.6}, {30.4, -25.6}}), iconTransformation(origin = {75, -100}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
|
||||
Modelica.Blocks.Interfaces.BooleanOutput ControlMode "'output Boolean' as connector" annotation(
|
||||
Placement(transformation(origin = {109, -89}, extent = {{-9, -9}, {9, 9}}), iconTransformation(origin = {-125, -50}, extent = {{-10, -10}, {10, 10}}, rotation = 180)));
|
||||
Modelica.Blocks.Interfaces.BooleanOutput IndicatorYawConsign "'output Boolean' as connector" annotation(
|
||||
Placement(transformation(origin = {108, 40}, extent = {{-8, -8}, {8, 8}}), iconTransformation(origin = {-125, 0}, extent = {{-10, -10}, {10, 10}}, rotation = -180)));
|
||||
parameter Real VS_cmd = 0.5;
|
||||
parameter Real[2] VS_cmd_t = {3, 5} "Instants de démarrage et fin du step";
|
||||
parameter Real Pitch_cmd = 0.03;
|
||||
parameter Real[2] Pitch_cmd_t = {1, 4} "Instants de démarrage et fin du step, après stabilisation verticale";
|
||||
parameter Real Yaw_cmd = 0.5;
|
||||
parameter Real[2] Yaw_cmd_t = {6, 8} "Instants de démarrage et fin du step";
|
||||
parameter Real Roll_cmd = 0.2 "Amplitude step ";
|
||||
parameter Real Roll_cmd_t[2] = {1, 100} "Instants de démarrage et fin du step";
|
||||
parameter Real Tcst = 0.1 "constante de temps pour filter les sorties du remote ctl";
|
||||
Boolean Auto_Ctl_Enabled(start = true);
|
||||
parameter Real Auto_Ctl_t = 0.1 "Instant de déclenchement du mode auto";
|
||||
initial equation
|
||||
PitchCommand = 0;
|
||||
RollCommand = 0;
|
||||
YawCommand = 0;
|
||||
VerticalSpeedCommand = 0;
|
||||
PitchCommand_i = 0;
|
||||
RollCommand_i = 0;
|
||||
YawCommand_i = 0;
|
||||
VerticalSpeedCommand_i = 0;
|
||||
ControlMode = false;
|
||||
IndicatorYawConsign = false;
|
||||
Auto_Ctl_Enabled = true;
|
||||
algorithm
|
||||
when time >= Auto_Ctl_t and pre(Auto_Ctl_Enabled) then
|
||||
ControlMode := true;
|
||||
end when;
|
||||
when time > VS_cmd_t[1] then
|
||||
VerticalSpeedCommand_i := VS_cmd;
|
||||
ControlMode := false;
|
||||
Auto_Ctl_Enabled := false;
|
||||
end when;
|
||||
when time > VS_cmd_t[2] then
|
||||
VerticalSpeedCommand_i := 0;
|
||||
end when;
|
||||
when time > VS_cmd_t[2] + Pitch_cmd_t[1] then
|
||||
PitchCommand_i := Pitch_cmd;
|
||||
ControlMode := false;
|
||||
end when;
|
||||
when time > VS_cmd_t[2] + Pitch_cmd_t[2] then
|
||||
PitchCommand_i := 0;
|
||||
end when;
|
||||
when time > VS_cmd_t[2] + Roll_cmd_t[1] then
|
||||
RollCommand_i := Roll_cmd;
|
||||
ControlMode := false;
|
||||
end when;
|
||||
when time > VS_cmd_t[2] + Roll_cmd_t[2] then
|
||||
RollCommand_i := 0;
|
||||
end when;
|
||||
//Yaw command
|
||||
when time > VS_cmd_t[2] + Yaw_cmd_t[1] then
|
||||
YawCommand_i := Yaw_cmd;
|
||||
ControlMode := false;
|
||||
IndicatorYawConsign := true;
|
||||
end when;
|
||||
//IndicatorYawConsign := true;
|
||||
when time >= VS_cmd_t[2] + Yaw_cmd_t[2] then
|
||||
YawCommand_i := 0;
|
||||
IndicatorYawConsign := false;
|
||||
end when;
|
||||
//IndicatorYawConsign := false;
|
||||
/*if time>Yaw_cmd_t[2] then
|
||||
|
||||
int_yaw := 0;
|
||||
IndicatorYawConsign := false;
|
||||
|
||||
elseif time>Yaw_cmd_t[1] then
|
||||
|
||||
int_yaw := DYaw_cmd;
|
||||
IndicatorYawConsign := true;
|
||||
|
||||
else
|
||||
|
||||
int_yaw := 0;
|
||||
IndicatorYawConsign := false;
|
||||
|
||||
end if;*/
|
||||
equation
|
||||
// remote control filter with Tcst time constant
|
||||
der(VerticalSpeedCommand) = (VerticalSpeedCommand_i - VerticalSpeedCommand) / Tcst;
|
||||
der(RollCommand) = (RollCommand_i - RollCommand) / Tcst;
|
||||
der(PitchCommand) = (PitchCommand_i - PitchCommand) / Tcst;
|
||||
der(YawCommand) = (YawCommand_i - YawCommand) / Tcst;
|
||||
/* initial code of Andrii VAKULKO, destined to be used with manual button included in the SimulationX interface
|
||||
if VSCommand1 > 0 then
|
||||
VerticalSpeedCommand = -1;
|
||||
elseif VSCommand2 > 0 then
|
||||
VerticalSpeedCommand = -0.8;
|
||||
elseif VSCommand3 > 0 then
|
||||
VerticalSpeedCommand = -0.6;
|
||||
elseif VSCommand4 > 0 then
|
||||
VerticalSpeedCommand = -0.4;
|
||||
elseif VSCommand5 > 0 then
|
||||
VerticalSpeedCommand = -0.2;
|
||||
elseif VSCommand6 > 0 then
|
||||
VerticalSpeedCommand = 0.2;
|
||||
elseif VSCommand7 > 0 then
|
||||
VerticalSpeedCommand = 0.4;
|
||||
elseif VSCommand8 > 0 then
|
||||
VerticalSpeedCommand = 0.6;
|
||||
elseif VSCommand9 > 0 then
|
||||
VerticalSpeedCommand = 0.8;
|
||||
elseif VSCommand10 > 0 then
|
||||
VerticalSpeedCommand = 1;
|
||||
else
|
||||
VerticalSpeedCommand = 0;
|
||||
end if;
|
||||
|
||||
if YCommandP > 0 then
|
||||
der(YawCommand) = 0.01;
|
||||
//IndicatorYawConsign = true;
|
||||
elseif YCommandM > 0 then
|
||||
der(YawCommand) = -0.01;
|
||||
//IndicatorYawConsign = true;
|
||||
else
|
||||
YawCommand = 0;
|
||||
//IndicatorYawConsign = false;
|
||||
end if;
|
||||
|
||||
if RCommandP > 0 then
|
||||
RollCommand = 0.0261799; //15 deg
|
||||
elseif RCommandM > 0 then
|
||||
RollCommand = -0.0261799;
|
||||
else
|
||||
RollCommand = 0;
|
||||
end if;
|
||||
|
||||
if PCommandP > 0 then
|
||||
PitchCommand = 0.0261799;
|
||||
elseif PCommandM > 0 then
|
||||
PitchCommand = -0.0261799;
|
||||
else
|
||||
PitchCommand = 0;
|
||||
end if;*/
|
||||
annotation(
|
||||
VerticalSpeedCommand(flags = 2),
|
||||
RollCommand(flags = 2),
|
||||
PitchCommand(flags = 2),
|
||||
YawCommand(flags = 2),
|
||||
ControlMode(flags = 2),
|
||||
IndicatorYawConsign(flags = 2),
|
||||
Icon(coordinateSystem(extent = {{-125, -100}, {125, 100}}, initialScale = 0.1), graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-123.3, 100}, {123.3, -100}}), Text(origin = {-12, 10}, extent = {{-78, 18}, {86, -20}}, textString = "RemoteControl")}),
|
||||
experiment(StopTime = 10, StartTime = 0, Interval = 0.02, MaxInterval = "0.001"));
|
||||
end RemoteControl;
|
||||
@@ -0,0 +1,184 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model RemoteControlForIntegration "Remote Control For Integration"
|
||||
Modelica.Blocks.Interfaces.RealOutput VerticalSpeedCommand(
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
displayUnit="m/s") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,65},{10,85}}),
|
||||
iconTransformation(
|
||||
origin={-75,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput RollCommand(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,35},{10,55}}),
|
||||
iconTransformation(
|
||||
origin={-25,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput PitchCommand(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,5},{10,25}}),
|
||||
iconTransformation(
|
||||
origin={25,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput YawCommand(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-9.699999999999999,-24.7},{10.3,-4.7}}),
|
||||
iconTransformation(
|
||||
origin={75,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.BooleanOutput ControlMode "'output Boolean' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,-65},{10,-45}}),
|
||||
iconTransformation(
|
||||
origin={-125,-50},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=180)));
|
||||
Modelica.Blocks.Interfaces.BooleanOutput IndicatorYawConsign "'output Boolean' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,-50},{10,-30}}),
|
||||
iconTransformation(
|
||||
origin={-125,0},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-180)));
|
||||
Modelica.Blocks.Tables.CombiTable1Ds VerticalSpeedCommandCurve(
|
||||
table={{0,0},{8.517197272438,0},{8.517197272439,-0.6},{20.94728806169,-0.6},{20.94873106169,0},{121.801046301399,0},{121.802489301399,0},{129.0944818387,0},{129.0959258387,0},{134.215124194368,0},{134.216567194368,0},{134.628815476324,0},{134.630258476324,0},{138.533727217968,0},{138.535170217968,0},{245.054,0}},
|
||||
smoothness=Modelica.Blocks.Types.Smoothness.LinearSegments) annotation(Placement(transformation(extent={{-40,65},{-20,85}})));
|
||||
RunFlightPlan.TimeSource timeSource1 annotation(Placement(transformation(extent={{-95,45},{-75,65}})));
|
||||
Modelica.Blocks.Tables.CombiTable1Ds RollCommandCurve(
|
||||
table={{0,0},{25.786492253237,0},{25.787935253237,0},{32.204791441651,0},{32.206234441651,0},{32.79902904655,0},{32.800616390534,0},{37.687626723901,0},{37.689069723901,0},{39.778866585705,0},{39.780309585705,0},{44.391515243107,0},{44.392958243107,0},{64.219238055642,0},{64.220681055642,0},{65.533297453724,0},{65.534849785025,0},{69.167337517444,0},{69.168780517444,0},{71.233189315965,0},{71.234632315965,0},{91.730954881384,0},{91.732397881384,0},{92.176860934385,0},{92.177950148563,0},{94.097230193319,0},{94.098673193319,0},{94.54309811646,0},{94.544187128709,0},{99.301664560029,0},{99.303107560029,0},{99.93640873338,0},{99.93785173338,0},{174.525661337499,0},{174.527104337499,0},{183.942664820241,0},{183.944107820241,0},{184.868730074659,0},{184.870173074659,0},{191.639185376725,0},{191.640628376725,0},{192.552594341689,0},{192.554037341689,0},{193.161855687393,0},{193.162941723513,0},{194.102624172672,0},{194.104067172672,0},{196.058768109232,0},{196.060211109232,0},{197.235529291973,0},{197.236972291973,0},{198.205941202781,0},{198.207384202781,0},{200.86348599772,0},{200.86492899772,0},{201.473218912813,0},{201.474306538157,0},{202.648655689236,0},{202.650098689236,0},{203.258139206362,0},{203.25922614281,0},{218.761788196219,0},{218.763231196219,0},{218.97331230055,0},{218.974959657084,0},{245.054,0}},
|
||||
smoothness=Modelica.Blocks.Types.Smoothness.LinearSegments) annotation(Placement(transformation(extent={{-40,35},{-20,55}})));
|
||||
Modelica.Blocks.Tables.CombiTable1Ds PitchCommandCurve(
|
||||
table={{0,0},{48.094293681429,0},{48.095736681429,0},{54.591834225423,0},{54.593277225423,0},{55.513370691687,0},{55.514813691687,0},{61.182904112935,0},{61.184347112935,0},{72.633378124442,0},{72.634821124442,0},{75.836703739009,0},{75.838146739009,0},{76.190291946595,0},{76.191899584097,0},{83.746287567012,0},{83.747730567012,0},{86.669911803152,0},{86.671354803152,0},{89.874386081548,0},{89.875829081548,0},{101.945717413619,0},{101.947160413619,0},{103.004541167946,0},{103.005984167946,0},{103.504697052053,0},{103.505784233044,0},{108.546832048665,0},{108.548275048665,0},{110.016958010245,0},{110.018524511934,0},{111.926708452288,0},{111.928151452288,0},{114.939234058818,0},{114.940677058818,0},{116.125168170284,0},{116.126611170284,0},{147.483847367729,0},{147.485290367729,0},{153.311386368157,0},{153.312829368157,0},{154.803428193241,0},{154.804871193241,0},{159.76161430756,0},{159.76305730756,0},{162.187547920928,0},{162.188990920928,0},{163.20323940764,0},{163.204323638944,0},{164.809861537178,0},{164.811304537178,0},{165.419382090795,0},{165.420469212077,0},{169.085130283014,0},{169.086573283014,0},{169.438735267897,0},{169.440342125828,0},{170.306359413346,0},{170.307802413346,0},{170.420024802715,0},{170.421519033579,0},{205.811730926797,0},{205.813173926797,0},{206.312227312983,0},{206.313315922167,0},{236.060403881501,0},{236.061846881501,0},{236.560902101512,0},{236.561990711112,0},{245.054,0}},
|
||||
smoothness=Modelica.Blocks.Types.Smoothness.LinearSegments) annotation(Placement(transformation(extent={{-40,5},{-20,25}})));
|
||||
Modelica.Blocks.Tables.CombiTable1Ds YawCommandCurve(
|
||||
table={{0,0},{245.054,0}},
|
||||
smoothness=Modelica.Blocks.Types.Smoothness.LinearSegments) annotation(Placement(transformation(extent={{-40,-25},{-20,-5}})));
|
||||
equation
|
||||
// enter your equations here
|
||||
|
||||
ControlMode = true;
|
||||
IndicatorYawConsign = false;
|
||||
|
||||
/*if VSCommand1 > 0 then
|
||||
VerticalSpeedCommand = -1;
|
||||
elseif VSCommand2 > 0 then
|
||||
VerticalSpeedCommand = -0.8;
|
||||
elseif VSCommand3 > 0 then
|
||||
VerticalSpeedCommand = -0.6;
|
||||
elseif VSCommand4 > 0 then
|
||||
VerticalSpeedCommand = -0.4;
|
||||
elseif VSCommand5 > 0 then
|
||||
VerticalSpeedCommand = -0.2;
|
||||
elseif VSCommand6 > 0 then
|
||||
VerticalSpeedCommand = 0.2;
|
||||
elseif VSCommand7 > 0 then
|
||||
VerticalSpeedCommand = 0.4;
|
||||
elseif VSCommand8 > 0 then
|
||||
VerticalSpeedCommand = 0.6;
|
||||
elseif VSCommand9 > 0 then
|
||||
VerticalSpeedCommand = 0.8;
|
||||
elseif VSCommand10 > 0 then
|
||||
VerticalSpeedCommand = 1;
|
||||
else
|
||||
VerticalSpeedCommand = 0;
|
||||
end if;
|
||||
|
||||
if YCommandP > 0 then
|
||||
der(YawCommand) = 0.01;
|
||||
IndicatorYawConsign = true;
|
||||
elseif YCommandM > 0 then
|
||||
der(YawCommand) = -0.01;
|
||||
IndicatorYawConsign = true;
|
||||
else
|
||||
YawCommand = 0;
|
||||
IndicatorYawConsign = false;
|
||||
end if;
|
||||
|
||||
if RCommandP > 0 then
|
||||
RollCommand = 0.0261799; //15 deg
|
||||
elseif RCommandM > 0 then
|
||||
RollCommand = -0.0261799;
|
||||
else
|
||||
RollCommand = 0;
|
||||
end if;
|
||||
|
||||
if PCommandP > 0 then
|
||||
PitchCommand = 0.0261799;
|
||||
elseif PCommandM > 0 then
|
||||
PitchCommand = -0.0261799;
|
||||
else
|
||||
PitchCommand = 0;
|
||||
end if;*/
|
||||
equation
|
||||
connect(VerticalSpeedCommandCurve.u,timeSource1.TimeOutput) annotation(Line(
|
||||
points={{-42,75},{-47,75},{-70,75},{-70,55},{-75,55}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
|
||||
connect(RollCommandCurve.u,timeSource1.TimeOutput) annotation(Line(
|
||||
points={{-42,45},{-47,45},{-70,45},{-70,55},{-75,55}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(PitchCommandCurve.u,timeSource1.TimeOutput) annotation(Line(
|
||||
points={{-42,15},{-47,15},{-70,15},{-70,55},{-75,55}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(YawCommandCurve.u,timeSource1.TimeOutput) annotation(Line(
|
||||
points={{-42,-15},{-47,-15},{-70,-15},{-70,55},{-75,55}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(VerticalSpeedCommandCurve.y[1],VerticalSpeedCommand) annotation(Line(
|
||||
points={{-19,75},{-14,75},{-5,75},{0,75}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(RollCommandCurve.y[1],RollCommand) annotation(Line(
|
||||
points={{-19,45},{-14,45},{-5,45},{0,45}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(PitchCommandCurve.y[1],PitchCommand) annotation(Line(
|
||||
points={{-19,15},{-14,15},{-5,15},{0,15}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(YawCommandCurve.y[1],YawCommand) annotation(Line(
|
||||
points={{-19,-15},{-14,-15},{-4.7,-15},{-4.7,-14.7},{0.3,-14.7}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
annotation(
|
||||
VerticalSpeedCommand(flags=2),
|
||||
RollCommand(flags=2),
|
||||
PitchCommand(flags=2),
|
||||
YawCommand(flags=2),
|
||||
ControlMode(flags=2),
|
||||
IndicatorYawConsign(flags=2),
|
||||
VerticalSpeedCommandCurve(
|
||||
u(flags=2),
|
||||
y(flags=2)),
|
||||
timeSource1(TimeOutput(flags=2)),
|
||||
RollCommandCurve(
|
||||
u(flags=2),
|
||||
y(flags=2)),
|
||||
PitchCommandCurve(
|
||||
u(flags=2),
|
||||
y(flags=2)),
|
||||
YawCommandCurve(
|
||||
u(flags=2),
|
||||
y(flags=2)),
|
||||
Icon(
|
||||
coordinateSystem(extent={{-125,-100},{125,100}}),
|
||||
graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-123.3,100},{123.3,-100}})}),
|
||||
experiment(
|
||||
StopTime=1,
|
||||
StartTime=0,
|
||||
Interval=0.002,
|
||||
MaxInterval="0.001"));
|
||||
end RemoteControlForIntegration;
|
||||
@@ -0,0 +1,53 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model RigidBodyDynamicModel "Rigid body dynamic model"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput Moments[3](each quantity = "Mechanics.Rotation.Torque", each displayUnit = "Nm") "Moments" annotation(
|
||||
Placement(transformation(extent = {{-75, 55}, {-35, 95}}), iconTransformation(extent = {{-120, -70}, {-80, -30}})));
|
||||
Modelica.Blocks.Interfaces.RealInput TotalThrust(each quantity = "Mechanics.Translation.Force", each displayUnit = "N") "Total Thrust" annotation(
|
||||
Placement(transformation(extent = {{-75, -15}, {-35, 25}}), iconTransformation(extent = {{-120, 30}, {-80, 70}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Attitude[3](each quantity = "Mechanics.Rotation.Angle", each displayUnit = "rad") "Attitude input" annotation(
|
||||
Placement(transformation(extent = {{-75, 25}, {-35, 65}}), iconTransformation(origin = {0, 100}, extent = {{-20, -20}, {20, 20}}, rotation = -90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput DroneAngularVelocities[3](each quantity = "Mechanics.Rotation.RotAccel", each displayUnit = "rad/s²") "Drone angular velocities" annotation(
|
||||
Placement(transformation(extent = {{0, 50}, {20, 70}}), iconTransformation(extent = {{90, 40}, {110, 60}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput DroneVelocity[3](each quantity = "Mechanics.Translation.Accel", each displayUnit = "m/s²") "Drone velocity" annotation(
|
||||
Placement(transformation(extent = {{70, 20}, {90, 40}}), iconTransformation(extent = {{90, -10}, {110, 10}})));
|
||||
Modelica.Blocks.Interfaces.RealInput ExternalForce[3] annotation(
|
||||
Placement(transformation(extent = {{-75, -50.7}, {-35, -10.7}}), iconTransformation(extent = {{-20, -120}, {20, -80}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput Accelerations[3] "'output Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{65, 5}, {85, 25}}), iconTransformation(extent = {{90, -60}, {110, -40}})));
|
||||
ComputeDroneVelocity computeDroneVelocity1 annotation(
|
||||
Placement(transformation(extent = {{-20, 10}, {0, 35}})));
|
||||
ComputeDroneAngularsVelocities computeDroneAngularsVelocities1 annotation(
|
||||
Placement(transformation(extent = {{-30, 70}, {-15, 80}})));
|
||||
equation
|
||||
// enter your equations here
|
||||
equation
|
||||
connect(computeDroneVelocity1.Attitude, Attitude[:]) annotation(
|
||||
Line(points = {{-9.333328247070313, 35}, {-15, 35}, {-50, 35}, {-50, 45}, {-55, 45}}, color = {0, 0, 127}, thickness = 0.0625),
|
||||
AutoRoute = false);
|
||||
connect(computeDroneVelocity1.TotalThrust, TotalThrust) annotation(
|
||||
Line(points = {{-20, 28.7}, {-25, 28.7}, {-50, 28.7}, {-50, 5}, {-55, 5}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeDroneAngularsVelocities1.Moments[:], Moments[:]) annotation(
|
||||
Line(points = {{-30, 75}, {-35, 75}, {-50, 75}, {-55, 75}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeDroneAngularsVelocities1.DroneAngularVelocities[:], DroneAngularVelocities[:]) annotation(
|
||||
Line(points = {{-15.3, 75}, {-10.3, 75}, {5, 75}, {5, 60}, {10, 60}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeDroneVelocity1.DroneVelocity[:], DroneVelocity[:]) annotation(
|
||||
Line(points = {{0, 28.7}, {5, 28.7}, {75, 28.7}, {75, 30}, {80, 30}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(ExternalForce[:], computeDroneVelocity1.ExternalForce[:]) annotation(
|
||||
Line(points = {{-55, -30.7}, {-50, -30.7}, {-25, -30.7}, {-25, 16.3}, {-20, 16.3}}));
|
||||
connect(computeDroneVelocity1.Accelerations[:], Accelerations[:]) annotation(
|
||||
Line(points = {{0, 16.3}, {5, 16.3}, {70, 16.3}, {70, 15}, {75, 15}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
Moments(flags = 2),
|
||||
TotalThrust(flags = 2),
|
||||
Attitude(flags = 2),
|
||||
DroneAngularVelocities(flags = 2),
|
||||
DroneVelocity(flags = 2),
|
||||
ExternalForce(flags = 2),
|
||||
computeDroneVelocity1(TotalThrust(flags = 2), Attitude(flags = 2), DroneVelocity(flags = 2), ExternalForce(flags = 2), computationAccelerationModel1(TotalThrust(flags = 2), Attitude(flags = 2), DroneAcceleration(flags = 2), ExternalForce(flags = 2), Reb(flags = 2), Rz(flags = 2), Ry(flags = 2), Rx(flags = 2)), integrator4(u(flags = 2), y(flags = 2)), integrator5(u(flags = 2), y(flags = 2)), integrator6(u(flags = 2), y(flags = 2))),
|
||||
computeDroneAngularsVelocities1(Moments(flags = 2), DroneAngularVelocities(flags = 2), computationAngularAccelerationModel1(Moments(flags = 2), DroneAngularAcceleration(flags = 2), invJ(flags = 2)), integrator1(u(flags = 2), y(flags = 2)), integrator2(u(flags = 2), y(flags = 2)), integrator3(u(flags = 2), y(flags = 2))),
|
||||
Icon(graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 100}, {103.3, -100}}), Text(origin = {-3, 10}, extent = {{-23, 10}, {23, -10}}, textString = "%name")}, coordinateSystem(initialScale = 0.1)),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end RigidBodyDynamicModel;
|
||||
@@ -0,0 +1,39 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model RigidBodyKinematicModel "Rigid body kinematic model"
|
||||
Modelica.Blocks.Interfaces.RealInput DroneAngularVelocities[3](each quantity = "Mechanics.Rotation.RotVelocity", each displayUnit = "rad/s") "Angulars velocities" annotation(
|
||||
Placement(transformation(extent = {{-120, 50}, {-80, 90}}), iconTransformation(extent = {{-120, 30}, {-80, 70}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Velocity[3](each quantity = "Mechanics.Translation.Velocity", each displayUnit = "m/s") "Velocity" annotation(
|
||||
Placement(transformation(extent = {{-120, -20}, {-80, 20}}), iconTransformation(extent = {{-120, -70}, {-80, -30}})));
|
||||
Modelica.Blocks.Interfaces.RealInput AttitudeFB[3] "Drone attitude feedback" annotation(
|
||||
Placement(transformation(extent = {{-120, 25}, {-80, 65}}), iconTransformation(origin = {-50, 100}, extent = {{-20, -20}, {20, 20}}, rotation = -90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput Attitude[3](each quantity = "Mechanics.Rotation.RotVelocity", each displayUnit = "rad/s", start = {0, 0, 0}) "Attitude derivated" annotation(
|
||||
Placement(transformation(extent = {{-45, 50}, {-25, 70}}), iconTransformation(extent = {{90, 40}, {110, 60}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput Position[3](each quantity = "Mechanics.Translation.Displace", each displayUnit = "m", start = {0, 0, 0}) "Position derivated" annotation(
|
||||
Placement(transformation(extent = {{-45, -15}, {-25, 5}}), iconTransformation(extent = {{90, -60}, {110, -40}})));
|
||||
ComputeDronePosition computeDronePosition1(integrator10(initType = Modelica.Blocks.Types.Init.NoInit, y_start = -0.04)) annotation(
|
||||
Placement(transformation(extent = {{-70, -5}, {-55, 5}})));
|
||||
ComputeDroneAttitude computeDroneAttitude1 annotation(
|
||||
Placement(transformation(extent = {{-75, 65}, {-60, 75}})));
|
||||
equation
|
||||
connect(computeDroneAttitude1.AttitudeFB[:], AttitudeFB[:]) annotation(
|
||||
Line(points = {{-70, 65}, {-70, 60}, {-70, 45}, {-95, 45}, {-100, 45}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeDroneAttitude1.Attitude[:], Attitude[:]) annotation(
|
||||
Line(points = {{-60.3, 70}, {-55.3, 70}, {-40, 70}, {-40, 60}, {-35, 60}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeDronePosition1.DronVelocity[:], Velocity[:]) annotation(
|
||||
Line(points = {{-70, 0}, {-75, 0}, {-95, 0}, {-100, 0}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeDronePosition1.Position[:], Position[:]) annotation(
|
||||
Line(points = {{-55.3, 0}, {-50.3, 0}, {-40, 0}, {-40, -5}, {-35, -5}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeDroneAttitude1.DroneAngularVelocities[:], DroneAngularVelocities[:]) annotation(
|
||||
Line(points = {{-75, 70}, {-80, 70}, {-95, 70}, {-100, 70}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
annotation(
|
||||
DroneAngularVelocities(flags = 2),
|
||||
Velocity(flags = 2),
|
||||
AttitudeFB(flags = 2),
|
||||
Attitude(flags = 2),
|
||||
Position(flags = 2),
|
||||
computeDronePosition1(DronVelocity(flags = 2), Position(flags = 2), integrator10(u(flags = 2), y(flags = 2)), integrator11(u(flags = 2), y(flags = 2)), integrator12(u(flags = 2), y(flags = 2))),
|
||||
computeDroneAttitude1(DroneAngularVelocities(flags = 2), AttitudeFB(flags = 2), Attitude(flags = 2), computationChangeAngleVelocity1(DronAngularVelocities(flags = 2), Attitude(flags = 2), ChangeAngleVelocity(flags = 2), W(flags = 2)), integrator7(u(flags = 2), y(flags = 2)), integrator8(u(flags = 2), y(flags = 2)), integrator9(u(flags = 2), y(flags = 2))),
|
||||
Icon(graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 100}, {100, -100}}), Text(origin = {-7, 1}, extent = {{-19, 11}, {19, -11}}, textString = "%name")}, coordinateSystem(initialScale = 0.1)),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end RigidBodyKinematicModel;
|
||||
2009
SimulationModels/OpenModelica 1.25/AIDAModelica/RunFlightPlan.mo
Normal file
2009
SimulationModels/OpenModelica 1.25/AIDAModelica/RunFlightPlan.mo
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,35 @@
|
||||
within AIDAModelica;
|
||||
model SelectAttitudeConsign "[SF2.3.2] Select attitude consign"
|
||||
Modelica.Blocks.Interfaces.RealInput AttitudeAPConsign[2](
|
||||
each quantity="Mechanics.Rotation.Angle",
|
||||
each displayUnit="rad") "Attitude autopilot mode consign" annotation(Placement(
|
||||
transformation(extent={{-85,10},{-45,50}}),
|
||||
iconTransformation(extent={{-120,30},{-80,70}})));
|
||||
Modelica.Blocks.Interfaces.RealInput AttitudeSACConsign[2](
|
||||
each quantity="Mechanics.Rotation.Angle",
|
||||
each displayUnit="rad") "Attitude SAC mode consign" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(extent={{-120,-70},{-80,-30}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput AttitudeConsign[2](
|
||||
each quantity="Mechanics.Rotation.Angle",
|
||||
each displayUnit="rad") "Drone attitude consign" annotation(Placement(
|
||||
transformation(extent={{-10,20},{10,40}}),
|
||||
iconTransformation(extent={{90,-10},{110,10}})));
|
||||
equation
|
||||
connect(AttitudeAPConsign[:],AttitudeConsign) annotation(Line(
|
||||
points={{-65,30},{-60,30},{-5,30},{0,30}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
annotation(
|
||||
AttitudeAPConsign(flags=2),
|
||||
AttitudeConsign(flags=2),
|
||||
Icon(graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-100,100},{100,-100}})}),
|
||||
experiment(
|
||||
StopTime=1,
|
||||
StartTime=0,
|
||||
Interval=0.001));
|
||||
end SelectAttitudeConsign;
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,35 @@
|
||||
within AIDAModelica;
|
||||
model SelectSpeedConsign "[SF2.1.2] Select speed consign"
|
||||
Modelica.Blocks.Interfaces.RealInput NavigationVelocityConsign[3](
|
||||
each quantity="Mechanics.Translation.Velocity",
|
||||
each displayUnit="m/s") "Autopilot velocity consign " annotation(Placement(
|
||||
transformation(extent={{-130,15},{-90,55}}),
|
||||
iconTransformation(extent={{-120,-20},{-80,20}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput VelocityConsign[3](
|
||||
each quantity="Mechanics.Translation.Velocity",
|
||||
each displayUnit="m/s") "Choosed velocity consign" annotation(Placement(
|
||||
transformation(extent={{-45,25},{-25,45}}),
|
||||
iconTransformation(extent={{90,-10},{110,10}})));
|
||||
equation
|
||||
connect(NavigationVelocityConsign[:],VelocityConsign[:]) annotation(Line(
|
||||
points={{-110,35},{-105,35},{-40,35},{-35,35}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
annotation(
|
||||
NavigationVelocityConsign(flags=2),
|
||||
VelocityConsign(flags=2),
|
||||
Icon(
|
||||
coordinateSystem(extent={{-100,-50},{100,50}}),
|
||||
graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-99.5,50},{100.5,-50}}),
|
||||
Line(points={{-33.3,13.3},{16.7,13.3}}),
|
||||
Line(points={{-33.1,-3.4},{16.9,-3.4}})}),
|
||||
experiment(
|
||||
StopTime=1,
|
||||
StartTime=0,
|
||||
Interval=0.002,
|
||||
MaxInterval="0.001"));
|
||||
end SelectSpeedConsign;
|
||||
@@ -0,0 +1,35 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model SelectTotalThrustConsign "[SF2.4.3] Select total thrust consign"
|
||||
Modelica.Blocks.Interfaces.RealInput TotalThrustAP(
|
||||
quantity="Mechanics.Translation.Force",
|
||||
displayUnit="N") "Total thrust autopilot mode" annotation(Placement(
|
||||
transformation(extent={{-110,30},{-70,70}}),
|
||||
iconTransformation(extent={{-120,30},{-80,70}})));
|
||||
Modelica.Blocks.Interfaces.RealInput TotalThrustSAC "Total thrust SAC mode" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(extent={{-120,-70},{-80,-30}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput TotalThrust(
|
||||
quantity="Mechanics.Translation.Force",
|
||||
displayUnit="N") "Total thrust" annotation(Placement(
|
||||
transformation(extent={{-30,40},{-10,60}}),
|
||||
iconTransformation(extent={{90,-10},{110,10}})));
|
||||
equation
|
||||
connect(TotalThrustAP,TotalThrust) annotation(Line(
|
||||
points={{-90,50},{-85,50},{-25,50},{-20,50}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
annotation(
|
||||
TotalThrustAP(flags=2),
|
||||
TotalThrust(flags=2),
|
||||
Icon(graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-100,100},{100,-100}})}),
|
||||
experiment(
|
||||
StopTime=1,
|
||||
StartTime=0,
|
||||
Interval=0.001));
|
||||
end SelectTotalThrustConsign;
|
||||
@@ -0,0 +1,97 @@
|
||||
within AIDAModelica;
|
||||
model SimXToProSIVICInterface "Simulation X to ProSIVIC Interface"
|
||||
Modelica.Blocks.Interfaces.RealInput Position[3](
|
||||
each quantity="Mechanics.Translation.Displace",
|
||||
each displayUnit="m") "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-80,60},{-40,100}}),
|
||||
iconTransformation(
|
||||
origin={-75,100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealInput Attitude[3](
|
||||
each quantity="Mechanics.Rotation.Angle",
|
||||
each displayUnit="rad") "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{20,60},{60,100}}),
|
||||
iconTransformation(
|
||||
origin={75,100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput translation_x(
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "Tracking translation x" annotation(Placement(
|
||||
transformation(extent={{-95,30},{-75,50}}),
|
||||
iconTransformation(
|
||||
origin={-125,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput translation_y(
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "Tracking translation y" annotation(Placement(
|
||||
transformation(extent={{-70,30},{-50,50}}),
|
||||
iconTransformation(
|
||||
origin={-75,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput translation_z(
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "Tracking translation z" annotation(Placement(
|
||||
transformation(extent={{-30,30},{-10,50}}),
|
||||
iconTransformation(
|
||||
origin={-25,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput rotation_xi(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "Tracking rotation xi " annotation(Placement(
|
||||
transformation(extent={{10,30},{30,50}}),
|
||||
iconTransformation(
|
||||
origin={125,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput rotation_theta(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "Tracking rotation theta" annotation(Placement(
|
||||
transformation(extent={{40,30},{60,50}}),
|
||||
iconTransformation(
|
||||
origin={75,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput rotation_phi(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "Tracking rotation phi" annotation(Placement(
|
||||
transformation(extent={{70,30},{90,50}}),
|
||||
iconTransformation(
|
||||
origin={25,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
equation
|
||||
// enter your equations here
|
||||
translation_x = Position[1];
|
||||
translation_y = -1*Position[2];
|
||||
translation_z = -1*Position[3];
|
||||
|
||||
rotation_phi = Attitude[1];
|
||||
rotation_theta = -1*Attitude[2];
|
||||
rotation_xi = -1*Attitude[3];
|
||||
annotation(
|
||||
Position(flags=2),
|
||||
Attitude(flags=2),
|
||||
translation_x(flags=2),
|
||||
translation_y(flags=2),
|
||||
translation_z(flags=2),
|
||||
rotation_xi(flags=2),
|
||||
rotation_theta(flags=2),
|
||||
rotation_phi(flags=2),
|
||||
Icon(
|
||||
coordinateSystem(extent={{-175,-100},{175,100}}),
|
||||
graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-173.3,100},{173.3,-100}})}),
|
||||
experiment(
|
||||
StopTime=1,
|
||||
StartTime=0,
|
||||
Interval=0.002,
|
||||
MaxInterval="0.001"));
|
||||
end SimXToProSIVICInterface;
|
||||
@@ -0,0 +1,169 @@
|
||||
within AIDAModelica;
|
||||
model SimXToProSIVICInterfaceTest "Simulation X to ProSIVIC Interface Test"
|
||||
Modelica.Blocks.Interfaces.RealInput Position[3](
|
||||
each quantity="Mechanics.Translation.Displace",
|
||||
each displayUnit="m") "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-80,60},{-40,100}}),
|
||||
iconTransformation(
|
||||
origin={-75,100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealInput Attitude[3](
|
||||
each quantity="Mechanics.Rotation.Angle",
|
||||
each displayUnit="rad") "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{20,60},{60,100}}),
|
||||
iconTransformation(
|
||||
origin={75,100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealInput Speed[3](
|
||||
each quantity="Mechanics.Translation.Velocity",
|
||||
each displayUnit="m/s") "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(
|
||||
origin={-275,100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealInput AngularSpeed[3](
|
||||
each quantity="Mechanics.Rotation.RotVelocity",
|
||||
each displayUnit="rad/s") "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(
|
||||
origin={275,100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput translation_x(
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "Tracking translation x" annotation(Placement(
|
||||
transformation(extent={{-95,30},{-75,50}}),
|
||||
iconTransformation(
|
||||
origin={-125,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput translation_y(
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "Tracking translation y" annotation(Placement(
|
||||
transformation(extent={{-70,30},{-50,50}}),
|
||||
iconTransformation(
|
||||
origin={-75,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput translation_z(
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "Tracking translation z" annotation(Placement(
|
||||
transformation(extent={{-30,30},{-10,50}}),
|
||||
iconTransformation(
|
||||
origin={-25,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput rotation_xi(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "Tracking rotation xi " annotation(Placement(
|
||||
transformation(extent={{10,30},{30,50}}),
|
||||
iconTransformation(
|
||||
origin={125,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput rotation_theta(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "Tracking rotation theta" annotation(Placement(
|
||||
transformation(extent={{40,30},{60,50}}),
|
||||
iconTransformation(
|
||||
origin={75,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput rotation_phi(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "Tracking rotation phi" annotation(Placement(
|
||||
transformation(extent={{70,30},{90,50}}),
|
||||
iconTransformation(
|
||||
origin={25,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput rollRate(
|
||||
quantity="Mechanics.Rotation.RotVelocity",
|
||||
displayUnit="rad/s") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(
|
||||
origin={175,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput pitchRate(
|
||||
quantity="Mechanics.Rotation.RotVelocity",
|
||||
displayUnit="rad/s") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(
|
||||
origin={225,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput yawRate(
|
||||
quantity="Mechanics.Rotation.RotVelocity",
|
||||
displayUnit="rad/s") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(
|
||||
origin={275,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput SpeedX(
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(
|
||||
origin={-275,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput SpeedY(
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(
|
||||
origin={-225,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput SpeedZ(
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(
|
||||
origin={-175,-100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=-90)));
|
||||
equation
|
||||
// enter your equations here
|
||||
translation_x = Position[1];
|
||||
translation_y = -1*Position[2];
|
||||
translation_z = -1*Position[3];
|
||||
|
||||
rotation_phi = Attitude[1];
|
||||
rotation_theta = -1*Attitude[2];
|
||||
rotation_xi = -1*Attitude[3];
|
||||
|
||||
rollRate = AngularSpeed[1];
|
||||
pitchRate = -1*AngularSpeed[2];
|
||||
yawRate = -1*AngularSpeed[3];
|
||||
|
||||
SpeedX = Speed[1];
|
||||
SpeedY = -1*Speed[2];
|
||||
SpeedZ = -1*Speed[3];
|
||||
annotation(
|
||||
Position(flags=2),
|
||||
Attitude(flags=2),
|
||||
translation_x(flags=2),
|
||||
translation_y(flags=2),
|
||||
translation_z(flags=2),
|
||||
rotation_xi(flags=2),
|
||||
rotation_theta(flags=2),
|
||||
rotation_phi(flags=2),
|
||||
Icon(
|
||||
coordinateSystem(extent={{-325,-100},{325,100}}),
|
||||
graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-323.2,100},{326.7,-100}})}),
|
||||
experiment(
|
||||
StopTime=1,
|
||||
StartTime=0,
|
||||
Interval=0.002,
|
||||
MaxInterval="0.001"));
|
||||
end SimXToProSIVICInterfaceTest;
|
||||
@@ -0,0 +1,51 @@
|
||||
within AIDAModelica;
|
||||
model SpeedErrorModel "Speed error calculate model"
|
||||
Modelica.Blocks.Interfaces.RealInput SpeedConsign[3](
|
||||
each quantity="Mechanics.Translation.Velocity",
|
||||
each displayUnit="m/s") "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(extent={{-120,-20},{-80,20}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Speed[3](
|
||||
each quantity="Mechanics.Translation.Velocity",
|
||||
each displayUnit="m/s") "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(
|
||||
origin={0,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput SpeedError[3](
|
||||
each quantity="Mechanics.Translation.Velocity",
|
||||
each displayUnit="m/s") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(extent={{85,-15},{115,15}})));
|
||||
equation
|
||||
// enter your equations here
|
||||
/*vh = {Speed[1],Speed[2]};
|
||||
vhd = {SpeedConsign[1],SpeedConsign[2]};
|
||||
HSE = vhd-vh;
|
||||
vz = Speed[3];
|
||||
vzd = SpeedConsign[3];
|
||||
ASE = vzd-vz;
|
||||
SpeedError = {HSE[1],HSE[2],ASE};*/
|
||||
SpeedError = SpeedConsign - Speed;
|
||||
annotation(Icon(graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-99.8,99.7},{100.2,-103.6}}),
|
||||
Ellipse(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-43.3,39.9},{43.4,-40.1}}),
|
||||
Text(
|
||||
textString="+",
|
||||
fillPattern=FillPattern.None,
|
||||
extent={{-46.6,13.2},{-9.9,-16.8}}),
|
||||
Text(
|
||||
textString="-",
|
||||
fillPattern=FillPattern.None,
|
||||
extent={{-20,-13.4},{16.7,-43.4}}),
|
||||
Line(points={{-43.3,-0.1},{-100,-0.1}}),
|
||||
Line(points={{90,0},{43.3,0}}),
|
||||
Line(points={{0,-93.3},{0,-40}})}));
|
||||
end SpeedErrorModel;
|
||||
@@ -0,0 +1,38 @@
|
||||
within AIDAModelica;
|
||||
model SpeedErrorModelMM "Speed error calculate model Manual mode"
|
||||
Modelica.Blocks.Interfaces.RealInput SpeedConsign(
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
displayUnit="m/s") "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(extent={{-120,30},{-80,70}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Speed(
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
displayUnit="m/s") "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(extent={{-120,-70},{-80,-30}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput SpeedError(
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
displayUnit="m/s") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(extent={{90,-10},{110,10}})));
|
||||
Real vzd(
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
displayUnit="m/s") "Desired altitude speed";
|
||||
Real vz(
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
displayUnit="m/s") "Real altitude speed";
|
||||
Real ASE(
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
displayUnit="m/s") "Altitude speed error";
|
||||
equation
|
||||
// enter your equations here
|
||||
vz = Speed;
|
||||
vzd = SpeedConsign;
|
||||
ASE = vz-vzd;
|
||||
SpeedError = ASE;
|
||||
annotation(Icon(graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-100,100},{100,-103.3}})}));
|
||||
end SpeedErrorModelMM;
|
||||
@@ -0,0 +1,24 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model SpeedErrorModelSAC "Speed error calculate model SAC"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput SpeedConsign(quantity = "Mechanics.Translation.Velocity", displayUnit = "m/s") "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-120, -60}, extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-120, -20}, {-80, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Speed(quantity = "Mechanics.Translation.Velocity", displayUnit = "m/s") "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-120, 60}, extent = {{-20, -20}, {20, 20}}), iconTransformation(origin = {0, -100}, extent = {{-20, -20}, {20, 20}}, rotation = 90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput SpeedError(quantity = "Mechanics.Translation.Velocity", displayUnit = "m/s") "'output Real' as connector" annotation(
|
||||
Placement(transformation(origin = {110, 0}, extent = {{-10, -10}, {10, 10}}), iconTransformation(extent = {{90, -10}, {110, 10}})));
|
||||
Real vzd(quantity = "Mechanics.Translation.Velocity", displayUnit = "m/s") "Desired altitude speed";
|
||||
Real vz(quantity = "Mechanics.Translation.Velocity", displayUnit = "m/s") "Real altitude speed";
|
||||
Real ASE(quantity = "Mechanics.Translation.Velocity", displayUnit = "m/s") "Altitude speed error";
|
||||
equation
|
||||
// enter your equations here
|
||||
vz = Speed;
|
||||
vzd = SpeedConsign;
|
||||
ASE = vzd - vz;
|
||||
SpeedError = ASE;
|
||||
annotation(
|
||||
Icon(graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 100}, {100, -103.3}}), Ellipse(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-53.3, 40}, {40, -40}}), Text(textString = "+", fillPattern = FillPattern.None, extent = {{-46.7, 10}, {-13.3, -16.7}}), Text(textString = "-", fillPattern = FillPattern.None, extent = {{-26.7, -16.7}, {10, -40}})}),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end SpeedErrorModelSAC;
|
||||
175
SimulationModels/OpenModelica 1.25/AIDAModelica/Step_analysis.mo
Normal file
175
SimulationModels/OpenModelica 1.25/AIDAModelica/Step_analysis.mo
Normal file
@@ -0,0 +1,175 @@
|
||||
within AIDAModelica;
|
||||
model Step_analysis "Step_analysis.mo"
|
||||
Modelica.Blocks.Interfaces.RealInput Consign "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-105,40},{-65,80}}),
|
||||
iconTransformation(extent={{-120,30},{-80,70}})));
|
||||
Modelica.Blocks.Interfaces.RealInput State "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-105,-15},{-65,25}}),
|
||||
iconTransformation(extent={{-120,-70},{-80,-30}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput Stabilized(start=0) "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{65,35},{85,55}}),
|
||||
iconTransformation(extent={{80,30},{120,70}})));
|
||||
Modelica.Blocks.Interfaces.BooleanOutput Success(start=false) "'output Boolean' as connector" annotation(Placement(
|
||||
transformation(extent={{64.7,2.3},{84.7,22.3}}),
|
||||
iconTransformation(extent={{80,-70},{120,-30}})));
|
||||
parameter Boolean Desactivate(start=false);
|
||||
parameter Real Precision(start=0.05);
|
||||
parameter Real Trigger(start=0.1);
|
||||
parameter Real Nb_Osc(start=3.0)=1.5;
|
||||
Boolean Step_Activ(fixed=false);
|
||||
Real Step_Size(start=0);
|
||||
Real Step_Start(start=0);
|
||||
Real Maximum_Overshot(start=0);
|
||||
Real Semi_Period(start=0);
|
||||
Real Last_Osc(start=0);
|
||||
parameter Real period_cst(start=0.2);
|
||||
Real Prev_Consign(start=0);
|
||||
Boolean Inside(start=false);
|
||||
Real Top[2](start={0,0});
|
||||
Real Prev_Top[2](start={0,0});
|
||||
Real First(start=0);
|
||||
Real x(start=0);
|
||||
Real DerS;
|
||||
parameter Real T(start=100*Modelica.Constants.eps) "time constant for input State derivation";
|
||||
algorithm
|
||||
if Desactivate then
|
||||
|
||||
Step_Start:=0;
|
||||
Step_Size:=0;
|
||||
First:=0;
|
||||
Inside:=false;
|
||||
Success:=false;
|
||||
Maximum_Overshot:=0;
|
||||
Semi_Period:=0;
|
||||
Prev_Top:={0,0};
|
||||
Top:={0,0};
|
||||
Stabilized:=0;
|
||||
|
||||
else
|
||||
|
||||
|
||||
//détection d'un step de consign
|
||||
if not Step_Activ then
|
||||
|
||||
when abs(Consign-Prev_Consign) > Trigger then
|
||||
|
||||
Step_Activ:=true;
|
||||
Step_Start:=time;
|
||||
Step_Size:=Consign-Prev_Consign;
|
||||
|
||||
end when;
|
||||
|
||||
Prev_Consign:=Consign;
|
||||
|
||||
elseif Step_Activ then
|
||||
|
||||
//il faut surveiller que la consign ne varie plus
|
||||
/*if abs(Consign-Prev_Consign) > Trigger then
|
||||
|
||||
Step_Start:=time;
|
||||
Step_Size:=Consign-Prev_Consign;
|
||||
First:=0;
|
||||
Inside:=false;
|
||||
Success:=false;
|
||||
Maximum_Overshot:=0;
|
||||
Semi_Period:=0;
|
||||
Prev_Top:={0,0};
|
||||
Top:={0,0};
|
||||
Stabilized:=0;
|
||||
|
||||
end if ;*/
|
||||
|
||||
//Détermination du temps de réponse pour un réponse non oscillatoire
|
||||
when abs(State-Consign) < Precision*abs(Step_Size) then
|
||||
First:=time-Step_Start;
|
||||
Stabilized:=First;
|
||||
Inside:=true;
|
||||
elsewhen abs(State-Consign) >= Precision*abs(Step_Size) then
|
||||
Inside:=false;
|
||||
Success:=false;
|
||||
end when;
|
||||
|
||||
//si on est à la consigne au bout de N période, la réponse est Inside
|
||||
when time-(First+Step_Start)>Semi_Period*Nb_Osc and Inside and Semi_Period>0 then
|
||||
Success:=true;
|
||||
end when;
|
||||
|
||||
//calcul de la semi-période d'oscillation, si on est passé une fois autour de la consign (First>0)
|
||||
when not Success and abs(DerS)<abs(Step_Size)/1000 and First>0 then //si success, la réponse est stabilisée : on ne calcule plus la période
|
||||
//premier passage
|
||||
if Last_Osc==0 then
|
||||
Maximum_Overshot:= (State - Consign)/Step_Size;
|
||||
|
||||
//deuxième passage
|
||||
elseif Last_Osc<>0 and Semi_Period==0 then
|
||||
Semi_Period:=2*(time-Last_Osc);
|
||||
|
||||
//troisième passage et plus
|
||||
elseif Last_Osc<>0 then
|
||||
Semi_Period:=(1-period_cst)*Semi_Period+2*period_cst*(time-Last_Osc);
|
||||
end if;
|
||||
Last_Osc:=time;
|
||||
//enregistrement des sommets successifs
|
||||
if (State-Consign)*sign(Step_Size)>0 then
|
||||
Prev_Top:=Top;
|
||||
Top[1]:=time-Step_Start;
|
||||
Top[2]:=State-Consign;
|
||||
end if;
|
||||
// estimation par interpolation du temps de réponse : en prenant le dernier instant ou on passe sous le seuil, le résultat est discontinu car dépend de la localisation extact de la dernière oscillation
|
||||
if Stabilized==First and Inside and Prev_Top[1]>0 and State-Consign>0 then
|
||||
Stabilized:=Top[1]+(Precision*Step_Size-Top[2])*(Top[1]-Prev_Top[1])/(Top[2]-Prev_Top[2]);
|
||||
end if;
|
||||
|
||||
end when;
|
||||
|
||||
end if;
|
||||
end if;
|
||||
initial equation
|
||||
x=0;
|
||||
equation
|
||||
//calcul de la dérivée de l'entrée State (sinon ne fonctionne pas en FMU, car on ne peux avoir un bloc dérivé directement sur une entrée : Error type DerOfInput)
|
||||
if Desactivate then
|
||||
DerS=0;
|
||||
else
|
||||
der(x)=(State-x)/T;
|
||||
DerS=(State-x)/T;
|
||||
end if;
|
||||
annotation(
|
||||
Diagram(graphics={
|
||||
Line(
|
||||
points={{-50,5},{-35,5},{-25,70},{-20,45},{-15,55},{-10,
|
||||
50},{-5,50},{40,50}},
|
||||
smooth=Smooth.Bezier),
|
||||
Line(points={{40,55},{-60,55}}),
|
||||
Line(points={{40,45},{-60,45}}),
|
||||
Text(
|
||||
textString="x % of target",
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-5,30},{35,20}}),
|
||||
Line(points={{-20,55},{-20,5}}),
|
||||
Line(points={{-40,15},{-40,5}}),
|
||||
Text(
|
||||
textString="Time to reach",
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-15,35},{35,25}}),
|
||||
Line(
|
||||
points={{-50,5},{-35,5},{-25,70},{-20,45},{-15,55},{-10,
|
||||
50},{-5,50},{40,50}},
|
||||
smooth=Smooth.Bezier),
|
||||
Line(points={{40,55},{-60,55}}),
|
||||
Line(points={{40,45},{-60,45}}),
|
||||
Text(
|
||||
textString="x % of target",
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-5,30},{35,20}}),
|
||||
Line(points={{-20,55},{-20,5}}),
|
||||
Line(points={{-40,15},{-40,5}}),
|
||||
Text(
|
||||
textString="Time to reach",
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-15,35},{35,25}})}),
|
||||
experiment(
|
||||
StopTime=1,
|
||||
StartTime=0,
|
||||
Interval=0.001));
|
||||
end Step_analysis;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
15
SimulationModels/OpenModelica 1.25/AIDAModelica/WSSModel.mo
Normal file
15
SimulationModels/OpenModelica 1.25/AIDAModelica/WSSModel.mo
Normal file
@@ -0,0 +1,15 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model WSSModel "Steady-steta speed model"
|
||||
Modelica.Blocks.Interfaces.RealInput CmdKIn "K-th command input" annotation(
|
||||
Placement(transformation(origin = {-120, 0}, extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-95, -20}, {-55, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput WSSOut(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") "Steady-state velocity output" annotation(
|
||||
Placement(transformation(origin = {110, 0}, extent = {{-10, -10}, {10, 10}}), iconTransformation(extent = {{65, -10}, {85, 10}})));
|
||||
parameter Real cR(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") = 626.51735092990043 "parameter cR";
|
||||
parameter Real wb(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rpm") = 222.30956814352572 "parameter wb";
|
||||
equation
|
||||
// enter your equations here
|
||||
WSSOut = cR * CmdKIn + wb;
|
||||
annotation(
|
||||
Icon(coordinateSystem(extent = {{-75, -100}, {75, 100}}, initialScale = 0.1), graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-73.3, 50}, {73.3, -50}}), Text(origin = {-6, 2}, extent = {{-16, 6}, {30, -10}}, textString = "%name")}));
|
||||
end WSSModel;
|
||||
@@ -0,0 +1,161 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model Wind2DModel
|
||||
|
||||
parameter Real rho = 1.225
|
||||
"Air density [kg/m3]. Used in the aerodynamic drag formulation. Typical value at sea level under ISA conditions.";
|
||||
|
||||
parameter Real Cd = 1.0
|
||||
"Equivalent aerodynamic drag coefficient of the vehicle projected in the horizontal plane. Represents the global aerodynamic resistance to wind.";
|
||||
|
||||
parameter Real A = 0.05
|
||||
"Equivalent lateral reference area exposed to the wind [m2]. Represents the projected surface area of the vehicle that contributes to aerodynamic drag.";
|
||||
|
||||
parameter Real eps = 1e-6
|
||||
"Numerical regularization term added inside the wind speed computation to avoid singularities when the wind magnitude approaches zero.";
|
||||
|
||||
parameter Real Wmean = 8
|
||||
"Mean horizontal wind speed magnitude [m/s]. Defines the steady-state wind component in the environment.";
|
||||
|
||||
parameter Real windDir = 0
|
||||
"Direction of the mean wind in the ground frame [rad]. Angle measured from the X axis toward the Y axis.";
|
||||
|
||||
parameter Real Tg = 3
|
||||
"Duration of a gust event [s]. Controls the temporal length of the cosine-shaped gust profile.";
|
||||
|
||||
parameter Real gustRate = 0.02
|
||||
"Average occurrence rate of gust events [1/s]. The expected number of gusts per second. Used to generate stochastic gust arrival times.";
|
||||
|
||||
parameter Real WgustMax = 6
|
||||
"Maximum amplitude of gust velocity perturbations [m/s]. Each gust amplitude is randomly generated between 0 and this value.";
|
||||
|
||||
parameter Real At1 = 0.6
|
||||
"Amplitude of the first sinusoidal turbulence component acting along the X direction [m/s].";
|
||||
|
||||
parameter Real At2 = 0.25
|
||||
"Amplitude of the second sinusoidal turbulence component acting along the X direction [m/s].";
|
||||
|
||||
parameter Real Bt1 = 0.6
|
||||
"Amplitude of the first sinusoidal turbulence component acting along the Y direction [m/s].";
|
||||
|
||||
parameter Real Bt2 = 0.25
|
||||
"Amplitude of the second sinusoidal turbulence component acting along the Y direction [m/s].";
|
||||
|
||||
parameter Real f1 = 0.15
|
||||
"Frequency of the first turbulence harmonic [Hz]. Represents a low-frequency atmospheric fluctuation.";
|
||||
|
||||
parameter Real f2 = 0.7
|
||||
"Frequency of the second turbulence harmonic [Hz]. Represents a higher-frequency turbulence component.";
|
||||
|
||||
parameter Real f3 = 0.21
|
||||
"Frequency of the first turbulence harmonic along the Y direction [Hz].";
|
||||
|
||||
parameter Real f4 = 0.9
|
||||
"Frequency of the second turbulence harmonic along the Y direction [Hz].";
|
||||
|
||||
parameter Real phi1 = 0
|
||||
"Phase shift of the first X-direction turbulence component [rad]. Allows decorrelation of turbulence signals.";
|
||||
|
||||
parameter Real phi2 = 0.8
|
||||
"Phase shift of the second X-direction turbulence component [rad].";
|
||||
|
||||
parameter Real phi3 = 1.3
|
||||
"Phase shift of the first Y-direction turbulence component [rad].";
|
||||
|
||||
parameter Real phi4 = 2.1
|
||||
"Phase shift of the second Y-direction turbulence component [rad].";
|
||||
|
||||
parameter Integer seed0 = 12345 "Initial random seed";
|
||||
|
||||
Modelica.Blocks.Interfaces.RealOutput Fy
|
||||
"Aerodynamic Y wind force in ground frame [N]" annotation(
|
||||
Placement(transformation(origin = {110, -76}, extent = {{-10, -10}, {10, 10}}), iconTransformation(origin = {70, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
|
||||
|
||||
Modelica.Blocks.Interfaces.RealOutput Fx
|
||||
"Aerodynamic X wind force in ground frame [N]" annotation(
|
||||
Placement(transformation(origin = {110, 76}, extent = {{-10, -10}, {10, 10}}), iconTransformation(origin = {-70, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
|
||||
|
||||
Modelica.Blocks.Interfaces.RealOutput windVelX "Wind velocity component in X direction [m/s]";
|
||||
|
||||
Modelica.Blocks.Interfaces.RealOutput windVelY "Wind velocity component in Y direction [m/s]";
|
||||
|
||||
protected
|
||||
|
||||
Real wx_mean;
|
||||
Real wy_mean;
|
||||
Real wx_turb;
|
||||
Real wy_turb;
|
||||
Real wx_gust;
|
||||
Real wy_gust;
|
||||
Real wx;
|
||||
Real wy;
|
||||
Real windSpeed;
|
||||
|
||||
Real tau;
|
||||
Real gust;
|
||||
|
||||
discrete Real gustStart(start = -100);
|
||||
discrete Real nextGustTime(start = 5);
|
||||
discrete Real gustAmp(start = 0);
|
||||
discrete Real gustDirection(start = 0);
|
||||
|
||||
discrete Integer seed(start = seed0);
|
||||
|
||||
constant Integer a = 1664525;
|
||||
constant Integer c = 1013904223;
|
||||
constant Integer m = 2147483647;
|
||||
|
||||
algorithm
|
||||
when time >= pre(nextGustTime) then
|
||||
|
||||
seed := mod(a*pre(seed) + c, m);
|
||||
gustStart := time;
|
||||
gustAmp := WgustMax * seed / m;
|
||||
|
||||
seed := mod(a*seed + c, m);
|
||||
gustDirection := 2*Modelica.Constants.pi * seed / m;
|
||||
|
||||
seed := mod(a*seed + c, m);
|
||||
nextGustTime := time - log(max(seed/m,1e-6)) / gustRate;
|
||||
end when;
|
||||
equation
|
||||
|
||||
wx_mean = Wmean * cos(windDir);
|
||||
wy_mean = Wmean * sin(windDir);
|
||||
|
||||
wx_turb =
|
||||
At1 * sin(2*Modelica.Constants.pi*f1*time + phi1)
|
||||
+ At2 * sin(2*Modelica.Constants.pi*f2*time + phi2);
|
||||
|
||||
wy_turb =
|
||||
Bt1 * sin(2*Modelica.Constants.pi*f3*time + phi3)
|
||||
+ Bt2 * sin(2*Modelica.Constants.pi*f4*time + phi4);
|
||||
|
||||
|
||||
|
||||
tau = (time - gustStart) / Tg;
|
||||
|
||||
gust =
|
||||
noEvent(if tau >= 0 and tau <= 1 then
|
||||
0.5*gustAmp*(1 - cos(2*Modelica.Constants.pi*tau))
|
||||
else
|
||||
0);
|
||||
|
||||
wx_gust = gust*cos(gustDirection);
|
||||
wy_gust = gust*sin(gustDirection);
|
||||
|
||||
wx = wx_mean + wx_gust + wx_turb;
|
||||
wy = wy_mean + wy_gust + wy_turb;
|
||||
|
||||
windVelX = wx;
|
||||
windVelY = wy;
|
||||
|
||||
windSpeed = sqrt(wx*wx + wy*wy + eps);
|
||||
|
||||
Fx = 0.5*rho*Cd*A*windSpeed*wx;
|
||||
Fy = 0.5*rho*Cd*A*windSpeed*wy;
|
||||
|
||||
annotation(
|
||||
Diagram,
|
||||
Icon(graphics = {Rectangle(extent = {{-100, 100}, {100, -100}})}));
|
||||
end Wind2DModel;
|
||||
@@ -0,0 +1,19 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model WindProfile
|
||||
Modelica.Blocks.Sources.Constant const(k = 2) annotation(
|
||||
Placement(visible = true, transformation(origin = {-54, -30}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
|
||||
Modelica.Blocks.Sources.Constant const1(k = 2) annotation(
|
||||
Placement(transformation(origin = {0, -30}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput Fx annotation(
|
||||
Placement( transformation(origin = {-50, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90), iconTransformation(origin = {-70, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput Fy annotation(
|
||||
Placement(transformation(origin = {0, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90), iconTransformation(origin = {0, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
|
||||
equation
|
||||
connect(const.y, Fx) annotation(
|
||||
Line(points = {{-54, -41}, {-54, -75.5}, {-50, -75.5}, {-50, -110}}, color = {0, 0, 127}));
|
||||
connect(const1.y, Fy) annotation(
|
||||
Line(points = {{0, -41}, {0, -110}}, color = {0, 0, 127}));
|
||||
annotation(
|
||||
Icon(graphics = {Rectangle(extent = {{-100, 100}, {100, -100}}), Text(origin = {-23, 18}, extent = {{57, -26}, {-11, 4}}, textString = "WindProfile")}),
|
||||
experiment(StartTime = 0, StopTime = 250, Tolerance = 1e-06, Interval = 0.01));end WindProfile;
|
||||
117
SimulationModels/OpenModelica 1.25/AIDAModelica/WindProfile.mo
Normal file
117
SimulationModels/OpenModelica 1.25/AIDAModelica/WindProfile.mo
Normal file
@@ -0,0 +1,117 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model WindProfile
|
||||
parameter Real rho = 1.225
|
||||
"Air density [kg/m3].";
|
||||
parameter Real Cd = 1.0
|
||||
"Equivalent drag coefficient.";
|
||||
parameter Real A = 0.05
|
||||
"Equivalent lateral reference area [m2].";
|
||||
parameter Real eps = 1e-6
|
||||
"Regularization term for wind magnitude.";
|
||||
|
||||
parameter Real Wmean = 8
|
||||
"Mean wind speed [m/s].";
|
||||
parameter Real windDir = 0
|
||||
"Mean wind direction [rad].";
|
||||
|
||||
parameter Real WgustAmpX = 3
|
||||
"Amplitude of smooth gust component along X [m/s].";
|
||||
parameter Real WgustAmpY = 3
|
||||
"Amplitude of smooth gust component along Y [m/s].";
|
||||
parameter Real fg1 = 0.03
|
||||
"Low gust modulation frequency 1 [Hz].";
|
||||
parameter Real fg2 = 0.11
|
||||
"Low gust modulation frequency 2 [Hz].";
|
||||
parameter Real fg3 = 0.04
|
||||
"Low gust modulation frequency 3 [Hz].";
|
||||
parameter Real fg4 = 0.09
|
||||
"Low gust modulation frequency 4 [Hz].";
|
||||
|
||||
parameter Real At1 = 0.6
|
||||
"Turbulence amplitude X1 [m/s].";
|
||||
parameter Real At2 = 0.25
|
||||
"Turbulence amplitude X2 [m/s].";
|
||||
parameter Real Bt1 = 0.6
|
||||
"Turbulence amplitude Y1 [m/s].";
|
||||
parameter Real Bt2 = 0.25
|
||||
"Turbulence amplitude Y2 [m/s].";
|
||||
|
||||
parameter Real f1 = 0.15
|
||||
"Turbulence frequency X1 [Hz].";
|
||||
parameter Real f2 = 0.7
|
||||
"Turbulence frequency X2 [Hz].";
|
||||
parameter Real f3 = 0.21
|
||||
"Turbulence frequency Y1 [Hz].";
|
||||
parameter Real f4 = 0.9
|
||||
"Turbulence frequency Y2 [Hz].";
|
||||
|
||||
parameter Real phi1 = 0
|
||||
"Phase X1 [rad].";
|
||||
parameter Real phi2 = 0.8
|
||||
"Phase X2 [rad].";
|
||||
parameter Real phi3 = 1.3
|
||||
"Phase Y1 [rad].";
|
||||
parameter Real phi4 = 2.1
|
||||
"Phase Y2 [rad].";
|
||||
|
||||
Modelica.Blocks.Interfaces.RealOutput Fx "Aerodynamic X wind force in ground frame [N]" annotation(
|
||||
Placement(transformation(origin = {10, -10}, extent = {{-90, 50}, {-110, 70}}, rotation = 90), iconTransformation(origin = {2, -10}, extent = {{-90, 50}, {-110, 70}}, rotation = 90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput Fy "Aerodynamic Y wind force in ground frame [N]" annotation(
|
||||
Placement(transformation(origin = {98, -10}, extent = {{-90, 20}, {-110, 40}}, rotation = 90), iconTransformation(origin = {96, -10}, extent = {{-90, 20}, {-110, 40}}, rotation = 90)));
|
||||
|
||||
Modelica.Blocks.Interfaces.RealOutput windVelX
|
||||
"Wind velocity component in X direction [m/s]";
|
||||
Modelica.Blocks.Interfaces.RealOutput windVelY
|
||||
"Wind velocity component in Y direction [m/s]";
|
||||
|
||||
protected
|
||||
Real wx_mean;
|
||||
Real wy_mean;
|
||||
Real wx_turb;
|
||||
Real wy_turb;
|
||||
Real wx_gust;
|
||||
Real wy_gust;
|
||||
Real wx;
|
||||
Real wy;
|
||||
Real windSpeed;
|
||||
|
||||
equation
|
||||
|
||||
|
||||
wx_mean = Wmean * cos(windDir);
|
||||
wy_mean = Wmean * sin(windDir);
|
||||
|
||||
wx_turb =
|
||||
At1 * sin(2 * Modelica.Constants.pi * f1 * time + phi1)
|
||||
+ At2 * sin(2 * Modelica.Constants.pi * f2 * time + phi2);
|
||||
|
||||
wy_turb =
|
||||
Bt1 * sin(2 * Modelica.Constants.pi * f3 * time + phi3)
|
||||
+ Bt2 * sin(2 * Modelica.Constants.pi * f4 * time + phi4);
|
||||
|
||||
wx_gust =
|
||||
WgustAmpX
|
||||
* sin(2 * Modelica.Constants.pi * fg1 * time)
|
||||
* sin(2 * Modelica.Constants.pi * fg2 * time);
|
||||
|
||||
wy_gust =
|
||||
WgustAmpY
|
||||
* sin(2 * Modelica.Constants.pi * fg3 * time)
|
||||
* sin(2 * Modelica.Constants.pi * fg4 * time);
|
||||
|
||||
wx = wx_mean + wx_turb + wx_gust;
|
||||
wy = wy_mean + wy_turb + wy_gust;
|
||||
|
||||
windVelX = wx;
|
||||
windVelY = wy;
|
||||
|
||||
windSpeed = sqrt(wx * wx + wy * wy + eps);
|
||||
|
||||
Fx = 0.5 * rho * Cd * A * windSpeed * wx;
|
||||
Fy = 0.5 * rho * Cd * A * windSpeed * wy;
|
||||
|
||||
annotation(
|
||||
Diagram,
|
||||
Icon(graphics = {Rectangle(extent = {{-100, 100}, {100, -100}})}));
|
||||
end WindProfile;
|
||||
@@ -0,0 +1,20 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model WindProfile_old
|
||||
Modelica.Blocks.Sources.Constant const(k = 2) annotation(
|
||||
Placement(visible = true, transformation(origin = {-54, -30}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
|
||||
Modelica.Blocks.Sources.Constant const1(k = 2) annotation(
|
||||
Placement(transformation(origin = {0, -30}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput Fx annotation(
|
||||
Placement( transformation(origin = {-50, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90), iconTransformation(origin = {-70, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput Fy annotation(
|
||||
Placement(transformation(origin = {0, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90), iconTransformation(origin = {0, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
|
||||
equation
|
||||
connect(const.y, Fx) annotation(
|
||||
Line(points = {{-54, -41}, {-54, -75.5}, {-50, -75.5}, {-50, -110}}, color = {0, 0, 127}));
|
||||
connect(const1.y, Fy) annotation(
|
||||
Line(points = {{0, -41}, {0, -110}}, color = {0, 0, 127}));
|
||||
annotation(
|
||||
Icon(graphics = {Rectangle(extent = {{-100, 100}, {100, -100}}), Text(origin = {-23, 18}, extent = {{57, -26}, {-11, 4}}, textString = "WindProfile")}),
|
||||
experiment(StartTime = 0, StopTime = 250, Tolerance = 1e-06, Interval = 0.01));
|
||||
end WindProfile_old;
|
||||
@@ -0,0 +1,24 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model XAngularSpeedErrorModel "X angular speed error calculation model"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput RollConsign(quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-120, -72}, extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-120, 30}, {-80, 70}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Roll(quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-120, 68}, extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-120, -20}, {-80, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealInput AngularSpeedX(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rad/s") "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-120, 0}, extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-120, -70}, {-80, -30}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput AngularSpeedXError(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rad/s") "'output Real' as connector" annotation(
|
||||
Placement(transformation(origin = {110, 0}, extent = {{-10, -10}, {10, 10}}), iconTransformation(extent = {{86.7, -10}, {106.7, 10}})));
|
||||
parameter Real Kwphi = 1.5 "Proportional gain Kwphi";
|
||||
Real ephi(quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "Phi error";
|
||||
Real wxd(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rad/s") "Desired angular speed X";
|
||||
equation
|
||||
// enter your equations here
|
||||
ephi = Roll - RollConsign;
|
||||
wxd = -Kwphi*ephi;
|
||||
AngularSpeedXError = wxd - AngularSpeedX;
|
||||
annotation(
|
||||
Icon(graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 100}, {100, -100}})}));
|
||||
end XAngularSpeedErrorModel;
|
||||
@@ -0,0 +1,46 @@
|
||||
within AIDAModelica;
|
||||
model YAngularSpeedErrorModel "Y angular speed error calculation model"
|
||||
Modelica.Blocks.Interfaces.RealInput PitchCosign(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "'input Real' as connector" annotation(Placement(
|
||||
transformation(origin = {-120, 60}, extent = {{-20, -20}, {20, 20}}),
|
||||
iconTransformation(extent={{-120,30},{-80,70}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Pitch(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "'input Real' as connector" annotation(Placement(
|
||||
transformation(origin = {-120, -60}, extent = {{-20, -20}, {20, 20}}),
|
||||
iconTransformation(extent={{-120,-20},{-80,20}})));
|
||||
Modelica.Blocks.Interfaces.RealInput AngularSpeedY(
|
||||
quantity="Mechanics.Rotation.RotVelocity",
|
||||
displayUnit="rad/s") "'input Real' as connector" annotation(Placement(
|
||||
transformation(origin = {-120, 0}, extent = {{-20, -20}, {20, 20}}),
|
||||
iconTransformation(extent={{-120,-70},{-80,-30}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput AngularSpeedYError(
|
||||
quantity="Mechanics.Rotation.RotVelocity",
|
||||
displayUnit="rad/s") "'output Real' as connector" annotation(Placement(
|
||||
transformation(origin = {110, 0}, extent = {{-10, -10}, {10, 10}}),
|
||||
iconTransformation(extent={{86.7,-10},{106.7,10}})));
|
||||
parameter Real Kwteta=1.5 "Proportional gain Kwteta";
|
||||
parameter Boolean RTStepConsign=false "test pour commande de step sur la consigne de vitesse angulaire";
|
||||
Real eteta(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "Teta error";
|
||||
Real wyd(
|
||||
quantity="Mechanics.Rotation.RotVelocity",
|
||||
displayUnit="rad/s") "Desired angular speed Y";
|
||||
equation
|
||||
// enter your equations here
|
||||
eteta = Pitch-PitchCosign;
|
||||
|
||||
if RTStepConsign==true and abs(PitchCosign)>0.001 then
|
||||
wyd = Kwteta;
|
||||
else
|
||||
wyd = -Kwteta*eteta;
|
||||
end if;
|
||||
AngularSpeedYError = wyd-AngularSpeedY;
|
||||
annotation(Icon(graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-100,100},{100,-100}})}));
|
||||
end YAngularSpeedErrorModel;
|
||||
@@ -0,0 +1,27 @@
|
||||
within AIDAModelica;
|
||||
model YawConsignProducing "Yaw consign producing"
|
||||
Modelica.Blocks.Interfaces.RealInput Yaw(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "Yaw feenback for logical algo" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(extent={{-120,-70},{-80,-30}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput DesiredYaw(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "Desired yaw produced point" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(extent={{90,-10},{110,10}})));
|
||||
Modelica.Blocks.Interfaces.BooleanInput YRC "Yaw RC command from remote control indication" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(
|
||||
origin={-100,50},
|
||||
extent={{-20,-20},{20,20}})));
|
||||
initial equation
|
||||
DesiredYaw=0;
|
||||
equation
|
||||
// when a yaw order is commanded from the remote control, the current yaw position is recorded into DesiredYaw, which is added to the remote control order
|
||||
//this is to prevent a return to 0 heading at manual mode transition
|
||||
when YRC == false then
|
||||
DesiredYaw = Yaw;
|
||||
end when;
|
||||
annotation(Icon(graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 100}, {100, -100}}), Text(origin = {-8, 0}, extent = {{-40, 10}, {40, -10}}, textString = "%name")}, coordinateSystem(initialScale = 0.1)));
|
||||
end YawConsignProducing;
|
||||
@@ -0,0 +1,24 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ZAngularSpeedErrorModel "Z angular speed error calculation model"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput YawCosign(quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-120, -58}, extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-120, 30}, {-80, 70}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Yaw(quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-120, 62}, extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-120, -20}, {-80, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealInput AngularSpeedZ(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rad/s") "'input Real' as connector" annotation(
|
||||
Placement(transformation(origin = {-120, 2}, extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-120, -70}, {-80, -30}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput AngularSpeedZError(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rad/s") "'output Real' as connector" annotation(
|
||||
Placement(transformation(origin = {110, 0}, extent = {{-10, -10}, {10, 10}}), iconTransformation(extent = {{86.7, -10}, {106.7, 10}})));
|
||||
parameter Real Kwyaw = 1.5 "Proportional gain Kwyaw";
|
||||
Real eyaw(quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "Yaw error";
|
||||
Real wzd(quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rad/s") "Desired angular speed Z";
|
||||
equation
|
||||
// enter your equations here
|
||||
eyaw = YawCosign - Yaw;
|
||||
wzd = Kwyaw*eyaw;
|
||||
AngularSpeedZError = wzd - AngularSpeedZ;
|
||||
annotation(
|
||||
Icon(graphics = {Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 96.7}, {-100, 93.3}}), Rectangle(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-100, 100}, {100, -100}})}));
|
||||
end ZAngularSpeedErrorModel;
|
||||
@@ -0,0 +1,21 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model drone_feets "drone_feets.mo"
|
||||
Modelica.Blocks.Interfaces.RealInput Position "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-115, 45}, {-75, 85}}), iconTransformation(extent = {{-125, -25}, {-75, 25}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput Force(start = 0) "'output Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{85, 55}, {105, 75}}), iconTransformation(extent = {{75, -25}, {125, 25}})));
|
||||
parameter Real Raideur = 2000;
|
||||
parameter Real Z0 = -0.30;
|
||||
equation
|
||||
if Position > Z0 then
|
||||
Force = -Raideur * (Position - Z0);
|
||||
else
|
||||
Force = 0;
|
||||
end if;
|
||||
annotation(
|
||||
Force(flags = 2),
|
||||
Icon(graphics = {Line(points = {{-50, 26.7}, {53.3, 26.7}, {-50, 6.7}, {50, 6.7}, {-50, -13.3}, {50, -16.7}, {-46.7, -33.3}, {50, -33.3}, {-50, -53.3}, {50, -53.3}})}),
|
||||
Diagram(graphics = {Line(points = {{-45, 80}, {-45, 45}, {-25, 80}, {-25, 45}, {-5, 80}, {-5, 45}, {15, 80}, {15, 45}, {35, 80}, {35, 45}}), Line(points = {{-45, 65}, {-70, 65}, {-70, 65}}), Line(points = {{35, 65}, {85, 65}})}),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end drone_feets;
|
||||
File diff suppressed because one or more lines are too long
137
SimulationModels/OpenModelica 1.25/AIDAModelica/package.mo
Normal file
137
SimulationModels/OpenModelica 1.25/AIDAModelica/package.mo
Normal file
@@ -0,0 +1,137 @@
|
||||
package AIDAModelica
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
annotation(
|
||||
uses(Modelica(version = "4.0.0")));
|
||||
end AIDAModelica;
|
||||
@@ -0,0 +1,68 @@
|
||||
AccelerationToSpeed
|
||||
AcquirePositioningSignal
|
||||
AllocationControl
|
||||
AttitudeControl
|
||||
ComputationAccelerationModel
|
||||
ComputationChangeAngleVelocity
|
||||
ComputeAltitudeConsign
|
||||
ComputeDroneAngularsVelocities
|
||||
ComputeDroneAttitude
|
||||
ComputeDronePosition
|
||||
ComputeDroneVelocity
|
||||
ComputeMoments
|
||||
ComputeMotorRate
|
||||
ComputePositionAndTime
|
||||
ComputeThrustAndAttitudeConsign
|
||||
ComputeTotalThrust
|
||||
ComputeTotalThrustCA
|
||||
ComputeTotalThrustMM
|
||||
ControlAltitude
|
||||
ControlDroneNavigation
|
||||
ControlEffectivenessModel
|
||||
ControlMotor
|
||||
ControlPitchAngle
|
||||
ControlPosition
|
||||
ControlPositionSAC
|
||||
ControlPositionV0
|
||||
ControlRollAngle
|
||||
ControlSpeed
|
||||
ControlYawAngle
|
||||
CreateMotion
|
||||
GeneratePositioningSignal
|
||||
LowLevelFlightControlSystem
|
||||
modele_complet_RC
|
||||
MotorControl
|
||||
MotorPropellerModel
|
||||
PositionControl
|
||||
PositionConvector
|
||||
ProSIVICToSimXInterface
|
||||
ProSIVICToSimXInterfaceTest
|
||||
QuadcopterModel
|
||||
RemoteControl
|
||||
RemoteControlForIntegration
|
||||
RigidBodyDynamicModel
|
||||
RigidBodyKinematicModel
|
||||
RunFlightPlan
|
||||
SelectAttitudeConsign
|
||||
SelectControlMode
|
||||
SelectSpeedConsign
|
||||
SelectTotalThrustConsign
|
||||
SimXToProSIVICInterface
|
||||
SimXToProSIVICInterfaceTest
|
||||
SpeedErrorModel
|
||||
SpeedErrorModelMM
|
||||
SpeedErrorModelSAC
|
||||
Step_analysis
|
||||
TrajectoryManagement
|
||||
XAngularSpeedErrorModel
|
||||
YAngularSpeedErrorModel
|
||||
YawConsignProducing
|
||||
ZAngularSpeedErrorModel
|
||||
ModelicaLicense2
|
||||
ControlAltitudeEx
|
||||
PID_2
|
||||
drone_feets
|
||||
WSSModel
|
||||
ComputationAngularAccelerationModel
|
||||
WindProfile_old
|
||||
WindProfile
|
||||
Reference in New Issue
Block a user