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

这是关于HL-20飞行器飞行控制系统的设计和调整示例系列的第3部分。这一部分展示了如何调整一个经典的SISO体系结构来控制车辆的滚转,俯仰和偏航。

背景

本例使用的HL-20模型改编自NASA HL-20升降机身(航空航天区块集),见本系列第1部分(HL-20机身的微调和线性化(控制系统工具箱))的详情。控制飞机姿态的自动驾驶仪由三个内环和三个外环组成。

第二部分(HL-20自动驾驶仪的角速度控制(控制系统工具箱),我们展示了如何关闭控制角速率p、q、r的内环。以下命令回顾了相应的步骤。请注意,这将创建和配置slTuner界面ST0用于与Simulink模型交互。万博1manbetx

load_system (“csthl20_control”)CTYPE=2;%选择SISO体系结构运行(完整文件)(matlabroot,“例子”“控制”“主要的”“HL20recapPart2.m”) ST0
用于"csthl20_control"的slTuner调优接口:没有调优块。使用addBlock命令添加新块。9点分析 : -------------------------- 点1:信号”da;德博士”,位于“输出端口1”csthl20_control /飞行控制系统控制器的点2:信号“评定”,位于csthl20_control / HL20机身的输出端口2点3:输出端口1的csthl20_control /飞行控制系统/ Alpha_deg点4:6点:csthl20_control/Flight Control System/Controller/Classical/Demands的'Output Port 1'点8:Signal "p_demand", located at 'Output Port 1' of csthl20_control/Flight Control System/Controller/Classical/Roll-off2信号"r_demand",位于csthl20_control/Flight Control System/Controller/ classic /Roll-off3的'Output Port 1'使用addopen命令添加新的永久开口。get/set access: Parameters: [] operingpoints:[](将使用模型初始条件。)BlockSubstitutions: [3x1 struct]选项:[1x1 linearize。Ts: 0

外环路调谐设置

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

  • 很难解释循环交互。

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

另一种方法是“增益表面调整”[1]的概念,其中将增益计划P(α,β)和I(α,β)参数化为多项式表面,并使用systune调整多项式系数。该方法一次处理所有操作点,并可考虑回路相互作用,特别是考虑稳定性裕度。这是此处展示的方法。

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

ProductBlk=“csthl20_control /飞行控制系统/控制器/古典/ Product1 ';BlockSub4 =结构(“名字”ProductBlk,“价值”[0 ss (Kp)]);

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

ProductBlk=“csthl20_control /飞行控制系统/控制器/古典/ Product3 ';BlockSub5 =结构(“名字”ProductBlk,“价值”[0 ss (Kq)]);ProductBlk=“csthl20_control /飞行控制系统/控制器/古典/ Product4 ';BlockSub6 =结构(“名字”ProductBlk,“价值”[0 ss (Kr)]);ST0。(ST0 BlockSubstitutions =。BlockSubstitutions;BlockSub4;BlockSub5;BlockSub6];

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

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

调优目标

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

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

使用“裕度”目标在每个循环和跨循环施加足够的稳定裕度。此目标基于磁盘裕度的概念,它可以保证在遇到故障时的稳定性并发所有三个环路中的增益和相位变化。由于在极端方向(α,β网格的角点)很难获得7 dB和40度的目标裕度,因此我们使用不同的目标来放宽角点处的增益和相位裕度要求。

%增益边际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%创造不同的目标FH=@(总经理,总经理)调整目标。利润率(“博士da;德;”、通用、点);R3 = varyingGoal (FH、通用、点);

增益调度优化

要调整外环的P和I增益计划,请将三个MATLAB功能块和三个查找表块标记为可调。

TunedBlocks = {“Pφ”“Pα”‘Pβ’“我φ”“我是阿尔法”“我β”};ST0.addBlock (TunedBlocks)

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

(α, β)设计点的网格阿尔法向量=-10:5:25;α%范围贝塔向量=-10:5:10;%测试范围(α,β)= ndgrid (alpha_vec beta_vec);SG =结构(“α”α,“β”,β);%比例增益alphabetaBasis=多基(“规范”2、2);P_PHI = tunableSurface (“Pphi”, 0.05, SG,字母基础);P_ALPHA = tunableSurface (“Palpha”0.05,SG,α-β);P_β=可调表面(“Pbeta”,-0.05,SG,α-β);ST0.setBlockParam(“Pφ”, P_PHI);ST0.setBlockParam (“Pα”,P_ALPHA);ST0(‘Pβ’, P_BETA);%积分收益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 (“伊贝塔”,-0.05,SG,α-β);ST0.setBlockParam(“我φ”, I_PHI);ST0.setBlockParam (“我是阿尔法”,I_ALPHA);ST0.setBlockParam(“我β”,I_β);

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

您现在可以使用systune根据三个调优目标调整6个增益面。

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

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

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

结果可与基线相比较,滚转和侧滑响应的振荡更少,交叉耦合也更少。使用浏览检查调谐增益面。

电视= getTunedValue (ST);clf%注:setBlockValue用电视中的调谐系数更新每个增益面子地块(3,2,1)、viewSurf(setBlockValue(P_φ,TV))子地块(3,2,3)、viewSurf(setBlockValue(P_α,TV))子地块(3,2,5)、viewSurf(setBlockValue(P_β,TV))子地块(3,2,2)、viewSurf(setBlockValue(I_φ,TV))子地块(3,2,4)、viewSurf(setBlockValue(I_α,TV))子地块(3,2,6)、viewSurf(setBlockValue(I_β,TV))

验证

为了进一步验证此设计,将调谐增益曲面推送到Simulink模型。万博1manbetx

writeBlockValue (ST)

对于三个查找表块,I, I, I,writeBlockValue在表断点处采样增益,并更新模型工作区中的表数据。对于MATLAB函数块"P " "P alpha" "P beta"writeBlockValue生成增益面方程的MATLAB代码

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

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

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

参考文献

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

另请参阅

相关的话题