主要内容

HL-20自动驾驶仪SISO设计中的姿态控制

这是HL-20飞行器飞行控制系统设计和调整示例系列的第3部分。本部分介绍如何调整经典的SISO架构,以控制车辆的滚转、俯仰和偏航。

背景

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

第二部份(HL-20自动驾驶仪的角速率控制),我们展示了如何关闭控制角速率p,q,r的内环。下面的命令概括了相应的步骤。注意,这将创建和配置anslTuner接口ST0用于与Simulink模型交互。金宝app

load_system (“csthl20_control”) ctype = 2;选择SISO体系结构HL20recapPart2 ST0
“csthl20_control”的slTuner调优接口:没有调优块。使用addBlock命令添加新的块。9点分析 : -------------------------- 点1:信号”da;德博士”,位于“输出端口1”csthl20_control /飞行控制系统控制器的点2:信号“评定”,位于csthl20_control / HL20机身的输出端口2点3:输出端口1的csthl20_control /飞行控制系统/ Alpha_deg点4:“输出端口1”csthl20_control /飞行控制系统/ Beta_deg点5:“输出端口1”csthl20_control /飞行控制系统/ Phi_deg点6:的输出端口1 csthl20_control /飞行控制系统/控制器/古典/需求点7:信号“p_demand”,位于“输出端口1”csthl20_control /飞行控制系统/控制器/古典/ Roll-off1点8:信号“q_demand”,位于“输出端口1”csthl20_control /飞行控制系统/控制器/古典/ Roll-off2点9:信号“r_demand”,位于“输出端口1”csthl20_control /飞行控制系统/控制器/古典/ Roll-off3没有永久的空缺。使用addOpening命令添加新的永久开口。参数:[]OperatingPoints:[](将使用模型初始条件)BlockSubstitutions: [3x1 struct]选项:[1x1线性化。SlTunerOptions] Ts: 0

外循环调优设置

现在,我们将焦点转移到控制滚转(phi)、攻角(alpha)和侧滑角(beta)的三个增益计划PI环上。这些循环可以一次调整一个(3个循环和40个工作点等于120个设计点)。你也可以用pidtune以批处理模式调整PI增益,以满足特定的目标带宽和相位裕度要求。这两种方法都有注意事项:

  • 很难解释循环的相互作用。

  • 在每个设计点获得的增益可能是不一致的,需要在工作点之间平滑。

另一种方法是“增益曲面调谐”的概念[1],其中您将增益计划P(alpha,beta)和I(alpha,beta)参数化为多项式曲面并使用systune调整多项式系数。这种方法一次性处理所有工作点,可以考虑到循环的相互作用,特别是稳定裕度方面的考虑。这就是这里展示的方法。

为了优化外部循环,我们必须关闭内部循环,并获得外部循环在每个(alpha,beta)条件下看到的“植物”的线性化模型。我们可以问slTuner来计算相应的传递函数,但这将有效地固定内环增益Kp,Kq,Kr在默认操作条件下的值。为了得到正确的线性化,我们必须告诉slTuner这些增益随(,)变化。块替换同样是最简单的方法。要将Kp标记为变化,请找到用于将误差信号乘以Kp的Product块,并将其替换为增益数组,每个(alpha,beta)条件对应一个增益数组。

ProductBlk =“csthl20_control/Flight Control System/Controller/Classical/Product1”;BlockSub4 = struct(“名字”ProductBlk,“价值”[0 ss (Kp)]);

很容易验证,这种块线性化相当于将误差信号乘以上面计算的变化量Kp。类似地,用不同的增益替换Kq和Kr对应的Product块。

ProductBlk =“csthl20_control/Flight Control System/Controller/Classical/Product3”;BlockSub5 = struct(“名字”ProductBlk,“价值”[0 ss (Kq)]);ProductBlk =“csthl20_control/Flight Control System/Controller/Classical/Product4”;BlockSub6 = struct(“名字”ProductBlk,“价值”[0 ss (Kr)]);ST0。BlockSubstitutions = [ST0.]BlockSubstitutions;BlockSub4;BlockSub5;BlockSub6];

您现在可以在模型中绘制初始增益计划设置的角度响应。

T0 = getIOTransfer(ST0,“需求”, {“Phi_deg”“Alpha_deg”“Beta_deg”});步骤(T0, 6)

调优目标

基本控制目标包括带宽(响应时间)和稳定裕度。使用“MinLoopGain”和“MaxLoopGain”目标将外环的增益交叉设置在0.5到5rad /s之间。由于所有循环变量都以度数表示,因此不需要额外的缩放。

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 =“关闭”

使用“裕度”目标在每个循环和跨循环中施加足够的稳定裕度。这个目标是基于圆盘边缘的概念,它保证了在面对并发增益和相位变化在所有三个回路。由于对于极端方向((alpha,beta)网格的角)很难获得7 dB和40度的目标裕度,因此我们使用变化的目标来放宽角处的增益和相位裕度要求。

