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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述


Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