固定翼无人机预定义时间轨迹跟踪控制及Simulink复现

发布时间:2026/10/20 7:23:35
固定翼无人机预定义时间轨迹跟踪控制及Simulink复现 最早在文献库里刷到这篇TASE文章的时候我是被标题后半段劝退过一轮的——又是扰动观测器、又是输入饱和、又是预定义时间三个控制里最磨人的关键词全凑齐了。但真正开始复现之后我发现它其实把固定翼无人机工程落地中最现实的三件事一次性处理掉了外界扰动不可测、执行机构有物理极限、收敛时间不能指望初始状态。这篇文章适合正在做飞行控制算法仿真的人也适合想从旋翼转到固定翼、又不满足于PID加串级结构的同学。下面是我从读论文到Matlab/Simulink跑通全过程的完整笔记分理论、代码和踩坑三块展开。1. 复现前须读懂题目本身三个关键词背后的三个现实问题1.1 固定翼无人机跟踪控制为什么难在“集成”固定翼无人机与常见的旋翼机有个本质区别升力主要靠机翼相对气流产生速度必须维持在失速速度之上否则飞机会直接进入气动失效区。这意味着控制的可靠性和收敛时间高度敏感。做轨迹跟踪时位置、速度、航迹角之间存在强耦合航向角的变化还会通过转弯半径反过来影响位置误差再加上飞行中不可避免的阵风、侧风、机翼结冰引起的参数摄动控制问题一下就变得复杂。很多文献只处理其中一个子问题比如只做扰动抑制、只做有限时间收敛、只做输入饱和补偿。但这篇TASE文章的看点是把输入饱和、未知扰动、预定义时间收敛三个约束放进同一个控制架构中处理。工程上这种集成非常有意义因为实际飞控面对的问题从来都是同时发生的传感器噪声推高观测器增益执行机构限幅又强迫控制律保持克制两者天然存在矛盾。我在复现之前花了不少时间做的是把问题映射到模型什么状态可测什么扰动不可测什么指令受限制哪个环节要求响应最快。把这些边界条件列清楚再看论文里的公式就不会觉得每个假设都莫名其妙。这一步看似简单实则是整篇复现的地基——后面所有参数调试都要回到这套边界条件上找原因。1.2 “固定时间”“预定义时间”“指数收敛”到底是什么关系这三个概念很容易混。有限时间控制保证系统在某个有限时刻到达平衡点但收敛时间上界依赖初始状态初始误差越大收敛越慢上界无法提前设计。固定时间控制解决了初值依赖问题收敛时间上界只与控制参数有关但设计时往往只能给一个保守的常数上界具体数值要靠试凑或估计。预定义时间控制更进一步直接把收敛时间T_c当作设计指标写进控制器。它的数学基础是一个特殊的Lyapunov微分不等式不等式中显式包含T_c无论初始状态多大系统都保证在T_c之前完成收敛。这篇TASE文章又在预定义时间框架上叠加了指数收敛项让收敛包络额外具备指数衰减特性。工程上的直观理解是误差前期收敛更快、后期更平滑不会出现“理论保证收敛但实际大幅度振荡”的情况。把这一层理解到位后面看控制律公式时才能分清每一项的作用哪些项负责预定时间收敛哪些项负责指数衰减哪些项是干扰补偿哪些项是抗饱和辅助。1.3 读TASE文章的两个典型门槛TASE这类航空航天顶刊文章有个鲜明特点定理部分高度浓缩证明显逻辑却往往用引理跳过大量中间代数操作。第一次读可能觉得条件合理、证明完备可一上Matlab就卡壳——Lyapunov函数具体取什么形式指数项放在哪一步饱和辅助系统是连续差分还是离散差分论文不会把这些工程细节写出来。另一个门槛是仿真模型的粒度选择。论文证明是在理想化的数学系统上完成的代码里用的无人机模型如果太简化会掩盖真实系统中的耦合行为如果太复杂又会引入论文假设之外的状态依赖和外力项。我的选择是先用质点模型跑通控制律核心再往模型里加入姿态动态、执行器延迟确保每一层复杂化都不破坏预定义时间性质。这也是我建议所有复现者走的路先做减法再做加法。2. 控制方案的总架构观测器、控制器和抗饱和如何分工2.1 固定时间扰动观测器的设计逻辑扰动观测器在控制回路中的位置非常关键。以速度通道为例系统可以写成一阶形式 [ \dot{x}f(x,u)d(t) ] 这里d(t)代表集总扰动可能是阵风、模型误差、执行器偏差反正就是模型里没写进去、但真实存在的所有额外作用。观测器的思路是用状态观测误差反过来调整扰动估计让估计值逐渐逼近真实扰动然后在控制律里把扰动补偿掉。为了实现固定时间收敛我采用的是双幂次项组合的观测器结构 [ \dot{\hat{x}}f(x,u)\hat{d}k_1|e|^{a_1}\operatorname{sign}(e)k_2|e|^{a_2}\operatorname{sign}(e) ] [ \dot{\hat{d}}k_3|e|^{b_1}\operatorname{sign}(e)k_4|e|^{b_2}\operatorname{sign}(e) ] 其中e是状态观测误差幂次满足0a_11a_2、0b_11b_2。为什么这样组合分数幂项在误差小时起主要作用压缩速率高大于1的幂次在误差大时提供更强的修正避免收敛速率随初值增大而降低。两路修正叠加后只要增益满足由Lyapunov分析推出的矩阵不等式条件就能保证估计误差在一个与初始状态无关的固定时间内收敛。代码实现上增益可以根据线性矩阵不等式解得一组可行解再人工微调。观测器初值一般设0否则初始暂态会明显变大。2.2 指数预定义时间控制器的工作机制控制器是整套方案的核心。它接收三路信息跟踪误差、扰动估计值、输入饱和辅助变量。控制律整体结构可以划分为三部分 [ uu_{\mathrm{pre}}u_{\mathrm{exp}}\hat{d} ] 其中u_pre是预定义时间反馈项直接与Lyapunov函数V的幂次挂钩保证系统满足预定义时间稳定引理u_exp是指数调制项用指数衰减包络增强收敛前期的速度\hat{d}是前馈补偿把观测器估计到的扰动在控制层面直接抵消。控制器的Lyapunov函数通常取跟踪误差的加权二次型例如 [ V\frac{1}{2}m\tilde{v}^2\frac{1}{2}\gamma_\chi e_\chi^2\frac{1}{2}\gamma_\gamma e_\gamma^2 ] 权值可根据期望的响应速度调整。接下来设计u使\dot{V}满足预定义时间不等式。这样设计出来的控制器对T_c有显式依赖改变T_c直接改变收敛时间预期不像传统渐近控制那样只能事后看曲线估时间常数。2.3 输入饱和处理辅助系统与饱和差额执行机构饱和不能简单用限幅块带过因为限幅后的实际值与控制器计算出的指令之间存在差额。如果不处理这个差额会在积分环节累积最终引发明显的过冲。一个经典做法是辅助系统抗饱和设计把饱和差额引出来形成补偿信号 [ \dot{\zeta}-k_{\mathrm{sat}}\zeta\Delta u,\quad \Delta u\operatorname{sat}(u)-u ] 然后把这个辅助变量反馈进控制律。这相当于告诉控制器执行机构已经被限幅了你之前给的指令没有完全生效我现在补偿这个差额避免积分环节“记仇”。在Lyapunov分析里面\zeta项会与\Delta u交叉项配对从而证明即使系统进入饱和区间闭环系统依然满足预定义时间稳定性只是收敛包络会被扰动放大到有界范围。这个设计是我认为这篇论文工程价值最高的地方——理论承诺没有被饱和破坏。3. 理论推导关键步骤还原这些公式决定代码怎么写3.1 固定翼误差动力学建模复现前必须建好误差模型。固定翼质点运动方程通常写成 [ \dot{x}V\cos\chi\cos\gamma ] [ \dot{y}V\sin\chi\cos\gamma ] [ \dot{h}V\sin\gamma ] [ \dot{V}\frac{T-D}{m}-g\sin\gammad_V ] [ \dot{\chi}\frac{L\sin\phi}{mV\cos\gamma}d_\chi ] [ \dot{\gamma}\frac{L\cos\phi}{mV}-\frac{g\cos\gamma}{V}d_\gamma ] 其中T是推力L是升力φ是滚转角D是阻力。参考轨迹给定期望x_d、y_d、h_d反解期望速度V_d、期望航迹方位角χ_d、期望爬升角γ_d后定义误差e[e_V,e_χ,e_γ]^T把方程做差得到误差动力学 [ \dot{e}F(e)G(e,\chi,\gamma)\tilde{u}\bar{d} ] 其中\tilde{u}是控制增量\bar{d}是扰动投影差。控制目标就是设计\tilde{u}使误差向量在预定义时间T_c内收敛。这里有个容易踩的细节χ在±π处发生跳变误差求差前必须做角度修正否则控制器会看到虚假的2π量级误差输出猛烈的控制指令。3.2 预定义时间稳定引理与指数项的结合预定义时间控制的核心引理长这样如果存在正定函数V满足 [ \dot{V}\le-\frac{\pi}{T_c\gamma}\left(V^{1-\gamma/2}V^{1\gamma/2}\right) ] 其中0\gamma1那么系统状态将在T_c内到达原点。证明的关键是做变量代换yV^{\gamma/2}把不等式化为 [ \dot{y}\le-\frac{\pi}{2T_c}(1y^2) ] 这实际上是一个右端带正定二次型的标量微分方程解出来是反正切函数形式。无论初值y(0)多大都有y(t)在tT_c时趋于零。这就是“预定义”名字的来源收敛上界直接写进不等式而不是事后估计。这篇论文的“指数预定义时间”体现在哪里我的理解是把反馈项分成两部分一部分严格满足上面这个不等式另一部分带指数衰减因子。于是误差收敛过程同时具备“预定义时间上界”和“指数收敛速率”两个特性。这种做法在仿真里最直观的表现是误差曲线前段下降斜率明显比纯预定时间控制更陡后段又没有大幅振荡。3.3 稳定性证明中容易漏掉的假设条件复现时最怕的不是公式看不懂而是假设条件在代码里被悄悄破坏。有几条必须逐条对上集总扰动的一阶导数有界。扰动发生器产生的信号必须满足这个条件。常值加缓变正弦的组合通常没问题但台阶式扰动在切换瞬间导数无穷大观测器在切换点会产生尖峰。控制矩阵非奇异。χ方程中有\cos\gamma在分母当γ接近±90度时增益异常放大。仿真轨迹应避免设计垂直爬升或俯冲。一旦参考轨迹把γ逼近这个边界控制器数值会瞬间失稳。状态全可测。论文通常假设速度、航迹角、位置可直接测量。仿真里这些量直接来自模型容易满足。但如果新增传感器噪声模块观测器增益就必须回调否则噪声会被放大成频繁抖振。内环足够快。质点模型隐含了姿态动态已由内环控制到期望值的假设。如果后续把姿态环加入仿真必须保证内环带宽大于外环控制带宽若干倍预定义时间的结论才仍然成立。把这些假设条件与参数对应清楚后面出问题时就能快速定位到底是代码错误还是模型假设不满足而不是盲目调参。4. Matlab/Simulink实现从公式到可运行代码的落地过程4.1 Simulink顶层模型与信号流设计我采用Simulink加Matlab Function混合搭建顶层模块按功能拆分如下参考轨迹生成由时间产生期望轨迹x_d、y_d、h_d并计算期望速度与航迹角。固定翼动力学通过Matlab Function实现六状态质点模型输出当前状态。固定时间扰动观测器以状态和上一时刻控制量为输入输出扰动估计。预定义时间控制器计算推力、升力指令、滚转角指令。饱和模块推力限幅滚转角限幅。扰动发生器常数加正弦阵风可加随机分量。记录模块把误差、控制量、观测器输出写入工作空间。信号流有一个关键约束观测器不能直接取当前时刻的u否则会形成代数环。我在观测器输入端放Memory块让观测器使用上一时刻的u避开代数环问题。这个改动对性能影响很小因为固定步长1ms足够小。仿真配置建议用固定步长求解器ode4步长0.001s。变步长求解器在高增益和饱和切换时容易反复调整步长仿真速度反而慢结果也不稳定。4.2 固定翼动力学子系统建模细节我用一个Matlab Function块实现质点动力学核心代码如下function dX fixedWingDyn(X, u, d) % X: [x; y; h; V; chi; gamma] % u: [T; L; phi] % d: [dV; dchi; dgamma] x X(1); y X(2); h X(3); V X(4); chi X(5); gamma X(6); T u(1); L u(2); phi u(3); dV d(1); dchi d(2); dgamma d(3); m 20; g 9.81; rho 1.225; S 1.2; CD0 0.02; K 0.05; % 升力诱导阻力 D 0.5*rho*V^2*S*(CD0 K*(L/(0.5*rho*V^2*S))^2); dX zeros(6,1); dX(1) V*cos(gamma)*cos(chi); dX(2) V*cos(gamma)*sin(chi); dX(3) V*sin(gamma); dX(4) (T - D)/m - g*sin(gamma) dV; dX(5) L*sin(phi)/(m*V*cos(gamma)) dchi; dX(6) L*cos(phi)/(m*V) - g*cos(gamma)/V dgamma; end注意几个细节V要始终保持为正初始速度设在巡航速度附近阻力公式用诱导阻力因子K方便调整阻力模型航向角和爬升角的计算要处理角度边界。这些细节直接决定模型能不能稳定仿真。4.3 控制器与观测器Matlab Function核心代码控制器内部逻辑可以写成如下简化形式function [u_sat, zeta] predefinedController(e, dhat, zeta, dt, t) Tc 2.0; gamma 0.5; kSat 0.3/Tc; % 权重根据通道重要性设置 W diag([1.0, 2.0, 2.0]); V 0.5*e*W*e; % 预定义时间反馈项K1/K2按引理换算 K1 pi/(Tc*gamma); K2 pi/(Tc*gamma); upre -K1*e.^(1-gamma/2) - K2*e.^(1gamma/2); % 指数收敛调制项 lambda 0.5; uexp -lambda*exp(-lambda*t)*e; v upre uexp dhat; % 执行器饱和 umax [120; 300; 0.78]; % 推力、升力、滚转角 u saturate(v, umax); % 辅助系统抗饱和 du u - v; zeta zeta (-kSat*zeta du)*dt; u_sat u zeta; end观测器核心代码function dhat fdo(obs_state, f_nominal, u, pre_dhat, dt) % 双幂次固定时间修正 a10.5; a21.5; b10.5; b21.5; k12.0; k22.0; k34.0; k44.0; e obs_state - nh_obs_state; % 状态观测误差nh_obs_state为观测器内部状态 de f_nominal u pre_dhat - obs_state; dhat pre_dhat (k3*abs(de)^b1*sign(de) k4*abs(de)^b2*sign(de))*dt; end工程上更常见的写法是通过累积状态误差更新\hat{d}。为了让代码可读我在实际项目里把观测器内部的\hat{x}状态单独建了一个反馈回路这样更接近观测器理论的原始结构。4.4 参考轨迹与扰动场景配置参考轨迹我做了三种水平直线带小机动、圆形盘旋、波状起伏。扰动场景对应三种常值侧风dV和dchi上分别加偏置。正弦阵风dchi或dgamma上加幅值0.05 rad/s、频率0.5 Hz的正弦。综合扰动常数加正弦加窄带随机。扰动发生器本质是时间函数的累加。需要注意切换瞬间加缓启动缓冲否则观测器会产生尖峰。我用的是一个二阶低通滤波器把阶跃扰动“抹圆”既保证扰动导数有界又模拟了真实风场的时间连续性。5. 复现踩坑记录几个容易让人崩溃的细节5.1 预定义时间常数选太小一上来直接发散第一次尝试把T_c设成0.5s以为收敛越快越好。结果仿真开始不到0.1秒控制量直接打到限幅值轨迹迅速偏离。原因是控制律中1/T_c因子和V^{1-\gamma/2}项在初始误差大时数值爆炸T_c越小反馈增益越大而误差幂次让大误差时的输出异常放大。解决方法是让T_c不要小于内环动态时间常数的5倍并从T_c5开始逐步减小到目标值观察每个阶段的控制量峰值。最终稳定在T_c2s。这个教训告诉我预定义时间控制给的是“设计上界”不等于“越小越好”。实际选值时必须留给执行机构物理响应余量。5.2 扰动观测器初值和估计峰值观测器初值\hat{d}(0)如果设成一个较大偏移估计误差初始瞬间巨大观测器为了追上会输出尖峰反过来激励控制器。后来我把\hat{d}(0)设为0并在观测器启动前0.5s内把扰动估计输出接到一个低通滤波器上抑制初值暂态。另一个经验当扰动发生器切换工况时比如从常值切到正弦\hat{d}会出现明显过冲。这不是代码错误而是观测器的固定时间收敛特性在扰动突变瞬间重新收敛所致。可以在观测器代码里对扰动变化率设一个上限虽然理论上的严格性打了个折扣但对仿真里程碑验证帮助很大。5.3 代数环观测器与控制器的耦合观测器需要当前控制量控制器需要当前扰动估计两个量互相依赖时就形成代数环。Simulink会报错或产生严重的隐式迭代。我的处理是在观测器端使用上一时刻的控制量并在观测器更新公式中采用显式欧拉形式。这样处理之后结果与无延迟情形几乎一致。记一个关键点求解器步长必须是固定值否则单位延迟环节的有效延迟时间会随步长变化导致观测器补偿相位不断漂移。5.4 饱和差额辅助系统参数k_sat的调节k_sat取值直接决定饱和退出后的恢复速度。我试过k_sat5饱和区间内辅助变量高频振荡明显控制量出现抖动k_sat0.1饱和退出后误差收敛明显变慢。最终把k_sat取成2/Tc的0.3到0.5倍即T_c2s时取0.3到0.5效果最稳定。更细致的做法是按通道分别设置k_sat油门通道和滚转通道的饱和特性不同分开调参数能兼顾大动态和稳态性能。5.5 角度wrap与速度下限航向角在±π处的跳变是固定翼仿真最容易忽略的问题。期望航迹角的计算要用atan2并配合wrapToPi处理误差否则误差突然变成2π量级控制器瞬间饱和。我当时在这个问题上浪费了整整一个晚上原因只是参考轨迹从359度转到0度误差没有包络好。速度方面推力下限为0时阻力可能大于推力而使V跌破失速速度导致模型出现负速度动力学方程中的V和cosγ、sinγ组合产生无意义结果。我在动力学里加了保护V低于失速速度时按失速速度处理避免数值发散。5.6 单位不统一一个小时的排查只因为km/h有一次发现速度跟踪误差在某个波次后逐渐增大排查一个多小时才发现扰动发生器里把V的单位写成了km/h而控制器输出用的是m/s。这类低级错误在复现中很常见建议把所有物理量统一成国际单位并在Simulink模型里用Bus信号标注单位。6. 仿真结果分析与复现验证清单6.1 三种典型工况下的跟踪效果我做了三组仿真汇总如下工况设置位置误差收敛时间速度误差稳态值控制量触限常值偏置扰动dV1m/s²dχ0.02rad/s约1.8s小于0.05m/s未触限正弦阵风dγ幅值0.03rad/s频率0.5Hz小于2.0s有界振荡小于0.08m/s偶尔触限综合扰动加初始误差上两组合并、初始位置偏差增大50%小于2.0s小于0.10m/s触限但稳定每组仿真都记录控制量最大值触限情况符合预期。最让我满意的是把初始条件误差加大50%后位置误差仍然在预设T_c2s附近完成收敛而不是像有限时间控制那样明显延后。6.2 与常规有限时间控制器的对比我还实现了一个基于有限时间滑模的对照组。对比数据表明初始误差较小时两者收敛时间接近初始误差放大后有限时间控制收敛时间大约增加了30%而预定义时间控制几乎不变。这正是预定义时间控制的核心价值。做对比时要注意对照组参数也必须调好否则差距会被人为放大。我在对照组里也加了同样的扰动观测器确保对比的只是时间收敛机制本身。6.3 复现代码验证清单如果你也准备复现建议按这个清单逐项检查改变初始误差为2倍位置误差收敛时间是否仍不大于T_c。关闭扰动发生器观测器估计应趋于零打开扰动后估计误差应在固定时间内减小到稳态。把控制量强制限幅看系统是否仍然稳定辅助系统是否有相应响应。故意把观测器增益改成明显不满足条件的值系统是否发散。这一步实际是在验证理论条件是否真的在起作用。在Simulink中导出Lyapunov函数值在Matlab Function里把V作为输出检查V是否单调下降到稳态。这几个检查全部通过基本可以认为你的复现思路与原论文一致。我个人的整体感受是这类顶刊复现真正宝贵的不是把公式抄进代码而是逼你把每个抽象假设和工程现象逐一对应起来。第一次跑通时我在T_c调参上卡了两天最后发现不是算法问题而是对“预定义时间”的理解有误——它保证的是收敛上界而不是“越短越好”。把这个观念拧过来之后后面的调试顺畅很多。如果你也在复现这类算法建议先花半天把第三章的假设条件和第二章的结构在草稿纸上理顺再打开Matlab不然大概率会在代数环和参数发散里浪费掉一周。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询