主要内容

调整HL-20自动驾驶仪的MATLAB工作流程

这是关于HL-20飞行器飞行控制系统设计和调整的示例系列的第5部分。这一部分展示了如何在MATLAB®中执行大部分的设计,而不与Simulink®模型交互。

背景

本例使用的HL-20模型改编自NASA HL-20提升体机身(航天Blockset),请参阅本系列的第1部分(HL-20机体的修剪和线性化)查阅详情。控制飞行器姿态的自动驾驶仪由三个内环和三个外环组成。

在第二部分(HL-20自动驾驶仪的角速率控制)及第三部份(HL-20自动驾驶仪中的姿态控制- SISO设计),我们展示了如何关闭内部循环和调优外部循环的增益计划。这些例子使用了slTuner接口与Simulink模型交互,获得线性化模型和控制系统响应,并将调优值推回Simulink。

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

获取植物模型

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

负载csthl20_TrimData七国集团(G7)CS

以Simulink模型“csthl20_trim”为参考选择I/ o,通过连接构建所需的工厂模型七国集团(G7)而且CS在系列。别忘了把从弧度转换成角度。

R2d = 180/pi;G =诊断接头([1 1 1 r2d r2d r2d)) *七国集团(G7) ([4:7 31:32], 1:6) * CS (:, 1:3);G.InputName = {“哒”“德”“博士”};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 rad/s。

为每个(alpha,beta)条件计算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) * Kr, {1 e 1, 1 e3}),网格传奇('da to p''de to q'“dr to r”

图中包含2个轴对象。axis对象1包含120个类型为line的对象。这些对象表示da到p, de到q, dr到r。坐标轴对象2包含120个line类型的对象。这些对象代表da到p, de到q, dr到r。

使用反馈关闭三个内部循环。在装置输入da,de,dr处插入一个分析点,以便以后评估稳定裕度。

Cpqr = append(ss(Kp),ss(Kq),ss(Kr));分析点(“u”3);APu。位置= {“哒”“德”“博士”};Gpos =反馈(G * APu * Cpqr,眼(3),1:3,1:3);gpo。InputName = {“p_demand”“q_demand”“r_demand”};大小(gpo)
8x5的广义状态空间模型数组。每个模型有6个输出、3个输入、7个状态和1个块。

注意,这些命令无缝地管理这样一个事实,即我们正在处理植物数组和与各种(alpha、beta)条件对应的增益。

调优外循环

接下来做外环。我们已经有了一系列线性模型gpo对于外环看到的“植物”。如第3部分所述(HL-20自动驾驶仪中的姿态控制- SISO设计),将六个增益表参数化为多项式曲面。我们再次使用二次曲面来表示比例增益,使用多线性曲面来表示积分增益。

%网格(alpha,beta)设计点Alpha_vec = -10:5:25;% Alpha范围Beta_vec = -10:5:10;% Beta范围[alpha,beta] = ndgrid(alpha_vec,beta_vec);SG = struct(“α”α,“β”,β);比例增益%alphabetaBasis = polyBasis(“规范”2、2);P_PHI =可调曲面(“Pphi”, 0.05, SG, alphabetaBasis);P_ALPHA =可调曲面(“Palpha”, 0.05, SG, alphabetaBasis);P_BETA =可调谐曲面(“Pbeta”, -0.05, SG, alphabetaBasis);积分增益%alphaBasis = @(alpha) alpha;betaBasis = @(beta) abs(beta);alphabetaBasis = ndBasis(alphaBasis,betaBasis);I_PHI =可调曲面(“Iphi”, 0.05, SG, alphabetaBasis);I_ALPHA =可调曲面(“Ialpha”, 0.05, SG, alphabetaBasis);I_BETA =可调曲面(“Ibeta”, -0.05, SG, alphabetaBasis);

外部循环的总体控制器是一个对角线3 × 3 PI控制器,取角位置的误差,和计算速率需求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]);分析点(“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)

图中包含9个轴对象。坐标轴对象1,标题F r o m:空白P h i indexOf d基线em nd包含40个类型为line的对象。该对象表示T0。Axes对象2包含40个类型为line的对象。该对象表示T0。Axes对象3包含40个类型为line的对象。该对象表示T0。坐标轴对象4,标题F r o m: blank A l p h A indexOf d baseline em A nd包含40个line类型的对象。该对象表示T0。axis对象5包含40个类型为line的对象。 This object represents T0. Axes object 6 contains 40 objects of type line. This object represents T0. Axes object 7 with title F r o m : blank B e t a indexOf d baseline e m a n d contains 40 objects of type line. This object represents T0. Axes object 8 contains 40 objects of type line. This object represents T0. Axes object 9 contains 40 objects of type line. This object represents T0.

