// 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;