Этот пример показывает процесс создания и анализа самолета в MATLAB с помощью геометрии C182 Cessna и данных коэффициентов.
Данные, используемые для создания самолета, взяты из Airplane Flight Dynamics and Controls Яном Роскамом [1].
Этот пример описывает:
Настройка аэродинамических и управляющих поверхностей фиксированного крыла путем создания и вложения поверхности управления лифтом, а затем создания элерона, руля направления, крыла и вертикального стабилизатора.
Создание двигательных моделей на моделях самолета, аналогичных поверхностям управления.
Определение полного самолета.
Определение коэффициентов на самолете.
Подготовка самолета к численному анализу.
Выполнение численного анализа.
The Aero.FixedWing.Surface
класс может служить как аэродинамической, так и управляющей поверхностью.
Этим поведением управляет Controllable
свойство в классе.
Настройка Controllable
на on
создает управляющую поверхность и ControlState
переменная.
Гнездование поверхности управления на аэродинамической поверхности имитирует фактическую конструкцию самолета.
Ниже пример создает поверхность управления лифтом и гнездит ее на горизонтальном стабилизаторе.
elevator = Aero.FixedWing.Surface()
elevator = Surface with properties: Surfaces: [1x0 Aero.FixedWing.Surface] Coefficients: [1x1 Aero.FixedWing.Coefficient] MaximumValue: Inf MinimumValue: -Inf Controllable: off Symmetry: "Symmetric" ControlVariables: [0x0 string] Properties: [1x1 Aero.Aircraft.Properties]
elevator.MaximumValue = deg2rad(20); elevator.MinimumValue = deg2rad(-20); elevator.Properties = Aero.Aircraft.Properties("Name", "Elevator"); elevator.Controllable = "on"; elevator.Coefficients = Aero.FixedWing.Coefficient("StateVariables", "Elevator")
elevator = Surface with properties: Surfaces: [1x0 Aero.FixedWing.Surface] Coefficients: [1x1 Aero.FixedWing.Coefficient] MaximumValue: 0.3491 MinimumValue: -0.3491 Controllable: on Symmetry: "Symmetric" ControlVariables: "Elevator" Properties: [1x1 Aero.Aircraft.Properties]
horizontalStabilizer = Aero.FixedWing.Surface()
horizontalStabilizer = Surface with properties: Surfaces: [1x0 Aero.FixedWing.Surface] Coefficients: [1x1 Aero.FixedWing.Coefficient] MaximumValue: Inf MinimumValue: -Inf Controllable: off Symmetry: "Symmetric" ControlVariables: [0x0 string] Properties: [1x1 Aero.Aircraft.Properties]
horizontalStabilizer.Surfaces = elevator
horizontalStabilizer = Surface with properties: Surfaces: [1x1 Aero.FixedWing.Surface] Coefficients: [1x1 Aero.FixedWing.Coefficient] MaximumValue: Inf MinimumValue: -Inf Controllable: off Symmetry: "Symmetric" ControlVariables: [0x0 string] Properties: [1x1 Aero.Aircraft.Properties]
horizontalStabilizer.Properties = Aero.Aircraft.Properties("Name", "HorizontalStabilizer")
horizontalStabilizer = Surface with properties: Surfaces: [1x1 Aero.FixedWing.Surface] Coefficients: [1x1 Aero.FixedWing.Coefficient] MaximumValue: Inf MinimumValue: -Inf Controllable: off Symmetry: "Symmetric" ControlVariables: [0x0 string] Properties: [1x1 Aero.Aircraft.Properties]
Каждое свойство объектов с фиксированным крылом также может быть задано через аргументы Name, значение при конструкции. Этот метод создания будет использоваться в остальном примере.
Затем создайте элероны, руль направления, крыло и вертикальный стабилизатор.
aileron = Aero.FixedWing.Surface(... "MaximumValue", deg2rad(20), ... "MinimumValue", deg2rad(-20), ... "Properties" , Aero.Aircraft.Properties(1, "Name", "Aileron"), ... "Controllable", "on", ... "Coefficients", Aero.FixedWing.Coefficient("StateVariables", "Aileron")); rudder = Aero.FixedWing.Surface(... "MaximumValue", deg2rad(20), ... "MinimumValue", deg2rad(-20), ... "Properties" , Aero.Aircraft.Properties("Name", "Rudder"), ... "Controllable", "on", ... "Coefficients", Aero.FixedWing.Coefficient("StateVariables", "Rudder")); wing = Aero.FixedWing.Surface(... "Surfaces" , aileron, ... "Properties", Aero.Aircraft.Properties("Name", "Wing")); verticalStabilizer = Aero.FixedWing.Surface(... "Surfaces" , rudder, ... "Properties", Aero.Aircraft.Properties("Name", "VerticalStabilizer"));
Используйте Aero.FixedWing.Thrust
объект для создания двигательных моделей на моделях самолета, аналогичных поверхностям управления.
The Aero.FixedWing.Thrust
объект всегда управляемый. Оно не может быть вложено как аэродинамические и управляющие поверхности.
propeller = Aero.FixedWing.Thrust(... "Properties" , Aero.Aircraft.Properties("Name","Propeller"), ... "Coefficients", Aero.FixedWing.Coefficient("StateVariables", "Propeller"))
propeller = Thrust with properties: Coefficients: [1x1 Aero.FixedWing.Coefficient] MaximumValue: 1 MinimumValue: 0 Controllable: on Symmetry: "Symmetric" ControlVariables: "Propeller" Properties: [1x1 Aero.Aircraft.Properties]
С определенными аэродинамическими поверхностями, поверхностью управления и компонентами тяги определите полный самолет.
Во-первых, задайте отдельное Aero.Aircraft.Properties
класс для самолета. Используйте этот класс для отслеживания версий компонентов и компонентов, используемых данным самолетом.
Все Aero.FixedWing
и Aero.Aircraft
классы содержат это свойство.
C182Properties = Aero.Aircraft.Properties(... "Name" , "Cessna C182", ... "Type" , "General Aviation", ... "Version" , "1.0", ... "Description", "Cessna 182 Example")
C182Properties = Properties with properties: Name: "Cessna C182" Description: "Cessna 182 Example" Type: "General Aviation" Version: "1.0"
C182 = Aero.FixedWing(... "Properties" , C182Properties, ... "UnitSystem" , "English (ft/s)", ... "AngleSystem" , "Radians", ... "TemperatureSystem", "Fahrenheit", ... "ReferenceArea" , 174, ... "ReferenceSpan" , 36, ... "ReferenceLength" , 4.9, ... "Surfaces" , [wing, horizontalStabilizer, verticalStabilizer], ... "Thrusts" , propeller)
C182 = FixedWing with properties: ReferenceArea: 174 ReferenceSpan: 36 ReferenceLength: 4.9000 Coefficients: [1x1 Aero.FixedWing.Coefficient] DegreesOfFreedom: "6DOF" Surfaces: [1x3 Aero.FixedWing.Surface] Thrusts: [1x1 Aero.FixedWing.Thrust] AspectRatio: 7.4483 UnitSystem: "English (ft/s)" AngleSystem: "Radians" TemperatureSystem: "Fahrenheit" Properties: [1x1 Aero.Aircraft.Properties]
Далее определите коэффициенты на самолете.
Эти коэффициенты описывают динамическое поведение самолета. Этот пример задает скалярные коэффициенты константы, которые определяют линейное поведение самолета.
Чтобы определить нелинейное динамическое поведение самолета, задайте Simulink.LookupTable
коэффициенты. Simulink.LookupTables не используются в этом примере. Чтобы увидеть пример с использованием Simulink .LookupTables, откройте пример «Выполнить управление» и «Статический анализ устойчивости с помощью линеаризированных самолетов с неподвижным крылом».
По умолчанию все коэффициенты 0.
BodyCoefficients = { 'CD', 'Zero', 0.027; 'CL', 'Zero', 0.307; 'Cm', 'Zero', 0.04; 'CD', 'Alpha', 0.121; 'CL', 'Alpha', 4.41; 'Cm', 'Alpha', -0.613; 'CD', 'AlphaDot', 0 'CL', 'AlphaDot', 1.7; 'Cm', 'AlphaDot', -7.27; 'CD', 'Q', 0; 'CL', 'Q', 3.9; 'Cm', 'Q', -12.4; 'CY', 'Beta', -0.393; 'Cl', 'Beta', -0.0923; 'Cn', 'Beta', 0.0587; 'CY', 'P', -0.075; 'Cl', 'P', -0.484; 'Cn', 'P', -0.0278; 'CY', 'R', 0.214; 'Cl', 'R', 0.0798; 'Cn', 'R', -0.0937; }; C182 = setCoefficient(C182, BodyCoefficients(:, 1), BodyCoefficients(:, 2), BodyCoefficients(:, 3));
Коэффициенты могут быть определены для любого компонента на самолете. Эти компоненты могут включать в себя любые Aero.FixedWing.Surface
или Aero.FixedWing.Thrust
.
The setCoefficient
метод обеспечивает Component
Name,Value
аргумент, который принимает коэффициенты от желаемого имени компонента, устраняя необходимость точно знать, где компонент находится на самолете.
Допустимые имена компонентов зависят от Name
свойство компонента.
AileronCoefficients = { 'CY', 'Aileron', 0; 'Cl', 'Aileron', 0.229; 'Cn', 'Aileron', -0.0504; }; ElevatorCoefficients = { 'CY', 'Elevator', 0.187; 'Cl', 'Elevator', 0.0147; 'Cn', 'Elevator', -0.0805; }; RudderCoefficients = { 'CD', 'Rudder', 0; 'CL', 'Rudder', 0.43; 'Cm', 'Rudder', -1.369; }; PropellerCoefficients = { 'CD', 'Propeller', -21.1200; }; C182 = setCoefficient(C182, AileronCoefficients(:, 1), AileronCoefficients(:, 2), AileronCoefficients(:, 3), "Component", "Aileron"); C182 = setCoefficient(C182, ElevatorCoefficients(:, 1), ElevatorCoefficients(:, 2), ElevatorCoefficients(:, 3), "Component", "Elevator"); C182 = setCoefficient(C182, RudderCoefficients(:, 1), RudderCoefficients(:, 2), RudderCoefficients(:, 3), "Component", "Rudder"); C182 = setCoefficient(C182, PropellerCoefficients(:, 1), PropellerCoefficients(:, 2), PropellerCoefficients(:, 3), "Component", "Propeller");
Самолеты полностью построены и готовы к численному анализу.
Для выполнения численного анализа на самолете задайте Aero.FixedWing.State
объект.
The Aero.FixedWing.State
объект определяет текущее состояние Aero.FixedWing
объект в образце во время. The Aero.FixedWing.State
где также заданы динамические физические свойства самолета, включая массу и инерцию.
В этом примере мы анализируем круизное состояние.
CruiseState = Aero.FixedWing.State(... "UnitSystem","English (ft/s)",... "AngleSystem","Radians", ... "TemperatureSystem","Fahrenheit", ... "Mass",82.2981, ... "U", 220.1, ... "AltitudeMSL",5000); CruiseState.Inertia.Variables = [ 948, 0, 0 ; 0 , 1346, 0 ; 0 , 0 , 1967; ]; CruiseState.CenterOfGravity = [0.264, 0 , 0] .* C182.ReferenceLength; CruiseState.CenterOfPressure = [0.25, 0, 0] .* C182.ReferenceLength; CruiseState.Environment = Aero.Aircraft.Environment(... "Temperature", 500.839, ... "Density", 0.00204834, ... "SpeedOfSound", 1097.09, ... "Pressure", 84307.3, ... "Gravity", 32.2);
В дополнение к окружению и динамическим физическим свойствам Aero.FixedWing.State
класс также содержит текущие отклонения поверхности управления и положения тяги. Эти должности занимают в ControlStates
свойство. Используйте этот класс для настройки состояний управления.
По умолчанию это свойство пустое. Инициализируйте свойство с поверхности управления и информацию о тяге на самолете.
Чтобы настроить эти состояния управления, используйте setupControlStates
метод ниже.
CruiseState = setupControlStates(CruiseState, C182)
CruiseState = State with properties: Alpha: 0 Beta: 0 AlphaDot: 0 BetaDot: 0 Mass: 82.2981 Inertia: [3x3 table] CenterOfGravity: [1.2936 0 0] CenterOfPressure: [1.2250 0 0] AltitudeMSL: 5000 GroundHeight: 0 XN: 0 XE: 0 XD: -5000 U: 220.1000 V: 0 W: 0 Phi: 0 Theta: 0 Psi: 0 P: 0 Q: 0 R: 0 Weight: 2.6500e+03 AltitudeAGL: 5000 Airspeed: 220.1000 GroundSpeed: 220.1000 MachNumber: 0.2006 BodyVelocity: [220.1000 0 0] GroundVelocity: [220.1000 0 0] Ur: 220.1000 Vr: 0 Wr: 0 FlightPathAngle: 0 CourseAngle: 0 InertialToBodyMatrix: [3x3 double] BodyToInertialMatrix: [3x3 double] BodyToWindMatrix: [3x3 double] WindToBodyMatrix: [3x3 double] DynamicPressure: 49.6149 Environment: [1x1 Aero.Aircraft.Environment] UnitSystem: "English (ft/s)" AngleSystem: "Radians" TemperatureSystem: "Fahrenheit" ControlStates: [1x4 Aero.Aircraft.ControlState] OutOfRangeAction: "Limit" DiagnosticAction: "Warning" Properties: [1x1 Aero.Aircraft.Properties]
Выполняйте это только один раз по строению самолета. Если поверхности управления или упоры не были добавлены или удалены, пропустите этот шаг.
На данной точке самолет и состояние полностью построены и определены.
Ряд методов численного анализа поставляется с самолетами, включая силы и моменты, нелинейную динамику и статическую устойчивость.
Для вычисления сил и моментов на самолете в образец времени используйте forcesAndMoments
способ.
Эти силы и моменты находятся в каркасе кузова самолета. Коэффициенты, заданные в другой системе координат, имеют соответствующие матрицы преобразования, примененные для преобразования их в каркас кузова.
[F, M] = forcesAndMoments(C182, CruiseState)
F = 3×1
-233.0908
0
-0.3300
M = 3×1
103 ×
0
1.8739
0
Для вычисления динамического поведения самолета используйте nonlinearDynamics
способ.
The nonlinearDynamics
метод возвращает вектор скоростей изменения выбранных степеней свободы на самолете. Размер вектора зависит от степеней свободы. Чтобы вычислить динамическое поведение самолета с течением времени, используйте вектор в сочетании с решателем оды, таким как ode45.
Чтобы быстро итерировать между точностями различных проектов самолетов или обрезать ненужные состояния из вектора выхода, измените выбранные степени свободы. Эти скорости изменения определены ниже:
disp(load("astFixedWingDOFtable.mat").DOFtable)
PM4 PM6 3DOF 6DOF ___ ___ ____ ____ dXN /dt "X" "X" "X" "X" dXE /dt "" "X" "" "X" dXD /dt "X" "X" "X" "X" dU /dt "X" "X" "X" "X" dV /dt "" "X" "" "X" dW /dt "X" "X" "X" "X" dP /dt "" "" "" "X" dQ /dt "" "" "X" "X" dR /dt "" "" "" "X" dPhi /dt "" "" "" "X" dTheta /dt "" "" "X" "X" dPsi /dt "" "" "" "X"
dydt = nonlinearDynamics(C182, CruiseState)
dydt = 12×1
220.1000
0
0
-2.8323
0
-0.0040
0
1.3922
0
0
⋮
Статическая остойчивость - это тенденция самолета возвращаться в исходное состояние после небольшого возмущения от начального состояния. Это важная функция самолетов для гражданского использования и уменьшает потребность в сложных контроллерах для поддержания динамической устойчивости. В некоторых условиях самолёты, которые требуют передовой маневренности, могут выбрать статическую нестабильность.
The Aero.FixedWing
способ статической устойчивости объекта вычисляет изменения сил и моментов из-за возмущений при текущем состоянии самолета.
Метод сравнивает возмущения с предопределенным набором критериев как меньшие, большие или равные нулю. Можно также задать пользовательские критерии. Затем метод оценивает статическую стабильность как:
Если критерии удовлетворены, то возмущение статически стабильно.
Если критерии не удовлетворены, то возмущение статически нестабильно.
Если возмущение 0, возмущение статически нейтрально.
The staticStability
метод не выполняет анализ, основанный на требованиях. Используйте этот метод только на фазе предварительного проекта.
[stability, derivatives] = staticStability(C182, CruiseState)
stability=6×8 table
U V W Alpha Beta P Q R
________ ________ ________ ________ ________ ________ ________ ________
FX "Stable" "" "" "" "" "" "" ""
FY "" "Stable" "" "" "" "" "" ""
FZ "" "" "Stable" "" "" "" "" ""
L "" "" "" "" "Stable" "Stable" "" ""
M "Stable" "" "" "Stable" "" "" "Stable" ""
N "" "" "" "" "Stable" "" "" "Stable"
derivatives=6×8 table
U V W Alpha Beta P Q R
_______ ___________ _______ ______ __________ ___________ ___________ ______
FX -2.118 -5.4001e-08 7.2955 1606.1 -0.0023309 0 0 0
FY 0 -15.415 0 0 -3392.8 -647.47 0 1847.5
FZ -24.083 -5.9117e-07 -174.03 -38305 -0.026503 0 -33669 0
L 0 -130.33 0 0 -28686 -1.5042e+05 0 24801
M 17.028 4.5475e-07 -105.88 -23303 0.018739 0 -5.2223e+05 0
N 0 83.944 0 0 18476 -8595.5 0 -29248
Roskam, J., «Airplane Flight Dynamics and Automatic Flight Controls (Part 1)», DAR Corporation, 2003.