基于神经网络船舶轨迹跟踪自适应滑模控制无人船
无人船 基于神经网络船舶轨迹跟踪自适应滑模控制(带参考文献)
无人船 基于神经网络船舶轨迹跟踪自适应滑模控制(带参考文献)


1. 问题描述
无人船在风浪、洋流与模型不确定性的共同作用下,难以用固定参数的控制器实现高精度轨迹跟踪。传统滑模控制(SMC)虽然鲁棒,但高频抖振与未知上界的不确定性仍会导致能耗上升与执行器磨损。本文给出一种神经网络补偿的自适应滑模方案,用 RBF 网络在线估计未知动力学,并通过 Lyapunov 方法保证闭环一致最终有界稳定。
2. 船舶数学模型
采用 3-DOF 水平面模型,状态向量
[
\eta=[x,y,\psi]^T,\quad \nu=[u,v,r]^T
]
运动学与动力学方程:
[
\begin{aligned}
\dot{\eta} &= J(\psi)\nu \
M\dot{\nu}+C(\nu)\nu+D(\nu)\nu &= \tau+\Delta(\eta,\nu,t)
\end{aligned}
]
其中 (M) 为惯性矩阵,(C) 为科氏向心力矩阵,(D) 为阻尼矩阵,(\tau) 为控制输入,(\Delta) 为集总不确定性(模型误差+环境扰动)。
3. 控制器设计
3.1 滑模面
定义轨迹误差 (e=\eta-\eta_d) 与积分滑模面
[
s = \dot{e} + \Lambda_1 e + \Lambda_2 \int_0^t e(\tau)d\tau
]
其中 (\Lambda_i>0) 为对角矩阵。
3.2 等效控制
忽略 (\Delta) 时,由 (\dot{s}=0) 得
[
\tau_{\text{eq}} = M J^{-1}\bigl(\ddot{\eta}_d-\Lambda_1\dot{e}-\Lambda_2 e\bigr) + C\nu + D\nu
]
3.3 神经网络补偿器
采用 RBF 网络逼近 (\Delta):
[
\Delta = W^{T}\phi(z)+\varepsilon,\quad |\varepsilon|\le\varepsilon_N
]
其中 (z=[\etaT,\nuT]^T),(\phi) 为高斯基函数,(W^) 为理想权值。
在线估计:
[
\hat{\Delta} = \hat{W}^T\phi(z)
]
权值自适应律:
[
\dot{\hat{W}} = \Gamma\bigl(\phi s^T J^{-T} - \sigma\hat{W}\bigr),\quad \Gamma>0,\ \sigma>0
]
3.4 鲁棒项
为抑制逼近误差 (\varepsilon) 与网络初始误差,引入连续双曲正切鲁棒项:
[
\tau_{\text{rob}} = -K s - \hat{\rho}\tanh(s/\delta),\quad \dot{\hat{\rho}}=\gamma|s|
]
最终控制律:
[
\tau = \tau_{\text{eq}} - \hat{\Delta} + \tau_{\text{rob}}
]
4. 稳定性证明概要
构造 Lyapunov 函数
[
V = \frac{1}{2}s^T M s + \frac{1}{2}\operatorname{tr}(\tilde{W}T\Gamma{-1}\tilde{W}) + \frac{1}{2\gamma}\tilde{\rho}^2
]
沿闭环系统求导,利用 Young 不等式与 (\tanh) 界,可得
[
\dot{V} \le -\alpha V + \beta
]
因此所有信号一致最终有界。
5. Python 实现(核心片段)
依赖:NumPy、SciPy、Matplotlib
import numpy as np
class RBFNetwork:
def __init__(self, input_dim, num_centers, sigma=1.0):
self.c = np.linspace(-1, 1, num_centers*input_dim).reshape(input_dim, num_centers)
self.sigma = sigma
self.W = np.zeros((num_centers, 3)) # 3 个控制通道
def phi(self, z):
return np.exp(-np.linalg.norm(z[:,None]-self.c,axis=0)**2/(2*self.sigma**2))
def predict(self, z):
return self.W.T @ self.phi(z)
def adapt(self, z, s, Gamma, sigma_w):
psi = self.phi(z)
dW = Gamma @ np.outer(psi, s) - sigma_w * self.W
self.W += dW * dt
# 船舶参数(示例)
M = np.diag([500, 500, 300])
D = np.diag([50, 50, 30])
C = lambda nu: np.array([[0,0,-500*nu[1]],[0,0,500*nu[0]],[300*nu[1],-300*nu[0],0]])
def control_law(eta, nu, eta_d, nu_d, s, net, K, rho_hat, delta):
J = np.array([[np.cos(eta[2]), -np.sin(eta[2]), 0],
[np.sin(eta[2]), np.cos(eta[2]), 0],
[0, 0, 1]])
Jinv = np.linalg.inv(J)
nu_dot_d = np.zeros(3) # 假设二阶导已知或可测
tau_eq = M @ Jinv @ (nu_dot_d - Lambda1 @ (nu - nu_d) - Lambda2 @ (eta - eta_d)) \
+ C(nu) @ nu + D @ nu
Delta_hat = net.predict(np.hstack([eta, nu]))
tau_rob = -K @ s - rho_hat * np.tanh(s/delta)
tau = tau_eq - Delta_hat + tau_rob
return tau

更多推荐
所有评论(0)