主要内容

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

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

出身背景

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

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

加载系统(“csthl20_control”) ctype = 2;%选择SISO架构HL20第2部分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(alpha,beta)和I(alpha,beta)参数化为多项式曲面并使用系统调整多项式系数。这种方法一次处理所有操作点,可以考虑循环交互,特别是稳定性裕度的考虑。这就是这里展示的方法。

为了调整外部回路,我们必须关闭内部回路,并获得外部回路在每个(阿尔法,贝塔)条件下看到的“植物”的线性化模型。我们可以问单反调谐器计算相应的传递函数,但这将有效地将内环增益Kp、Kq、Kr固定为默认工作条件下的值。为了获得正确的线性化,我们必须告诉单反调谐器这些增益随(alpha,beta)变化。块替换也是最简单的方法。要将Kp标记为变化,请找到用于将错误信号乘以Kp的乘积块,并将其替换为增益数组,每个(alpha,beta)条件一个。

ProductBlk =“csthl20_控制/飞行控制系统/控制器/经典/产品1”; BlockSub4=struct(“姓名”ProductBlk,“价值”[0 ss(Kp)];

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

ProductBlk =“csthl20_control /飞行控制系统/控制器/古典/ Product3 ';BlockSub5=struct(“姓名”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”,“贝塔度”});步骤(T0,6)

调整目标

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

R1 = TuningGoal。MinLoopGain ({“Phi_deg”,“Alpha_deg”,“贝塔度”}, 0.5, 1);R1。LoopScaling =“关闭”;R2 = TuningGoal。MaxLoopGain ({“Phi_deg”,“Alpha_deg”,“贝塔度”},特遣部队(50 [1 10 0]));R2。LoopScaling =“关闭”

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

%利润率vs(α、β)通用= [...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(α、β)PM=[...40 40 40 40 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 40 40 45 40 40 40 40 40 40 40];创造不同的目标调整目标。利润(“da;de;dr”R3=varyingGoal(FH,gm,pm);

增益调度优化

为了优化P和我获得外部循环的调度,将三个MATLAB函数块和三个查找表块标记为可调。

TunedBlocks = {‘P phi’,“Pα”,“Pβ”,“我是菲”,“我α”,“我是贝塔”};ST0.addBlock(TunedBlocks)

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

%(α、β)设计点网格alpha_vec = 10:5:25;%阿尔法射程beta_vec = 10:5:10;%贝塔范围[alpha,beta]=ndgrid(alpha_-vec,beta_-vec);SG=struct(“α”阿尔法“贝塔”,β);%的比例增长alphabetaBasis = polyBasis (“规范的”2、2);P_PHI = tunableSurface (“嗨”, 0.05, SG,字母基础);P_ALPHA = tunableSurface (“帕尔帕”, 0.05, SG,字母基础);P_BETA = tunableSurface (“Pbeta”, -0.05, SG,字母基础);ST0.setBlockParam (‘P phi’,P_PHI);ST0(“Pα”, P_ALPHA);ST0.setBlockParam (“Pβ”,P_β);%整体收益α基=@(α)α;β基=@(β)abs(β);α基=ndBasis(α基,β基);I_φ=可调表面(“伊菲”, 0.05, SG,字母基础);I_ALPHA = tunableSurface (“伊尔帕”, 0.05, SG,字母基础);I_BETA = tunableSurface (“Ibeta”, -0.05, SG,字母基础);ST0.setBlockParam (“我是菲”, I_PHI);ST0.setBlockParam (“我α”, I_ALPHA);ST0.setBlockParam (“我是贝塔”, I_BETA);

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

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

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

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

T=getIOTransfer(ST,“需求”, {“Phi_deg”,“Alpha_deg”,“贝塔度”});步骤(T0、T、6)图例(“基线”,“调谐”,“位置”,“东南”)

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

TV=getTunedValue(ST);clf%注:setBlockValue使用TV中的调谐系数更新每个增益面次要情节(3,2,1)viewSurf (setBlockValue (P_PHI、电视))次要情节(3 2 3)viewSurf (setBlockValue (P_ALPHA、电视))次要情节(3 2 5)viewSurf (setBlockValue (P_BETA、电视))次要情节(3 2 2)viewSurf (setBlockValue (I_PHI、电视))次要情节(3 2 4)viewSurf (setBlockValue (I_ALPHA、电视))次要情节(3 2 6)viewSurf (setBlockValue (I_BETA、电视))

验证

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

writeBlockValue(ST)

对于三个查找表块,I, I, I,writeBlockValue对表格断点处的增益面进行采样,并更新模型工作区中的表格数据。对于MATLAB功能块“P phi”、“P alpha”、“P beta”,writeBlockValue生成增益面方程的MATLAB代码。例如,P块的代码是这样的

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

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

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

参考文献

[1] P.Gahinet和P.Apkarian,“增益计划控制系统的自动调谐”,摘自《IEEE Conf.Decision and control程序》,2013年12月。

另见

相关的话题