mirror of
http://172.16.200.102/AIDA/AIDASimulation.git
synced 2025-11-22 05:27:58 +01:00
Initialize simulation models.
Signed-off-by: Aurelien Didier <aurelien.didier51@gmail.com>
This commit is contained in:
91
SimulationModels/AIDAModel-integrationProSivic_reference.mo
Normal file
91
SimulationModels/AIDAModel-integrationProSivic_reference.mo
Normal file
@@ -0,0 +1,91 @@
|
||||
model AIDA_System "AIDAModel-integrationProSivic_reference.isx"
|
||||
AIDAModelica.QuadcopterModel quadcopterModel1(
|
||||
rigidBodyKinematicModel1(
|
||||
computeDronePosition1(
|
||||
integrator10(initType = Modelica.Blocks.Types.Init.SteadyState, y_start = -0.29),
|
||||
integrator11(initType = Modelica.Blocks.Types.Init.InitialOutput),
|
||||
integrator12(initType = Modelica.Blocks.Types.Init.InitialOutput))),
|
||||
rigidBodyDynamicModel1(
|
||||
computeDroneVelocity1(
|
||||
integrator4(initType = Modelica.Blocks.Types.Init.SteadyState)))) annotation(
|
||||
Placement(visible = true, transformation(extent = {{29, -8}, {49, 17}}, rotation = 0)));
|
||||
|
||||
AIDAModelica.LowLevelFlightControlSystem lowLevelFlightControlSystem1(
|
||||
controlAltitude1(computeAltitudeConsign1(
|
||||
PID1(k = 30, Ti = 1, Td = 0.1, Nd = 10, initType=Modelica.Blocks.Types.InitPID.InitialOutput)),
|
||||
pID_2(k = 25, Ti = 0.5, Td = 0.08, initType=Modelica.Blocks.Types.InitPID.InitialOutput)),
|
||||
attitudeControl1(Test_CstMomentumActiv = false, Test_open_loop = {false, false, false},
|
||||
controlRollAngle1(xAngularSpeedErrorModel1(Kwphi = 1.5),
|
||||
PID(k = 0.07, Ti = 30, Td = 0.02, Nd = 0.1,initType=Modelica.Blocks.Types.InitPID.InitialOutput,
|
||||
Add(k1 = 1, k2 = 1, k3 = 1))),
|
||||
controlPitchAngle1(yAngularSpeedErrorModel1(Kwteta = 1.5, RTStepConsign = false),
|
||||
PID1(k = 0.07, Ti = 30, Td = 0.02, Nd = 0.1,initType=Modelica.Blocks.Types.InitPID.InitialOutput,
|
||||
Add(k1 = 1, k2 = 1, k3 = 1))),
|
||||
controlYawAngle1(zAngularSpeedErrorModel1(Kwyaw = 2),
|
||||
PID2(k = 0.04, Ti = 20, Td = 0.5, Nd = 2.5,initType=Modelica.Blocks.Types.InitPID.InitialOutput,
|
||||
Add(k1 = 1, k2 = 1, k3 = 1)))),
|
||||
|
||||
positionControl1(
|
||||
controlSpeed1(
|
||||
PID(k = 0.8, Ti = 1,initType=Modelica.Blocks.Types.InitPID.InitialOutput),
|
||||
PID2(k = 0.8, Ti = 1,initType=Modelica.Blocks.Types.InitPID.InitialOutput),
|
||||
PID1(k = 30, Ti = 1, Td=0.1,initType=Modelica.Blocks.Types.InitPID.InitialOutput)))) annotation(
|
||||
Placement(visible = true, transformation(extent = {{-37, -6}, {-12, 19}}, rotation = 0)));
|
||||
AIDAModelica.ControlDroneNavigation controlDroneNavigation1 annotation(
|
||||
Placement(visible = true, transformation(extent = {{-79, -3}, {-59, 17}}, rotation = 0)));
|
||||
AIDAModelica.RemoteControl remoteControl1(
|
||||
VS_cmd=-0.5,
|
||||
VS_cmd_t={0.1,5},
|
||||
Pitch_cmd=0.02,
|
||||
Pitch_cmd_t={6,12},
|
||||
Yaw_cmd_t={15,19},
|
||||
Roll_cmd=0.02,
|
||||
Roll_cmd_t={3,9},
|
||||
Auto_Ctl_t=0.2) annotation(
|
||||
Placement(visible = true, transformation(extent = {{-57, 49}, {-32, 69}}, rotation = 0)));
|
||||
equation
|
||||
connect(lowLevelFlightControlSystem1.AngularSpeed, quadcopterModel1.AngularVelocities) annotation(
|
||||
Line(points = {{-33, -6}, {-33, -30}, {81.1667, -30}, {81.1667, 12}, {49.1667, 12}}, color = {0, 0, 127}));
|
||||
connect(lowLevelFlightControlSystem1.Attitude, quadcopterModel1.Attitude) annotation(
|
||||
Line(points = {{-29, -6}, {-29, -26}, {69.3333, -26}, {69.3333, 8}, {49.3333, 8}}, color = {0, 0, 127}));
|
||||
connect(lowLevelFlightControlSystem1.Position, quadcopterModel1.Position) annotation(
|
||||
Line(points = {{-24.5, -6}, {-24.5, -22}, {61.5, -22}, {61.5, 4}, {49.5, 4}}, color = {0, 0, 127}));
|
||||
connect(lowLevelFlightControlSystem1.Speed, quadcopterModel1.Speed) annotation(
|
||||
Line(points = {{-21, -6}, {-17.6667, -6}, {-17.6667, -18}, {57.3333, -18}, {57.3333, 0}, {49.3333, 0}}, color = {0, 0, 127}));
|
||||
connect(lowLevelFlightControlSystem1.Accelerations, quadcopterModel1.Accelerations) annotation(
|
||||
Line(points = {{-17, -6}, {-13.8333, -6}, {-13.8333, -16.0333}, {54.9167, -16.0333}, {54.9167, -4.0333}, {48.4167, -4.0333}}, color = {0, 0, 127}));
|
||||
connect(quadcopterModel1.ThrottleCommand1, lowLevelFlightControlSystem1.ThrottleCommand1) annotation(
|
||||
Line(points = {{29, 10.75}, {1, 10.75}, {1, 14}, {-12, 14}}, color = {0, 0, 127}, thickness = 0.015625));
|
||||
connect(lowLevelFlightControlSystem1.ThrottleCommand2, quadcopterModel1.ThrottleCommand2) annotation(
|
||||
Line(points = {{-12, 9}, {8.5, 9}, {8.5, 7}, {29, 7}}, color = {0, 0, 127}, thickness = 0.015625));
|
||||
connect(quadcopterModel1.ThrottleCommand3, lowLevelFlightControlSystem1.ThrottleCommand3) annotation(
|
||||
Line(points = {{29, 2.41667}, {12.5, 2.41667}, {12.5, 4}, {-12, 4}}, color = {0, 0, 127}, thickness = 0.015625));
|
||||
connect(lowLevelFlightControlSystem1.ThrottleCommand4, quadcopterModel1.ThrottleCommand4) annotation(
|
||||
Line(points = {{-12, -1}, {26, -1}, {26, -2}, {29, -2}}, color = {0, 0, 127}, thickness = 0.015625));
|
||||
connect(quadcopterModel1.Speed[:], lowLevelFlightControlSystem1.Speed[:]) annotation(
|
||||
Line);
|
||||
connect(controlDroneNavigation1.YawConsign, lowLevelFlightControlSystem1.YawConsign) annotation(
|
||||
Line(points = {{-59, 7}, {-34, 7}, {-34, 4}, {-37, 4}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(controlDroneNavigation1.DronPositionConsign[:], lowLevelFlightControlSystem1.DronePositionConsign[:]) annotation(
|
||||
Line(points = {{-59, 12}, {-48, 12}, {-48, 14}, {-37, 14}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(lowLevelFlightControlSystem1.SelectedControlMode, controlDroneNavigation1.SelectedControlMode) annotation(
|
||||
Line(points = {{-37, -1}, {-54, -1}, {-54, 2}, {-59, 2}}, color = {255, 0, 255}, thickness = 0.0625));
|
||||
connect(lowLevelFlightControlSystem1.RCVerticalSpeedCommand, remoteControl1.VerticalSpeedCommand) annotation(
|
||||
Line(points = {{-31, 19}, {-52.75, 19}, {-52.75, 49}}, color = {0, 0, 127}));
|
||||
connect(lowLevelFlightControlSystem1.RCYawCommand, remoteControl1.YawCommand) annotation(
|
||||
Line(points = {{-22, 19}, {-36.4167, 19}, {-36.4167, 51}, {-35.4167, 51}, {-35.4167, 49}, {-36.4167, 49}}, color = {0, 0, 127}));
|
||||
connect(remoteControl1.RollCommand, lowLevelFlightControlSystem1.RCAttitudeCommands[1]) annotation(
|
||||
Line(points = {{-47, 49}, {-47, 22}, {-27, 22}, {-27, 19}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(remoteControl1.PitchCommand, lowLevelFlightControlSystem1.RCAttitudeCommands[2]) annotation(
|
||||
Line(points = {{-42, 49}, {-42, 22}, {-27, 22}, {-27, 19}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(remoteControl1.IndicatorYawConsign, controlDroneNavigation1.IndicatorYawConsign) annotation(
|
||||
Line(points = {{-57, 59}, {-94, 59}, {-94, 6}, {-80, 6}, {-80, 8}, {-78, 8}, {-78, 8}, {-78, 8}}, color = {255, 0, 255}));
|
||||
connect(remoteControl1.ControlMode, controlDroneNavigation1.APEngagement) annotation(
|
||||
Line(points = {{-57, 54}, {-84, 54}, {-84, 12}, {-79, 12}}, color = {255, 0, 255}, thickness = 0.015625));
|
||||
connect(controlDroneNavigation1.Yaw, quadcopterModel1.Attitude[3]) annotation(
|
||||
Line(points = {{-79, 2}, {-87, 2}, {-87, -36}, {91, -36}, {91, 8}, {49, 8}, {49, 8}, {49, 8}, {49, 8}}, color = {0, 0, 127}));
|
||||
annotation(
|
||||
Icon(coordinateSystem(grid = {3, 2})),
|
||||
experiment(StartTime = 0, StopTime = 30, Tolerance = 1e-06, Interval = 0.002),
|
||||
__OpenModelica_simulationFlags(jacobian = "coloredNumerical", s = "dassl", lv = "LOG_STATS"));
|
||||
end AIDA_System;
|
||||
284
SimulationModels/AIDAModelica/.gitignore
vendored
Normal file
284
SimulationModels/AIDAModelica/.gitignore
vendored
Normal file
@@ -0,0 +1,284 @@
|
||||
/QuadcopterModel.mo13
|
||||
/QuadcopterModel.mo14
|
||||
/QuadcopterModel.mo15
|
||||
/QuadcopterModel.mo16
|
||||
/QuadcopterModel.mo17
|
||||
/RemoteControl.mo94
|
||||
/RemoteControl.mo95
|
||||
/RemoteControl.mo96
|
||||
/RigidBodyDynamicModel.mo10
|
||||
/RigidBodyDynamicModel.mo11
|
||||
/RigidBodyDynamicModel.mo12
|
||||
/RigidBodyDynamicModel.mo13
|
||||
/RigidBodyDynamicModel.mo9
|
||||
/RigidBodyKinematicModel.mo7
|
||||
/RigidBodyKinematicModel.mo8
|
||||
/SelectSpeedConsign.mo6
|
||||
/SimXToProSIVICInterface.mo2
|
||||
/SpeedErrorModel.mo5
|
||||
/SpeedErrorModel.mo6
|
||||
/SpeedErrorModelSAC.mo10
|
||||
/SpeedErrorModelSAC.mo11
|
||||
/SpeedErrorModelSAC.mo9
|
||||
/ComputationAccelerationModel.mo10
|
||||
/ComputationAccelerationModel.mo11
|
||||
/ComputationAccelerationModel.mo12
|
||||
/ComputationAccelerationModel.mo13
|
||||
/ComputationAccelerationModel.mo14
|
||||
/ComputationAccelerationModel.mo5
|
||||
/ComputationAccelerationModel.mo6
|
||||
/ComputationAccelerationModel.mo7
|
||||
/ComputationAccelerationModel.mo8
|
||||
/ComputationAccelerationModel.mo9
|
||||
/ComputationChangeAngleVelocity.mo2
|
||||
/ComputeDroneVelocity.mo10
|
||||
/ComputeDroneVelocity.mo6
|
||||
/ComputeDroneVelocity.mo7
|
||||
/ComputeDroneVelocity.mo8
|
||||
/ComputeDroneVelocity.mo9
|
||||
/ComputeThrustAndAttitudeConsign.mo12
|
||||
/ComputeThrustAndAttitudeConsign.mo13
|
||||
/ComputeThrustAndAttitudeConsign.mo14
|
||||
/ComputeTotalThrustCA.mo1
|
||||
/ComputeTotalThrustCA.mo10
|
||||
/ComputeTotalThrustCA.mo2
|
||||
/ComputeTotalThrustCA.mo3
|
||||
/ComputeTotalThrustCA.mo4
|
||||
/ComputeTotalThrustCA.mo5
|
||||
/ComputeTotalThrustCA.mo6
|
||||
/ComputeTotalThrustCA.mo7
|
||||
/ComputeTotalThrustCA.mo8
|
||||
/ComputeTotalThrustCA.mo9
|
||||
/ControlPosition.mo37
|
||||
/Cosim_Sim_m.mo1
|
||||
/Cosim_Sim_m.mo2
|
||||
/drone_feets.bak
|
||||
/drone_feets.mo1
|
||||
/package.mo60
|
||||
/package.mo61
|
||||
/package.mo62
|
||||
/package.mo63
|
||||
/package.mo64
|
||||
/package.mo65
|
||||
/package.mo66
|
||||
/package.mo67
|
||||
/AttitudeControl.mo28
|
||||
/AttitudeControl.mo29
|
||||
/package.mo68
|
||||
/ProSIVICToSimXInterface.mo5
|
||||
/ProSIVICToSimXInterface.mo6
|
||||
/ProSIVICToSimXInterfaceTest.mo10
|
||||
/ProSIVICToSimXInterfaceTest.mo11
|
||||
/ProSIVICToSimXInterfaceTest.mo9
|
||||
/QuadcopterModel.mo18
|
||||
/QuadcopterModel.mo19
|
||||
/QuadcopterModel.mo20
|
||||
/RemoteControl.mo97
|
||||
/SimXToProSIVICInterface.mo12
|
||||
/SimXToProSIVICInterface.mo13
|
||||
/XAngularSpeedErrorModel.mo15
|
||||
/XAngularSpeedErrorModel.mo16
|
||||
/YAngularSpeedErrorModel.mo14
|
||||
/ZAngularSpeedErrorModel.mo30
|
||||
/Step_analysis.mo1
|
||||
/Step_analysis.mo2
|
||||
/Step_analysis.mo10
|
||||
/Step_analysis.mo11
|
||||
/Step_analysis.mo12
|
||||
/Step_analysis.mo13
|
||||
/Step_analysis.mo14
|
||||
/Step_analysis.mo15
|
||||
/Step_analysis.mo16
|
||||
/Step_analysis.mo17
|
||||
/Step_analysis.mo18
|
||||
/Step_analysis.mo19
|
||||
/Step_analysis.mo20
|
||||
/Step_analysis.mo3
|
||||
/Step_analysis.mo4
|
||||
/Step_analysis.mo5
|
||||
/Step_analysis.mo6
|
||||
/Step_analysis.mo7
|
||||
/Step_analysis.mo8
|
||||
/Step_analysis.mo9
|
||||
/AttitudeControl.mo30
|
||||
/ComputeAltitudeConsign.mo2
|
||||
/ControlRollAngle.mo15
|
||||
/ControlRollAngle.mo16
|
||||
/PositionControl.mo29
|
||||
/ProSIVICToSimXInterfaceTest.mo12
|
||||
/QuadcopterModel.mo21
|
||||
/RigidBodyKinematicModel.mo9
|
||||
/Step_analysis.bak
|
||||
/ComputeAltitudeConsign.mo10
|
||||
/ComputeAltitudeConsign.mo11
|
||||
/ComputeAltitudeConsign.mo12
|
||||
/ComputeAltitudeConsign.mo13
|
||||
/ComputeAltitudeConsign.mo14
|
||||
/ComputeAltitudeConsign.mo15
|
||||
/ComputeAltitudeConsign.mo16
|
||||
/ComputeAltitudeConsign.mo17
|
||||
/ComputeAltitudeConsign.mo18
|
||||
/ComputeAltitudeConsign.mo19
|
||||
/ComputeAltitudeConsign.mo20
|
||||
/ComputeAltitudeConsign.mo21
|
||||
/ComputeAltitudeConsign.mo3
|
||||
/ComputeAltitudeConsign.mo4
|
||||
/ComputeAltitudeConsign.mo5
|
||||
/ComputeAltitudeConsign.mo6
|
||||
/ComputeAltitudeConsign.mo7
|
||||
/ComputeAltitudeConsign.mo8
|
||||
/ComputeAltitudeConsign.mo9
|
||||
/ComputeMotorRate.mo10
|
||||
/ComputeMotorRate.mo11
|
||||
/ComputeMotorRate.mo12
|
||||
/ComputeMotorRate.mo13
|
||||
/ComputeMotorRate.mo14
|
||||
/ComputeMotorRate.mo15
|
||||
/ComputeMotorRate.mo16
|
||||
/ComputeMotorRate.mo17
|
||||
/ComputeMotorRate.mo18
|
||||
/ComputeMotorRate.mo19
|
||||
/ComputeMotorRate.mo20
|
||||
/ComputeMotorRate.mo21
|
||||
/ComputeMotorRate.mo22
|
||||
/ComputeMotorRate.mo23
|
||||
/ComputeMotorRate.mo24
|
||||
/ComputeMotorRate.mo25
|
||||
/ComputeMotorRate.mo26
|
||||
/ComputeMotorRate.mo27
|
||||
/ComputeMotorRate.mo28
|
||||
/ComputeMotorRate.mo29
|
||||
/ComputeMotorRate.mo30
|
||||
/ComputeMotorRate.mo31
|
||||
/ComputeMotorRate.mo32
|
||||
/ComputeMotorRate.mo33
|
||||
/ComputeMotorRate.mo4
|
||||
/ComputeMotorRate.mo5
|
||||
/ComputeMotorRate.mo6
|
||||
/ComputeMotorRate.mo7
|
||||
/ComputeMotorRate.mo8
|
||||
/ComputeMotorRate.mo9
|
||||
/ComputeThrustAndAttitudeConsign.mo15
|
||||
/ComputeThrustAndAttitudeConsign.mo16
|
||||
/ComputeThrustAndAttitudeConsign.mo17
|
||||
/ComputeThrustAndAttitudeConsign.mo18
|
||||
/ComputeThrustAndAttitudeConsign.mo19
|
||||
/ComputeThrustAndAttitudeConsign.mo20
|
||||
/ComputeTotalThrust.mo5
|
||||
/ComputeTotalThrustCA.mo11
|
||||
/ComputeTotalThrustCA.mo12
|
||||
/ComputeTotalThrustCA.mo13
|
||||
/ComputeTotalThrustCA.mo14
|
||||
/ComputeTotalThrustCA.mo15
|
||||
/ComputeTotalThrustCA.mo16
|
||||
/ComputeTotalThrustCA.mo17
|
||||
/ComputeTotalThrustCA.mo18
|
||||
/ComputeTotalThrustCA.mo19
|
||||
/ComputeTotalThrustCA.mo20
|
||||
/ComputeTotalThrustCA.mo21
|
||||
/ComputeTotalThrustCA.mo22
|
||||
/ComputeTotalThrustCA.mo23
|
||||
/ComputeTotalThrustCA.mo24
|
||||
/ControlDroneNavigation.mo29
|
||||
/ControlPitchAngle.mo15
|
||||
/ControlPitchAngle.mo16
|
||||
/ControlPitchAngle.mo17
|
||||
/ControlRollAngle.mo17
|
||||
/ComputationAccelerationModel.mo15
|
||||
/LowLevelFlightControlSystem.mo123
|
||||
/LowLevelFlightControlSystem.mo124
|
||||
/LowLevelFlightControlSystem.mo125
|
||||
/LowLevelFlightControlSystem.mo126
|
||||
/LowLevelFlightControlSystem.mo127
|
||||
/LowLevelFlightControlSystem.mo128
|
||||
/LowLevelFlightControlSystem.mo129
|
||||
/LowLevelFlightControlSystem.mo130
|
||||
/LowLevelFlightControlSystem.mo131
|
||||
/LowLevelFlightControlSystem.mo132
|
||||
/LowLevelFlightControlSystem.mo133
|
||||
/LowLevelFlightControlSystem.mo134
|
||||
/package.mo69
|
||||
/package.mo70
|
||||
/package.mo71
|
||||
/package.mo72
|
||||
/package.mo73
|
||||
/package.mo74
|
||||
/package.mo75
|
||||
/package.mo76
|
||||
/package.mo77
|
||||
/package.mo78
|
||||
/package.mo79
|
||||
/package.mo80
|
||||
/RemoteControl.mo100
|
||||
/RemoteControl.mo101
|
||||
/RemoteControl.mo102
|
||||
/RemoteControl.mo103
|
||||
/RemoteControl.mo104
|
||||
/RemoteControl.mo105
|
||||
/RemoteControl.mo106
|
||||
/RemoteControl.mo107
|
||||
/RemoteControl.mo108
|
||||
/RemoteControl.mo109
|
||||
/RemoteControl.mo110
|
||||
/RemoteControl.mo111
|
||||
/RemoteControl.mo112
|
||||
/RemoteControl.mo113
|
||||
/RemoteControl.mo98
|
||||
/RemoteControl.mo99
|
||||
/Step_analysis.mo21
|
||||
/Step_analysis.mo22
|
||||
/Step_analysis.mo23
|
||||
/Step_analysis.mo24
|
||||
/Step_analysis.mo25
|
||||
/Step_analysis.mo26
|
||||
/Step_analysis.mo27
|
||||
/Step_analysis.mo28
|
||||
/Step_analysis.mo29
|
||||
/Step_analysis.mo30
|
||||
/Step_analysis.mo31
|
||||
/Step_analysis.mo32
|
||||
/Step_analysis.mo33
|
||||
/Step_analysis.mo34
|
||||
/Step_analysis.mo35
|
||||
/Step_analysis.mo36
|
||||
/XAngularSpeedErrorModel.mo17
|
||||
/CreateMotion.mo4
|
||||
/CreateMotion.mo5
|
||||
/CreateMotion.mo6
|
||||
/CreateMotion.mo7
|
||||
/AttitudeControl.mo31
|
||||
/CreateMotion.mo8
|
||||
/AIDAModelica.ComputeAltitudeConsign_discrete.mo1
|
||||
/ComputeMotorRate.mo34
|
||||
/ComputeTotalThrustCA.mo25
|
||||
/ComputeTotalThrustCA.mo26
|
||||
/ComputeTotalThrustCA.mo27
|
||||
/ComputeTotalThrustCA.mo28
|
||||
/AttitudeControl.mo32
|
||||
/AttitudeControl.mo33
|
||||
/AttitudeControl.mo34
|
||||
/AttitudeControl.mo35
|
||||
/AttitudeControl.mo36
|
||||
/AttitudeControl.mo37
|
||||
/ComputeMotorRate.mo35
|
||||
/ComputeMotorRate.mo36
|
||||
/ComputeMotorRate.mo37
|
||||
/ComputeThrustAndAttitudeConsign.mo21
|
||||
/ComputeThrustAndAttitudeConsign.mo22
|
||||
/ComputeThrustAndAttitudeConsign.mo23
|
||||
/ComputeTotalThrustCA.mo29
|
||||
/ComputeTotalThrustCA.mo30
|
||||
/ControlPitchAngle.mo18
|
||||
/RemoteControl.mo114
|
||||
/RemoteControl.mo115
|
||||
/RemoteControl.mo116
|
||||
/RemoteControl.mo117
|
||||
/RemoteControl.mo118
|
||||
/RemoteControl.mo119
|
||||
/RemoteControl.mo120
|
||||
/RemoteControl.mo121
|
||||
/RemoteControl.mo122
|
||||
/RemoteControl.mo123
|
||||
/PositionControl.mo37
|
||||
/SpeedErrorModel.mo19
|
||||
/RunFlightPlan.mo37
|
||||
4
SimulationModels/AIDAModelica/AIDAModelica.mo_old
Normal file
4
SimulationModels/AIDAModelica/AIDAModelica.mo_old
Normal file
@@ -0,0 +1,4 @@
|
||||
within;
|
||||
package AIDAModelica "AIDA Modelica Libraries"
|
||||
annotation(dateModified="2018-04-03 09:30:06Z");
|
||||
end AIDAModelica;
|
||||
61
SimulationModels/AIDAModelica/AccelerationToSpeed.mo
Normal file
61
SimulationModels/AIDAModelica/AccelerationToSpeed.mo
Normal file
@@ -0,0 +1,61 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model AccelerationToSpeed "Acceleration to speed convector"
|
||||
Modelica.Blocks.Interfaces.RealInput Acceleration[3](
|
||||
quantity="Mechanics.Translation.Accel",
|
||||
displayUnit="m/s²") "'input Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-120,10},{-80,50}}),
|
||||
iconTransformation(
|
||||
origin={0,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput Speed[3](
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
displayUnit="m/s") "'output Real' as connector" annotation(Placement(
|
||||
transformation(extent={{-5,20},{15,40}}),
|
||||
iconTransformation(
|
||||
origin={0,100},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Continuous.Integrator integrator1 annotation(Placement(transformation(extent={{-60,50},{-40,70}})));
|
||||
Modelica.Blocks.Continuous.Integrator integrator2 annotation(Placement(transformation(extent={{-60,20},{-40,40}})));
|
||||
Modelica.Blocks.Continuous.Integrator integrator3 annotation(Placement(transformation(extent={{-60,-10},{-40,10}})));
|
||||
equation
|
||||
connect(integrator1.u,Acceleration[1]) annotation(Line(
|
||||
points={{-62,60},{-67,60},{-95,60},{-95,30},{-100,30}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(integrator2.u,Acceleration[2]) annotation(Line(
|
||||
points={{-62,30},{-67,30},{-95,30},{-100,30}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(integrator3.u,Acceleration[3]) annotation(Line(
|
||||
points={{-62,0},{-67,0},{-95,0},{-95,30},{-100,30}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(integrator1.y,Speed[1]) annotation(Line(
|
||||
points={{-39,60},{-34,60},{0,60},{0,30},{5,30}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(integrator2.y,Speed[2]) annotation(Line(
|
||||
points={{-39,30},{-34,30},{0,30},{5,30}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(integrator3.y,Speed[3]) annotation(Line(
|
||||
points={{-39,0},{-34,0},{0,0},{0,30},{5,30}},
|
||||
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;
|
||||
232
SimulationModels/AIDAModelica/AcquirePositioningSignal.mo
Normal file
232
SimulationModels/AIDAModelica/AcquirePositioningSignal.mo
Normal file
@@ -0,0 +1,232 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model AcquirePositioningSignal "Acquire Positioning Signal"
|
||||
Modelica.Blocks.Interfaces.RealOutput Measured_positioning_signal[4] "'output Real' as connector" annotation(Placement(
|
||||
transformation(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(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;
|
||||
58
SimulationModels/AIDAModelica/AllocationControl.mo
Normal file
58
SimulationModels/AIDAModelica/AllocationControl.mo
Normal file
@@ -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(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(extent = {{-95, 0}, {-55, 40}}), iconTransformation(extent = {{-120, 5}, {-80, 45}})));
|
||||
Modelica.Blocks.Interfaces.RealInput MomentumsConsign[3](quantity = "Mechanics.Rotation.Torque", displayUnit = "Nm") "'input Real' as connector" annotation(
|
||||
Placement(transformation(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(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(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(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(extent = {{35, -5}, {55, 15}}), iconTransformation(extent = {{90, -85}, {110, -65}})));
|
||||
Modelica.Blocks.Interfaces.BooleanInput SelectedControlMode "'input Boolean' as connector" annotation(
|
||||
Placement(transformation(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, 5}, {45, 5}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeMotorRate1.Motor3Rate, Motor3Rate) annotation(
|
||||
Line(points = {{15, 30}, {40, 30}, {40, 20}, {45, 20}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeMotorRate1.Motor2Rate, Motor2Rate) annotation(
|
||||
Line(points = {{15, 35}, {40, 35}, {40, 40}, {45, 40}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(computeMotorRate1.Motor1Rate, Motor1Rate) annotation(
|
||||
Line(points = {{15, 40}, {40, 40}, {40, 55}, {45, 55}}, 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}, {-57, 48}, {-70, 48}, {-70, 60}, {-75, 60}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(SelectTotalThrustConsign.u2, SelectedControlMode) annotation(
|
||||
Line(points = {{-52, 40}, {-57, 40}, {-90, 40}, {-95, 40}}, color = {255, 0, 255}, thickness = 0.0625));
|
||||
connect(SelectTotalThrustConsign.u3, TotalThrustManual) annotation(
|
||||
Line(points = {{-52, 32}, {-57, 32}, {-70, 32}, {-70, 20}, {-75, 20}}, 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;
|
||||
94
SimulationModels/AIDAModelica/AttitudeControl.mo
Normal file
94
SimulationModels/AIDAModelica/AttitudeControl.mo
Normal file
@@ -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](quantity = "Mechanics.Rotation.Angle", 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](quantity = "Mechanics.Rotation.Angle", 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](quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rad/s") "Real angular velocities feedback input" annotation(
|
||||
Placement(transformation(extent = {{-89.7, 58}, {-49.7, 98}}), iconTransformation(origin = {-50, -100}, extent = {{-20, -20}, {20, 20}}, rotation = 90)));
|
||||
Modelica.Blocks.Interfaces.RealInput Attitude[3](quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "Real attitude feedback input" annotation(
|
||||
Placement(transformation(extent = {{-40, 45}, {0, 85}}), iconTransformation(origin = {0, -100}, extent = {{-20, -20}, {20, 20}}, rotation = 90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput MomentumsConsign[3](quantity = "Mechanics.Rotation.Torque", displayUnit = "Nm") "Desired moments output" annotation(
|
||||
Placement(transformation(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;
|
||||
151
SimulationModels/AIDAModelica/AttitudeControl_PID2.mo
Normal file
151
SimulationModels/AIDAModelica/AttitudeControl_PID2.mo
Normal file
@@ -0,0 +1,151 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model AttitudeControl_PID2 "Attitude Control Model_PID2"
|
||||
parameter Real k=1;
|
||||
parameter Real Ti=10000;
|
||||
parameter Real Td=0.0001;
|
||||
Modelica.Blocks.Interfaces.RealInput AttitudeConsignAP[2](
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "Desired phi and teta angles input" annotation(Placement(
|
||||
transformation(extent={{-115,5},{-75,45}}),
|
||||
iconTransformation(
|
||||
origin={-50,100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=270)));
|
||||
Modelica.Blocks.Interfaces.RealInput AttitudeRCConsign[2](
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "Desired phi and teta angles input sac" annotation(Placement(
|
||||
transformation(extent={{-115,-55},{-75,-15}}),
|
||||
iconTransformation(extent={{-120,-20},{-80,20}})));
|
||||
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](
|
||||
quantity="Mechanics.Rotation.RotVelocity",
|
||||
displayUnit="rad/s") "Real angular velocities feedback input" annotation(Placement(
|
||||
transformation(extent={{-50,15},{-10,55}}),
|
||||
iconTransformation(
|
||||
origin={-50,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealInput Attitude[3](
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "Real attitude feedback input" annotation(Placement(
|
||||
transformation(extent={{-25,15},{15,55}}),
|
||||
iconTransformation(
|
||||
origin={0,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput MomentumsConsign[3](
|
||||
quantity="Mechanics.Rotation.Torque",
|
||||
displayUnit="Nm") "Desired moments output" annotation(Placement(
|
||||
transformation(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(
|
||||
transformation(extent={{-115,-25},{-75,15}}),
|
||||
iconTransformation(
|
||||
origin={50,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=-270)));
|
||||
PID_2 controlRollAngle1(
|
||||
k=k,
|
||||
Ti=Ti,
|
||||
Td=Td) annotation(Placement(transformation(extent={{38,13},{58,33}})));
|
||||
PID_2 controlPitchAngle1(
|
||||
k=k,
|
||||
Ti=Ti,
|
||||
Td=Td) annotation(Placement(transformation(extent={{48,-15},{68,5}})));
|
||||
PID_2 controlYawAngle1(
|
||||
k=k,
|
||||
Ti=Ti,
|
||||
Td=Td) annotation(Placement(transformation(extent={{58,-39},{78,-19}})));
|
||||
Modelica.Blocks.Logical.Switch SelectRollConsign annotation(Placement(transformation(extent={{-60,0},{-40,20}})));
|
||||
Modelica.Blocks.Logical.Switch SelectPitchConsign annotation(Placement(transformation(extent={{-60,-30},{-40,-10}})));
|
||||
Modelica.Blocks.Math.Add add1 annotation(Placement(transformation(extent={{-35,-75},{-15,-55}})));
|
||||
equation
|
||||
connect(add1.y, controlYawAngle1.Consign) annotation(
|
||||
Line(points = {{-14, -65}, {55, -65}, {55, -27}, {59, -27}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(controlYawAngle1.y, MomentumsConsign[3]) annotation(
|
||||
Line(points = {{79, -29}, {95, -29}, {95, -5}, {100, -5}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(controlYawAngle1.du, AngularSpeed[3]) annotation(
|
||||
Line(points = {{59, -33}, {-25, -33}, {-25, 35}, {-30, 35}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(controlYawAngle1.u, Attitude[3]) annotation(
|
||||
Line(points = {{58, -23}, {0, -23}, {0, 35}, {-5, 35}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(SelectRollConsign.y, controlRollAngle1.Consign) annotation(
|
||||
Line(points = {{-39, 10}, {15, 10}, {15, 25}, {39, 25}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(controlRollAngle1.y, MomentumsConsign[1]) annotation(
|
||||
Line(points = {{59, 23}, {95, 23}, {95, -5}, {100, -5}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(controlRollAngle1.du, AngularSpeed[1]) annotation(
|
||||
Line(points = {{39, 19}, {-25, 19}, {-25, 35}, {-30, 35}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(controlRollAngle1.u, Attitude[1]) annotation(
|
||||
Line(points = {{38, 29}, {0, 29}, {0, 35}, {-5, 35}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(SelectPitchConsign.y, controlPitchAngle1.Consign) annotation(
|
||||
Line(points = {{-39, -20}, {35, -20}, {35, -3}, {49, -3}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(controlPitchAngle1.y, MomentumsConsign[2]) annotation(
|
||||
Line(points = {{69, -5}, {100, -5}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(controlPitchAngle1.du, AngularSpeed[2]) annotation(
|
||||
Line(points = {{49, -9}, {-25, -9}, {-25, 35}, {-30, 35}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
//controlPitchAngle1.u=0; en boucle ouverte : Ki=100 s-1, tau=0.1s
|
||||
connect(controlPitchAngle1.u, Attitude[2]) annotation(
|
||||
|
||||
Line(points = {{48, 1}, {0, 1}, {0, 35}, {-5, 35}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(SelectRollConsign.u3, AttitudeRCConsign[1]) annotation(
|
||||
Line(points = {{-62, 2}, {-67, 2}, {-90, 2}, {-90, -35}, {-95, -35}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(SelectRollConsign.u2, SelectedControlMode) annotation(
|
||||
Line(points = {{-62, 10}, {-67, 10}, {-90, 10}, {-90, -5}, {-95, -5}}, color = {255, 0, 255}, thickness = 0.0625));
|
||||
connect(SelectRollConsign.u1, AttitudeConsignAP[1]) annotation(
|
||||
Line(points = {{-62, 18}, {-67, 18}, {-90, 18}, {-90, 25}, {-95, 25}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(SelectPitchConsign.u3, AttitudeRCConsign[2]) annotation(
|
||||
Line(points = {{-62, -28}, {-67, -28}, {-90, -28}, {-90, -35}, {-95, -35}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(SelectPitchConsign.u2, SelectedControlMode) annotation(
|
||||
Line(points = {{-62, -20}, {-67, -20}, {-90, -20}, {-90, -5}, {-95, -5}}, color = {255, 0, 255}, thickness = 0.0625));
|
||||
connect(SelectPitchConsign.u1, AttitudeConsignAP[2]) annotation(
|
||||
Line(points = {{-62, -12}, {-67, -12}, {-90, -12}, {-90, 25}, {-95, 25}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(add1.u1, YawConsign) annotation(
|
||||
Line(points = {{-37, -59}, {-42, -59}, {-55, -59}, {-55, -50}, {-60, -50}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(add1.u2, RCYawCommand) annotation(
|
||||
Line(points = {{-37, -71}, {-42, -71}, {-55, -71}, {-55, -80}, {-60, -80}}, 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),
|
||||
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)),
|
||||
add1(
|
||||
u1(flags=2),
|
||||
u2(flags=2),
|
||||
y(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 AttitudeControl_PID2;
|
||||
@@ -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(extent = {{-75, 15}, {-35, 55}}), iconTransformation(extent = {{-95, 5}, {-55, 45}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Attitude[3](quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-75, 55}, {-35, 95}}), iconTransformation(origin = {-25, 75}, extent = {{-20, -20}, {20, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput DroneAcceleration[3](quantity = "Mechanics.Translation.Accel", displayUnit = "m/s²") "'output Real' as connector" annotation(
|
||||
Placement(transformation(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(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,27 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ComputationChangeAngleVelocity "Computation ChangeAngle Velocity"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput DronAngularVelocities[3](quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rad/s") "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-20, -20}, {20, 20}}), iconTransformation(extent = {{-95, 5}, {-55, 45}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Attitude[3](quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-20, -20}, {20, 20}}), iconTransformation(origin = {-75, -25}, extent = {{-20, -20}, {20, 20}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput ChangeAngleVelocity[3](quantity = "Mechanics.Rotation.RotVelocity", displayUnit = "rad/s") "'output Real' as connector" annotation(
|
||||
Placement(transformation(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;
|
||||
40
SimulationModels/AIDAModelica/ComputeAltitudeConsign.mo
Normal file
40
SimulationModels/AIDAModelica/ComputeAltitudeConsign.mo
Normal file
@@ -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(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(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(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.InitPID.NoInit) annotation(
|
||||
Placement(transformation(extent = {{15, 25}, {35, 45}})));
|
||||
AIDAModelica.SpeedErrorModelSAC speedErrorModelSAC1 annotation(
|
||||
Placement(transformation(extent = {{-55, 30}, {-35, 50}})));
|
||||
equation
|
||||
connect(speedErrorModelSAC1.SpeedError, PID1.u) annotation(
|
||||
Line(points = {{-35, 40}, {-30, 40}, {8, 40}, {8, 35}, {13, 35}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(RCVerticalSpeedCommand, speedErrorModelSAC1.SpeedConsign) annotation(
|
||||
Line(points = {{-130, 45}, {-125, 45}, {-60, 45}, {-60, 40}, {-55, 40}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(VSpeed, speedErrorModelSAC1.Speed) annotation(
|
||||
Line(points = {{-130, -15}, {-125, -15}, {-45, -15}, {-45, 25}, {-45, 30}}, color = {0, 0, 127}, thickness = 0.0625));
|
||||
connect(PID1.y, AccelerationConsign) annotation(
|
||||
Line(points = {{36, 35}, {41, 35}, {70, 35}, {75, 35}}, 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,41 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model ComputeDroneAngularsVelocities "[SimuD4 DM] Compute drone angulars velocities"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319
|
||||
Modelica.Blocks.Interfaces.RealInput Moments[3](quantity = "Mechanics.Rotation.Torque", 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](quantity = "Mechanics.Translation.Velocity", 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;
|
||||
47
SimulationModels/AIDAModelica/ComputeDroneAttitude.mo
Normal file
47
SimulationModels/AIDAModelica/ComputeDroneAttitude.mo
Normal file
@@ -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](quantity = "Mechanics.Rotation.RotVelocity", 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](quantity = "Mechanics.Rotation.Angle", 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](quantity = "Mechanics.Rotation.Angle", 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;
|
||||
37
SimulationModels/AIDAModelica/ComputeDronePosition.mo
Normal file
37
SimulationModels/AIDAModelica/ComputeDronePosition.mo
Normal file
@@ -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](quantity = "Mechanics.Translation.Velocity", 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](quantity = "Mechanics.Translation.Displace", 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;
|
||||
57
SimulationModels/AIDAModelica/ComputeDroneVelocity.mo
Normal file
57
SimulationModels/AIDAModelica/ComputeDroneVelocity.mo
Normal file
@@ -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](quantity = "Mechanics.Rotation.Angle", 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](quantity = "Mechanics.Translation.Velocity", 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;
|
||||
28
SimulationModels/AIDAModelica/ComputeMoments.mo
Normal file
28
SimulationModels/AIDAModelica/ComputeMoments.mo
Normal file
@@ -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](quantity = "Mechanics.Rotation.Torque", 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;
|
||||
79
SimulationModels/AIDAModelica/ComputeMotorRate.mo
Normal file
79
SimulationModels/AIDAModelica/ComputeMotorRate.mo
Normal file
@@ -0,0 +1,79 @@
|
||||
within AIDAModelica;
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
model ComputeMotorRate "[SF2.5] Compute thrust"
|
||||
import Modelica.Math;
|
||||
Modelica.Blocks.Interfaces.RealInput TotalThrust(
|
||||
quantity="Mechanics.Translation.Force",
|
||||
displayUnit="N") "Desired total thrust " annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(extent={{-120,55},{-80,95}})));
|
||||
Modelica.Blocks.Interfaces.RealInput MomentumConsign[3](
|
||||
quantity="Mechanics.Rotation.Torque",
|
||||
displayUnit="Nm") "Desired momentums consign" annotation(Placement(
|
||||
transformation(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(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(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(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(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](
|
||||
quantity="Mechanics.Rotation.RotVelocity",
|
||||
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;
|
||||
235
SimulationModels/AIDAModelica/ComputePositionAndTime.mo
Normal file
235
SimulationModels/AIDAModelica/ComputePositionAndTime.mo
Normal file
@@ -0,0 +1,235 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model ComputePositionAndTime "Compute drone position and time "
|
||||
Modelica.Blocks.Interfaces.RealOutput Drone_position[3](
|
||||
quantity="Basics.Length",
|
||||
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,61 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model ComputeThrustAndAttitudeConsign "[SF2.1.4] Compute thrust and attitude consign"
|
||||
import Modelica.Math;
|
||||
Modelica.Blocks.Interfaces.RealInput AccelerationConsign[3](
|
||||
quantity="Mechanics.Translation.Accel",
|
||||
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](
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
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](
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
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](
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
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;
|
||||
23
SimulationModels/AIDAModelica/ComputeTotalThrust.mo
Normal file
23
SimulationModels/AIDAModelica/ComputeTotalThrust.mo
Normal file
@@ -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;
|
||||
57
SimulationModels/AIDAModelica/ComputeTotalThrustCA.mo
Normal file
57
SimulationModels/AIDAModelica/ComputeTotalThrustCA.mo
Normal file
@@ -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;
|
||||
33
SimulationModels/AIDAModelica/ComputeTotalThrustMM.mo
Normal file
33
SimulationModels/AIDAModelica/ComputeTotalThrustMM.mo
Normal file
@@ -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;
|
||||
92
SimulationModels/AIDAModelica/ControlAltitude.mo
Normal file
92
SimulationModels/AIDAModelica/ControlAltitude.mo
Normal file
@@ -0,0 +1,92 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model ControlAltitude "[SF2.4] Control altitude"
|
||||
Modelica.Blocks.Interfaces.RealOutput TotalThrustManual(
|
||||
quantity="Mechanics.Translation.Force",
|
||||
displayUnit="N") "Desired total thrust autopilot mode output" annotation(Placement(
|
||||
transformation(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(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(extent={{-105,25},{-65,65}}),
|
||||
iconTransformation(
|
||||
origin={-100,-50},
|
||||
extent={{-20,-20},{20,20}})));
|
||||
ComputeTotalThrustCA computeTotalThrustCA1 annotation(Placement(transformation(extent={{-10,20},{10,40}})));
|
||||
ComputeAltitudeConsign computeAltitudeConsign1 annotation(Placement(transformation(extent={{-55,20},{-35,40}})));
|
||||
equation
|
||||
connect(computeAltitudeConsign1.VSpeed,VSpeed) annotation(Line(
|
||||
points={{-54,26},{-76,26},{-76,16},{-84,16}},
|
||||
color={0,0,127}));
|
||||
connect(computeTotalThrustCA1.AccelerationConsign,computeAltitudeConsign1.AccelerationConsign) annotation(Line(
|
||||
points={{-10,30},{-15,30},{-30,30},{-35,30}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
connect(computeAltitudeConsign1.RCVerticalSpeedCommand,RCVerticalSpeedCommand) annotation(Line(
|
||||
points={{-55,35},{-60,35},{-80,35},{-80,45},{-85,45}},
|
||||
color={0,0,127},
|
||||
thickness=0.0625));
|
||||
|
||||
connect(computeTotalThrustCA1.TotalThrustAP,TotalThrustManual) annotation(Line(
|
||||
points={{10,30},{15,30},{25,30},{30,30}},
|
||||
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;
|
||||
44
SimulationModels/AIDAModelica/ControlAltitudeEx.mo
Normal file
44
SimulationModels/AIDAModelica/ControlAltitudeEx.mo
Normal file
@@ -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;
|
||||
54
SimulationModels/AIDAModelica/ControlDroneNavigation.mo
Normal file
54
SimulationModels/AIDAModelica/ControlDroneNavigation.mo
Normal file
@@ -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(quantity = "Mechanics.Rotation.Angle", displayUnit = "rad") "Yaw consign" annotation(
|
||||
Placement(transformation(extent = {{45, -15}, {65, 5}}), iconTransformation(extent = {{90, -10}, {110, 10}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput DronPositionConsign[3](quantity = "Mechanics.Translation.Displace", displayUnit = "m") "Dron position consign" annotation(
|
||||
Placement(transformation(extent = {{0, 20}, {20, 40}}), iconTransformation(extent = {{90, 40}, {110, 60}})));
|
||||
Modelica.Blocks.Interfaces.BooleanInput APEngagement "'input Boolean' as connector" annotation(
|
||||
Placement(visible = true,transformation(extent = {{-113, -63}, {-73, -23}}, rotation = 0), iconTransformation(extent = {{-120, 30}, {-80, 70}}, rotation = 0)));
|
||||
Modelica.Blocks.Interfaces.BooleanOutput SelectedControlMode "'output Boolean' as connector" annotation(
|
||||
Placement(transformation(extent = {{10, -45}, {30, -25}}), iconTransformation(extent = {{90, -60}, {110, -40}})));
|
||||
Modelica.Blocks.Interfaces.BooleanInput IndicatorYawConsign "'input Boolean' as connector" annotation(
|
||||
Placement(visible = true,transformation(extent = {{-118, 5}, {-78, 45}}, rotation = 0), iconTransformation(extent = {{-120, -20}, {-80, 20}}, rotation = 0)));
|
||||
Modelica.Blocks.Interfaces.RealInput Yaw "'input Real' as connector" annotation(
|
||||
Placement(transformation(extent = {{-120, -35}, {-80, 5}}), iconTransformation(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, -42}, {-92, -42}}, color = {255, 0, 255}));
|
||||
connect(SelectYawConsign.u2, APEngagement) annotation(
|
||||
Line(points = {{8, -5}, {-22, -5}, {-22, -43}, {-93, -43}}, color = {255, 0, 255}));
|
||||
connect(APEngagement, SelectedControlMode) annotation(
|
||||
Line(points = {{-93, -43}, {-22, -43}, {-22, -34}, {20, -34}}, color = {255, 0, 255}));
|
||||
connect(yawConsignProducing1.Yaw, Yaw) annotation(
|
||||
Line(points = {{-48, -15}, {-100, -15}}, 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}, {36, -5}, {50, -5}, {55, -5}}, 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(fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, extent = {{-103.3, 100}, {100, -100}}), Text(origin = {-7, 2}, extent = {{-49, 10}, {49, -10}}, textString = "%name")}, coordinateSystem(initialScale = 0.1)),
|
||||
experiment(StopTime = 1, StartTime = 0, Interval = 0.002, MaxInterval = "0.001"));
|
||||
end ControlDroneNavigation;
|
||||
54
SimulationModels/AIDAModelica/ControlEffectivenessModel.mo
Normal file
54
SimulationModels/AIDAModelica/ControlEffectivenessModel.mo
Normal file
@@ -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](quantity = "Mechanics.Rotation.Torque", 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;
|
||||
17
SimulationModels/AIDAModelica/ControlMotor.mo
Normal file
17
SimulationModels/AIDAModelica/ControlMotor.mo
Normal file
@@ -0,0 +1,17 @@
|
||||
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;
|
||||
38
SimulationModels/AIDAModelica/ControlPitchAngle.mo
Normal file
38
SimulationModels/AIDAModelica/ControlPitchAngle.mo
Normal file
@@ -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.InitPID.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;
|
||||
75
SimulationModels/AIDAModelica/ControlPosition.mo
Normal file
75
SimulationModels/AIDAModelica/ControlPosition.mo
Normal file
@@ -0,0 +1,75 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model ControlPosition "[SF2.1.1] Control position"
|
||||
Modelica.Blocks.Interfaces.RealInput DronePositionConsign[3](
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "Desired drone position consign" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(extent={{-120,-20},{-80,20}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Position[3](
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "Real drone position feedback" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(
|
||||
origin={0,-100},
|
||||
extent={{-20,-20},{20,20}},
|
||||
rotation=90)));
|
||||
Modelica.Blocks.Interfaces.RealOutput NavigationSpeedConsign[3](
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
displayUnit="m/s") "Desired drone speed consign" annotation(Placement(
|
||||
transformation(extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(extent={{85,-15},{115,15}})));
|
||||
Real DHP[2](
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "Desired horizontal position of the drone";
|
||||
Real HP[2](
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
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](
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
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;
|
||||
50
SimulationModels/AIDAModelica/ControlPositionSAC.mo
Normal file
50
SimulationModels/AIDAModelica/ControlPositionSAC.mo
Normal file
@@ -0,0 +1,50 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model ControlPositionSAC "[SF2.1.1] Control position SAC"
|
||||
Modelica.Blocks.Interfaces.RealInput DronePositionConsign[3](
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "Desired drone position consign" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(extent={{-120,-20},{-80,20}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Position[3](
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "Real drone position feedback" annotation(Placement(
|
||||
transformation(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(extent={{-120,-70},{-80,-30}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput NavigationSpeedConsign[3](
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
displayUnit="m/s") "Desired drone speed consign" annotation(Placement(
|
||||
transformation(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(extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(extent={{-120,30},{-80,70}})));
|
||||
Real DHP[2](
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "Desired horizontal position of the drone";
|
||||
Real HP[2](
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
displayUnit="m") "Real horizontal position of the drone";
|
||||
Real HNSC[2](
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
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;
|
||||
290
SimulationModels/AIDAModelica/ControlPositionV0.mo
Normal file
290
SimulationModels/AIDAModelica/ControlPositionV0.mo
Normal file
@@ -0,0 +1,290 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model ControlPositionV0 "ControlPosition_Modelica.ism"
|
||||
Modelica.Blocks.Interfaces.RealOutput Position_command[3] "'output Real' as connector" annotation(Placement(
|
||||
transformation(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(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(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;
|
||||
38
SimulationModels/AIDAModelica/ControlRollAngle.mo
Normal file
38
SimulationModels/AIDAModelica/ControlRollAngle.mo
Normal file
@@ -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.InitPID.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;
|
||||
49
SimulationModels/AIDAModelica/ControlSpeed.mo
Normal file
49
SimulationModels/AIDAModelica/ControlSpeed.mo
Normal file
@@ -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](quantity = "Mechanics.Translation.Velocity", 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](quantity = "Mechanics.Translation.Velocity", 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](quantity = "Mechanics.Translation.Accel", 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.InitPID.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.InitPID.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.InitPID.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;
|
||||
96
SimulationModels/AIDAModelica/ControlYawAngle.mo
Normal file
96
SimulationModels/AIDAModelica/ControlYawAngle.mo
Normal file
@@ -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.InitPID.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;
|
||||
54
SimulationModels/AIDAModelica/Cosim_Sim_m.mo
Normal file
54
SimulationModels/AIDAModelica/Cosim_Sim_m.mo
Normal file
@@ -0,0 +1,54 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model Cosim_Sim_m
|
||||
parameter Modelica.SIunits.Time Cosim_step(start=0.02);
|
||||
parameter Boolean Cosim_activ=false;
|
||||
parameter Integer N=1;
|
||||
Modelica.Blocks.Discrete.ZeroOrderHold zeroOrderHold1[N](samplePeriod=Cosim_step) annotation(Placement(transformation(extent={{-10,-10},{10,10}})));
|
||||
Modelica.Blocks.Logical.Switch logicalSwitch1[N] annotation(Placement(transformation(extent={{-10,-10},{10,10}})));
|
||||
Modelica.Blocks.Interfaces.RealInput u[N] annotation(Placement(
|
||||
transformation(
|
||||
origin={-74,8},
|
||||
extent={{-20,-20},{20,20}}),
|
||||
iconTransformation(
|
||||
origin={-74,8},
|
||||
extent={{-20,-20},{20,20}})));
|
||||
Modelica.Blocks.Interfaces.RealOutput[N] y annotation(Placement(
|
||||
transformation(
|
||||
origin={78,6},
|
||||
extent={{-10,-10},{10,10}}),
|
||||
iconTransformation(
|
||||
origin={85,13},
|
||||
extent={{-17,-17},{17,17}})));
|
||||
equation
|
||||
for i in 1:N loop
|
||||
connect(u[i], zeroOrderHold1[i].u) ;
|
||||
logicalSwitch1[i].u2 = Cosim_activ;
|
||||
connect(zeroOrderHold1[i].y, logicalSwitch1[i].u1) ;
|
||||
connect(u[i], logicalSwitch1[i].u3) ;
|
||||
connect(logicalSwitch1[i].y, y[i]) ;
|
||||
end for;
|
||||
annotation(
|
||||
Icon(graphics={
|
||||
Text(
|
||||
textString="Discretisation par zero hold",
|
||||
fillPattern=FillPattern.None,
|
||||
extent={{-30,10},{90,-30}},
|
||||
origin={-32,44}),
|
||||
Line(
|
||||
points={{-72,-28},{-54,-28},{-54,-6},{-34,-6},{-34,16},{-12,
|
||||
16},{-12,-6},{12,-6},{12,-16},{32,-16},{32,28},{52,
|
||||
28},{52,16},{72,16},{72,-2}},
|
||||
origin={-2,-30}),
|
||||
Text(
|
||||
textString="Cosim port model",
|
||||
fillPattern=FillPattern.None,
|
||||
extent={{-23,8},{87,-28}},
|
||||
origin={-35,80})}),
|
||||
experiment(
|
||||
StopTime=1,
|
||||
StartTime=0,
|
||||
Interval=0.002,
|
||||
MaxInterval="0.001"));
|
||||
end Cosim_Sim_m;
|
||||
30
SimulationModels/AIDAModelica/CreateMotion.mo
Normal file
30
SimulationModels/AIDAModelica/CreateMotion.mo
Normal file
@@ -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;
|
||||
153
SimulationModels/AIDAModelica/GeneratePositioningSignal.mo
Normal file
153
SimulationModels/AIDAModelica/GeneratePositioningSignal.mo
Normal file
@@ -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;
|
||||
127
SimulationModels/AIDAModelica/LowLevelFlightControlSystem.mo
Normal file
127
SimulationModels/AIDAModelica/LowLevelFlightControlSystem.mo
Normal file
@@ -0,0 +1,127 @@
|
||||
within AIDAModelica;
|
||||
model LowLevelFlightControlSystem "Low level Flight Control System"
|
||||
Modelica.Blocks.Interfaces.RealInput DronePositionConsign[3](quantity = "Mechanics.Translation.Displace", 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](quantity = "Mechanics.Rotation.RotVelocity", 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](quantity = "Mechanics.Translation.Displace", 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](quantity = "Mechanics.Rotation.Angle", 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](quantity = "Mechanics.Translation.Velocity", 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](quantity = "Mechanics.Rotation.Angle", 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;
|
||||
514
SimulationModels/AIDAModelica/ModelicaLicense2.mo
Normal file
514
SimulationModels/AIDAModelica/ModelicaLicense2.mo
Normal file
@@ -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;
|
||||
22
SimulationModels/AIDAModelica/MotorControl.mo
Normal file
22
SimulationModels/AIDAModelica/MotorControl.mo
Normal file
@@ -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;
|
||||
23
SimulationModels/AIDAModelica/MotorPropellerModel.mo
Normal file
23
SimulationModels/AIDAModelica/MotorPropellerModel.mo
Normal file
@@ -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;
|
||||
120
SimulationModels/AIDAModelica/PID_2.mo
Normal file
120
SimulationModels/AIDAModelica/PID_2.mo
Normal file
@@ -0,0 +1,120 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
//Licensed by 2000-2019 Modelica Association & al. under the Modelica License 2
|
||||
//Copyright © 2000-2019, Modelica Association & al.
|
||||
within AIDAModelica;
|
||||
model PID_2 "PID_2"
|
||||
import Modelica.Blocks.Types.InitPID;
|
||||
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 Blocks.Types.InitPID initType=Blocks.Types.InitPID.DoNotUse_InitialIntegratorState "Type of initialization (1: no init, 2: steady state, 3: initial state, 4: initial output)" 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==InitPID.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 == InitPID.SteadyState then Init.SteadyState else if initType == InitPID.InitialState or initType == InitPID.DoNotUse_InitialIntegratorState 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 == InitPID.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;
|
||||
134
SimulationModels/AIDAModelica/PID_discrete.mo
Normal file
134
SimulationModels/AIDAModelica/PID_discrete.mo
Normal file
@@ -0,0 +1,134 @@
|
||||
within AIDAModelica;
|
||||
block PID_discrete "PID-controller in additive description form"
|
||||
import Modelica.Blocks.Types.InitPID;
|
||||
import Modelica.Blocks.Types.Init;
|
||||
extends Modelica.Blocks.Interfaces.SISO;
|
||||
parameter Real k(unit = "1") = 1 "Gain";
|
||||
parameter SIunits.Time Ti(min = Modelica.Constants.small, start = 0.5) "Time Constant of Integrator";
|
||||
parameter SIunits.Time Td(min = 0, start = 0.1) "Time Constant of Derivative block";
|
||||
parameter Real Nd(min = Modelica.Constants.small) = 10 "The higher Nd, the more ideal the derivative block";
|
||||
parameter Modelica.Blocks.Types.InitPID initType = Modelica.Blocks.Types.InitPID.DoNotUse_InitialIntegratorState "Type of initialization (1: no init, 2: steady state, 3: initial state, 4: initial output)" 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(enable = initType == InitPID.InitialOutput, group = "Initialization"));
|
||||
constant SI.Time unitTime = 1 annotation(
|
||||
HideResult = true);
|
||||
Blocks.Math.Gain P(k = 1) "Proportional part of PID controller" annotation(
|
||||
Placement(transformation(extent = {{-60, 60}, {-20, 100}})));
|
||||
Blocks.Continuous.Integrator I(k = unitTime / Ti, y_start = xi_start, initType = if initType == InitPID.SteadyState then Init.SteadyState else if initType == InitPID.InitialState or initType == InitPID.DoNotUse_InitialIntegratorState then Init.InitialState else Init.NoInit) "Integral part of PID controller" annotation(
|
||||
Placement(transformation(extent = {{-60, -20}, {-20, 20}})));
|
||||
Blocks.Continuous.Derivative D(k = Td / unitTime, T = max([Td / Nd, 100 * Modelica.Constants.eps]), x_start = xd_start, initType = if initType == InitPID.SteadyState or initType == InitPID.InitialOutput then Init.SteadyState else if initType == InitPID.InitialState then Init.InitialState else Init.NoInit) "Derivative part of PID controller" annotation(
|
||||
Placement(transformation(extent = {{-60, -100}, {-20, -60}})));
|
||||
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}})));
|
||||
initial equation
|
||||
if initType == InitPID.InitialOutput then
|
||||
y = y_start;
|
||||
end if;
|
||||
equation
|
||||
connect(u, P.u) annotation(
|
||||
Line(points = {{-120, 0}, {-80, 0}, {-80, 80}, {-64, 80}}, color = {0, 0, 127}));
|
||||
connect(u, I.u) annotation(
|
||||
Line(points = {{-120, 0}, {-64, 0}}, color = {0, 0, 127}));
|
||||
connect(u, D.u) annotation(
|
||||
Line(points = {{-120, 0}, {-80, 0}, {-80, -80}, {-64, -80}}, color = {0, 0, 127}));
|
||||
connect(P.y, Add.u1) annotation(
|
||||
Line(points = {{-18, 80}, {0, 80}, {0, 8}, {18, 8}}, color = {0, 0, 127}));
|
||||
connect(I.y, Add.u2) annotation(
|
||||
Line(points = {{-18, 0}, {18, 0}}, color = {0, 0, 127}));
|
||||
connect(D.y, Add.u3) annotation(
|
||||
Line(points = {{-18, -80}, {0, -80}, {0, -8}, {18, -8}}, color = {0, 0, 127}));
|
||||
connect(Add.y, Gain.u) annotation(
|
||||
Line(points = {{41, 0}, {58, 0}}, color = {0, 0, 127}));
|
||||
connect(Gain.y, y) annotation(
|
||||
Line(points = {{81, 0}, {110, 0}}, color = {0, 0, 127}));
|
||||
annotation(
|
||||
defaultComponentName = "PID",
|
||||
Icon(coordinateSystem(preserveAspectRatio = true, extent = {{-100.0, -100.0}, {100.0, 100.0}}), graphics = {Line(points = {{-80.0, 78.0}, {-80.0, -90.0}}, color = {192, 192, 192}), Polygon(lineColor = {192, 192, 192}, fillColor = {192, 192, 192}, fillPattern = FillPattern.Solid, points = {{-80.0, 90.0}, {-88.0, 68.0}, {-72.0, 68.0}, {-80.0, 90.0}}), Line(points = {{-90.0, -80.0}, {82.0, -80.0}}, color = {192, 192, 192}), Polygon(lineColor = {192, 192, 192}, fillColor = {192, 192, 192}, fillPattern = FillPattern.Solid, points = {{90.0, -80.0}, {68.0, -72.0}, {68.0, -88.0}, {90.0, -80.0}}), Line(points = {{-80, -80}, {-80, -20}, {60, 80}}, color = {0, 0, 127}), Text(lineColor = {192, 192, 192}, extent = {{-20.0, -60.0}, {80.0, -20.0}}, textString = "PID"), Text(extent = {{-150.0, -150.0}, {150.0, -110.0}}, textString = "Ti=%Ti")}),
|
||||
Documentation(info = "<html>
|
||||
<p>
|
||||
This is the text-book version of a PID-controller.
|
||||
For a more practically useful PID-controller, use
|
||||
block LimPID.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The PID block can be initialized in different
|
||||
ways controlled by parameter <b>initType</b>. The possible
|
||||
values of initType are defined in
|
||||
<a href=\"modelica://Modelica.Blocks.Types.InitPID\">Modelica.Blocks.Types.InitPID</a>.
|
||||
This type is identical to
|
||||
<a href=\"modelica://Modelica.Blocks.Types.Init\">Types.Init</a>,
|
||||
with the only exception that the additional option
|
||||
<b>DoNotUse_InitialIntegratorState</b> is added for
|
||||
backward compatibility reasons (= integrator is initialized with
|
||||
InitialState whereas differential part is initialized with
|
||||
NoInit which was the initialization in version 2.2 of the Modelica
|
||||
standard library).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Based on the setting of initType, the integrator (I) and derivative (D)
|
||||
blocks inside the PID controller are initialized according to the following table:
|
||||
</p>
|
||||
|
||||
<table border=1 cellspacing=0 cellpadding=2>
|
||||
<tr><td valign=\"top\"><b>initType</b></td>
|
||||
<td valign=\"top\"><b>I.initType</b></td>
|
||||
<td valign=\"top\"><b>D.initType</b></td></tr>
|
||||
|
||||
<tr><td valign=\"top\"><b>NoInit</b></td>
|
||||
<td valign=\"top\">NoInit</td>
|
||||
<td valign=\"top\">NoInit</td></tr>
|
||||
|
||||
<tr><td valign=\"top\"><b>SteadyState</b></td>
|
||||
<td valign=\"top\">SteadyState</td>
|
||||
<td valign=\"top\">SteadyState</td></tr>
|
||||
|
||||
<tr><td valign=\"top\"><b>InitialState</b></td>
|
||||
<td valign=\"top\">InitialState</td>
|
||||
<td valign=\"top\">InitialState</td></tr>
|
||||
|
||||
<tr><td valign=\"top\"><b>InitialOutput</b><br>
|
||||
and initial equation: y = y_start</td>
|
||||
<td valign=\"top\">NoInit</td>
|
||||
<td valign=\"top\">SteadyState</td></tr>
|
||||
|
||||
<tr><td valign=\"top\"><b>DoNotUse_InitialIntegratorState</b></td>
|
||||
<td valign=\"top\">InitialState</td>
|
||||
<td valign=\"top\">NoInit</td></tr>
|
||||
</table>
|
||||
|
||||
<p>
|
||||
In many cases, the most useful initial condition is
|
||||
<b>SteadyState</b> because initial transients are then no longer
|
||||
present. If initType = InitPID.SteadyState, then in some
|
||||
cases difficulties might occur. The reason is the
|
||||
equation of the integrator:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
<b>der</b>(y) = k*u;
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
The steady state equation \"der(x)=0\" leads to the condition that the input u to the
|
||||
integrator is zero. If the input u is already (directly or indirectly) defined
|
||||
by another initial condition, then the initialization problem is <b>singular</b>
|
||||
(has none or infinitely many solutions). This situation occurs often
|
||||
for mechanical systems, where, e.g., u = desiredSpeed - measuredSpeed and
|
||||
since speed is both a state and a derivative, it is natural to
|
||||
initialize it with zero. As sketched this is, however, not possible.
|
||||
The solution is to not initialize u or the variable that is used
|
||||
to compute u by an algebraic equation.
|
||||
</p>
|
||||
|
||||
</html>"));
|
||||
end PID_discrete;
|
||||
201
SimulationModels/AIDAModelica/PositionControl.mo
Normal file
201
SimulationModels/AIDAModelica/PositionControl.mo
Normal file
@@ -0,0 +1,201 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model PositionControl "Position Control Model"
|
||||
Modelica.Blocks.Interfaces.RealInput DronPositionConsign[3](
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
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](
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
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(
|
||||
quantity="Mechanics.Translation.Force",
|
||||
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](
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
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](
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
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](
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
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;
|
||||
64
SimulationModels/AIDAModelica/PositionConvector.mo
Normal file
64
SimulationModels/AIDAModelica/PositionConvector.mo
Normal file
@@ -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;
|
||||
234
SimulationModels/AIDAModelica/ProSIVICToSimXInterface.mo
Normal file
234
SimulationModels/AIDAModelica/ProSIVICToSimXInterface.mo
Normal file
@@ -0,0 +1,234 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
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](
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
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](
|
||||
quantity="Mechanics.Rotation.RotVelocity",
|
||||
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](
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
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](
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
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;
|
||||
183
SimulationModels/AIDAModelica/ProSIVICToSimXInterfaceTest.mo
Normal file
183
SimulationModels/AIDAModelica/ProSIVICToSimXInterfaceTest.mo
Normal file
@@ -0,0 +1,183 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
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](
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
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](
|
||||
quantity="Mechanics.Rotation.RotVelocity",
|
||||
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](
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
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](
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
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;
|
||||
1930
SimulationModels/AIDAModelica/QuadcopterModel.mo
Normal file
1930
SimulationModels/AIDAModelica/QuadcopterModel.mo
Normal file
File diff suppressed because it is too large
Load Diff
215
SimulationModels/AIDAModelica/RemoteControl.mo
Normal file
215
SimulationModels/AIDAModelica/RemoteControl.mo
Normal file
@@ -0,0 +1,215 @@
|
||||
within AIDAModelica;
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
|
||||
model RemoteControl "RemoteControl"
|
||||
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(extent={{12,28},{32,48}}),
|
||||
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(extent={{56,8},{76,28}}),
|
||||
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(extent={{-38,-46},{-18,-26}}),
|
||||
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(extent={{18,-52},{38,-32}}),
|
||||
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,-10},{10,10}}),
|
||||
iconTransformation(
|
||||
origin={-125,-50},
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=180)));
|
||||
Modelica.Blocks.Interfaces.BooleanOutput IndicatorYawConsign "'output Boolean' as connector" annotation(Placement(
|
||||
transformation(
|
||||
origin={-45,45},
|
||||
extent={{-17,-17},{17,17}}),
|
||||
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 Auto_Ctl_Enabled==true 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;
|
||||
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}}),
|
||||
graphics={
|
||||
Rectangle(
|
||||
fillColor={255,255,255},
|
||||
fillPattern=FillPattern.Solid,
|
||||
extent={{-123.3,100},{123.3,-100}}),
|
||||
Text(
|
||||
textString="%name",
|
||||
fillPattern=FillPattern.None,
|
||||
extent={{-86,20},{86,-20}},
|
||||
origin={-2,6})}),
|
||||
experiment(
|
||||
StopTime=10,
|
||||
StartTime=0,
|
||||
Interval=0.02,
|
||||
MaxInterval="0.001"));
|
||||
end RemoteControl;
|
||||
184
SimulationModels/AIDAModelica/RemoteControlForIntegration.mo
Normal file
184
SimulationModels/AIDAModelica/RemoteControlForIntegration.mo
Normal file
@@ -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;
|
||||
53
SimulationModels/AIDAModelica/RigidBodyDynamicModel.mo
Normal file
53
SimulationModels/AIDAModelica/RigidBodyDynamicModel.mo
Normal file
@@ -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](quantity = "Mechanics.Rotation.Torque", displayUnit = "Nm") "Moments" annotation(
|
||||
Placement(transformation(extent = {{-75, 55}, {-35, 95}}), iconTransformation(extent = {{-120, -70}, {-80, -30}})));
|
||||
Modelica.Blocks.Interfaces.RealInput TotalThrust(quantity = "Mechanics.Translation.Force", displayUnit = "N") "Total Thrust" annotation(
|
||||
Placement(transformation(extent = {{-75, -15}, {-35, 25}}), iconTransformation(extent = {{-120, 30}, {-80, 70}})));
|
||||
Modelica.Blocks.Interfaces.RealInput Attitude[3](quantity = "Mechanics.Rotation.Angle", 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](quantity = "Mechanics.Rotation.RotAccel", 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](quantity = "Mechanics.Translation.Accel", 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;
|
||||
41
SimulationModels/AIDAModelica/RigidBodyKinematicModel.mo
Normal file
41
SimulationModels/AIDAModelica/RigidBodyKinematicModel.mo
Normal file
@@ -0,0 +1,41 @@
|
||||
within AIDAModelica;
|
||||
|
||||
model RigidBodyKinematicModel "Rigid body kinematic model"
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
Modelica.Blocks.Interfaces.RealInput DroneAngularVelocities[3](quantity = "Mechanics.Rotation.RotVelocity", 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](quantity = "Mechanics.Translation.Velocity", 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](quantity = "Mechanics.Rotation.RotVelocity", 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](quantity = "Mechanics.Translation.Displace", 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;
|
||||
2011
SimulationModels/AIDAModelica/RunFlightPlan.mo
Normal file
2011
SimulationModels/AIDAModelica/RunFlightPlan.mo
Normal file
File diff suppressed because it is too large
Load Diff
37
SimulationModels/AIDAModelica/SelectAttitudeConsign.mo
Normal file
37
SimulationModels/AIDAModelica/SelectAttitudeConsign.mo
Normal file
@@ -0,0 +1,37 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model SelectAttitudeConsign "[SF2.3.2] Select attitude consign"
|
||||
Modelica.Blocks.Interfaces.RealInput AttitudeAPConsign[2](
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
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](
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
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](
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
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;
|
||||
152
SimulationModels/AIDAModelica/SelectControlMode.mo
Normal file
152
SimulationModels/AIDAModelica/SelectControlMode.mo
Normal file
File diff suppressed because one or more lines are too long
37
SimulationModels/AIDAModelica/SelectSpeedConsign.mo
Normal file
37
SimulationModels/AIDAModelica/SelectSpeedConsign.mo
Normal file
@@ -0,0 +1,37 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model SelectSpeedConsign "[SF2.1.2] Select speed consign"
|
||||
Modelica.Blocks.Interfaces.RealInput NavigationVelocityConsign[3](
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
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](
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
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;
|
||||
35
SimulationModels/AIDAModelica/SelectTotalThrustConsign.mo
Normal file
35
SimulationModels/AIDAModelica/SelectTotalThrustConsign.mo
Normal file
@@ -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;
|
||||
99
SimulationModels/AIDAModelica/SimXToProSIVICInterface.mo
Normal file
99
SimulationModels/AIDAModelica/SimXToProSIVICInterface.mo
Normal file
@@ -0,0 +1,99 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model SimXToProSIVICInterface "Simulation X to ProSIVIC Interface"
|
||||
Modelica.Blocks.Interfaces.RealInput Position[3](
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
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](
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
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;
|
||||
171
SimulationModels/AIDAModelica/SimXToProSIVICInterfaceTest.mo
Normal file
171
SimulationModels/AIDAModelica/SimXToProSIVICInterfaceTest.mo
Normal file
@@ -0,0 +1,171 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model SimXToProSIVICInterfaceTest "Simulation X to ProSIVIC Interface Test"
|
||||
Modelica.Blocks.Interfaces.RealInput Position[3](
|
||||
quantity="Mechanics.Translation.Displace",
|
||||
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](
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
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](
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
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](
|
||||
quantity="Mechanics.Rotation.RotVelocity",
|
||||
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;
|
||||
53
SimulationModels/AIDAModelica/SpeedErrorModel.mo
Normal file
53
SimulationModels/AIDAModelica/SpeedErrorModel.mo
Normal file
@@ -0,0 +1,53 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model SpeedErrorModel "Speed error calculate model"
|
||||
Modelica.Blocks.Interfaces.RealInput SpeedConsign[3](
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
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](
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
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](
|
||||
quantity="Mechanics.Translation.Velocity",
|
||||
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;
|
||||
40
SimulationModels/AIDAModelica/SpeedErrorModelMM.mo
Normal file
40
SimulationModels/AIDAModelica/SpeedErrorModelMM.mo
Normal file
@@ -0,0 +1,40 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
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;
|
||||
61
SimulationModels/AIDAModelica/SpeedErrorModelSAC.mo
Normal file
61
SimulationModels/AIDAModelica/SpeedErrorModelSAC.mo
Normal file
@@ -0,0 +1,61 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model SpeedErrorModelSAC "Speed error calculate model SAC"
|
||||
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,-20},{-80,20}})));
|
||||
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(
|
||||
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(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;
|
||||
177
SimulationModels/AIDAModelica/Step_analysis.mo
Normal file
177
SimulationModels/AIDAModelica/Step_analysis.mo
Normal file
@@ -0,0 +1,177 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
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;
|
||||
1846
SimulationModels/AIDAModelica/TrajectoryManagement.bak
Normal file
1846
SimulationModels/AIDAModelica/TrajectoryManagement.bak
Normal file
File diff suppressed because it is too large
Load Diff
5285
SimulationModels/AIDAModelica/TrajectoryManagement.ism
Normal file
5285
SimulationModels/AIDAModelica/TrajectoryManagement.ism
Normal file
File diff suppressed because it is too large
Load Diff
1860
SimulationModels/AIDAModelica/TrajectoryManagement.mo
Normal file
1860
SimulationModels/AIDAModelica/TrajectoryManagement.mo
Normal file
File diff suppressed because it is too large
Load Diff
42
SimulationModels/AIDAModelica/XAngularSpeedErrorModel.mo
Normal file
42
SimulationModels/AIDAModelica/XAngularSpeedErrorModel.mo
Normal file
@@ -0,0 +1,42 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model XAngularSpeedErrorModel "X angular speed error calculation model"
|
||||
Modelica.Blocks.Interfaces.RealInput RollConsign(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "'input Real' as connector" annotation(Placement(
|
||||
transformation(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(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(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(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;
|
||||
46
SimulationModels/AIDAModelica/YAngularSpeedErrorModel.mo
Normal file
46
SimulationModels/AIDAModelica/YAngularSpeedErrorModel.mo
Normal file
@@ -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(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(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(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(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;
|
||||
27
SimulationModels/AIDAModelica/YawConsignProducing.mo
Normal file
27
SimulationModels/AIDAModelica/YawConsignProducing.mo
Normal file
@@ -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;
|
||||
46
SimulationModels/AIDAModelica/ZAngularSpeedErrorModel.mo
Normal file
46
SimulationModels/AIDAModelica/ZAngularSpeedErrorModel.mo
Normal file
@@ -0,0 +1,46 @@
|
||||
// CP: 65001
|
||||
// SimulationX Version: 3.8.2.45319 x64
|
||||
within AIDAModelica;
|
||||
model ZAngularSpeedErrorModel "Z angular speed error calculation model"
|
||||
Modelica.Blocks.Interfaces.RealInput YawCosign(
|
||||
quantity="Mechanics.Rotation.Angle",
|
||||
displayUnit="rad") "'input Real' as connector" annotation(Placement(
|
||||
transformation(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(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(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(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;
|
||||
64
SimulationModels/AIDAModelica/modele_complet_RC.mo
Normal file
64
SimulationModels/AIDAModelica/modele_complet_RC.mo
Normal file
File diff suppressed because one or more lines are too long
14697
SimulationModels/AIDAModelica/package.mo
Normal file
14697
SimulationModels/AIDAModelica/package.mo
Normal file
File diff suppressed because it is too large
Load Diff
70
SimulationModels/AIDAModelica/package.order
Normal file
70
SimulationModels/AIDAModelica/package.order
Normal file
@@ -0,0 +1,70 @@
|
||||
WSSModel
|
||||
ComputationAngularAccelerationModel
|
||||
drone_feets
|
||||
RealArrayPassThrough
|
||||
AccelerationToSpeed
|
||||
AcquirePositioningSignal
|
||||
AllocationControl
|
||||
AttitudeControl
|
||||
AttitudeControl_PID2
|
||||
ComputationAccelerationModel
|
||||
ComputationChangeAngleVelocity
|
||||
ComputeAltitudeConsign
|
||||
ComputeDroneAngularsVelocities
|
||||
ComputeDroneAttitude
|
||||
ComputeDronePosition
|
||||
ComputeDroneVelocity
|
||||
ComputeMoments
|
||||
ComputeMotorRate
|
||||
ComputePositionAndTime
|
||||
ComputeThrustAndAttitudeConsign
|
||||
ComputeTotalThrust
|
||||
ComputeTotalThrustCA
|
||||
ComputeTotalThrustMM
|
||||
ControlAltitude
|
||||
ControlAltitudeEx
|
||||
ControlDroneNavigation
|
||||
ControlEffectivenessModel
|
||||
ControlMotor
|
||||
ControlPitchAngle
|
||||
ControlPosition
|
||||
ControlPositionSAC
|
||||
ControlPositionV0
|
||||
ControlRollAngle
|
||||
ControlSpeed
|
||||
ControlYawAngle
|
||||
Cosim_Sim_m
|
||||
CreateMotion
|
||||
GeneratePositioningSignal
|
||||
LowLevelFlightControlSystem
|
||||
modele_complet_RC
|
||||
MotorControl
|
||||
MotorPropellerModel
|
||||
PID_2
|
||||
PID_discrete
|
||||
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
|
||||
Reference in New Issue
Block a user