RBF神经网络监督控制在船舶自动舵中的设计与仿真
2026/9/19 16:13:28 网站建设 项目流程

简介:这是一份关于径向基函数神经网络监督控制在船舶自动舵中应用的学术文章,主要面向船舶运动控制、机器学习、数据建模方向的研究生、工程师及技术爱好者。文章针对海上风浪等外界干扰带来的非线性控制难题,提出将径向基函数神经网络与PID控制器结合:控制初期由PID反馈维持稳定,随后神经网络逐步接管,并在误差较大时辅助修正,从而提升航向跟踪精度与鲁棒性。内容从径向基函数的三层网络结构、高斯核函数及参数初始化讲起,又基于野本模型给出了船舶转向运动方程,并通过Z形试验确定稳定性参数T和回转性参数K,最后以仿真实验验证了该方法能减少舵角变化、有效抑制扰动。资源包为一份PDF文件,大小约215KB,已有110人学习,适合需要快速掌握该建模与控制思路的读者参考。

1. RBF神经网络监督控制解决的,是PID参数救不回来的那部分非线性

调试船舶自动舵的人多半有过这个经验:PID参数在某一海况下调得非常好,但一次装载变化或航速变化之后,压舵次数明显增加,舵机频繁动作,航向却还是画着S形。问题不在PID本身,而在自动舵被控对象里有大量说不清的非线性:大舵角下的非线性阻尼、风流浪带来的时变力矩、船体参数随装载的变化。RBF神经网络监督控制的做法,是在保留PID这类反馈控制兜底的前提下,用RBF神经网络在线逼近这些说不清的非线性项,把补偿量叠加到舵角指令上,从而让自动舵在不同工况下不用重新整定参数也压得住舵。这条技术路线适合做船舶运动控制验证的工程师,也适合给现有自动舵产品做控制升级的研发人员。

2. 船舶自动舵的Nomoto模型与RBF网络该挂在哪一环

2.1 为什么控制器设计要选二阶非线性Nomoto模型

船舶自动舵的控制对象选择,一般在三套模型里做取舍:完整的MMG或Abkowitz分离式模型、一阶Nomoto模型、二阶非线性Nomoto模型。MMG模型自由度多、水动力导数复杂,适合在仿真阶段验证整船运动,但直接用于控制器设计会引入几十个不确定参数,鲁棒性和可解释性都难保证。一阶Nomoto模型只描述艏向对舵角的低频响应,表达式简洁,但在大舵角机动和恶劣海况下误差明显。工程上做自动舵控制律研究,常见做法是取二阶非线性Nomoto模型,在保留艏向响应主导特性的同时,把非线性阻尼项、外界扰动力矩显式写进方程:

T ψ̈ + r + a₂ r³ = K δ + d(t)

其中r=ψ̇是转艏角速度;T是追随性时间常数,量级通常10到100秒;K是舵效增益;a₂是艏摇非线性阻尼系数;d(t)是风流浪等外力矩的等效项。K和T会随航速、吃水和装载状态明显变化,自动舵的难题恰恰在这里。

2.2 把运动方程改写成“线性骨架+非线性残余”的形式

控制器设计需要的是把方程改写为关于控制量δ的仿射形式,并让所有说不清的东西集中到一项里。将上式除以T并整理:

ψ̈ = b δ + f(x)

其中b=K/T是控制增益,f(x)=-(r + a₂ r³)/T + d(t)/T就是需要补偿的非线性残余项。这里的x可以取[e, ė],也可以取[r, δ]等状态组合,取决于控制器要逼近的是哪一部分。写出这个形式的意义是:如果f(x)已知,用一个简单的线性反馈就能做到指数收敛;f(x)未知时才需要让RBF在线估计它。

