客机固定结构自动驾驶仪

本示例展示了如何使用 slTuner 和 systune 来调整纵向自动驾驶仪的标准配置。我们感谢法国航空航天高等学院(Institut Superieur de l’Aeronautique et de l’Espace)的 D. Alazard 教授提供飞机模型,以及法国航空航天研究院(ONERA)的 Pierre Apkarian 教授开发此示例。

飞机模型与自动驾驶仪配置

图 1 描绘了以 0.7 马赫速度在 5000 英尺高度飞行的超音速客机的纵向自动驾驶仪。该自动驾驶仪的主要目的是跟踪飞行员发出的垂直加速度指令 NzcN_{zc}Nzc。反馈结构包括一个控制俯仰速率 qqq 的内环和一个控制垂直加速度 NzN_zNz 的外环。自动驾驶仪还包括一个前馈分量和一个参考模型 Gref(s)G_{ref}(s)Gref(s),该模型指定了对阶跃指令 NzcN_{zc}Nzc 的期望响应。最后,二阶滚降滤波器

Fro(s)=ωn2s2+2ζωns+ωn2 F_{ro}(s) = {\omega_n^2 \over s^2 + 2 \zeta \omega_n s + \omega_n^2} Fro(s)=s2+2ζωns+ωn2ωn2

用于衰减噪声并限制控制带宽,作为对未建模动态的防护措施。可调组件以橙色高亮显示。

图 1:纵向自动驾驶仪配置。

图 1:纵向自动驾驶仪配置。

飞机模型 G(s)G(s)G(s) 是一个 5 状态模型,状态变量为气动速度 VVV (m/s)、爬升角 γ\gammaγ (rad)、迎角 α\alphaα (rad)、俯仰速率 qqq (rad/s) 和高度 HHH (m)。升降舵偏转角 δm\delta_mδm (rad) 用于控制垂直载荷因子 NzN_zNz。开环动态包括频率和阻尼比 ωn\omega_nωn = 1.7 (rad/s)、ζ\zetaζ = 0.33 的 α\alphaα 振荡,长周期模态 ωn\omega_nωn = 0.64 (rad/s)、ζ\zetaζ = 0.06,以及慢高度模态 λ\lambdaλ = -0.0026。

load ConcordeData G
bode(G,{1e-3,1e2}), grid
title(‘飞机模型’)

飞机模型伯德图

注意 G(s)G(s)G(s) 中位于原点的零点。由于这个零点,我们无法实现零稳态误差,因此必须专注于对加速度指令的瞬态响应。请注意,加速度指令本质上是瞬态的,因此稳态行为不是关注点。原点的这个零点也排除了纯积分作用,因此我们使用 ϵ\epsilonϵ = 0.001 的伪积分器 1/(s+ϵ)1/(s+\epsilon)1/(s+ϵ)

调整设置

当控制系统在 Simulink 中建模时,您可以使用 slTuner 界面快速设置调整任务。打开自动驾驶仪的 Simulink 模型。

open_system(‘rct_concorde’)

Simulink 模型

通过列出 Simulink 模型中的可调模块(以橙色高亮显示)来配置 slTuner 界面。这会自动选取模型中的所有线性分析点作为分析和调整的关注点。

ST0 = slTuner(‘rct_concorde’,{‘Ki’,‘Kp’,‘Kq’,‘Kf’,‘RollOff’});

这还会参数化每个可调模块,并根据它们在 Simulink 模型中的值初始化模块参数。请注意,在本示例中,四个增益 Ki、Kp、Kq、Kf 初始化为零。默认情况下,滚降滤波器 Fro(s)F_{ro}(s)Fro(s) 被参数化为一个通用的二阶传递函数。要将其参数化为

Fro(s)=ωn2s2+2ζωns+ωn2, F_{ro}(s) = {\omega_n^2 \over s^2 + 2 \zeta \omega_n s + \omega_n^2} , Fro(s)=s2+2ζωns+ωn2ωn2,

请创建实参数 ζ,ωn\zeta, \omega_nζ,ωn,构建如上所示的传递函数,并将其与 RollOff 模块关联。

wn = realp(‘wn’, 3); % 自然频率
zeta = realp(‘zeta’,0.8); % 阻尼比
Fro = tf(wn^2,[1 2zetawn wn^2]); % 参数化传递函数

setBlockParam(ST0,‘RollOff’,Fro) % 使用 Fro 参数化 “RollOff” 模块

设计要求

必须调整自动驾驶仪以满足三个主要设计要求:

  1. 设定点跟踪:对指令 NzcN_{zc}Nzc 的响应 NzN_zNz 应紧密匹配参考模型的响应:

Gref(s)=1.72s2+2×0.7×1.7s+1.72. G_{ref}(s) = {1.7^2 \over s^2 + 2 \times 0.7 \times 1.7 s + 1.7^2} . Gref(s)=s2+2×0.7×1.7s+1.721.72.

该参考模型指定了一个阻尼良好、调节时间为 2 秒的响应。

  1. 高频滚降:从噪声信号到 δm\delta_mδm 的闭环响应应在超过 8 rad/s 后以至少 -40 dB/十倍频程的斜率滚降。

  2. 稳定裕度:在对象输入 δm\delta_mδm 处的稳定裕度应至少为 7 dB 和 45 度。

