В этом примере показано, как настроить самолет с неподвижным крылом в объектах использования MATLAB.
Для примера того, как начать использовать самолет с неподвижным крылом в MATLAB, см. “Начало работы с Самолетом с неподвижным крылом”.
Для примера установки реалистических коэффициентов на самолете и вычислении static stability, see “Динамика Determine Nonlinear и Статическая Устойчивость Самолета с неподвижным крылом”.
Для примера импорта коэффициентов от Цифрового анализа DATCOM и линеаризации к состоянию-space model, см., что “Выполняет Средства управления и Статический Анализ Устойчивости с Линеаризовавшим Самолетом с неподвижным крылом”.
Каждая функция самолета с неподвижным крылом возвращает объект своего типа определения.
Функции предоставляют удобство построению каждого объекта. Однако их предопределенная входная структура может быть неудобна для некоторых рабочих процессов. Например, рассмотрите использование объектов, если вы хотите больше управления определенными входными параметрами каждого компонента, или если вы хотите избежать вызовов repmat, чтобы создать массивы каждого компонента. Объекты позволяют вам непосредственно создать каждый компонент.
Таблица, сопоставляющая каждую функцию, чтобы возразить, видна ниже.
Component = ["Properties"; "Environment"; "Aircraft"; "States"; "Coefficients"; "Surfaces"; "Thrust"]; Formal = ["Aero.Aircraft.Properties"; "Aero.Aircraft.Environment"; "Aero.FixedWing"; "Aero.FixedWing.State"; "Aero.FixedWing.Coefficient";"Aero.FixedWing.Surface"; "Aero.FixedWing.Thrust"]; Informal = ["aircraftProperties"; "aircraftEnvironment"; "fixedWingAircraft"; "fixedWingState"; "fixedWingCoefficient"; "fixedWingSurface"; "fixedWingThrust"]; objMap = table(Formal, Informal, 'RowNames', Component, 'VariableNames',["Formal Interface", "Informal Interface"])
objMap=7×2 table
Formal Interface Informal Interface
____________________________ ______________________
Properties "Aero.Aircraft.Properties" "aircraftProperties"
Environment "Aero.Aircraft.Environment" "aircraftEnvironment"
Aircraft "Aero.FixedWing" "fixedWingAircraft"
States "Aero.FixedWing.State" "fixedWingState"
Coefficients "Aero.FixedWing.Coefficient" "fixedWingCoefficient"
Surfaces "Aero.FixedWing.Surface" "fixedWingSurface"
Thrust "Aero.FixedWing.Thrust" "fixedWingThrust"
Конструктор для каждого компонента самолета с неподвижным крылом структурирован тот же путь:
Первый аргумент является или вектором или повторяющимся набором целых чисел, который задает размер массива возвращенного объекта, как "нулевая" функция, со значением по умолчанию, являющимся размером 1.
Каждый аргумент после первого аргумента является парой "имя-значение", задающей свойство объекта и значение для того, чтобы установить значения не по умолчанию.
Каждое значение не по умолчанию установлено для каждого объекта в массиве возвращенного объекта.
Например, создание вектора состояния фиксированного крыла с 3 элементами, где каждое состояние имеет массу 50 кг, имело бы следующий синтаксис:
states = Aero.FixedWing.State(1,3, Mass=50)
states=1×3 object
1x3 State array with properties:
Alpha
Beta
AlphaDot
BetaDot
Mass
Inertia
CenterOfGravity
CenterOfPressure
AltitudeMSL
GroundHeight
XN
XE
XD
U
V
W
Phi
Theta
Psi
P
Q
R
Weight
AltitudeAGL
Airspeed
GroundSpeed
MachNumber
BodyVelocity
GroundVelocity
Ur
Vr
Wr
FlightPathAngle
CourseAngle
InertialToBodyMatrix
BodyToInertialMatrix
BodyToWindMatrix
WindToBodyMatrix
DynamicPressure
Environment
ControlStates
OutOfRangeAction
DiagnosticAction
Properties
UnitSystem
AngleSystem
TemperatureSystem
states.Mass
ans = 50
ans = 50
ans = 50
Как видно из возвращенных Массовых значений каждое состояние имеет массу 50 в векторе.
После этого формата этот пример создает тот же самолет из "Начало работы с Самолетом с неподвижным крылом" пример, заменяя функциональный интерфейс со связанным интерфейсом объекта.
Создайте 3 поверхности управления с помощью Aero.FixedWing.Surface.
По умолчанию объекты подложки заданы, чтобы быть симметричными и не управляемыми, таким образом, эти два свойства должны быть установлены для элерона наряду с максимальными и минимальными значениями.
aileron = Aero.FixedWing.Surface(... Controllable="on", ... Symmetry="Asymmetric", ... MinimumValue=-20, ... MaximumValue=20)
aileron = Surface with properties: Surfaces: [1x0 Aero.FixedWing.Surface] Coefficients: [1x1 Aero.FixedWing.Coefficient] MaximumValue: 20 MinimumValue: -20 Controllable: on Symmetry: "Asymmetric" ControlVariables: ["_1" "_2"] Properties: [1x1 Aero.Aircraft.Properties]
Кроме того, набор имя на свойствах объекта подложки элерона. Это полезно для установки коэффициентов позже.
aileron.Properties.Name = "aileron"
aileron = Surface with properties: Surfaces: [1x0 Aero.FixedWing.Surface] Coefficients: [1x1 Aero.FixedWing.Coefficient] MaximumValue: 20 MinimumValue: -20 Controllable: on Symmetry: "Asymmetric" ControlVariables: ["aileron_1" "aileron_2"] Properties: [1x1 Aero.Aircraft.Properties]
Для лифта и руководящего принципа, симметрия уже является требуемым значением, таким образом, аргумент значения имени "Симметрии" может быть исключен.
elevator = Aero.FixedWing.Surface(... Controllable="on", ... MinimumValue=-20, ... MaximumValue=20)
elevator = Surface with properties: Surfaces: [1x0 Aero.FixedWing.Surface] Coefficients: [1x1 Aero.FixedWing.Coefficient] MaximumValue: 20 MinimumValue: -20 Controllable: on Symmetry: "Symmetric" ControlVariables: "" Properties: [1x1 Aero.Aircraft.Properties]
rudder = Aero.FixedWing.Surface(... Controllable="on", ... MinimumValue=-20, ... MaximumValue=20)
rudder = Surface with properties: Surfaces: [1x0 Aero.FixedWing.Surface] Coefficients: [1x1 Aero.FixedWing.Coefficient] MaximumValue: 20 MinimumValue: -20 Controllable: on Symmetry: "Symmetric" ControlVariables: "" Properties: [1x1 Aero.Aircraft.Properties]
elevator.Properties.Name = "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]
rudder.Properties.Name = "Rudder"
rudder = Surface with properties: Surfaces: [1x0 Aero.FixedWing.Surface] Coefficients: [1x1 Aero.FixedWing.Coefficient] MaximumValue: 20 MinimumValue: -20 Controllable: on Symmetry: "Symmetric" ControlVariables: "Rudder" Properties: [1x1 Aero.Aircraft.Properties]
С заданными поверхностями управления задайте объект тяги использование Aero.FixedWing.Thrust object.
По умолчанию минимальные и максимальные значения для объекта тяги 0 и 1, которые представляют положение рычага дросселя.
В этом самолете они ограничиваются 0 и 0.75.
propeller = Aero.FixedWing.Thrust(MaximumValue=0.75)
propeller = Thrust with properties: Coefficients: [1x1 Aero.FixedWing.Coefficient] MaximumValue: 0.7500 MinimumValue: 0 Controllable: on Symmetry: "Symmetric" ControlVariables: "" Properties: [1x1 Aero.Aircraft.Properties]
Имя вектора тяги может также быть определено в это время.
propeller.Properties.Name = "propeller"
propeller = Thrust with properties: Coefficients: [1x1 Aero.FixedWing.Coefficient] MaximumValue: 0.7500 MinimumValue: 0 Controllable: on Symmetry: "Symmetric" ControlVariables: "propeller" Properties: [1x1 Aero.Aircraft.Properties]
С этими поверхностями управления и заданными векторами тяги, они могут теперь быть установлены на корпусе самолета.
Корпус самолета задан через Aero.FixedWing object.
Для простоты этот самолет будет иметь область ссылки, промежуток и длину 3, 2, и 1, соответственно.
aircraft = Aero.FixedWing(... ReferenceArea=3, ... ReferenceSpan=2, ... ReferenceLength=1)
aircraft = FixedWing with properties: ReferenceArea: 3 ReferenceSpan: 2 ReferenceLength: 1 Coefficients: [1x1 Aero.FixedWing.Coefficient] DegreesOfFreedom: "6DOF" Surfaces: [1x0 Aero.FixedWing.Surface] Thrusts: [1x0 Aero.FixedWing.Thrust] AspectRatio: 1.3333 Properties: [1x1 Aero.Aircraft.Properties] UnitSystem: "Metric" AngleSystem: "Radians" TemperatureSystem: "Kelvin"
aircraft.Surfaces = [aileron, elevator, rudder]
aircraft = FixedWing with properties: ReferenceArea: 3 ReferenceSpan: 2 ReferenceLength: 1 Coefficients: [1x1 Aero.FixedWing.Coefficient] DegreesOfFreedom: "6DOF" Surfaces: [1x3 Aero.FixedWing.Surface] Thrusts: [1x0 Aero.FixedWing.Thrust] AspectRatio: 1.3333 Properties: [1x1 Aero.Aircraft.Properties] UnitSystem: "Metric" AngleSystem: "Radians" TemperatureSystem: "Kelvin"
aircraft.Thrusts = propeller
aircraft = FixedWing with properties: ReferenceArea: 3 ReferenceSpan: 2 ReferenceLength: 1 Coefficients: [1x1 Aero.FixedWing.Coefficient] DegreesOfFreedom: "6DOF" Surfaces: [1x3 Aero.FixedWing.Surface] Thrusts: [1x1 Aero.FixedWing.Thrust] AspectRatio: 1.3333 Properties: [1x1 Aero.Aircraft.Properties] UnitSystem: "Metric" AngleSystem: "Radians" TemperatureSystem: "Kelvin"
Установите коэффициенты самолета с помощью setCoefficient и getCoefficient методов, создав коэффициент с помощью Aero.FixedWing.Coefficient object, или индексировав непосредственно к содействующим значениям.
coeff = Aero.FixedWing.Coefficient
coeff = Coefficient with properties: Table: [6x1 table] Values: {6x1 cell} StateVariables: "Zero" StateOutput: [6x1 string] ReferenceFrame: "Wind" MultiplyStateVariables: on NonDimensional: on Properties: [1x1 Aero.Aircraft.Properties]
aircraft.Coefficients.Values{3,3} = 0.2
aircraft = FixedWing with properties: ReferenceArea: 3 ReferenceSpan: 2 ReferenceLength: 1 Coefficients: [1x1 Aero.FixedWing.Coefficient] DegreesOfFreedom: "6DOF" Surfaces: [1x3 Aero.FixedWing.Surface] Thrusts: [1x1 Aero.FixedWing.Thrust] AspectRatio: 1.3333 Properties: [1x1 Aero.Aircraft.Properties] UnitSystem: "Metric" AngleSystem: "Radians" TemperatureSystem: "Kelvin"
aircraft.Coefficients.Table
ans=6×9 table
Zero U Alpha AlphaDot Q Beta BetaDot P R
____ _ _____ ________ _ ____ _______ _ _
CD 0 0 0 0 0 0 0 0 0
CY 0 0 0 0 0 0 0 0 0
CL 0 0 0.2 0 0 0 0 0 0
Cl 0 0 0 0 0 0 0 0 0
Cm 0 0 0 0 0 0 0 0 0
Cn 0 0 0 0 0 0 0 0 0
Задайте состояния самолета с неподвижным крылом с помощью Aero.FixedWing.State object.
Чтобы непосредственно создать массив состояний, что у всех есть те же свойства, используйте конструктора состояния вместо того, чтобы использовать функцию repmat.
В этом примере 11 состояний создаются различной массой, но с постоянной скоростью полета.
mass = num2cell(1000:50:1500)
mass=1×11 cell array
Columns 1 through 6
{[1000]} {[1050]} {[1100]} {[1150]} {[1200]} {[1250]}
Columns 7 through 11
{[1300]} {[1350]} {[1400]} {[1450]} {[1500]}
states = Aero.FixedWing.State(size(mass), U=100); [states.Mass] = mass{:}
states=1×11 object
1x11 State array with properties:
Alpha
Beta
AlphaDot
BetaDot
Mass
Inertia
CenterOfGravity
CenterOfPressure
AltitudeMSL
GroundHeight
XN
XE
XD
U
V
W
Phi
Theta
Psi
P
Q
R
Weight
AltitudeAGL
Airspeed
GroundSpeed
MachNumber
BodyVelocity
GroundVelocity
Ur
Vr
Wr
FlightPathAngle
CourseAngle
InertialToBodyMatrix
BodyToInertialMatrix
BodyToWindMatrix
WindToBodyMatrix
DynamicPressure
Environment
ControlStates
OutOfRangeAction
DiagnosticAction
Properties
UnitSystem
AngleSystem
TemperatureSystem
Однако различающийся функция fixedWingState, состояния управления автоматически не настраиваются на состояниях от самолета.
Чтобы настроить состояния управления, используйте функцию setupControlStates.
states = setupControlStates(states, aircraft)
states=1×11 object
1x11 State array with properties:
Alpha
Beta
AlphaDot
BetaDot
Mass
Inertia
CenterOfGravity
CenterOfPressure
AltitudeMSL
GroundHeight
XN
XE
XD
U
V
W
Phi
Theta
Psi
P
Q
R
Weight
AltitudeAGL
Airspeed
GroundSpeed
MachNumber
BodyVelocity
GroundVelocity
Ur
Vr
Wr
FlightPathAngle
CourseAngle
InertialToBodyMatrix
BodyToInertialMatrix
BodyToWindMatrix
WindToBodyMatrix
DynamicPressure
Environment
ControlStates
OutOfRangeAction
DiagnosticAction
Properties
UnitSystem
AngleSystem
TemperatureSystem