Этот пример показывает процесс создания и анализа самолета с неподвижным крылом в использовании MATLAB геометрия Cessna C182 и содействующие данные.
Данные, используемые, чтобы создать самолет, взяты из Динамики Рейса Самолета и Средств управления Яном Роскамом [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]
Каждое свойство на объектах фиксированного крыла может также быть установлено через Имя, аргументы Value на конструкции. Этот метод создания будет использоваться в остальной части примера.
Затем создайте элероны, руководящий принцип, крыло и вертикальный стабилизатор.
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
Roskam, J., "Динамика рейса самолета и автоматический рейс управляют (часть 1)", корпорация DAR, 2003.