1. 项目背景与核心挑战
固定翼无人机在复杂环境下的轨迹跟踪控制一直是飞行控制领域的难点问题。当系统存在未知外部干扰和输入饱和约束时,传统控制方法往往难以同时保证跟踪精度和稳定性。我们团队在最近的项目中,针对某型固定翼无人机的高精度航迹跟踪需求,开发了一套基于指数预定义时间控制(Exponential Prescribed-Time Control, EPTC)的新型控制架构。
这个控制方案最显著的特点是能够在存在风扰、执行器饱和等现实约束条件下,实现无人机对时空轨迹的精确跟踪。与常规有限时间控制不同,预定义时间控制允许操作者直接指定系统收敛时间,而无需通过调整参数来间接影响收敛速度。在实际飞行测试中,该系统在5级阵风条件下仍能将跟踪误差稳定在0.3米以内。
2. 控制系统架构设计
2.1 无人机动力学模型构建
固定翼无人机的六自由度非线性动力学模型可表示为:
matlab复制% 平移动力学
dx = v*cos(psi)*cos(theta) + w*(sin(phi)*sin(theta)*cos(psi) - cos(phi)*sin(psi));
dy = v*sin(psi)*cos(theta) + w*(sin(phi)*sin(theta)*sin(psi) + cos(phi)*cos(psi));
dz = -v*sin(theta) + w*sin(phi)*cos(theta);
% 旋转动力学
dp = (J_y - J_z)/J_x * q * r + l/J_x * tau_phi;
dq = (J_z - J_x)/J_y * p * r + m/J_y * tau_theta;
dr = (J_x - J_y)/J_z * p * q + n/J_z * tau_psi;
其中需要考虑的关键非线性因素包括:
- 气动系数随攻角的变化
- 舵面偏转与气动力矩的非线性关系
- 发动机推力的动态响应延迟
2.2 干扰观测器设计
为处理系统存在的复合干扰d(t),我们采用改进的非线性干扰观测器:
code复制˙δ = -Kδ - K(f(x) + g(x)u + Kx)
d̂ = δ + Kx
其中K为观测器增益矩阵。通过李雅普诺夫分析可以证明,当干扰变化率有界时,该观测器能在预定义时间内实现干扰估计误差收敛。
2.3 预定义时间控制器设计
核心控制算法采用如下形式:
matlab复制u = g(x)^(-1)[-f(x) - d̂ + ẍ_d - k1*sig(e)^α - k2*sig(e)^β]
其中:
- sig(e)^α = |e|^α sign(e)为分数阶幂函数
- 参数α,β满足α=1+(1/μ), β=1-(1/μ), μ>1
- 收敛时间T可预先设定为:T = (1/(k1(μ-1)))ln(1+(k1/k2)|e(0)|^(2/μ))
3. 输入饱和补偿策略
3.1 抗饱和补偿器设计
针对执行器饱和约束|u_i| ≤ u_max,引入辅助补偿系统:
code复制˙ξ = -cξ + Δu
Δu = sat(u) - u
修正后的控制律变为:
code复制u = g(x)^(-1)[-f(x) - d̂ + ẍ_d - k1*sig(e)^α - k2*sig(e)^β - Kξ]
3.2 参数整定规则
通过大量仿真测试,我们总结出以下参数调节经验:
- 收敛时间参数μ通常取1.5~2.5,过大会导致控制量突变
- 观测器增益K应满足λ_min(K) > ‖∂d/∂t‖/‖e‖
- 抗饱和增益c建议按c=2/T进行初选
- 控制增益k1,k2需满足k1/k2 ≈ 10|e(0)|^(2/μ)
4. Matlab实现关键代码
4.1 主控制循环框架
matlab复制function [u, d_hat] = EPTC_Controller(x, xd, t, params)
% 状态误差计算
e = x(1:3) - xd(1:3);
de = x(4:6) - xd(4:6);
% 干扰观测器更新
d_hat = UpdateDOB(x, params);
% 预定义时间控制律
mu = params.mu;
alpha = 1 + 1/mu;
beta = 1 - 1/mu;
s = de + params.k1.*sign(e).*abs(e).^alpha + params.k2.*sign(e).*abs(e).^beta;
% 抗饱和补偿
xi = AntiWindupCompensator(params);
% 最终控制量计算
u = -params.inv_g*( params.f + d_hat - xd(7:9) + ...
params.k1.*sign(e).*abs(e).^alpha + ...
params.k2.*sign(e).*abs(e).^beta + ...
params.K_xi*xi );
% 执行器饱和限制
u = saturate(u, params.u_max);
end
4.2 干扰观测器实现
matlab复制function d_hat = UpdateDOB(x, params)
persistent delta;
if isempty(delta)
delta = zeros(3,1);
end
% 非线性动力学计算
f_val = NonlinearDynamics(x);
% 观测器状态更新
delta_dot = -params.K_ob*delta - params.K_ob*(f_val + params.g*x(4:6));
delta = delta + delta_dot*params.dt;
d_hat = delta + params.K_ob*x(4:6);
end
5. 仿真与实飞测试结果
5.1 典型测试场景
我们设计了以下验证场景:
- 强风干扰测试:施加15m/s的突变侧风
- 输入饱和测试:限制舵面偏转不超过±25°
- 复合机动测试:要求无人机在30秒内完成"8"字轨迹跟踪
5.2 性能指标对比
| 指标 | PID控制 | 滑模控制 | 本方法 |
|---|---|---|---|
| 最大位置误差(m) | 3.2 | 1.5 | 0.28 |
| 稳定时间(s) | 8.5 | 5.2 | 2.1 |
| 控制量超调(%) | 35 | 62 | 12 |
| 抗扰恢复时间(s) | 6.8 | 3.5 | 1.3 |
5.3 典型响应曲线分析
![轨迹跟踪对比图]
从仿真曲线可见,传统方法在t=12s遇到风扰时出现明显偏差,而EPTC方法能在预定的2秒内恢复跟踪。
6. 工程实现中的关键问题
6.1 计算效率优化
原始算法涉及大量幂运算,直接实现会导致:
- 单步计算时间达15ms(100Hz控制周期)
- 引发CPU过载告警
通过以下措施优化:
- 采用泰勒展开近似分数阶幂运算
- 预计算并查表法处理sig()函数
- 将观测器更新频率降至50Hz
优化后单步计算时间降至3ms以内。
6.2 测量噪声处理
实际传感器噪声会导致的问题:
- 干扰观测器高频抖动
- 分数阶微分放大噪声
解决方案:
- 在观测器前增加二阶Butterworth滤波器
- 对误差信号e采用非线性滤波:
code复制其中ε=0.1为噪声阈值e_f = e/(1 + (‖e‖/ε)^2)
7. 参数调试实用技巧
根据项目经验,总结以下调试步骤:
-
先调观测器:将控制器设为PD形式,先确保干扰估计准确
- 逐步增大K_ob直到出现高频抖动,然后回退20%
-
再调收敛时间:固定μ=2,调节k1满足:
code复制k1 ≈ 4/(μ*T_desired) -
最后调抗饱和:从c=1/T开始,每次增加0.5直到控制量平滑
-
现场微调规则:
- 出现超调:增大k2
- 收敛慢:增大k1
- 控制量振荡:增大c
重要提示:实际飞行前必须进行以下检查:
- 在所有工作点验证g(x)的可逆性
- 测试执行器饱和时的稳定性
- 记录最恶劣条件下的计算耗时
这套控制方案已在多个型号固定翼无人机上得到应用,特别是在需要精确时间协同的多机编队任务中表现突出。后续我们计划将算法移植到基于ARM的飞控计算机,进一步验证其在嵌入式平台上的性能。