需要注意,b也不能完全看作常数。实际船舶在进出港、变速过程中K/T可能变化30%到50%,工程处理上会把b的标称值留在控制律里作为前馈增益,把偏差(b - b₀)δ合并到f(x)中让网络一并逼近。这样处理比实时辨识b要稳,因为网络只负责补偿“够得着的”非线性,结构上不容易发散。

2.3 RBF监督控制里的网络输入、输出与监督信号

RBF网络在闭环里的位置非常明确:输入是误差及误差变化率,输出是一个估计的补偿项,网络权重按当前闭环误差在线调整,调整律由Lyapunov稳定性推导出来。这就是“监督控制”命名的来源——网络对模型不确定项进行在线监督估计,而不是像监督学习那样需要预先给定标签训练集。

这里的“监督信号”是滑模面s=ė+λe。它的物理含义是:把航向误差和转艏角速度误差加权组合成一个量,只要让s收敛到零,角度误差和角速度误差就同时收敛。RBF输出f̂(x)进控制律后抵消真实f(x),抵消不干净的部分由鲁棒项吸收。

选RBF而不选BP网络,是出于在线环境的现实考虑。RBF是局部逼近网络,输入落在某个中心附近时只有邻近神经元被激活,权重更新只影响局部区域,这在非平稳的船舶环境中意味着网络“学了新工况不会忘旧工况”。BP这类全局逼近网络更新所有权重,在动态变化的环境里容易出现灾难性遗忘,前一个海况学到的补偿量会被后一个海况冲掉。这一点对在线控制是致命的,所以文献和工程实现里做监督控制几乎清一色选RBF。

2.4 监督控制与监督学习的边界,容易混淆的点

做自动舵的人第一次接触“监督控制”这个词,容易和“监督学习”混起来。两者的区别直接决定网络初始化方式。监督学习需要离线准备输入输出对,训练完固定权重;监督控制里的RBF网络权重初始为0或小随机数,在运行中靠误差驱动更新,不需要任何带标签样本。代价是网络刚投入时有学习过程,初期补偿效果有限,控制性能主要靠PD骨架撑着。

执行机构特性也必须在模型层提前考虑。自动舵舵机不是理想比例环节,有舵角饱和、舵速限制、摩擦死区。这些非理想因素如果全丢给RBF去逼近,会迫使网络用很高的增益去补偿执行机构特性,容易引起极限环。我一般建议把舵机特性当作已知被控对象一部分,在仿真中单独建模,不把执行机构动态算进RBF的补偿范围内。

3. RBF监督控制律设计与参数设定

3.1 从滑模面到控制律:RBF只是其中的补偿项

控制律的推导,是这条路线里最要紧的一步。设计滑模面s=ė+λe,其中λ大于0,决定误差和误差变化率的权重。定义模型为ψ̈=bδ+f(x),代入滑模面的导数:

ṡ=ë+λė=bδ+f(x)+λė-ψ̈d

要让ṡ趋近于-k s,取控制律:

δ = 1/b · (-k s - λė + ψ̈d - f̂(x) - κ·tanh(s/φ))

这里的f̂(x)是RBF网络输出。四项各有分工:-k s提供滑模收敛,λė补偿滑模面展开时的交叉项,f̂(x)在线逼近模型残余,κ·tanh(s/φ)用于吸收RBF逼近残差。tanh比sign平滑,避免直接切换带来舵机抖振,φ控制过渡带宽,实船调试时一般先从0.05到0.1这个量级试。

RBF的权重自适应律取:

Ẇ = Γ · h(x) · s

其中h(x)是RBF基函数向量,Γ是学习率,s是滑模面。这个式子由Lyapunov函数V=0.5s²+0.5Γ⁻¹W̃²推导而来,展开后V̇=-ks²+s(ε-κ·tanh(s/φ)),只要κ不小于逼近误差ε的界,闭环有界稳定。整个结构里,RBF承担的是前馈补偿角色,PD骨架负责全局稳定。这就是这条路线和直接端到端神经网络控制的本质区别。

3.2 RBF网络参数表与初始化经验