对于设定点跟踪,我们要求从指令 NzcN_{zc}Nzc 到跟踪误差 eee 的闭环传递函数在频带 [0.05, 5] rad/s 内的增益要小(回想一下,由于对象在 s=0 处有零点,我们无法将稳态误差驱动到零)。使用几个频率点,绘制最大跟踪误差随频率变化的草图,并用它来限制从 NzcN_{zc}Nzceee 的增益。

Freqs = [0.005 0.05 5 50];
Gains = [5 0.05 0.05 5];
Req1 = TuningGoal.Gain(‘Nzc’,‘e’,frd(Gains,Freqs));
Req1.Name = ‘最大跟踪误差’;

TuningGoal.Gain 构造函数会自动将最大误差草图转换为平滑的加权函数。使用 viewGoal 以图形方式验证期望的误差曲线。

viewGoal(Req1)

最大跟踪误差要求

重复相同的过程,以限制从噪声输入到 δm\delta_mδm 的高频增益,并在 8 到 800 rad/s 的频带内强制执行 -40 dB/十倍频程的斜率。

Freqs = [0.8 8 800];
Gains = [10 1 1e-4];
Req2 = TuningGoal.Gain(‘n’,‘delta_m’,frd(Gains,Freqs));
Req2.Name = ‘滚降要求’;

viewGoal(Req2)

滚降要求

最后,将对象输入 δm\delta_mδm 注册为开环分析点,并使用 TuningGoal.Margins 来捕获稳定裕度要求。

addPoint(ST0,‘delta_m’)

Req3 = TuningGoal.Margins(‘delta_m’,7,45);

自动驾驶仪调整

我们现在已准备好使用 systune 调整自动驾驶仪参数。此命令接受未调整的配置 ST0 和三个设计要求,并返回 ST0 的调整后版本 ST。当最终值小于 1 时,所有要求均得到满足。

[ST,fSoft] = systune(ST0,[Req1 Req2 Req3]);

最终:软约束 = 0.968,硬约束 = -Inf,迭代次数 = 140

使用 showTunable 查看调整后的模块值。

showTunable(ST)

Block 1: rct_concorde/Ki =

D =
u1
y1 -0.03059

Name: Ki
静态增益。


Block 2: rct_concorde/Kp =

D =
u1
y1 -0.008714

Name: Kp
静态增益。


Block 3: rct_concorde/Kq =

D =
u1
y1 -0.2909

Name: Kq
静态增益。


Block 4: rct_concorde/Kf =

D =
u1
y1 -0.0237

Name: Kf
静态增益。


wn = 4.84

zeta = 0.515

要获取 Fro(s)F_{ro}(s)Fro(s) 的调整值,请使用 getBlockValue 针对 ST 中的调整参数值计算 Fro:

Fro = getBlockValue(ST,‘RollOff’);
tf(Fro)

ans =

     23.4

s^2 + 4.98 s + 23.4

连续时间传递函数。

最后,使用 viewGoal 以图形方式验证所有要求是否得到满足。

figure(‘Position’,[100,100,550,710])
viewGoal([Req1 Req2 Req3],ST)

要求验证

闭环仿真

我们现在验证调整后的自动驾驶仪是否满足设计要求。首先比较 NzN_zNz 的阶跃响应与参考模型 Gref(s)G_{ref}(s)Gref(s) 的阶跃响应。再次使用 getIOTransfer 计算从 Nzc 到 Nz 的调整后闭环传递函数:

Gref = tf(1.7^2,[1 20.71.7 1.7^2]); % 参考模型

T = getIOTransfer(ST,‘Nzc’,‘Nz’); % 传递函数 Nzc -> Nz

figure, step(T,‘b’,Gref,‘b–’,6), grid,
ylabel(‘N_z’), legend(‘实际响应’,‘参考模型’)

阶跃响应比较

同时绘制偏转角 δm\delta_mδm 以及前馈和反馈路径各自的贡献:

T = getIOTransfer(ST,‘Nzc’,‘delta_m’); % 传递函数 Nzc -> delta_m
Kf = getBlockValue(ST,‘Kf’); % Kf 的调整值
Tff = Fro*Kf; % 对 delta_m 的前馈贡献

step(T,‘b’,Tff,‘g–’,T-Tff,‘r-.’,6), grid
ylabel(‘\delta_m’), legend(‘总计’,‘前馈’,‘反馈’)

控制偏转角贡献

最后,通过计算 δm\delta_mδm 处的开环响应来检查滚降和稳定裕度要求。

OL = getLoopTransfer(ST,‘delta_m’,-1); % 负反馈环路传递函数
margin(OL);
grid;
xlim([1e-3,1e2]);

稳定裕度与滚降

伯德图确认了超过 8 rad/s 后以 -40 dB/十倍频程滚降,并表明增益裕度和相位裕度分别超过 10 dB 和 70 度。

另请参阅

systune (slTuner) (Simulink Control Design) | slTuner (Simulink Control Design) | TuningGoal.Gain | TuningGoal.Margins

相关主题

  • 客机的容错控制

版权标注与来源说明

本文译文对应的原文内容,均来源于 MathWorks 官方网站(https://www.mathworks.com/)及官方帮助中心,原文版权均独家归属MathWorks 公司所有。

译文系基于原文进行的非官方翻译,仅为方便个人学习、理解MathWorks相关产品(含MATLAB等)的功能、操作及技术细节而制作,不代表MathWorks公司官方立场,也不构成官方翻译版本。

建议使用者优先查阅官方原文。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