%增益边际对(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 6 6 7 6 6 6 6 6 6 6);%相位裕度vs (alpha,beta)PM = [...40 40 40 40 40 40 40 40 40 40 40 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 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40;%创建不同的目标FH = @(gm,pm)调谐目标。利润(“博士da;德;”、通用、点);R3 = varyingGoal(FH,GM,PM);

增益调度调优

要调优外部循环的P和I增益调度,请将三个MATLAB函数块和三个查找表块标记为可调。

TunedBlocks = {“Pφ”“Pα”“Pβ”“我φ”“我α”“我β”};ST0.addBlock (TunedBlocks)

将每个调谐增益计划参数化为alpha和beta的多项式曲面。这里我们用二次曲面来表示比例增益,用多线性曲面来表示积分增益。

% (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 = tunableSurface(“Palpha”, 0.05, SG, alphabetaBasis);P_BETA = tunablessurface (“Pbeta”, -0.05, SG, alphabetaBasis);ST0.setBlockParam (“Pφ”, P_PHI);ST0.setBlockParam (“Pα”, P_ALPHA);ST0.setBlockParam (“Pβ”, P_BETA);%积分增益alphabase = @(alpha) alpha;betaBasis = @(beta) abs(beta);alphabetaBasis = ndBasis(alphaBasis,betaBasis);I_PHI = tunablessurface (“Iphi”, 0.05, SG, alphabetaBasis);I_ALPHA = tunableSurface(“Ialpha”, 0.05, SG, alphabetaBasis);I_BETA = tunableSurface(“Ibeta”, -0.05, SG, alphabetaBasis);ST0.setBlockParam (“我φ”, I_PHI);ST0.setBlockParam (“我α”, I_ALPHA);ST0.setBlockParam (“我β”, I_BETA);

请注意,我们将每个增益面初始化为基线设计建议的固定值。一般来说,不建议从零或随机的初始点开始,因为问题的难度增加了陷入无趣的局部极小值的可能性。相反,更好的策略是针对完整的设计点集(或相关的子集)调整一个固定的(非计划的)增益集。这种“稳健设计”通常为增益表面调谐提供了一个很好的起点。

您现在可以使用systune针对3个调谐目标调整6个增益曲面。

ST = systune(ST0,[R1 R2 R3]);
最终:软= 1.03,硬= -Inf,迭代= 41

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

T = getIOTransfer(ST,“需求”, {“Phi_deg”“Alpha_deg”“Beta_deg”});步骤(T0, T, 6)传说(“基线”“调”“位置”“东南”

结果与基线相当,滚转和侧滑响应的振荡较少,交叉耦合减少。使用viewSurf检查调谐增益曲面。

TV = getTunedValue(ST);clf注意:setBlockValue用TV中的调谐系数更新每个增益曲面subplot(3,2,1) viewSurf(setBlockValue(P_PHI,TV)) subplot(3,2,3) viewSurf(setBlockValue(P_ALPHA,TV)) subplot(3,2,5) viewSurf(setBlockValue(P_BETA,TV)) subplot(3,2,2) viewSurf(setBlockValue(I_PHI,TV)) subplot(3,2,4) viewSurf(setBlockValue(I_ALPHA,TV)) subplot(3,2,6) viewSurf(setBlockValue(I_BETA,TV))

验证

为了进一步验证此设计,将调谐增益曲面推入Simulink模型。金宝app

writeBlockValue (ST)

对于三个查找表块I, I, I,writeBlockValue对表断点处的增益面进行采样,并更新模型工作区中的表数据。对于MATLAB函数块“P”,“P”,“P”writeBlockValue生成增益面方程的MATLAB代码。例如,“P”块的代码看起来像这样

金宝appSimulink Coder自动将此MATLAB代码转换为高效的嵌入式C代码。使用查找表还是MATLAB函数块取决于应用程序。MATLAB函数选项确保增益作为alpha和beta的函数的平滑变化(在断点没有扭结)。它还可以更高效地存储内存,因为它只需要存储增益曲面的多项式方程的系数。另一方面,与查找表相比,计算给定(alpha,beta)点上的增益可能需要更多的操作,并且在查找表中更容易进一步调整增益。

一旦你把增益推到Simulink,自动驾驶仪的调整就完成了金宝app,你可以模拟它在着陆过程中的行为。

性能是令人满意的,但线性响应显示轴之间有大量的交叉耦合,我们不能完全满足(alpha,beta)范围角点的稳定裕度目标。使用MIMO架构,结合所有三个测量来计算表面偏转是否有益?本系列的第4部分将进一步探讨这一思想(HL-20自动驾驶仪的姿态控制MIMO设计).

参考文献

[1] P. Gahinet和P. Apkarian,“增益计划控制系统的自动调优”,IEEE会议决策与控制,2013年12月。

另请参阅

相关的话题