网络的初始化参数决定了工程落地时少踩多少坑。

参数推荐取值依据和调整方向
输入变量e、ė需要覆盖误差的动态范围,加更多状态会带来维数灾难
中心分布5×5均匀网格,覆盖归一化后的e和ė范围中心间隔取可接受误差的1/5到1/10
宽度σ0.5倍中心间距太大失去局部性,太小产生覆盖空洞
学习率Γ5~20与增益b配合看权重收敛节奏,过大引发颤振
权重初值0让PD先扛住初始段,网络边学边介入
输入归一化e除以0.5rad,ė除以0.1rad/s保证两个维度在高斯距离计算中量级一致,否则ė那维基本不参与激活

中心网格范围必须根据操纵极限来确定。航向保持场景误差不会超过30度到40度,归一化后中心取[-1,1]够用。如果仿真里做60度以上的大角度转向,e/0.5会持续饱和,分布边界处的基函数全部饱和,网络进入外推状态,补偿量失效。这种情况属于工况设计问题,不是网络没调好。

3.3 权重更新死区与数字实现细节

离散实现时,权重更新写成增量形式:

W ← W + Γ · h(x) · s · Δt

Δt取控制周期0.1到0.25秒。我建议在更新前加死区判断:

if abs(s) > 0.005: # 滑模面小于死区时冻结权重 rbf.W += rbf.gamma * h * s * dt

死区设置是因为实船上罗经噪声会让s在零点附近持续抖动,若不冻结,权重会随噪声随机游走,虽然幅度不大,但长时间累积会造成补偿量缓慢漂移,表现为舵角指令的直流漂移。死区阈值按传感器噪声标准差的两到三倍取即可。

还有一个容易忽略的点是h(x)的计算。高斯径向基函数对输入距离极其敏感,如果σ取值是0.5而中心间隔是0.5,那么落在两个中心之间的输入会同时激活四五个神经元,这没问题。但如果输入归一化忘记做,e的量级是0.3,ė的量级只有0.03,两者平方求和后ė的贡献会淹没在e里,网络实际上退化成只感知误差的阈值开关,补偿效果会非常奇怪。我一般先把两个输入各打一条print,确认量级一致再跑。

3.4 舵角限幅、速率限制与符号方向检查

控制律输出是期望舵角,送入船舶模型前必须经过执行机构限制环节。先做舵速限制再做幅值限制,顺序不能反。舵速限制表示舵机转过单位角度需要时间:

delta_cmd = np.clip(delta_cmd, delta - rate * dt, delta + rate * dt) delta_cmd = np.clip(delta_cmd, -max_rudder, max_rudder)

rate按实船舵机参数取每秒3度到7度,max_rudder取35度。如果先限幅再限速,当指令从+35度瞬间跳到-35度时,限速逻辑会从当前实际舵角开始限制,行为一致;但反过来先限速再限幅,会在指令超限时给出一段持续饱和输出,实际舵角会卡在极限位置更久,响应反而更迟钝。

符号方向检查常被省略。Nomoto模型里K的符号决定了正舵角对应哪个转向,不同船型的参考系定义未必一致。仿真代码里先在零初始状态给一个正δ,观察ψ是否朝预期方向变化,确认无误再跑闭环对比实验。这个步骤30秒就能完成,能避免后期所有对比数据方向反了却不自知的尴尬。

4. 用Python复现自动舵RBF监督控制仿真

4.1 仿真工况与评价指标

仿真验证要设计三个有区分度的工况:一是初始航向20度阶跃,观察跟踪速度和超调;二是加入周期性海浪力矩,比较稳态压舵情况;三是在仿真中途改变K、T参数模拟装载变化,检验补偿的适应性。

评价指标要同时看控制精度和舵机工作量。航向类指标用误差平方积分ISE和最大偏差;舵机类指标用累计舵角变化量Σ|Δδ|,这个指标反映舵机磨损和能耗,船东做自动舵验收时很看重。仅看航向误差容易得出“RBF完美”的片面结论,因为网络可能会通过高频打舵来压住误差。

