主要内容

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

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

背景

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

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

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

获取植物模型

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

负载csthl20_TrimData七国集团(G7)CS

使用Simulink金宝app模型“csthl20_trim”作为选择I/ o的参考,通过连接建立所需的工厂模型七国集团(G7)CS在系列。别忘了把弧度转换成角度。

r2d = 180 /π;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个状态。

这为我们提供了一组用于修剪的8x5网格(alpha,beta)条件下的植物模型。

关闭内循环

要关闭内部循环,我们遵循与第2部分相同的过程(HL-20自动驾驶仪的角速率控制).这包括选择增益Kp,Kq,Kr来设置p,q,r环的交叉频率分别为30,22.5和37.5 rad/s。

计算每个条件的Kp,Kq,Kr。Gpqr = G ({“p”“问”“r”}:);Kp = 1. / abs (evalfr (Gpqr(1, 1), 30我));Kq = -1. / abs (evalfr (Gpqr(2, 2), 22.5我));基米-雷克南= -1. / abs (evalfr (Gpqr(3、3),37.5我));波德(Gpqr (1,1) * Kp, Gpqr (2, 2) * Kq Gpqr (3,3) * Kr, {1 e 1, 1 e3}),网格传奇(“da p”“德问”的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),学生(Kq),学生(Kr));APu = AnalysisPoint (“u”3);APu。位置= {“哒”“德”“博士”};Gpos =反馈(G * APu * Cpqr, eye(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;α%范围beta_vec = 10:5:10;%测试范围(α,β)= ndgrid (alpha_vec beta_vec);SG =结构(“α”α,“β”,β);%的比例增长alphabetaBasis = polyBasis (“规范”2、2);P_PHI = tunableSurface (“Pphi”, 0.05, SG,字母基础);P_ALPHA = tunableSurface (“Palpha”, 0.05, SG,字母基础);P_BETA = tunableSurface (“Pbeta”, -0.05, SG,字母基础);%积分收益alphaBasis = @(alpha) alpha;beta = @(beta) abs(beta);alphabetaBasis = ndBasis (alphaBasis betaBasis);I_PHI = tunableSurface (“Iphi”, 0.05, SG,字母基础);I_ALPHA = tunableSurface (“Ialpha”, 0.05, SG,字母基础);I_BETA = tunableSurface (“Ibeta”, -0.05, SG,字母基础);

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

KP = append (P_PHI P_ALPHA P_BETA);KI = append (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 = feedback(APy * Gpos(4:6,:) * RollOffFilter * Cpos,eye(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 baseline e m an d包含40个类型为line的对象。该对象表示T0。axis对象2包含40个类型为line的对象。该对象表示T0。axis对象3包含40个类型为line的对象。该对象表示T0。轴对象4与标题F r o m:空白A l p h A indexOf d baseline e m 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 = TuningGoal。MinLoopGain ({“Phi_deg”“Alpha_deg”“Beta_deg”}, 0.5, 1);R1。LoopScaling =“关闭”;R2 = TuningGoal。MaxLoopGain ({“Phi_deg”“Alpha_deg”“Beta_deg”},特遣部队(50 [1 10 0]));R2。LoopScaling =“关闭”

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

%增益边际vs (alpha,beta)通用= [...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 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6%相位裕度vs (alpha,beta)点= [...40 40 40 40 40 40 40 40 45 40 40 40 45 40 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 40 40 40 40 40 40 40 40 40 40 40 40 40创造不同的目标调整目标。利润率({“哒”“德”“博士”},通用、点);R3 = varyingGoal (FH、通用、点);

增益调度优化

您现在可以使用systune在所有40个设计点上根据调优目标塑造6个增益面。

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

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

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

图中包含9个轴对象。轴对象1带有标题F r o m:空白P h i indexOf d baseline e m an d包含80个类型为line的对象。这些对象表示基线、调优。axis对象2包含80个类型为line的对象。这些对象表示基线、调优。axis对象3包含80个类型为line的对象。这些对象表示基线、调优。轴对象4与标题F r o m:空白A l p h A indexOf d baseline e m A n包含80个类型为line的对象。这些对象表示基线、调优。axis对象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更新每个增益面次要情节(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))

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

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

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

另请参阅

相关的话题