无人水面艇(USV)作为一种典型的欠驱动系统,在海洋勘探、环境监测等领域具有广泛应用前景。轨迹跟踪控制是确保USV完成预定任务的核心技术,其核心挑战在于系统存在模型不确定性、环境扰动以及欠驱动特性带来的控制自由度不足问题。
传统PID控制在面对非线性强耦合的USV系统时表现不佳,而滑模控制因其对参数摄动和外部干扰的强鲁棒性,成为解决这一问题的理想选择。特别是全局快速终端滑模控制(GFTSMC),通过引入非线性终端吸引子,能够在有限时间内实现系统状态的快速收敛。
本文研究的控制系统采用分层设计架构:
这种分层结构有效解耦了系统的运动学和动力学特性,简化了控制器设计复杂度。
考虑三自由度USV模型:
运动学模型:
code复制ẋ = ucosψ - vsinψ
ẏ = usinψ + vcosψ
ψ̇ = r
动力学模型:
code复制u̇ = (m22vr - d11u + τu)/m11
v̇ = (-m11ur - d22v)/m22
ṙ = [(m11-m22)uv - d33r + τr]/m33
其中(u,v,r)分别为纵荡、横荡和首摇速度,(x,y,ψ)为位置和航向角,mii为惯性参数,dii为阻尼系数。
反步法(Backstepping)是一种递推设计方法,通过构造虚拟控制量逐步稳定各子系统。其核心步骤包括:
code复制xe = x - xd
ye = y - yd
code复制V1 = (xe² + ye²)/2
code复制αu = udcosψd + vdsinψd - k1xe
αv = -udsinψd + vdcosψd - k2ye
code复制uc = αucosψ + αvsinψ
vc = -αusinψ + αvcosψ
关键技巧:虚拟控制量的设计需要考虑USV的欠驱动特性,即vc=0的约束条件
采用改进的全局快速终端滑模面:
code复制s = ė + λ1e + λ2|e|^γsign(e)
其中:
基于等效控制原理,控制输入分为:
code复制τ = τeq + τsw
其中:
具体表达式:
code复制τeq = -f(x) + ẋd - λ1ė - λ2γ|e|^(γ-1)ė
τsw = -Ksign(s)
构造Lyapunov函数:
code复制V = s²/2
求导并代入控制律可得:
code复制V̇ = sṡ ≤ -η|s| < 0
满足Lyapunov稳定性条件。
matlab复制% 船舶参数设置
m11 = 120; m22 = 180; m33 = 80;
d11 = 60; d22 = 80; d33 = 50;
% 控制器参数
lambda1 = 1.5; lambda2 = 0.8; gamma = 0.6;
K = diag([2.5, 3.0]);
% 仿真时间设置
tspan = [0 100];
matlab复制function dx = usv_model(t,x)
% 获取当前状态
pos = x(1:3); vel = x(4:6);
% 计算期望轨迹
[pos_d, vel_d, acc_d] = desired_trajectory(t);
% 运动学控制器
[u_c, r_c] = kinematic_controller(pos, pos_d);
% 动力学控制器
tau = dynamic_controller(vel, [u_c; 0; r_c]);
% 系统动力学
dx = zeros(6,1);
dx(1:3) = kinematic_equation(pos, vel);
dx(4:6) = dynamic_equation(vel, tau);
end
matlab复制% 跟踪误差统计
position_error = norm(pos_actual - pos_desired);
heading_error = abs(wrapToPi(psi_actual - psi_desired));
% 控制能量消耗
control_effort = sum(abs(tau))*Ts;
% 滑模面范数
sliding_norm = norm(s);
| 性能指标 | GFTSMC | ISMC | 改进幅度 |
|---|---|---|---|
| 稳态误差(m) | 0.12 | 0.35 | 65.7% |
| 收敛时间(s) | 8.2 | 14.5 | 43.4% |
| 控制能耗 | 156 | 203 | 23.2% |
| 抗扰能力 | 优秀 | 良好 | - |
code复制K̇ = ρ|s| - σK
matlab复制function sat = saturation(s,phi)
sat = min(max(s/phi,-1),1);
end
在实际工程应用中,我们发现控制器的性能很大程度上依赖于准确的船舶水动力参数辨识。建议在实施前进行充分的系统辨识实验,同时保留足够的鲁棒性裕度以应对模型不确定性。