MATLAB工作流程优化的HL-20自动驾驶仪

这是HL-20飞行器飞行控制系统设计和调整示例系列的第5部分。这一部分展示了如何在不与Simulink模型交互的情况下在MATLAB中执行大部分设计。万博1manbetx

背景

此示例使用HL-20模型适于从NASA HL-20升力体机身(航天模块库),见系列的第一部分(修剪和线性化的HL-20的机身详情)。控制飞机姿态的自动驾驶仪由三个内回路和三个外回路组成。

在第2部分(HL-20自动驾驶仪的角速度控制)和第3部分(在HL-20自动驾驶仪姿态控制 - SISO设计),我们展示了如何关闭内部循环和为外部循环调整增益时间表。这些例子利用了slTuner接口与Simulink模型交互,获得线性化的模型和控制系统响应万博1manbetx,并将调优值推回Simulink。

对于简单的架构和快速的设计迭代,在MATLAB中操作线性化的模型和使用诸如此类的基本命令是更好的(并且在概念上更简单)反馈关闭循环。这个例子展示了如何在MATLAB中执行第2部分和第3部分的设计步骤。

获得工厂模型

为了调整自动驾驶仪,我们需要线性化传递函数模型从偏转到角位置和速度。要做到这一点,从结果开始从“修剪和线性化”步骤(见修剪和线性化的HL-20的机身)。回想一下,七国集团(G7)是在40个不同(阿尔法,贝塔)条件下的飞机框架的7个状态线性模型,和CS是控制选择器块的线性化。

负载csthl20_TrimData七国集团(G7)CS

使用仿真模型“cst万博1manbetxhl20_trim”作为参考,用于选择的I / O,通过连接建立所需植物模型七国集团(G7)CS在系列。别忘了把,从弧度转换成角度。

R2D = 180 / PI;G = DIAG([1 1 1 R2D R2D R2D])* G7([4:7 31:32],1:6)* CS(:,1:3);G.InputName = {'DA',“德”,“博士”};G。OutputName = {“p”,“问”,“r”,'Phi_deg','Alpha_deg',“Beta_deg”};尺寸(G)
8X5阵列状态空间模型。每个模型具有6个输出,3个输入,和7点的状态。

这给了我们一个8乘5网格上的植物模型阵列(alpha,beta),用于修剪。

关闭内环

要关闭内部循环,我们按照相同的程序,第2部分(HL-20自动驾驶仪的角速度控制)。这包括选择增益Kp的,KQ,KR到p,Q,R环路的交叉频率设置为30,22.5,和37.5弧度/秒,分别。

%计算的Kp,KQ,KR对每个(α,β)的条件。Gpqr = G({“p”,“问”,“r”},:);KP = 1./abs(evalfr(Gpqr(1,1),30i));KQ = -1./abs(evalfr(Gpqr(2,2),22.5i));KR = -1./abs(evalfr(Gpqr(3,3),37.5i));博德(Gpqr(1,1)*的Kp,Gpqr(2,2)* KQ,Gpqr(3,3)*氪,{1E-1,1e3}),网格图例('Da至P',“德问”,的r博士)

反馈关闭三个内部循环。插入在工厂输入DA,DE,博士的稳定裕度的评估后的分析点。

Cpqr =追加(SS(KP),SS(KQ),SS(KR));APU = AnalysisPoint(“u”3);APu.Location = {'DA',“德”,“博士”};GPOS =反馈(G * APU * Cpqr,眼(3),1:3,1:3);Gpos.InputName = {“p_demand”,'q_demand',“r_demand”};大小(GPO)的
8X5阵列广义状态空间模型的。每个模型具有6个输出,3个输入,7个州,和1块。

请注意,这些命令无缝地管理了这样一个事实,即我们处理的是植物阵列和相应于各种(alpha,beta)条件的收益。

调整外部循环

下一步是外部循环。我们已经有了一组线性模型gpo为外部循环看到的“植物”。如第3部所述(在HL-20自动驾驶仪姿态控制 - SISO设计),参数化六增益时间表作为多项式表面在和。同样,比例增益使用二次曲面,积分增益使用多重线性曲面。

