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;