В этом примере показан процесс создания и анализа самолета в MATLAB с использованием геометрии Cessna C182 и данных коэффициентов.
Данные, используемые для создания самолета, взяты из Airplane Flight Dynamics and Controls Яна Роскама [1].
В этом примере описывается следующее:
Настройка аэродинамических и управляющих поверхностей крыла путем создания и вложения поверхности управления лифтом с последующим созданием элерона, руля направления, крыла и киля.
Создание моделей движения на моделях самолетов, аналогичных управляющим поверхностям.
Определение полного самолета.
Определение коэффициентов на самолете.
Подготовка самолета к численному анализу.
Выполнение численного анализа.
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]
Каждое свойство фиксированных объектов также можно задать с помощью аргументов «Имя» и «Значение» при построении. Этот метод создания будет использоваться в остальном примере.
Далее выполните построение элеронов, руля направления, крыла и киля.
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 Изобретение относится к двигателестроению и предназначено для создания моделей движения на моделях самолетов, аналогичных управляющим поверхностям.
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.
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 объект.
Aero.FixedWing.State объект определяет текущее состояние Aero.FixedWing объект в экземпляре по времени. 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 способ.
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
⋮
Статическая устойчивость - тенденция самолета возвращаться в исходное состояние после небольшого возмущения из исходного состояния. Является важной особенностью самолётов для гражданского использования и уменьшает потребность в сложных контроллерах для поддержания динамической устойчивости. В некоторых условиях самолеты, требующие повышенной маневренности, могут сделать выбор в пользу статической нестабильности.
Aero.FixedWing способ статической устойчивости объекта вычисляют по изменениям сил и моментов вследствие возмущений при текущем состоянии летательного аппарата.
Метод сравнивает возмущения с предопределенным набором критериев как меньше, больше или равно нулю. Можно также задать пользовательские критерии. Затем метод оценивает статическую стабильность как:
Если критерии удовлетворяются, то возмущение статически стабильно.
Если критерии не удовлетворяются, то возмущение статически нестабильно.
Если возмущение равно 0, то возмущение является статически нейтральным.
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
Роскам, Дж., «Динамика полета самолета и автоматические средства управления полетом (часть 1)», DAR Corporation, 2003.