主要内容

调整增益安排的三环自动驾驶仪

此示例使用Systune为三环自动驾驶仪生成平稳的增益计划。

机身型号和三环自动驾驶仪

该示例使用机身螺距轴动力学的三度自由模型。国家是地球坐标$(x_e,z_e)$,身体坐标$(u,w)$,音高角$ \ theta $和音高率$ q = \ dot \ theta $。下图总结了惯性和身体框架之间的关系,飞行路径角度$ \ gamma $,入射角$ \ alpha $和螺距角度$ \ theta $

我们使用经典的三环自动驾驶仪结构来控制飞行路径角度$ \ gamma $。该自动驾驶仪通过提供足够的正常加速爆发来调整飞行路径$ a_z $(加速$ W $)。反过来,通过调整电梯挠度产生正常的加速度$ \ delta $引起投球并改变升力量。自动驾驶仪在音高循环中使用比例综合(PI)控制$ Q $和比例控制$ a_z $$ \ gamma $循环。闭环系统(机身和自动驾驶仪)在Simulink中建模。万博1manbetx

open_system('rct_airframegs'

自动驾驶增益计划

机身动力学是非线性的,空气动力和力矩取决于速度$ V $和发病率$ \ alpha $。在整个过程中获得合适的表现$(\ alpha,v)$飞行信封,必须根据$ \ alpha $$ V $弥补植物动力学的变化。此调整过程称为“增益计划”和$ \ alpha,v $称为调度变量。在Simuli万博1manbetxnk模型中,增益时间表被实现为由测量表驱动的查找表$ \ alpha $$ V $

增益调度是用于控制非线性或时变植物的线性技术。这个想法是在各种操作条件下计算植物的线性近似,调整控制器在每个工作条件下的收益,并在操作过程中互换增益作为操作条件的函数。常规增益计划涉及以下三个主要步骤。

  1. 修剪并在每个工作条件下线性化植物

  2. 调整每个工作条件下线性化动力学的控制器获得的控制器

  3. 调和增益值,以提供操作条件之间的平稳过渡。

在此示例中,您通过将自动驾驶仪增益作为一阶多项式组合来组合步骤2和3$ \ alpha,v $并直接调整整个飞行信封的多项式系数。这种方法消除了步骤3,并保证了平稳增益的变化作为$ \ alpha $$ V $。此外,增益时间表系数可以自动调整Systune

修剪和线性化

假设发生率$ \ alpha $在-20至20度之间变化,速度$ V $在700至1400 m/s之间变化。当忽略重力时,机身动力学是对称的$ \ alpha $。因此,仅考虑一个正值$ \ alpha $。使用线性间隔的5 x 9网格$(\ alpha,v)$对覆盖飞行信封。

Na = 5;alpha值的%NV = 9;V值的%数量[alpha,v] = ndgrid(linspace(0,20,na)*pi/180,linspace(700,1400,nv));

对于每个飞行条件$(\ alpha,v)$,在TRIM(零正常加速度和投球力矩)处线性化机身动力学。这需要计算电梯挠度$ \ delta $和音高率$ Q $这导致稳定$ W $$ Q $。为此,首先在单独的Simulink模型中隔离机身模型。万博1manbetx

mdl ='rct_airframetrim';Open_System(MDL)

利用OPERSPEC要指定修剪条件,请使用Findop计算修剪值$ \ delta $$ Q $,并为产生的操作点线性化机身动力学。有关详细信息,请参阅修剪并线性化机身(万博1manbetxSimulink控制设计)。重复45个飞行条件的这些步骤$(\ alpha,v)$

计算每个的修剪条件$(\ alpha,v)$一对。

为了ct = 1:na*nv alpha_ini = alpha(ct);%发病率[rad]v_ini = v(ct);%速度[m/s]%指定装饰条件opspec(ct)= operspec(mdl);%XE,ZE:已知,不稳定opspec(ct).States(1)。已知= [1; 1];opspec(ct).States(1).steadystate = [0; 0];%u,w:已知,w稳定opspec(ct).States(3)。已知= [1 1];opspec(ct).States(3).steadystate = [0 1];%theta:已知,不稳定opspec(ct).States(2)。已知= 1;opspec(ct).States(2).steadystate = 0;%问:未知,稳定opspec(ct).States(4)。已知= 0;opspec(ct).States(4).steadystate = 1;结尾opspec = reshape(opspec,[na nv]);

修剪给定规范的模型。

选项= FindOptions(“ DisplayReport”,,,,'离开');OP = FindOp(MDL,OPSPEC,选项);

在修剪条件下线性化模型。

G =线性化(MDL,OP);g.u ='三角洲';g.y = {'α',,,,'v',,,,'Q',,,,'az',,,,'伽玛',,,,'H'};G.SamplingGrid = struct('α',α,'v',v);

此过程在45个飞行条件下生产5 x 9数线性化的植物模型$(\ alpha,v)$。植物动力学在整个飞行包膜上大大差异。

Sigma(g)标题(“机身动力学的变化”

可调增益表面

自动驾驶仪由四个收益组成$ k_p,k_i,k_a,k_g $作为“计划”(调整)作为$ \ alpha $$ V $。实际上,这意味着在相应的四个查找表中的每个查找表中调整88个值。与其分别调整每个表条目,不如将收益作为二维增益表面进行参数化,例如,具有简单多线性依赖性的表面$ \ alpha $$ V $

$$ k(\ alpha,v)= k_0 + k_1 \ alpha + k_2 v + k_3 \ alpha v $$

这将每个查找表的变量从88下降到4个。使用TunablesUrface对象以参数化每个增益表面。注意:

  • tuninggrid指定“调整网格”(设计点)。该网格应匹配线性化的网格,但不需要与循环表断点匹配

  • shapefcn指定表面参数化的基础函数($ \ alpha $,,,,$ V $, 和$ \ alpha v $

使用调谐结果将每个表面初始化为恒定增益$ \ alpha $= 10度和$ V $= 1050 m/s(中端设计)。

tuninggrid = struct('α',α,'v',v);shapefcn = @(alpha,v)[alpha,v,alpha*v];kp = tunablesurface('KP',0.1,tuninggrid,shapefcn);ki = tunablesurface('ki',2,tuninggrid,shapefcn);ka = tunablesurface('K a',0.001,tuninggrid,shapefcn);kg = tunablesurface('公斤',-1000,tuninggrid,shapefcn);

下一步创建一个Sltuner调整增益表面的接口。使用块取代,通过调谐网格上的线性化模型代替非线性植物模型。利用setBlockParam关联可调增益表面KP,,,,ki,,,,K a,,,,公斤带有同名的插值块。

blocksubs = struct('姓名',,,,'rct_airframegs/机身模型',,,,'价值',G);st0 = sltuner('rct_airframegs',{'KP',,,,'ki',,,,'K a',,,,'公斤'},blocksubs);%登记点兴趣点st0.addpoint({'az_ref',,,,'az',,,,'gamma_ref',,,,'伽玛',,,,'三角洲'})%参数化查找表块st0.setblockparam('KP',KP,'ki',ki,'K a',K a,'公斤',公斤);

自动驾驶调整

Systune可以自动调整整个飞行信封的增益表面系数。利用Tuninggoal对象指定性能目标:

  • $ \ gamma $循环:以1秒的响应时间跟踪设定点,小于2%的稳态误差,小于30%的峰值误差。

req1 = tuninggoal.tracking('gamma_ref',,,,'伽玛',1,0.02,1.3);ViewGoal(REQ1)

  • $ a_z $循环:确保在低频(跟踪加速度需求)和超过10个rad/s(对测量噪声不敏感)时确保良好的干扰排斥反应。干扰被注入AZ_REF地点。

排斥折叠= FRD([0.02 0.02 1.2 1.2 0.1],[0 0.02 2 15 150]);req2 = tuninggoal.gain('az_ref',,,,'az',拒绝折扣);ViewGoal(REQ2)

  • $ Q $循环:确保良好的干扰拒绝最多10 rad/s。在工厂输入处注入干扰三角洲

req3 = tuninggoal.gain('三角洲',,,,'az',600*TF([0.25 0],[0.25 1]));ViewGoal(REQ3)

  • 瞬态:确保无振荡瞬变的最小阻尼比为0.35

心理= 0.35;req4 = tuninggoal.poles(0,心态);

使用Systune,调整16个增益表面系数,以在所有45个飞行条件下最能满足这些性能要求。

ST = Systune(ST0,[REQ1 REQ2 REQ3 REQ4]);
最终:软= 1.13,硬= -inf,迭代= 57

合并目标的最终值接近1,表明所有要求几乎满足。可视化生成的增益表面。

%获得调用增益表面。tgs = getBlockParam(st);绘图增益表面%。CLF子图(2,2,1)viewsUrf(tgs.kp)标题(TGS.KP)标题('KP')子图(2,2,2)viewsurf(tgs.ki)标题(tgs.ki)标题('ki')子图(2,2,3)viewsurf(tgs.ka)标题(TGS.KA)标题('K a')子图(2,2,4)viewsUrf(tgs.kg)标题(TGS.KG)标题('公斤'

验证

首先在上述45个飞行条件下验证调谐自动驾驶仪。绘制对飞行路径角度变化的响应,以及对电梯挠度中阶梯干扰的响应。

CLF子图(2,1,1)步骤(getiotransfer(ST,,'gamma_ref',,,,'伽玛'),5)网格标题(“跟踪飞行路径角度变化”)子图(2,1,2)步骤(getiotransfer(st,'三角洲',,,,'az'),3)网格标题(“拒绝植物输入中的步骤干扰”

在所有飞行条件下,响应都是令人满意的。接下来,针对非线性机身模型验证自动驾驶仪。首先使用写blockvalue将调整结果应用于Simulink模型。万博1manbetx这将评估每个增益表面公式在两个预序块中指定的断点,并在相应的插值块中写入结果。

WriteBlockValue(ST)

模拟自动驾驶性能,以使机身穿过其大部分飞行信封。下面的代码等同于按Simulink模型中的播放按钮并检查范围块中的响应。万博1manbetx

%指定初始条件。h_ini = 1000;alpha_ini = 0;v_ini = 700;%模拟模型。simout = sim('rct_airframegs',,,,“ returnworkSpaceOutputs”,,,,'上');%提取模拟数据。simdata = get(simout,'Sigsout');sim_gamma = getElement(simdata,'伽玛');sim_alpha = getElement(simdata,'α');sim_v = getElement(simdata,'v');sim_delta = getElement(simdata,'三角洲');sim_h = getElement(simdata,'H');sim_az = getElement(simdata,'az');t = sim_gamma.values.time;%绘制主飞行变量。clf子图(2,1,1)图(t,sim_gamma.values.data(:,1),'r-',t,sim_gamma.values.data(:,2),'b')网格传奇(“命令”,,,,'实际的',,,,'地点',,,,'东南') 标题(“飞行路径角度\伽玛”)子图(2,1,2)图(t,sim_delta.values.data)网格标题(“电梯挠度\ Delta,学位”

子图(2,1,1)图(t,sim_alpha.values.data)网格标题(“发病率\ alpha为学位”)子图(2,1,2)图(t,sim_v.values.data)网格标题('速度V中的M/S'

子图(2,1,1)图(t,sim_h.values.data)网格标题(“高度h,米”)子图(2,1,2)图(t,sim_az.values.data)网格标题(G''中的“正常加速度A_Z”

在整个操作中,跟踪飞行路径角度轮廓保持不错。请注意,发病率的变化$ \ alpha $和速度$ V $覆盖此处考虑的大部分飞行信封([-20,20]度$ \ alpha $和[700,1400]$ V $)。尽管自动驾驶仪的标称高度为3000 m,但对于从1,000 m变为10,000 m的高度来说,它的票房很好。

非线性仿真结果证实,在整个飞行包络中,增益制定的Autopilot始终如一地提供高性能。“增益表面调整”过程为对调度变量的增益依赖性提供了简单的显式公式。您可以直接使用这些公式来进行更高的内存高效硬件实现,而不是使用查找表。

也可以看看

(万博1manbetxSimulink控制设计)||(万博1manbetxSimulink控制设计)

相关示例

更多关于