4.2 船舶模型、RBF网络与主循环代码

我用Python写一个最小可复现的例子。船舶模型、RBF网络、控制器分三个类,方便替换和对比。

import numpy as np class ShipDynamics: """二阶非线性Nomoto模型:T * r_dot + r + a2 * r**3 = K * delta + d""" def __init__(self, K=0.15, T=60.0, a2=0.02, dt=0.1): self.K, self.T, self.a2, self.dt = K, T, a2, dt self.psi = 0.0 # 航向,rad self.r = 0.0 # 转艏角速度,rad/s def step(self, delta_rad, d): r_dot = (self.K * delta_rad - self.r - self.a2 * self.r**3 + d) / self.T self.r += r_dot * self.dt self.psi += self.r * self.dt return self.psi, self.r
class RBFNetwork: """二维RBF网络,中心为网格,权重在线更新""" def __init__(self, centers, sigma=0.5, gamma=8.0): self.c = centers self.sigma = sigma self.gamma = gamma self.W = np.zeros(centers.shape[0]) def basis(self, x): diff = self.c - x h = np.exp(-np.sum(diff**2, axis=1) / (2.0 * self.sigma**2)) return h def estimate(self, x): return float(np.dot(self.W, self.basis(x))) def update(self, x, s, dt): if abs(s) > 0.005: # 死区,防权重随机游走 h = self.basis(x) self.W += self.gamma * h * s * dt
def simulate(use_rbf=True, K=0.15, T=60.0): ship = ShipDynamics(K=K, T=T) c1, c2 = np.meshgrid(np.linspace(-1, 1, 5), np.linspace(-1, 1, 5)) centers = np.stack([c1.ravel(), c2.ravel()], axis=1) rbf = RBFNetwork(centers, sigma=0.5, gamma=8.0) k, lam, kappa, phi = 4.0, 0.8, 0.05, 0.1 b = ship.K / ship.T dt = ship.dt steps = int(400.0 / dt) delta = 0.0 ref_psi = np.deg2rad(20.0) # 目标航向20度 ise, rudder_work = 0.0, 0.0 for i in range(steps): t = i * dt d = 0.02 * np.sin(0.2 * t) + 0.01 * np.sin(0.47 * t + 1.2) e = ship.psi - ref_psi edot = ship.r # 目标航向常数,参考角速度为0 x = np.array([np.clip(e / 0.5, -1, 1), np.clip(edot / 0.1, -1, 1)]) s = edot + lam * e f_hat = rbf.estimate(x) if use_rbf else 0.0 delta_cmd = (-k * s - lam * edot - f_hat - kappa * np.tanh(s / phi)) / b delta_cmd = np.clip(delta_cmd, delta - np.deg2rad(5.0) * dt, delta + np.deg2rad(5.0) * dt) delta_cmd = np.clip(delta_cmd, -np.deg2rad(35), np.deg2rad(35)) if use_rbf: rbf.update(x, s, dt) ship.step(delta_cmd, d) rudder_work += abs(delta_cmd - delta) ise += e**2 * dt delta = delta_cmd return ise, rudder_work

模型文件的逻辑说明在代码注释里已经体现。需要注意,目标航向ref_psi是常数,所以参考角速度为0,s的表达式里只有edot和lambda e两项;如果仿真里做连续转向,需要把参考角速度按转向指令的斜率算出来放进s,否则误差里会带着一个恒定的偏置。

提示:仿真里ref_psi取常数时,s的表达式没有问题;如果做连续转向,请把参考角速度按转向斜率算出来加进edot,否则滑模面会带一个恒定偏置,稳态误差降不下来。

4.3 结果怎么看:先比较舵角能耗,再看航向偏差

