主要内容

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

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

背景

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

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

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命令添加新的永久开口。带有点表示法的get/set访问:Parameters: [] OperatingPoints:[](将使用模型初始条件。)块替换:[3x1 struct]选项:[1x1线性化。SlTunerOptions] Ts: 0

设置外循环调优

现在我们将焦点转移到三个增益计划PI循环控制滚转(phi),攻角(alpha)和侧滑角(beta)。这些循环可以一次调整一个(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/飞控系统/控制器/ classic /Product1';BlockSub4 = struct(“名字”ProductBlk,“价值”[0 ss (Kp)]);

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

ProductBlk ='csthl20_control/飞控系统/控制器/ classic /Product3';BlockSub5 = struct(“名字”ProductBlk,“价值”[0 ss (Kq)]);ProductBlk ='csthl20_control/飞控系统/控制器/ classic /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到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 =“关闭”

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

%利润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)优化目标。利润(“博士da;德;”、通用、点);R3 =可变目标(FH,GM,PM);

增益计划调优

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

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

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

%网格(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);ST0.setBlockParam (“Pφ”, P_PHI);ST0.setBlockParam (“Pα”, P_ALPHA);ST0.setBlockParam (“Pβ”, P_BETA);积分增益%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);ST0.setBlockParam (“我φ”, I_PHI);ST0.setBlockParam (“我α”, I_ALPHA);ST0.setBlockParam (“我β”, I_BETA);

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

你现在可以使用systune根据三个调优目标调优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_ALPHA,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模型中。万博1manbetx

writeBlockValue (ST)

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

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

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

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

参考文献

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

另请参阅

相关的话题