从固定翼飞机开始
这个例子展示了如何在MATLAB®中创建和使用固定翼飞机。
关于在飞机上设置真实系数和计算静态稳定性的例子,请参见“确定固定翼飞机的非线性动力学和静态稳定性”。
有关从数字DATCOM分析中导入系数并将其线性化到状态空间模型的例子,请参见“使用线性化固定翼飞机执行控制和静态稳定性分析”。
有关创建自定义状态的示例,请参见“使用附加飞机状态自定义固定翼飞机”。
什么是固定翼飞机?
固定翼飞机包括所有飞机产生升力从固定翼型表面延伸出主体。固定翼飞机的标准配置是靠近重心的大主翼和机身末端的水平和垂直稳定器。
固定翼飞机的大主翼产生升力,水平和垂直稳定器提供反作用力和力矩,用于稳定和控制。然而,与旋翼飞机不同的是,固定翼飞机的机翼是固定在原地的。因此,为了提供气流来产生必要的升力使飞机飞离地面,固定翼飞机的机翼需要向前运动。这种向前的运动通常是由喷气发动机或螺旋桨产生的推力矢量产生的。
固定翼飞机建造工作流
固定翼飞机模型的建造需要以下组件:
飞机的配置
飞机上有什么气动表面?
飞机上有哪些控制面?
飞机上有什么推力矢量?
飞机的数值模型
飞机的当前状态
这个例子遵循这个工作流程来说明如何在MATLAB中构建一个固定翼飞机的数值分析应用程序。
固定翼飞机的配置
这个例子构造了一个基本的3控制面,标准配置飞机。
对于本例,只定义控件表面和主体。
首先,使用fixedWingSurface函数定义控制面。
表面= fixedWingSurface (“mysurface”)
表面=表面属性:表面:[1x0气动固定翼。系数:[1x1气动。固定翼。对称:"Symmetric" ControlVariables: [0x0 string]属性:[1x1 air . aircraft .Properties]
表面有许多属性,有助于定义固定翼飞机表面,特别是可控性,系数,最大值和最小值。对称,以及曲面可能具有的任何嵌套曲面。
对于这架飞机,副翼是一个非对称控制面,最大和最小挠度分别为20度和-20度。
要构造这个曲面,可以指定名称-值对以将每个属性设置为所需的级别。
副翼= fixedWingSurface (“副翼”,“上”,“非对称”, -20年,20)
副翼=表面属性:表面:[1x0气动固定翼。系数:[1x1气动。固定翼。系数]最大值:20最小值:-20可控:on对称:"Asymmetric"控制变量:["aileron_1" "aileron_2"]属性:[1x1 air . aircraft .Properties]
使用与副翼相同的模式构造升降舵和舵。
这两个面遵循与副翼相同的模式,但被定义为对称控制面。
电梯= fixedWingSurface (“电梯”,“上”,“对称”, -20年,20)
表面:[1x0气动固定翼。系数:[1x1气动。固定翼。系数]最大值:20最小值:-20可控:on对称:"Symmetric"控制变量:"elevator"属性:[1x1 air . aircraft .Properties]
舵= fixedWingSurface (“舵”,“上”,“对称”, -20年,20)
舵=表面属性:表面:[1x0气动。固定翼。系数:[1x1气动。固定翼。系数]最大值:20最小值:-20可控:on对称:"Symmetric"控制变量:"rudder"属性:[1x1 air . aircraft .Properties]
除了飞机的控制面,还要定义推力矢量。
对于本例,假设沿机身有一个推力矢量。
使用fixedwing推力函数定义这个推力向量。
螺旋桨= fixedWingThrust (“螺旋桨”,“上”,“对称”, [0, 0.75])
螺旋桨=推力与性能:系数:[1x1气动固定翼。系数]最大值:0.7500最小值:0可控:on对称:"Symmetric"控制变量:"propeller"属性:[1x1 air . aircraft .Properties]
推力几乎与表面相同,除了它默认是可控的,而表面默认是不可控的。
定义了这些控制面和推力矢量后,使用fixedWingAircraft函数创建一架飞机。
这架飞机承载了固定翼飞机的全部定义。这个例子在所有的分析方法中都使用了它。
参考面积、跨度和长度有助于将分析方法中使用的无量纲系数量纲化。
为简单起见,该飞机的参考面积、跨度和长度分别为3、2和1。
飞机= fixedWingAircraft (“MyAircraft”3、2、1)
飞机=固定翼的属性:参考面积:3参考跨度:2参考长度:1系数:[1x1 air .FixedWing.]自由度:“6自由度”表面:[1x0气动固定翼。推力:[1x0气动。固定翼。]推力]横截面:1.3333性能:[1x1航空。性能]单位系统:“米制”温度系统:“开尔文”温度系统:“弧度”
此外,控制面和推力矢量可以应用到飞机上
飞机。表面=[副翼,升降舵,方向舵]
飞机=固定翼的属性:参考面积:3参考跨度:2参考长度:1系数:[1x1 air .FixedWing.]自由度:“6自由度”表面:[1x3气动固定翼。推力:[1x0气动。固定翼。]推力]横截面:1.3333性能:[1x1航空。性能]单位系统:“米制”温度系统:“开尔文”温度系统:“弧度”
飞机。手臂=螺旋桨
飞机=固定翼的属性:参考面积:3参考跨度:2参考长度:1系数:[1x1 air .FixedWing.]自由度:“6自由度”表面:[1x3气动固定翼。推力:[1x1气动固定翼。]推力]横截面:1.3333性能:[1x1航空。性能]单位系统:“米制”温度系统:“开尔文”温度系统:“弧度”
在设置了飞机机身结构和控制面之后,飞机现在已经完全构建好了。
然而,目前的飞机结构没有太多的数值意义,因为数值模型的默认值为0。
为了解决这个问题,设置数值系数。
固定翼飞机数值模拟
在MATLAB中使用固定翼飞机进行数值建模,定义表示飞机在各种运行状态下的非线性行为的已知系数。飞机系数是定义身体力和力矩的固定系数集,不包括由控制面或推力矢量引起的反作用力。
通过各种方法获得这些系数,如数字数据com,计算流体动力学(CFD)分析,或使用第一性原理初步分析计算。
如果使用数字数据com计算数值系数,直接将数字数据com结构转换为固定翼飞机使用datcomToFixedWing。
您还可以手动导入分配系数的飞机。
固定翼飞机的系数存在于飞机上的几个地方。如上图所示,飞机本身,以及飞机上的每一个表面和推力,都有一组系数。
控制面系数定义了由于控制面挠度而产生的力和力矩。
推力系数定义了由于各种推进方法而产生的力和力矩。
所有这些独立的力和力矩加在一起提供了飞机的全部力和力矩定义,进而提供了非线性动力学。
使用fixedWingCoefficient函数定义系数。
多项式系数= fixedWingCoefficient
coeff =带有属性的系数:Table: [6x1 Table]值:{6x1 cell} statevvariables: "Zero" statoutput: [6x1 string] ReferenceFrame: "Wind" multiplystatevables: on NonDimensional: on properties: [1x1 air . aircraft . properties]
fixedWingCoefficient函数定义特定于系数的属性,包括参考系、指定维系数或非维系数以及指定状态变量乘法行为。
可以通过setCoefficient函数来设置系数值。
可以通过getCoefficient函数来检索系数值。
要查看表中某个分量的系数,请对返回的系数使用table属性。
CL_alpha = 0.2;飞机= setCoefficient(飞机,“氯”,“阿尔法”CL_alpha)
飞机=固定翼的属性:参考面积:3参考跨度:2参考长度:1系数:[1x1 air .FixedWing.]自由度:“6自由度”表面:[1x3气动固定翼。推力:[1x1气动固定翼。]推力]横截面:1.3333性能:[1x1航空。性能]单位系统:“米制”温度系统:“开尔文”温度系统:“弧度”
getCoefficient(飞机,“氯”,“阿尔法”)
ans = 0.2000
aircraft.Coefficients.Table
ans =6×9表0 U Alpha AlphaDot Q Beta BetaDot P R _____ _____ ________ _____ ________ _ CD 0 0 0 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 0 CL 0 0 0 0 0 0 0 0 Cm 0 0 0 0 0 0 0 Cn 0 0 0 0 0 0 0 0 0 0 0 0 0
您还可以使用嵌套表面和推力向量的组件名称来设置系数。
组件名称与在飞机、表面和推力上设置的名称相同。
CL_0_elevator = 0.15;飞机= setCoefficient(飞机,“氯”,“零”=, CL_0_elevator组件“电梯”)
飞机=固定翼的属性:参考面积:3参考跨度:2参考长度:1系数:[1x1 air .FixedWing.]自由度:“6自由度”表面:[1x3气动固定翼。推力:[1x1气动固定翼。]推力]横截面:1.3333性能:[1x1航空。性能]单位系统:“米制”温度系统:“开尔文”温度系统:“弧度”
getCoefficient(飞机,“氯”,“零”组件=“电梯”)
ans = 0.1500
aircraft.Surfaces .Coefficients.Table (2)
ans =6×1表零____ CD 0 CY 0 CL 0.15 CL 0 Cm 0 Cn 0
使用setCoefficient函数设置特定的系数。使用getCoefficient函数检索它们。这些系数取决于:
输入固定翼对象
系数的参考系
由系数定义的状态变量
setCoefficient和getCoefficient的第二个输入是状态输出。要确定有效的状态输出,请参阅有关系数的参考系。
例如,如果参考系为“Body”,则有效的状态输出为:
“CX”-体X力系数
“CY”-体Y力系数
“CZ”-体Z力系数
“Cl”-滚动力矩系数
“Cm”-俯仰力矩系数
“Cn”-偏航力矩系数
多项式系数。ReferenceFrame =“身体”;多项式系数。表格
ans =6×1表零____ CX 0 CY 0 CZ 0 Cl 0 Cm 0 Cn 0
如果参考系为“Wind”,则有效状态输出为:
“CD”-阻力系数
“CY”-体Y力系数
“CL”-升力系数
“Cl”-滚动力矩系数
“Cm”-俯仰力矩系数
“Cn”-偏航力矩系数
多项式系数。ReferenceFrame =“风”;多项式系数。表格
ans =6×1表零____ CD 0 CY 0 CL 0 CL 0 Cm 0 Cn 0
setCoefficient和getCoefficient的第三个输入参数是状态变量,它们决定了定义系数的状态。
缺省情况下,系数没有状态关系。这些系数是用“零”状态变量定义的,这意味着系数没有可以相乘的状态。
在固定翼飞机的情况下,有一组附加的默认状态是许多飞机定义所共有的,即U、Alpha、AlphaDot、Beta、BetaDot、P、Q和R。
通过setCoefficient和getCoefficient使用这些状态输出和状态变量的任意组合。
多项式系数。StateVariables = [“阿尔法”,“测试版”];多项式系数= setCoefficient(多项式系数,“氯”,“测试版”5);多项式系数。表格
ans =6×2表Alpha Beta _____ ____ CD 0 0 CY 0 0 CL 0 5 CL 0 0 Cm 0 0 Cn 0 0
在飞机上设置系数后,定义飞机当前状态。
固定翼飞机的状态
飞机的当前状态定义了与固定配置无关的属性。
这些特性包括质量、惯性、空速、高度、偏转角等。
通过将当前状态与配置分离,飞机系数数据可以保持固定,而个别状态会随时间变化。
使用fixedWingState函数定义固定翼飞机的状态。
国家= fixedWingState(飞机)
状态属性:=α:0β:0 AlphaDot: 0 BetaDot: 0质量:0惯性:[3 x3表]CenterOfGravity: [0 0 0] CenterOfPressure: [0 0 0] AltitudeMSL: 0 GroundHeight: 0 XN: 0 XE: 0 XD: 0 U: 50 V: 0 W: 0φ:0θ:0ψ:0 P: 0问:0 R: 0重量:0 AltitudeAGL: 0空速:50水平:50 MachNumber: 0.1469 BodyVelocity: [50 0 0] GroundVelocity:[50 0 0]你:50 Vr: 0或者说是:0 FlightPathAngle: 0 CourseAngle: 0 InertialToBodyMatrix: [3 x3双]BodyToInertialMatrix:[3x3双]BodyToWindMatrix: [3x3双]BodyToStabilityMatrix: [3x3双]DynamicPressure: 1.5312e+03 Environment: [1x1 air . aircraft . aircraft .]控制状态:[1x6航空。飞机。ControlState] outofraneaction: "Limit" diagnostics action: "Warning"属性:[1x1 air . aircraft . plane .]性能]单位系统:“米制”温度系统:“开尔文”温度系统:“弧度”
此状态上的属性名称与系数中的状态变量字符串名称相同。
在上面的飞机系数表中,如果“multiplystatevvariables”是on,“Alpha”列中的每个系数都乘以状态中的“Alpha”属性。
这个动作适用于飞机上每个系数中的每个状态变量。
有些状态是依赖状态,依赖于状态本身中的其他属性。
如果状态依赖于环境中的属性,则还必须定义当前飞行环境。
使用aircraftEnvironment函数定义当前飞行环境,或者直接在状态上给环境赋值。
环境= aircraftEnvironment(飞机,“是”, 0)
环境=环境属性:风速:[0 00]密度:1.2250温度:288.1500压力:101325 SpeedOfSound: 340.2941重力:9.8100属性:[1x1 air . aircraft . properties]
状态。环境=环境
状态属性:=α:0β:0 AlphaDot: 0 BetaDot: 0质量:0惯性:[3 x3表]CenterOfGravity: [0 0 0] CenterOfPressure: [0 0 0] AltitudeMSL: 0 GroundHeight: 0 XN: 0 XE: 0 XD: 0 U: 50 V: 0 W: 0φ:0θ:0ψ:0 P: 0问:0 R: 0重量:0 AltitudeAGL: 0空速:50水平:50 MachNumber: 0.1469 BodyVelocity: [50 0 0] GroundVelocity:[50 0 0]你:50 Vr: 0或者说是:0 FlightPathAngle: 0 CourseAngle: 0 InertialToBodyMatrix: [3 x3双]BodyToInertialMatrix:[3x3双]BodyToWindMatrix: [3x3双]BodyToStabilityMatrix: [3x3双]DynamicPressure: 1.5312e+03 Environment: [1x1 air . aircraft . aircraft .]控制状态:[1x6航空。飞机。ControlState] outofraneaction: "Limit" diagnostics action: "Warning"属性:[1x1 air . aircraft . plane .]性能]单位系统:“米制”温度系统:“开尔文”温度系统:“弧度”
环境被假设为与状态相同的单位系统。重要的是保持这些单位系统对齐,并对齐每个状态和飞机之间的单位系统。
创建许多状态的数组有助于设计在飞机上执行计算的参数扫描。
在这个例子中,在保持空速不变的情况下,通过改变质量产生了11种状态。
质量= num2cell (1000:50:1500)
质量=1×11单元阵列列1到6{[1000]}{[1050]}{[1100]}{[1150]}{[1200]}{[1250]}列7到11 {[1300]}{[1350]}{[1400]}{[1450]}{[1500]}
state = fixedWingState(飞机,U=100)
状态属性:=α:0β:0 AlphaDot: 0 BetaDot: 0质量:0惯性:[3 x3表]CenterOfGravity: [0 0 0] CenterOfPressure: [0 0 0] AltitudeMSL: 0 GroundHeight: 0 XN: 0 XE: 0 XD: 0 U: 100 V: 0 W: 0φ:0θ:0ψ:0 P: 0问:0 R: 0重量:0 AltitudeAGL: 0速度:100水平:100 MachNumber: 0.2939 BodyVelocity: [100 0 0] GroundVelocity:[100 0 0]你:100 Vr: 0或者说是:0 FlightPathAngle: 0 CourseAngle: 0 InertialToBodyMatrix: [3 x3双]BodyToInertialMatrix:[3x3双]BodyToWindMatrix: [3x3双]BodyToStabilityMatrix: [3x3双]DynamicPressure: 6125环境:[1x1 air . aircraft . aircraft .]控制状态:[1x6航空。飞机。ControlState] outofraneaction: "Limit" diagnostics action: "Warning"属性:[1x1 air . aircraft . plane .]性能]单位系统:“米制”温度系统:“开尔文”温度系统:“弧度”
state = repmat(state, size(mass))
州=1×11对象带有属性的1x11状态数组:质量惯性重心压力中心高度地面高度XN XE XD U W Phi Theta Psi P Q R重量高度空速地面速度MachNumber身体速度地面速度飞行路径角度航向角惯性身体矩阵身体到惯性矩阵身体到风矩阵风到身体矩阵身体稳定矩阵稳定身体矩阵动态压力环境控制状态输出范围动作诊断动作属性单元系统温度系统角度系统
(状态。质量质量]= {:}
州=1×11对象带有属性的1x11状态数组:质量惯性重心压力中心高度地面高度XN XE XD U W Phi Theta Psi P Q R重量高度空速地面速度MachNumber身体速度地面速度飞行路径角度航向角惯性身体矩阵身体到惯性矩阵身体到风矩阵风到身体矩阵身体稳定矩阵稳定身体矩阵动态压力环境控制状态输出范围动作诊断动作属性单元系统温度系统角度系统
第二个环境输入还可以帮助创建一个使用标准大气模型在许多高度上迭代的状态数组。
statesH = fixedWingState(飞机,飞机)“是”, [0, 1000, 2000]))
statesH =1×3对象带有属性的1x3状态数组:质量惯性重心压力中心高度地面高度XN XE XD U W Phi Theta Psi P Q R重量高度空速地面速度MachNumber身体速度地面速度飞行路径角度航向角惯性身体矩阵身体到惯性矩阵身体到风矩阵风到身体矩阵身体稳定矩阵稳定身体矩阵动态压力环境控制状态输出范围动作诊断动作属性单元系统温度系统角度系统
固定翼分析方法
随着飞机的构造和状态,你现在可以进行固定翼的具体计算。
这些计算包括:
力和时刻
非线性动力学
静态稳定
状态空间模型的线性化
F = 0 (numel(states), 3);M = 0 (numel(states), 3);Dydt = 0 (numel(states), 12);为i = 1:numel(states) [F(i,:), M(i,:)] = forcesAndMoments(aircraft, states(i));dydt(i,:) =非线性动力学(飞机,状态(i));结束
飞机还可以用作通用容器来保存飞机定义,因为它被传递到程序的其他部分,例如在Simulink查找表或自定义MATLAB分析函数中。
综上所述,固定翼飞机函数为在MATLAB中创建和操作固定翼飞机提供了一个通用的定义。