В этом примере показано, как создать и использовать самолет с неподвижным крылом в MATLAB®.
Для примера установки реалистических коэффициентов на самолете и вычислении статической устойчивости, см., "Определяют Нелинейную Динамику и Статическую Устойчивость Самолета с неподвижным крылом”.
Для примера импорта коэффициентов от Цифрового анализа DATCOM и линеаризации к модели в пространстве состояний, см., “Выполняют Средства управления и Статический Анализ Устойчивости с Линеаризовавшим Самолетом с неподвижным крылом”.
Для примера создания пользовательских состояний см., “Настраивают Самолет с неподвижным крылом с Дополнительными состояниями Самолета”.
Самолеты с неподвижным крылом охватывают все самолеты, которые генерируют лифт от фиксированного расширения поверхностей крыла от основной части. Стандартная настройка для самолета с неподвижным крылом является большим основным крылом около центра тяжести и горизонтальных и вертикальных стабилизаторов в конце тела.
Большое основное крыло самолета с неподвижным крылом генерирует лифт с горизонтальными и вертикальными стабилизаторами, предоставляющими силам реакции и моменты для устойчивости и управления. Однако различающийся винтокрыл, крылья самолета с неподвижным крылом фиксируются на месте. Поэтому, чтобы обеспечить поток воздуха, чтобы сгенерировать необходимый лифт, чтобы управлять самолетом от земли, крылья самолета с неподвижным крылом требуют движения вперед. Это движение вперед обычно создается из вектора тяги, сгенерированного реактивным двигателем или пропеллером.
Конструкция модели самолета с неподвижным крылом требует этих компонентов:
Настройка самолета
Какие аэродинамические поверхности существуют на самолете?
Какие поверхности управления существуют на самолете?
Какие векторы тяги существуют на самолете?
Численная модель самолета
Текущее состояние самолета
Этот пример следует за этим рабочим процессом, чтобы проиллюстрировать, как создать приложение самолета с неподвижным крылом для числового анализа в MATLAB.
Этот пример создает основную поверхность с 3 управлением, самолет стандартной настройки.
В данном примере только поверхности управления и тело будут заданы.
Чтобы запуститься, задайте поверхности управления с помощью функции fixedWingSurface.
surface = fixedWingSurface("mysurface")
surface = 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]
Поверхность имеет много свойств, что справка задает поверхность самолета с неподвижным крылом, в частности управляемость, коэффициенты, максимальные и минимальные значения. симметрия и любые вложенные поверхности поверхностная сила имеют.
Для этого самолета элерон является асимметричной поверхностью управления и минимальное отклонение имеющее 20 и-20 градусов, соответственно.
Чтобы создать эту поверхность, пары "имя-значение" могут быть заданы, чтобы установить каждое свойство на их желаемый уровень.
aileron = fixedWingSurface("aileron", "on", "Asymmetric", [-20, 20])
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 = 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]
rudder = fixedWingSurface("rudder", "on", "Symmetric", [-20, 20])
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]
В дополнение к поверхностям управления самолета также задайте векторы тяги.
В данном примере это принято, что существует один вектор тяги вдоль корпуса самолета.
Задайте этот вектор тяги с помощью функции fixedWingThrust.
propeller = fixedWingThrust("propeller","on","Symmetric",[0, 0.75])
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]
Тяга почти идентична поверхности за исключением того, что это принято, чтобы быть управляемым по умолчанию, тогда как поверхность не управляема по умолчанию.
С этими поверхностями управления и заданными векторами тяги, создайте самолет с помощью функции fixedWingAircraft.
Этот самолет несет полное определение на борту самолета с неподвижным крылом. Этот пример использует его во всех методах анализа.
Область ссылки, промежуток и длина помогают определить размерность безразмерные коэффициенты, используемые в методах анализа.
Для простоты этот самолет использует область ссылки, промежуток и длину 3, 2, и 1, соответственно.
aircraft = fixedWingAircraft("MyAircraft", 3,2,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"
С построением корпуса самолета и набором поверхностей управления, теперь полностью создается самолет.
Однако текущая конструкция самолета не имеет большого числового значения, когда численная модель имеет значения по умолчанию 0.
Чтобы исправить это, установите числовые коэффициенты.
Чтобы выполнить численное моделирование с помощью самолета с неподвижным крылом в MATLAB, задайте известные коэффициенты, которые представляют нелинейное поведение самолета в его различных операционных состояниях. Коэффициенты самолета являются фиксированным набором коэффициентов, которые задают массовые силы и моменты, исключая силы реакции, должные управлять поверхностями или векторами тяги.
Получите эти коэффициенты через множество методов, такие как Цифровой DATCOM, анализ Вычислительной гидрогазодинамики (CFD) или первые принципы использования предварительные аналитические вычисления.
При использовании Цифрового DATCOM, чтобы вычислить числовые коэффициенты, непосредственно преобразуйте Цифровой struct DATCOM в самолет с неподвижным крылом с помощью datcomToFixedWing.
Можно также вручную импортировать, присваивают коэффициенты самолету.
Коэффициенты самолета с неподвижным крылом находятся на самолете в нескольких местах. Как видно вышеупомянутого, сам самолет, и каждая поверхность и тяга на самолете, имеет набор коэффициентов.
Поверхностные коэффициенты управления задают силы и моменты, должные управлять поверхностными отклонениями.
Коэффициенты тяги задают силы и моменты из-за различных методов движения.
Все эти независимые силы и моменты, суммированные вместе, предоставляют полное определение сил и моментов самолета, и в свою очередь нелинейную динамику.
Задайте коэффициенты с помощью функции fixedWingCoefficient.
coeff = fixedWingCoefficient
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]
Функция fixedWingCoefficient задает специфичные для коэффициента свойства, включая систему координат, задавая размерные или безразмерные коэффициенты, и указывая, что переменная состояния умножает поведение.
Устанавливание содействующих значений может быть сделано через функцию setCoefficient.
Получение содействующих значений может быть сделано через функцию getCoefficient.
Чтобы просмотреть коэффициенты компонента в таблице, используйте Свойство таблицы на возвращенном коэффициенте.
CL_alpha = 0.2; aircraft = setCoefficient(aircraft, "CL", "Alpha", CL_alpha)
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"
getCoefficient(aircraft, "CL", "Alpha")
ans = 0.2000
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
Можно также установить коэффициенты на вложенных поверхностях и векторах тяги с помощью их имени компонента.
Имя компонента является тем же именем, которое определили на самолете, поверхности, и втиснули.
CL_0_elevator = 0.15; aircraft = setCoefficient(aircraft, "CL", "Zero", CL_0_elevator, Component="elevator")
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"
getCoefficient(aircraft, "CL", "Zero",Component="elevator")
ans = 0.1500
aircraft.Surfaces(2).Coefficients.Table
ans=6×1 table
Zero
____
CD 0
CY 0
CL 0.15
Cl 0
Cm 0
Cn 0
Установите определенные коэффициенты с помощью функции setCoefficient. Получите их использующий функцию getCoefficient. Эти коэффициенты зависят от:
Входной объект фиксированного крыла
Система координат на коэффициенте
Переменные состояния заданы на коэффициенте
Вторым входом к setCoefficient и getCoefficient является выход состояния. Чтобы определить допустимые выходные параметры состояния, относитесь, чтобы видеть систему координат на коэффициенте.
Например, если системой координат является "Тело", допустимые выходные параметры состояния:
"CX" - Коэффициент тела X сил
"CY" - Коэффициент тела Y сила
"CZ" - Коэффициент тела Z сила
"Статья" - Прокручивающийся коэффициент момента
"Cm" - Подача коэффициента момента
CN - Отклоняющийся от курса коэффициент момента
coeff.ReferenceFrame = "Body";
coeff.Table
ans=6×1 table
Zero
____
CX 0
CY 0
CZ 0
Cl 0
Cm 0
Cn 0
Если системой координат является "Ветер", допустимые выходные параметры состояния:
"CD" - Коэффициент силы сопротивления
"CY" - Коэффициент тела Y сила
"CL" - Коэффициент силы лифта
"Статья" - Прокручивающийся коэффициент момента
"Cm" - Подача коэффициента момента
CN - Отклоняющийся от курса коэффициент момента
coeff.ReferenceFrame = "Wind";
coeff.Table
ans=6×1 table
Zero
____
CD 0
CY 0
CL 0
Cl 0
Cm 0
Cn 0
Третий входной параметр к setCoefficient и getCoefficient является переменными состояния, которые определяют состояния, с которыми заданы коэффициенты.
По умолчанию коэффициент не принимает отношения состояния. Эти коэффициенты заданы с "Нулевой" переменной состояния, что означает, что коэффициент не имеет никаких состояний, чтобы умножиться против.
В случае самолета с неподвижным крылом существует набор дополнительных состояний по умолчанию, которые характерны для многих определений самолета, а именно, U, Альфы, AlphaDot, Беты, BetaDot, P, Q, и R.
Используйте любую комбинацию этих выходных параметров состояния и переменных состояния с setCoefficient и getCoefficient.
coeff.StateVariables = ["Alpha", "Beta"]; coeff = setCoefficient(coeff, "CL", "Beta", 5); coeff.Table
ans=6×2 table
Alpha Beta
_____ ____
CD 0 0
CY 0 0
CL 0 5
Cl 0 0
Cm 0 0
Cn 0 0
С содействующим набором на самолете задайте текущее состояние самолета.
Текущее состояние самолета задает свойства, которые независимы от фиксированной настройки.
Эти свойства включают массу, инерцию, скорость полета, высоту, углы отклонения и других.
Путем разделения текущего состояния от настройки содействующие данные о самолете могут остаться фиксированными, в то время как отдельные государства изменяются в зависимости от времени.
Задайте состояния самолета с неподвижным крылом с помощью функции fixedWingState.
state = fixedWingState(aircraft)
state = State with properties: Alpha: 0 Beta: 0 AlphaDot: 0 BetaDot: 0 Mass: 0 Inertia: [3x3 table] CenterOfGravity: [0 0 0] CenterOfPressure: [0 0 0] AltitudeMSL: 0 GroundHeight: 0 XN: 0 XE: 0 XD: 0 U: 50 V: 0 W: 0 Phi: 0 Theta: 0 Psi: 0 P: 0 Q: 0 R: 0 Weight: 0 AltitudeAGL: 0 Airspeed: 50 GroundSpeed: 50 MachNumber: 0.1469 BodyVelocity: [50 0 0] GroundVelocity: [50 0 0] Ur: 50 Vr: 0 Wr: 0 FlightPathAngle: 0 CourseAngle: 0 InertialToBodyMatrix: [3x3 double] BodyToInertialMatrix: [3x3 double] BodyToWindMatrix: [3x3 double] WindToBodyMatrix: [3x3 double] DynamicPressure: 1.5312e+03 Environment: [1x1 Aero.Aircraft.Environment] ControlStates: [1x6 Aero.Aircraft.ControlState] OutOfRangeAction: "Limit" DiagnosticAction: "Warning" Properties: [1x1 Aero.Aircraft.Properties] UnitSystem: "Metric" AngleSystem: "Radians" TemperatureSystem: "Kelvin"
Имена свойств на этом состоянии совпадают с названиями строк переменной состояния в коэффициентах.
В содействующей приведенной выше таблице самолета каждый коэффициент в "Альфа-" столбце умножается на свойство "Alpha" в состоянии, если "MultiplyStateVariables" включен.
Это действие запрашивает каждую переменную состояния в каждом коэффициенте на самолете.
Некоторые состояния являются зависимыми состояниями и зависят от других свойств в самом состоянии.
Если состояние зависит от свойств в среде, необходимо задать текущую летающую среду также.
Задайте текущую летающую среду с помощью функции aircraftEnvironment или путем присвоения среде непосредственно на состоянии.
environment = aircraftEnvironment(aircraft, "ISA", 0)
environment = Environment with properties: WindVelocity: [0 0 0] Density: 1.2250 Temperature: 288.1500 Pressure: 101325 SpeedOfSound: 340.2941 Gravity: 9.8100 Properties: [1x1 Aero.Aircraft.Properties]
state.Environment = environment
state = State with properties: Alpha: 0 Beta: 0 AlphaDot: 0 BetaDot: 0 Mass: 0 Inertia: [3x3 table] CenterOfGravity: [0 0 0] CenterOfPressure: [0 0 0] AltitudeMSL: 0 GroundHeight: 0 XN: 0 XE: 0 XD: 0 U: 50 V: 0 W: 0 Phi: 0 Theta: 0 Psi: 0 P: 0 Q: 0 R: 0 Weight: 0 AltitudeAGL: 0 Airspeed: 50 GroundSpeed: 50 MachNumber: 0.1469 BodyVelocity: [50 0 0] GroundVelocity: [50 0 0] Ur: 50 Vr: 0 Wr: 0 FlightPathAngle: 0 CourseAngle: 0 InertialToBodyMatrix: [3x3 double] BodyToInertialMatrix: [3x3 double] BodyToWindMatrix: [3x3 double] WindToBodyMatrix: [3x3 double] DynamicPressure: 1.5312e+03 Environment: [1x1 Aero.Aircraft.Environment] ControlStates: [1x6 Aero.Aircraft.ControlState] OutOfRangeAction: "Limit" DiagnosticAction: "Warning" Properties: [1x1 Aero.Aircraft.Properties] UnitSystem: "Metric" AngleSystem: "Radians" TemperatureSystem: "Kelvin"
Среда принята, чтобы быть той же модульной системой как состояние. Важно сохранить эти модульные системы выровненными и выровнять модульные системы между каждым состоянием и самолетом.
Создание массива многих состояний может быть полезным для разработки развертки параметров, по которым можно выполнить вычисления на самолете.
В этом примере 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]}
state = fixedWingState(aircraft, U=100)
state = State with properties: Alpha: 0 Beta: 0 AlphaDot: 0 BetaDot: 0 Mass: 0 Inertia: [3x3 table] CenterOfGravity: [0 0 0] CenterOfPressure: [0 0 0] AltitudeMSL: 0 GroundHeight: 0 XN: 0 XE: 0 XD: 0 U: 100 V: 0 W: 0 Phi: 0 Theta: 0 Psi: 0 P: 0 Q: 0 R: 0 Weight: 0 AltitudeAGL: 0 Airspeed: 100 GroundSpeed: 100 MachNumber: 0.2939 BodyVelocity: [100 0 0] GroundVelocity: [100 0 0] Ur: 100 Vr: 0 Wr: 0 FlightPathAngle: 0 CourseAngle: 0 InertialToBodyMatrix: [3x3 double] BodyToInertialMatrix: [3x3 double] BodyToWindMatrix: [3x3 double] WindToBodyMatrix: [3x3 double] DynamicPressure: 6125 Environment: [1x1 Aero.Aircraft.Environment] ControlStates: [1x6 Aero.Aircraft.ControlState] OutOfRangeAction: "Limit" DiagnosticAction: "Warning" Properties: [1x1 Aero.Aircraft.Properties] UnitSystem: "Metric" AngleSystem: "Radians" TemperatureSystem: "Kelvin"
states = repmat(state, size(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
[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
Второй вход среды может также помочь создавать массив состояния, который выполняет итерации по многим высотам с помощью стандартной модели атмосферы.
statesH = fixedWingState(aircraft, aircraftEnvironment(aircraft, "ISA", [0, 1000, 2000]))
statesH=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
С конструкцией самолета и его состояний, можно теперь выполнить фиксированное крыло определенные вычисления.
Эти вычисления могут включать:
Силы и моменты
Нелинейная динамика
Статическая устойчивость
Линеаризация к модели в пространстве состояний
for i = 1:numel(states) [F(i,:), M(i,:)] = forcesAndMoments(aircraft, states(i)); dydt(i,:) = nonlinearDynamics(aircraft, states(i)); end
Самолет может также использоваться в качестве типового контейнера, чтобы содержать определение самолета, когда это роздано к другим частям программы, такой как в интерполяционной таблице Simulink или пользовательских аналитических функциях MATLAB.
Таким образом, функции самолета с неподвижным крылом предоставляют общее определение созданию и управлению самолетом с неподвижным крылом в MATLAB.