调优目标

使用与第3部分中相同的调优目标(HL-20自动驾驶仪中的姿态控制- SISO设计).这些包括“MinLoopGain”和“MaxLoopGain”目标,将外部循环的增益交叉设置在0.5到5 rad/s之间。

R1 =调优目标。MinLoopGain ({“Phi_deg”“Alpha_deg”“Beta_deg”}, 0.5, 1);R1。LoopScaling =“关闭”;R2 =调优目标。MaxLoopGain ({“Phi_deg”“Alpha_deg”“Beta_deg”},tf(50,[1 10 0]));R2。LoopScaling =“关闭”

这些还包括不同的“裕度”目标,以在每个循环和跨循环中施加足够的稳定裕度。

%利润vs (alpha,beta)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 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6;%相位裕度vs (,)PM = [...40 40 40 40 40 40 45 40 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 40 40 45 40 40 40 40 40 40 40 40 40 40 40];%制定不同的目标FH = @(gm,pm)优化目标。利润率({“哒”“德”“博士”},通用、点);R3 =可变目标(FH,GM,PM);

增益计划调优

你现在可以使用systune根据所有40个设计点的调谐目标来塑造6个增益面。

T = systune(T0,[R1 R2 R3]);
最终:软= 1.03,硬= -Inf,迭代= 53

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

步骤(T0, T, 6)传说(“基线”“调”“位置”“东南”

图中包含9个轴对象。坐标轴对象1,标题F r o m:空白P h i indexOf d基线em nd包含80个line类型的对象。这些对象表示基线、调优。Axes对象2包含80个line类型的对象。这些对象表示基线、调优。Axes对象3包含80个line类型的对象。这些对象表示基线、调优。坐标轴对象4,标题F r o m:空白A l p h A indexOf d基线em nd包含80个line类型的对象。这些对象表示基线、调优。Axes对象5包含80个line类型的对象。 These objects represent Baseline, Tuned. Axes object 6 contains 80 objects of type line. These objects represent Baseline, Tuned. Axes object 7 with title F r o m : blank B e t a indexOf d baseline e m a n d contains 80 objects of type line. These objects represent Baseline, Tuned. Axes object 8 contains 80 objects of type line. These objects represent Baseline, Tuned. Axes object 9 contains 80 objects of type line. These objects represent Baseline, Tuned.

结果与第2部分和第3部分中获得的结果一致。调谐增益曲面也类似。

clf注:setBlockValue用T中的调谐系数更新每个增益面subplot(3,2,1), viewSurf(setBlockValue(P_ALPHA,T)) subplot(3,2,3), viewSurf(setBlockValue(P_ALPHA,T)) subplot(3,2,5), viewSurf(setBlockValue(P_BETA,T)) subplot(3,2,2), viewSurf(setBlockValue(I_PHI,T)) subplot(3,2,2), viewSurf(setBlockValue(I_ALPHA,T)) subplot(3,2,4), viewSurf(setBlockValue(I_ALPHA,T)) subplot(3,2,6), viewSurf(setBlockValue(I_BETA,T))

图中包含6个轴对象。标题为Gain Pphi(alpha,beta)的Axes对象1包含一个类型为surface的对象。标题为Gain Palpha(alpha,beta)的Axes对象2包含一个类型为surface的对象。标题为Gain Pbeta(alpha,beta)的Axes对象3包含一个类型为surface的对象。标题为Gain Iphi(alpha,beta)的Axes对象4包含一个类型为surface的对象。标题为Gain Ialpha(alpha,beta)的Axes对象5包含一个类型为surface的对象。标题为Gain Ibeta(alpha,beta)的Axes对象6包含一个类型为surface的对象。

你现在可以用evalSurf采样增益曲面,并更新Simulink模型中的查找表。你也可以用codegen方法生成增益曲面方程的代码。例如

为“P”块生成代码MCODE = codegen(setBlockValue(P_PHI,T));获取“I phi”查找表的调优值Kphi = evalSurf(setBlockValue(I_PHI,T),alpha_vec,beta_vec);

另请参阅

相关的话题

Baidu
map