Этот пример показывает процесс создания и анализа самолета с неподвижным крылом в использовании MATLAB® геометрия Cessna C182 и содействующие данные.
Данные, используемые, чтобы создать самолет, взяты из Динамики Рейса Самолета и Средств управления Яном Роскамом [1].
Этот пример описывает:
Подготовка аэродинамического фиксированного крыла и управление появляется путем создания и вложение поверхность управления лифтом и затем создания элерона, руководящего принципа, крыла и вертикального стабилизатора.
Создание моделей движения на моделях самолетов с неподвижным крылом, подобных, чтобы управлять поверхностями.
Определение полного самолета.
Определение коэффициентов на самолете.
Подготовка самолета для числового анализа.
Выполнение числового анализа.
Aero.FixedWing.Surface класс может служить и аэродинамической поверхностью и поверхностью управления.
Этим поведением управляет Controllable свойство на классе.
Установка Controllable к on создает поверхность управления и ControlState переменная.
Вложение поверхность управления на аэродинамической поверхности подражает фактической конструкции самолета.
Ниже, пример создает поверхность управления лифтом и вкладывает ее на горизонтальном стабилизаторе.
elevator = fixedWingSurface("Elevator", "on","Symmetric",[-20,20])
elevator =
Surface with properties:
Surfaces: [1x0 Aero.FixedWing.Surface]
Coefficients: [1x1 Aero.FixedWing.Coefficient]
MaximumValue: 20
MinimumValue: -20
Controllable: on
Symmetry: "Symmetric"
ControlVariables: "Elevator"
Properties: [1x1 Aero.Aircraft.Properties]
elevator.Coefficients = fixedWingCoefficient("Elevator")elevator =
Surface with properties:
Surfaces: [1x0 Aero.FixedWing.Surface]
Coefficients: [1x1 Aero.FixedWing.Coefficient]
MaximumValue: 20
MinimumValue: -20
Controllable: on
Symmetry: "Symmetric"
ControlVariables: "Elevator"
Properties: [1x1 Aero.Aircraft.Properties]
horizontalStabilizer = fixedWingSurface("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]
Каждое свойство на объектах фиксированного крыла может также быть установлено через Имя, аргументы Value на конструкции. Этот метод создания будет использоваться в остальной части примера.
Затем создайте элероны, руководящий принцип, крыло и вертикальный стабилизатор.
aileron = fixedWingSurface("Aileron", "on", "Asymmetric", [-20,20], ... "Coefficients", fixedWingCoefficient("Aileron")); rudder = fixedWingSurface("Rudder", "on", "Symmetric", [-20,20], ... "Coefficients", fixedWingCoefficient("Rudder")); wing = fixedWingSurface("Wing","Surfaces", aileron); verticalStabilizer = fixedWingSurface("VerticalStabilizer","Surfaces", rudder);
Используйте Aero.FixedWing.Thrust объект создать модели движения на моделях самолетов с неподвижным крылом, подобных, чтобы управлять поверхностями.
Aero.FixedWing.Thrust объект всегда управляем. Это не может быть вложено как поверхности управления и аэродинамический.
propeller = fixedWingThrust("Propeller","Coefficients", fixedWingCoefficient("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
Properties: [1x1 Aero.Aircraft.Properties]
UnitSystem: "English (ft/s)"
AngleSystem: "Radians"
TemperatureSystem: "Fahrenheit"
Затем задайте коэффициенты на самолете.
Эти коэффициенты описывают динамическое поведение самолета. Этот пример задает скалярные постоянные коэффициенты, которые задают линейное поведение самолета.
Чтобы задать нелинейное динамическое поведение самолета с неподвижным крылом, задайте 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",C182.UnitSystem,... "AngleSystem",C182.AngleSystem, ... "TemperatureSystem",C182.TemperatureSystem, ... "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 = aircraftEnvironment(C182,"ISA",CruiseState.AltitudeMSL);
В дополнение к среде и динамическим физическим свойствам, 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.6488e+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.6090
Environment: [1x1 Aero.Aircraft.Environment]
ControlStates: [1x6 Aero.Aircraft.ControlState]
OutOfRangeAction: "Limit"
DiagnosticAction: "Warning"
Properties: [1x1 Aero.Aircraft.Properties]
UnitSystem: "English (ft/s)"
AngleSystem: "Radians"
TemperatureSystem: "Fahrenheit"
Выполните это только однажды на настройку самолета. Если никакие поверхности управления или тяги не были добавлены или удалены к самолету, пропустите этот шаг.
На данном этапе самолет и состояние теперь полностью созданы и заданы.
Много числовых методов анализа идут с самолетом с неподвижным крылом, включая силы и моменты, нелинейная динамика и статическая устойчивость.
Чтобы вычислить силы и моменты на самолете в экземпляре вовремя, используйте forcesAndMoments метод.
Эти силы и моменты находятся в системе координат тела самолета. Коэффициенты, заданные в различной системе координат, имеют соответствующие матрицы преобразования, примененные, чтобы перевести их в систему координат тела.
[F, M] = forcesAndMoments(C182, CruiseState)
F = 3×1
-233.0633
0
-1.2484
M = 3×1
103 ×
0
1.5101
0
Чтобы вычислить самолет динамическое поведение, используйте nonlinearDynamics метод.
nonlinearDynamics метод возвращает вектор из скоростей изменения выбранных степеней свободы на самолете. Размер вектора зависит от степеней свободы. Чтобы вычислять самолет динамическое поведение в зависимости от времени, используйте вектор в сочетании с решателем оды, таким как ode45.
Чтобы быстро выполнить итерации между точностью различных конструкций самолетов или обрезать ненужные состояния от выходного вектора, изменяют выбранные степени свободы. Эти скорости изменения заданы ниже:
load("astFixedWingDOFtable.mat").DOFtableans=12×4 table
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.8319
0
-0.0152
0
1.1219
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 "" "Unstable" "" "" "" "" "" ""
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.1178 -7.2475e-07 7.2946 1605.9 -0.035089 0 0 0
FY 0 14.354 0 0 3159.3 647.4 0 -1847.2
FZ -24.08 -5.457e-07 -174.01 -38300 -0.0265 0 -33665 0
L 0 -138 0 0 -30374 -1.504e+05 0 24798
M 13.722 -5.7526e-06 -129.74 -28555 -0.28018 0 -5.2679e+05 0
N 0 81.892 0 0 18024 -8683.3 0 -28991
Roskam, J., "Динамика рейса самолета и автоматический рейс управляют (часть 1)", корпорация DAR, 2003.