(阿尔法,贝塔)设计点的%网格alpha_vec = -10:5:25;α%范围beta_vec = -10:5:10;%测试范围(α,β)= ndgrid (alpha_vec beta_vec);SG =结构('α'α,“β”,β);%比例增益alphabetaBasis = polyBasis(“规范”,2,2);P_PHI = tunableSurface(“Pphi”, 0.05, SG, alphabetaBasis);P_ALPHA = tunableSurface(“Palpha”, 0.05, SG, alphabetaBasis);P_BETA = tunableSurface ('Pbeta',-0.05,SG,alphabetaBasis);%积分收益alpha base = @(alpha) alpha;= @(beta) abs(beta);alphabetaBasis = ndBasis (alphaBasis betaBasis);I_PHI = tunableSurface (“Iphi”, 0.05, SG, alphabetaBasis);I_ALPHA = tunableSurface(“Ialpha”, 0.05, SG, alphabetaBasis);I_BETA = tunableSurface ('Ibeta',-0.05,SG,alphabetaBasis);

外部环路的总体控制器是一个对角的3×3 PI控制器,取角位置的误差phi,alpha,beta,并计算p_demand,q_demand,r_demand的比率。

KP =追加(P_PHI,P_ALPHA,P_BETA);KI =追加(I_PHI,I_ALPHA,I_BETA);CPOS = KP + KI * TF(1,[1 0]);

最后,使用反馈以获得外环的可调谐闭环模型。为了在工厂输出启用调谐和闭环分析,插入分析点。

RollOffFilter = tf(10,[1 10]);年= AnalysisPoint ('Y'3);年。位置= {'Phi_deg','Alpha_deg',“Beta_deg”};T0 =反馈(APY * GPOS(4:6,:) * RollOffFilter * CPOS,眼(3));T0.InputName = {'Phi_demand','Alpha_demand','Beta_demand'};T0.OutputName = {'Phi_deg','Alpha_deg',“Beta_deg”};

您可以绘制初始增益设置面闭环响应(0.05不变收益)。

步骤(T0,6)

调优目标

使用相同的调整目标在第3部分(在HL-20自动驾驶仪姿态控制 - SISO设计)。这些包括“MinLoopGain”和“MaxLoopGain”目标设定在0.5和5之间拉德的外环的增益交点/秒。

R1 = TuningGoal.MinLoopGain({'Phi_deg','Alpha_deg',“Beta_deg”},0.5,1);R1.LoopScaling =“关”;R2 = TuningGoal.MaxLoopGain({'Phi_deg','Alpha_deg',“Beta_deg”},TF(50,[1 10 0]));R2.LoopScaling =“关”;

这些还包括一个变化的“边界”目标,以施加足够的稳定边界在每个循环和跨循环。

利润与(,)GM = [6 6 6 6 6 6 6 7 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 6 7 6 6 6 6 6 6 6];%相边缘vs (,)点= [40 40 40 40 40 40 40 45 40 40 45岁45岁45岁45岁45岁45岁45岁45岁45岁45岁40 40 45 40 40 40 40 40 40 40];%创建不同的目标FH = @(GM,PM)TuningGoal.Margins({'DA',“德”,“博士”},GM,PM);R3 = varyingGoal(FH,GM,PM);

获取进度调整

您现在可以使用systune在所有40个设计点上针对调整目标塑造六个增益表面。

T =收缩期(T0,[R1 R2 R3]);
决赛:软= 1.03,硬= -Inf,迭代次数= 51

最终的目标值接近于1,因此基本满足调优目标。绘制闭环角响应,并与初始设置进行比较。

步骤(T0,T,6)图例(“基线”,“调”,'位置','东南')

结果匹配部件2和3的调谐增益表面而获得的那些也同样。

CLF%注:setBlockValue更新每个增益表面T中的调谐系数次要情节(3,2,1)viewSurf (setBlockValue (P_PHI T))次要情节(3、2、3),viewSurf (setBlockValue (P_ALPHA T))次要情节(3 2 5)viewSurf (setBlockValue (P_BETA T))次要情节(3 2 2),viewSurf (setBlockValue (I_PHI T))次要情节(3 2 4),viewSurf (setBlockValue (I_ALPHA T))次要情节(3 2 6),viewSurf (setBlockValue (I_BETA T))

你现在可以使用evalSurf采样增益表面和更新在Simulink模型中的查找表。万博1manbetx你也可以使用codegen方法生成增益面方程的代码。例如

%生成代码为“P披”块MCODE = CODEGEN(setBlockValue(P_PHI,T));%获得了“我披”查找表调整值Kphi = evalSurf (setBlockValue (I_PHI T), alpha_vec, beta_vec);

另请参阅

相关话题