Path: AC/ACDynamics
% Dynamics model for an aircraft. Updates the data structure x. This model can include: Flexible appendages Spinning rotors Nonlinear aerodynamics Disturbance models You can supply up to six routine names to customize the simulation: d.aero.name = 'YourAeroFunctionName' - default [] d.actuator.name = 'YourActuatorFunctionName' - default [] d.engine.name = 'YourEngineFunctionName' - default [] d.rotor.name = 'YourRotorFunctionName' - default [] d.sensor.name = 'YourSensorFunctionName' - default [] d.disturb.name = 'YourDisturbanceFunctionName' - default [] ----------------------------------------------------------- Your aerodynamics routine must be in the form: gAero = YourAeroFunctionName( alpha, beta, x, d.aero, qBar, control ) where gAero is a data structure that computes the forces and torques on all of the components and an addition the the mass and inertia matrix. gAero is a data structure of the form gAero.torque (3,1) Core torques gAero.force (3,1) Core forces gAero.modal (:,1) Modal forces gAero.inertia (3,3) Delta inertia due to aerodynamics gAero.mass (3,3) Delta mass matrix due to aerodynamics If the last terms are zero return [] for them. All terms are in the body frame. ----------------------------------------------------------- Your engine routine must be in the form: gEngine = YourEngineFunctionName( x.engine, d.engine, control, altitude, machNo ) where gEngine is a data structure that contains the forces and torques on the aircraft due to the engines and the engine state derivatives. gEngine is a data structure of the form gEngine.torque (3,1) Core torques gEngine.force (3,1) Core forces gEngine.dX (:,1) Engine state derivatives gEngine.mDot (1,1) Fuel consumption gEngine.inertiaDot (3,3) Inertia derivative due to fuel consumption gEngine.cGDot (3,1) CG derivative due to fuel consumption gEngine.torqueRotor (:,1) Torques on rotors ----------------------------------------------------------- Your rotor routine must be in the form: torque = YourRotorFunctionName( gEngine.torqueRotor, d.control, d.rotor ) where torque is a data structure that contains the torques on all rotors. gEngine.torqueRotor (:,1) Torques on rotors ----------------------------------------------------------- Your actuator routine must be in the form: [dXActuator, control] = YourActuatorFunctionName( x.actuator, d.control, d.actuator ) where torque is a data structure that contains the torques on all rotors. ----------------------------------------------------------- Your sensor routine must be in the form: x = YourSensorFunctionName( x, d, opt ) when opt = 'rhs' x = dXSensor when opt = 'meas' x = measurement ----------------------------------------------------------- Your disturbance routine must be in the form: disturb = YourDisturbanceFunctionName( x.disturb, d.disturb ) where disturb.xDot - disturbance state derivatives disturb.torque - disturbance torque disturb.force - disturbance force -------------------------------------------------------------------------- Form: [x, measurement] = ACModel( x, t, dT, d, opt ) -------------------------------------------------------------------------- ------ Inputs ------ x (:) Aircraft state r (3,1) ECI position vector q (4,1) Quaternion from ECI to body w (3,1) Inertial body rate in body frame v (3,1) Velocity of cm wrt air wR (:,1) Angular velocity of rotors mass (1,1) Mass inertia (6,1) Inertia cG (3,1) Center of mass engine (:,1) Engine states actuator (:,1) Actuator states sensor (:,1) Sensor states flex (:,1) Flex model states organized [x;v] by appendage disturb (:,1) Disturbance model states t (1,1) Time dT (1,1) Time step d (:) Aircraft data structure d.wPlanet (3,1) Planet rate d.mu (1,1) Planet gravitational parameter d.theta0 (1,1) Initial angle between planet x-axis and ECI x-axis d.atmData (1,:) Atmospheric data d.atmUnits (1,:) Atmospheric data units d.rotor (:) Rotor data structure .u (3,1) Unit vector .inertia (1,1) Spin axis inertia d.flex (:) See get BldFlex d.engine (:) Private engine data structure d.aero (:) Private aerodynamics data structure d.actuator (:) Private actuator data structure d.sensor (:) Private sensor data structure d.disturb (:) Private disturbance data structure d.control (:) Control data structure .elevator .aileron .rudder .throttle opt (1,:) Options 'integrate' (default) 'xdot' 'meas' ------- Outputs ------- x (:) Aircraft state 'integrate' acceleration 'xdot' measurement (:) Measurement data structure opt --------------------------------------------------------------------------
AC: ACCoord/AlphBeta AC: ACCoord/ECIToNED AC: Classes/@acstate/abs.m AC: Classes/@acstate/acstate.m AC: Classes/@acstate/get.m AC: Classes/@acstate/length.m AC: Classes/@acstate/minus.m AC: Classes/@acstate/mrdivide.m AC: Classes/@acstate/mtimes.m AC: Classes/@acstate/plus.m AC: Classes/@acstate/subsasgn.m AC: Classes/@acstate/subsref.m AC: Classes/@acstate/zeros.m AerospaceUtils: AtmosphericCalculations/AirData AerospaceUtils: Coord/QIToBDot Common: Classes/@statespace/and.m Common: Classes/@statespace/close.m Common: Classes/@statespace/connect.m Common: Classes/@statespace/eig.m Common: Classes/@statespace/get.m Common: Classes/@statespace/getabcd.m Common: Classes/@statespace/getsub.m Common: Classes/@statespace/isempty.m Common: Classes/@statespace/mtimes.m Common: Classes/@statespace/plus.m Common: Classes/@statespace/series.m Common: Classes/@statespace/set.m Common: Classes/@statespace/statespace.m Common: Quaternion/Q2Eul Common: Quaternion/QForm Common: Quaternion/QMult Common: Quaternion/QPose Common: Quaternion/QTForm Common: Quaternion/QUnit Common: Transform/Altitude Common: Transform/Eul2Q Math: Linear/Cross Math: Linear/Mag Math: Linear/Skew Math: Linear/SkewSymm
Back to the AC Module page