简介:RBF神经网络与PID控制器结合,正越来越多地用于解决船舶自动舵中的非线性控制难题。这篇论文PDF收录了《RBF神经网络监督控制在船舶自动舵中的研究与应用》一文的完整内容,面向智能控制、船舶运动控制方向的研究者、工程师及相关专业学生,尤其适合希望掌握神经网络监督控制方法并用于航向控制的读者。资源为1个PDF文件,压缩包仅215KB,便于快速下载与查阅。文中以野本模型为基础,讲解RBF神经网络输入层、隐含层和输出层的结构设计,给出高斯径向基函数的初始化与权值学习公式,并阐述如何通过PID与神经网络过渡切换实现监督控制,仿真以大连海事大学“育龙”轮参数进行验证。读者可借此理清从模型建立、参数辨识到控制策略设计的完整思路,并借鉴作者在降低航向跟踪误差、减少打舵幅度和增强扰动鲁棒性方面的对比结果。目前已有110人学习下载,对于从事智能船舶控制研究与项目开发的读者具有实际参考价值。
1. 船舶自动舵的控制难题:为什么传统PID不够用
船舶自动舵从问世至今,绝大多数商船和公务船上跑的仍是PID控制器。它结构简单、参数直观、现场工程师调起来也顺手。但在真实海况里,PID有两个绕不过去的痛点:一是船舶运动模型随航速、装载量、吃水变化而漂移,一组PID参数很难在全工况下都保持优秀;二是舵机存在死区、饱和、速率限制等非线性环节,PID在这些约束附近容易振荡甚至发散。RBF神经网络监督控制的价值在于,不依赖精确的船舶数学模型,而是用RBF网络在线学习被控对象的逆动态或补偿项,在PID这类基础控制器上叠加一个自适应补偿通道,既保留PID的可靠性,又获得对模型摄动和海浪扰动的自适应能力。这篇博文就顺着“建模—设计—仿真—调参—工程落地”这条线,把RBF监督控制在船舶自动舵里的完整套路讲清楚。
2. 船舶自动舵的数学基础与RBF监督控制的结构选型
2.1 船舶航向控制的一阶与二阶模型
要把RBF网络接进自动舵系统,第一步是确定被控对象模型。工程上最常用的是野本谦作的一阶线性响应模型(Nomoto模型):
ψ̇ = r ṙ = (-1/T)r + (K/T)δ其中ψ为航向角,r为艏摇角速度,δ为舵角指令,K为静态回转率增益,T为时间常数。这个模型形式极简,但能描述船舶在低频操舵下的主要动态特性,是控制系统设计的通用基准。
如果做更精细的仿真,需要加入二阶模型或非线性项。常见做法是在一阶Nomoto模型上叠加一个非线性阻尼项:
ṙ = (-1/T)r + (K/T)δ + αr³α为非线性系数,用来逼近大舵角工况下实际船舶的艏摇非线性特性。RBF监督控制方案对这类未建模动态尤其有效,因为RBF网络天然具备对任意连续函数的逼近能力。
提示:不同船型、不同装载状态下的K和T差异很大。散货船压载与满载的T可能相差2~3倍,K相差更明显。如果仿真只取一组固定参数,做出来的结果对实船几乎没有参考价值。
2.2 监督控制架构:反馈闭环与RBF补偿支路的关系
RBF监督控制在船舶自动舵中的标准架构,是一种“基础控制律 + RBF补偿项”的复合结构。基础控制律通常选用PD型航向控制,RBF网络在线生成一个补偿量叠加到舵令上。
δ = δ_PD + δ_RBF其中δ_PD为主控制器输出,δ_RBF为RBF网络输出。RBF网络的输入取航向误差e和角速度误差差分,输出用于补偿模型不确定性和外部扰动。整个闭环中,RBF网络并不直接替代反馈控制器,而是以“监督者”身份实时修正控制量,这正是“监督控制”这个名词的由来。
这种设计的好处非常实际。控制系统的稳定性底线由PD保证——即使RBF网络失效或参数不收敛,系统退化成纯PD控制,仍然具备基础航向保持能力。这对实船部署特别重要,因为船级社和验船师通常会质疑黑盒控制器在故障状态下的行为。监督结构给出了一个清晰的降级路径。
2.3 为什么选择RBF而不是BP网络做在线监督
工程上经常有人问:BP网络也能做逼近,为什么用RBF?关键差异在实时性和收敛性能上。BP网络采用全局逼近,每个样本更新都可能牵动全部权值,收敛慢且容易陷入局部极小。RBF是局部逼近网络,隐层神经元只对输入空间某个局部区域有响应,权值调整是局部化的,在线学习时收敛速度快得多,也更适合自动舵这类对实时性要求高的嵌入式环境。
具体到自动舵场景,船舶艏摇动态的时间常数通常在数十秒量级,但控制周期只有0.1~0.5秒。RBF网络可以在几个控制周期内完成对非线性的初步逼近,BP则可能需要成百上千次迭代。加上RBF网络结构简单,典型实现只有输入层、径向基隐层和线性输出层三层,在工业PLC和嵌入式控制器上都能跑得动。
3. RBF监督控制器的Matlab实现与核心参数设定
3.1 最小可运行代码:基于Nomoto模型的RBF监督控制
以下给出一个完整的Matlab仿真框架。设Nomoto模型参数K=0.5,T=20,控制周期0.5秒,目标航向30度。
%% 船舶Nomoto模型与RBF监督控制仿真 clear; clc; close all; % 船舶模型参数 K = 0.5; % 静态回转率增益 T = 20; % 时间常数 delta_max = 35 * pi/180; % 最大舵角限制 rate_max = 5 * pi/180; % 最大舵速限制 % 控制参数 dt = 0.5; % 控制周期(秒) SimTime = 600; % 仿真时长(秒) t = 0:dt:SimTime; n = length(t); % 状态初始化 psi = zeros(1,n); % 航向角 r = zeros(1,n); % 艏摇角速度 delta_actual = zeros(1,n); % 实际舵角 % RBF网络参数 N_hidden = 6; % 隐层神经元数量 c = linspace(-0.5, 0.5, N_hidden); % 高斯中心 b = 0.2; % 高斯宽度 w = zeros(N_hidden, 1); % 输出权值初始为0 lr = 0.5; % 学习率 % 控制器参数 psi_ref = 30 * pi/180; % 目标航向 Kp = 1.8; % 比例增益 Kd = 8; % 微分增益 % 主循环 for k = 1:n-1 % 航向误差 e = psi_ref - psi(k); de = -r(k); % 误差变化率 % 基础PD控制律 delta_pd = Kp * e + Kd * de; % RBF网络输入 x_rbf = [e; de]; % 高斯径向基激活 h = exp(-sum((repmat(x_rbf, 1, N_hidden) - c).^2 / (2*b^2))); % RBF网络输出(补偿量) delta_rbf = w' * h'; % 总舵令 delta_cmd = delta_pd + delta_rbf; % 舵机限幅与速率限制 delta_cmd = max(-delta_max, min(delta_max, delta_cmd)); rate_limit = rate_max * dt; delta_actual(k+1) = delta_actual(k) + ... max(-rate_limit, min(rate_limit, delta_cmd - delta_actual(k))); % 船舶动态更新 r_dot = (-r(k) + K * delta_actual(k)) / T; r(k+1) = r(k) + r_dot * dt; psi(k+1) = psi(k) + r(k+1) * dt; % RBF权值在线更新 logical_mapping = exp(-((x_rbf - c).^2) / (2*b^2)); % 输入向量到各高斯中心的距离 error_weight = e; % 当前航向误差作为权值学习信号 w = w + lr * error_weight * logical_mapping'; end这段代码的RBF网络部分有几点需要说明。隐层神经元数量N_hidden取6,是一个经验值;自动舵的输入是二维(航向误差和误差变化率),6~10个隐层神经元通常足够覆盖正常舵角范围内的非线性补偿需求。高斯中心c线性分布在输入可能出现的区间,宽度b决定了每个神经元的响应半径。输出权值w初始化为零——这个初始化非常重要,RBF监督控制的哲学是先由PD控场,网络在运行中逐渐学习补偿量,而不是一开始就强势介入。
3.2 输入缩放:决定RBF网络能否收敛的前提
RBF网络的输入必须是同量纲的。航向误差的量纲是弧度,典型值在±0.5 rad量级;角速度的量纲是rad/s,典型值在±0.05 rad/s量级。两者直接拼成一个二维输入向量,高斯函数计算距离时,角速度贡献会被完全淹没。
% 输入缩放系数 scale_e = 1.0; % 航向误差缩放,单位弧度 scale_de = 10; % 角速度缩放,单位弧度/秒 x_rbf = [e * scale_e; de * scale_de];角速度乘以10倍后再送进网络,两个输入维度对距离计算的贡献就基本均衡了。很多人在仿真里碰到RBF不收敛、补偿量剧烈抖动,第一反应该调学习率,实际上80%的根因都在输入没有做缩放。
3.3 学习率、隐层神经元数与基函数宽度的联动关系
这三个参数必须一起调,单独调某一个很难有好效果。学习率lr取大,权值更新快,但噪声敏感性也高,容易出现舵令高频抖振;取小则网络学习速度太慢,无法在海浪扰动变化时及时跟踪。隐层神经元数N_hidden越多,网络能逼近更复杂的非线性,但计算量线性增长,且过拟合风险上升。基函数宽度b控制高斯函数的响应范围,b过大导致所有神经元对任意输入都同时激活,RBF退化成全局逼近;b过小则输入空间的很多区域没有任何神经元覆盖。
一个可交叉验证的调参组合是:N_hidden=6、b=0.2、lr=0.5,配合上文的输入缩放。这个组合的特点是基函数覆盖范围适中、学习率较快,适合海浪扰动较弱的仿真场景。如果扰动加大,建议在保持N_hidden和b不变的前提下将lr降到0.2~0.3,避免舵角抖动。
3.4 舵机非线性约束的处理顺序
真实舵机有两大非线性:最大舵角限幅和最大舵速限制。仿真中必须把这两个约束放在PD控制之后、RBF控制之后,但权值更新要用约束前的舵令。具体顺序是这样:
- 计算基础PD舵令和RBF补偿量,得到总舵令
- 对总舵令做幅值限饱和
- 对舵令变化速率做限制,得到实际舵角增量
- 用限制前的舵令(而非实际舵角)计算权值更新量
如果第4步用限制后的实际舵角做反馈来更新权值,RBF网络会在舵机饱和时接收到错误的学习信号,权值越学越歪,甚至发散。这是工程实现中极易踩的坑。
4. 仿真实验设计与结果分析的四个关键步骤
4.1 设置对照实验:纯PD、RBF监督、无扰动三组对比
评判RBF监督控制的效果,只跑一条曲线没有说服力。至少要跑三组仿真:
| 组别 | 控制方案 | 海况扰动 | 用途 |
|---|---|---|---|
| A组 | 纯PD | 无扰动 | 基线性能 |
| B组 | 纯PD | 有扰动 | 观测干扰下的退化程度 |
| C组 | PD+RBF | 有扰动 | RBF补偿收益 |
扰动模型可以在Nomoto方程右侧直接叠加一个正弦航向干扰:
% 海浪干扰力矩等价舵角 disturbance = 3 * pi/180 * sin(0.1 * t(k)) + 1.5 * pi/180 * sin(0.23 * t(k)); delta_actual(k+1) = delta_actual(k) + ... % 原有舵机逻辑 r_dot = (-r(k) + K * (delta_actual(k) + disturbance)) / T; % 叠加扰动力矩这样扰动以“等效舵角”的形式进入船舶动态,物理含义清晰:相当于海流、波浪对船体产生了一个持续变化的偏航力矩,需要操舵来抵偿。频率选0.1和0.23 rad/s,对应真实海浪的典型频率范围。
4.2 三个必看的评估指标:ITAE、舵角方差、能耗
控制效果的量化不能只看航向误差均值,推荐三组指标:
- ITAE(时间乘绝对误差积分),评估航向保持的稳态精度
- 舵角方差,评估舵机动作的频繁程度
- 舵角绝对值积分,评估能耗
% 计算ITAE time_vector = t'; itae = sum(time_vector(2:end) .* abs(psi(2:end) - psi_ref)) * dt; % 舵角方差 delta_var = var(delta_actual(100:end)); % 跳过初始调节段 % 舵角绝对值积分 delta_integral = sum(abs(delta_actual)) * dt;三组实验的ITAE可以放到一个表里对比。正常情况下,A组ITAE最小但代表理想无扰环境;B组ITAE变大且舵角方差高;C组的ITAE接近A组、舵角方差明显小于B组,说明RBF用更少的操舵动作获得了更好的航向精度。如果C组的舵角方差反而比B组还大,说明RBF网络在放大噪声,优先检查学习率是否偏大或输入缩放是否合理。
4.3 收敛性观察:在固定扰动下看补偿量的时域演化
在仿真中段(比如第200秒)突然注入一个固定的等效舵角偏置(相当于船舶一侧螺旋桨推力损失),观察RBF补偿量的演化曲线:
if k > 400/dt disturbance = 5 * pi/180; % 常值偏置扰动 end重点看δ_RBF从零到稳定值用了多久、过程中有没有超调。如果RBF网络结构正确、学习率合适,δ_RBF会在数十秒内逐渐逼近扰动值的相反数,且调节过程平稳不振荡。如果补偿量长时间不收敛,需要检查高斯中心是否覆盖了当前输入区域。常见的错误是c的分布范围太窄,航向误差稍大就超出了所有高斯基函数的作用范围。
4.4 典型调参失败模式及定位手段
RBF监督控制仿真中最常见的失败模式有三种,这里给一个排查清单:
- 舵角高频抖振,舵机频繁换向:学习率过大或隐层宽度过小,神经元的局部响应过于灵敏。把lr除以2再跑一轮,如果抖振消失且性能没有显著下降,采用降下来的学习率。
- 航向误差长期不收敛,RBF补偿量持续单调变化:输入缩放不当,网络某个维度始终主导。重新审视scale_e与scale_de的比例关系。另一个可能是c的范围没有覆盖输入的整个可行区间。
- 初始阶段航向回调过大:RBF权值初始为零导致补偿通道在前期是盲区。这不是bug,而是监督控制的设计选择。如果希望快速起效,设置权值w的非零初值需要结合模型先验,不建议这么做,因为偏差初值比零初值更容易诱发不稳定。
5. 网络结构简化与实船部署的落地技巧
5.1 用误差及其差分构造紧凑输入:降低嵌入式计算负担
实船控制系统不再使用Matlab,而是运行在PLC或嵌入式控制板上。RBF网络的在线推理必须足够轻量。输入维度直接决定隐层神经元数量和计算量,常见的简化方案是只用航向误差一个维度作为RBF输入:
δ_RBF = Σ wᵢ·exp(-|e - cᵢ|²/(2bᵢ²))把二维输入降成一维后,隐层神经元取5~8个即可覆盖方向舵的正常工作区间。这相当于把RBF网络从“二维平面近似”退化成“一维曲线近似”,逼近能力必然下降,但计算量减半,且在航向误差较大的动态过程中,补偿效果仍然能体现。角速度信息不直接送进网络,而是借助前面PD控制器的微分环节来稳定系统,RBF网络只专注补偿模型静态误差和常值类扰动。
提示:降维压缩后的RBF监督控制器,在实船上的氮氧化物排放控制、功率管理系统等同样有可移植的空间,本质都是“基础反馈+局部非线性补偿”的同构架构。
5.2 权值持久化与冷启动恢复策略
船舶下锚、重新并网启动时,控制系统断电重启。RBF网络如果每次从零权值开始学习,在进入自动舵模式后的前几分钟内补偿量是无效的。工程上可以在系统正常关机时将权值向量写入非易失存储器(如EEPROM或文件系统),下次开机直接载入。
但这会引入另一个问题:模型摄动。船舶吃水、装载变化后,旧权值不再匹配当前船况。实用的做法是增加一个“学习使能”逻辑——仅当航向误差绝对值小于某个阈值(比如2度)时更新RBF权值。这段时间内网络学习的是稳态补偿量,方差小,学习结果可靠;在大幅度转向机动过程中冻结权值,避免把动态误差也学进补偿项。
/* 学习使能判断的C语言片段 */ if (fabs(error) < 2.0 * DEG2RAD && fabs(heading_rate) < 1.0 * DEG2RAD) { rbf_learning_enabled = 1; } else { rbf_learning_enabled = 0; }5.3 双模型备份与手动降级的切换逻辑
RBF监督控制器的最终形态是一个并联可切换的补偿通道。建议在主控代码里保留一个旁路开关,允许操作员随时将系统切回纯PD控制。切换要无扰:在RBF通道退出前将当前权值保存,同时输出补偿量按斜坡减到零,避免舵令跳变。
一套实用的切换状态机包含三个状态:RBF工作、RBF冻结、纯PD。RBF工作在舵令正常且学习率常规时;RBF冻结在检测到权值更新异常、舵令出现高频振荡时;纯PD在操作员手动接管或RBF输出饱和时进入。三个状态之间的切换条件需在船级社的控制逻辑文档中逐一写清楚,这也是实船项目验收时的重点审查项。
船舶自动舵的RBF监督控制,本质上是在成熟的反馈控制骨架上加一层不依赖精确模型的自适应皮肉。关键在于你知道什么时候该相信这层皮肉,什么时候该果断剥掉它。把网络收敛、舵机非线性、权值持久化这三个工程细节处理好,整套方案就有机会从论文走上海图桌。
本文还有配套的精品资源,点击获取