跑完两组仿真后,把返回值打印出来,对同一组扰动序列,RBF监督控制与不含网络补偿的基线会给出两组ISE和累计舵角动作量。对同样一组扰动序列,RBF监督控制与纯PD基线相比,ISE通常可以降到一半以下,累计舵角动作量的改善幅度取决于扰动频率和滤波器质量,一般能省10%到30%。如果rudder_work反而上升,首先检查死区阈值和φ值,典型的错误是逼近残差上界估计不足,导致鲁棒项持续高频摆动。

扰动抑制效果要从时间曲线上看,不能只看积分值。把航向偏差画出来,如果曲线低频摆动的幅度是超调量的两三倍,说明RBF学习的是扰动中的确定性部分,残余部分由鲁棒项吸收,整个趋势是正常的;如果曲线出现尖峰状的高频毛刺,说明鲁棒项的κ太大或者tanh的φ太小,抖振正在通过舵机执行回路放大。

4.4 参数敏感性:σ、学习率、边界层厚度怎么试出来

调参顺序对我来说通常是固定的:先固定网络参数,用纯PD跑通闭环并拿到基准值;然后单独调φ,直到舵角曲线没有明显高频颤振;再调Γ,观察权重收敛速度;最后调σ,以峰值航向偏差最小为准则微调。

σ偏小表现为网络在中心点附近输出抖动大,相邻两个采样时刻的补偿量变化剧烈。σ偏大表现为权重收敛后效果提升不明显,因为基函数覆盖范围重叠过多,局部逼近变成了全局拟合。判断方法很直接:仿真中打印最大基函数值,若多数时刻小于0.1,说明中心太远或σ太小;若大部分时刻在0.2以上且所有神经元同时激活,则σ过大。

5. 实船或半实物验证时的几个关键技巧

5.1 权重更新必须加死区,否则稳态变成抖振源

仿真里的噪声是理想化的,实船罗经信号在四级海况下就有明显噪声,转艏角速度做差分后噪声更夸张。权重更新死区在仿真里是为了省事,在实船上是为了安全。死区阈值不能拍脑袋定,我一般在海试前先录一段直航段的ψ和r数据,计算噪声标准差,然后取三倍标准差作为死区。生效后的现象很直观:稳态直航时权重不再漂移,只有在真实误差越过阈值时网络才介入。

5.2 转艏角速度用滤波后差分,别直接取传感器微分

自动舵实船通常不直接提供转艏角速度,需要从电罗经或光纤罗经的航向信号差分。直接差分会把量测噪声放大数十倍,滑模面s噪声一大,整个RBF自适应律和鲁棒项都在追噪声。我一般做法是先用二阶低通滤波处理ψ,再做差分。低通截止频率取0.5Hz左右,既能保住艏摇运动主频,又能压住高频噪声,同时要留意滞后对λ的影响,滤波滞后大约0.3到0.5秒时,λ要相应调小。

5.3 用“RBF离线辨识+在线补偿”两段式启动

在线学习的问题在于初始阶段权重为零,RBF补偿不生效,这段时间如果直接切换到大角度转向工况,控制性能和纯PD没有区别。我习惯的做法是:利用已有航行数据,先离线辨识K和T,再用同一批数据训练RBF逼近残差f(x),得到初始权重;上船时把初始权重装进去,让网络从“了解大概”的状态开始在线微调。这样第1次转向就能体现出补偿效果,验证周期缩短很多。

5.4 对比实验要把PID也做同工况参数扫描

任何新控制律的验证报告,都逃不过和PID对比这一关。常见的坑是PID参数没有针对工况做优化,导致基线本身就漂移,结论自然失真。我会对PID做一轮参数扫描,用同一组工况数据跑网格搜索,把优化后的PID作为基准。评判维度除了航向误差、累计舵角,还要加上在同一扰动下有无舵机抖动。公平的基准才能让RBF监督控制数据上的优势站得住脚,否则验收人员一句“PID没调好”就能推翻全部工作。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询