1. 项目背景与核心挑战
船舶轨迹跟踪控制一直是航海自动化领域的重点研究方向。相比全驱动船舶,欠驱动船舶(指推进器数量少于自由度数的船舶)由于控制输入维度低于运动自由度,存在更强的非线性和耦合特性,这使得传统控制方法往往难以实现高精度跟踪。我在参与某型无人艇项目时,就曾遇到过在强风浪干扰下轨迹偏移超过5米的棘手情况。
这个项目要解决的核心问题是:如何在存在模型不确定性(如水动力参数变化)和外部扰动(如风浪流)的情况下,让欠驱动船舶依然能够精准跟踪预设轨迹。这涉及到三个关键技术难点:
- 船舶动力学模型的强非线性特性
- 系统状态(如横摇角速度)难以直接测量
- 环境扰动具有时变、随机特性
2. 整体技术方案设计
2.1 神经网络观测器设计
针对状态不可测的问题,我们采用RBF神经网络构建状态观测器。具体实现时:
% RBF神经网络初始化示例
centers = linspace(-pi, pi, 10); % 横摇角范围划分
width = 0.5; % 高斯函数宽度
net = newrb(centers, width); % 创建RBF网络
注意:中心点数量需要根据船舶运动范围调整,过多会导致过拟合
观测器训练采用带遗忘因子的递推最小二乘法,我在实测中发现遗忘因子取0.95~0.99时,既能跟踪参数变化又不会过于敏感。
2.2 自适应滑模控制器
滑模面设计采用改进的指数趋近律:
s = e + λ∫e dt
其中λ的选择很关键,我的经验公式是:
lambda = 1/(2*T); % T为系统响应时间常数
自适应律设计为:
η̂̇ = γ||s||
实测表明γ取值在0.1~1之间时,既能保证快速调节又不会引起抖振。
3. Matlab实现关键代码解析
3.1 船舶动力学建模
采用MMG分离型模型:
function dx = ship_model(t,x,u)
% x=[u,v,r,x,y,psi] 状态向量
% u=[δ, n] 控制输入(舵角、推进转速)
% 水动力参数(需根据实船数据调整)
m = 1200; Izz = 1800; Xu = -100;
% 环境干扰模型
wind = 0.2*sin(0.5*t);
% 状态方程
dx(1) = (X_h + X_prop)/m - x(2)*x(3);
...
end
3.2 控制主循环实现
for k = 1:length(tspan)
% 1. 状态观测
x_hat = neural_observer(y_meas);
% 2. 计算跟踪误差
e = x_des(k,:) - x_hat;
% 3. 自适应滑模控制
s = e + lambda*e_int;
u(k) = -K*s - eta_hat*sign(s);
% 4. 参数更新
eta_hat = eta_hat + gamma*norm(s)*dt;
% 5. 系统仿真
[~,x] = ode45(@(t,x)ship_model(t,x,u(k)), [0 dt], x0);
x0 = x(end,:);
end
4. 实测效果与调参经验
4.1 典型测试场景
在3级海况(有义波高1.25m)下的正弦轨迹跟踪测试:
- 最大位置误差:<1.5m
- 航向保持精度:<3°
- 控制量抖振幅度:<5%额定值
4.2 参数调节心得
- 滑模增益K :先设为系统惯性矩阵对角元素的2~3倍,再微调
- RBF网络结构 :输入层节点数应与状态维度一致,隐含层建议5~15个
- 采样周期 :应小于系统最小时间常数的1/10
5. 常见问题解决方案
5.1 抖振现象抑制
通过以下方法组合使用:
% 1. 边界层法替换sign函数
sat = @(s,phi) min(max(s/phi,-1),1);
% 2. 增加低通滤波
[b,a] = butter(2, 0.1);
u_filt = filter(b,a,u);
5.2 初始状态估计不准
采用两阶段启动策略:
- 前30秒使用PID控制
- 同时训练神经网络观测器
- 之后切换至自适应滑模控制
6. 工程应用建议
在实际船舶上部署时,需要特别注意:
- 传感器数据预处理(野值剔除、信号同步)
- 控制量输出限幅(保护执行机构)
- 在线参数微调机制(应对载货变化)
我在某型巡逻艇上的实施经验是:先用3~5个典型工况(直航、回转等)进行参数整定,再逐步扩展到全工况。
433

被折叠的 条评论
为什么被折叠?



