2. 船舶运动数学模型基础

要用水动力方程在 MATLAB 中复现一条船的真实响应,第一步不是写代码,而是把“船怎么动”这件事用一套自洽的数学语言描述清楚。船舶在空间中的运动本质上是刚体运动,最完整的描述是六自由度:沿三个坐标轴的平移(纵荡 surge、横荡 sway、垂荡 heave)和绕三个坐标轴的旋转(横摇 roll、纵摇 pitch、艏摇 yaw)。对于绝大多数航行控制问题——航向保持、航迹跟踪、动力定位——垂荡、横摇、纵摇的影响要么被忽略,要么作为高频扰动处理,真正决定平面轨迹的是纵荡、横荡和艏摇这三个分量,这就是三自由度平面运动模型。

坐标系定义:先约定,再建模

建模中最容易出错的地方不是方程本身,而是符号约定。本课程统一采用两套坐标系:

  • 大地坐标系(惯性系):记为 O-XEYEZE,原点固定于水面某点,XE 指向正北,YE 指向正东,ZE 垂直向下。船舶的绝对位置 (x, y) 和航迹角都在此系中表达。
  • 船体坐标系(附体系):记为 o-xbybzb,原点取在船舶重心(或水线面中心),xb 指向船艏,yb 指向右舷,zb 指向龙骨方向。速度 u、v 和角速度 r 都在此系中定义。

符号约定为:纵荡速度 u 沿 xb 正向为正,横荡速度 v 沿 yb 正向为正,艏摇角速度 r 以绕 zb 顺时针(从上方看,船艏向右转)为正,艏向角 ψ 从 XE 轴量起、顺时针为正。这套“北-东-下”加“艏-右-下”的约定与多数船舶操纵性文献一致,后续所有方程和仿真都不得中途更换,否则正负号会全面错乱。

六自由度到三自由度的降维逻辑

完整的六自由度模型包含 6 个广义坐标和 6 个广义速度,耦合项众多,参数辨识成本高。降维的依据是:垂荡、横摇、纵摇运动主要由波浪激励引起,周期短、幅值小,对水平面内的轨迹积分贡献有限;而纵荡、横荡、艏摇决定了船舶在水平面内的位置与姿态,且时间常数大、与控制输入(螺旋桨推力、舵角、侧推器)直接相关。因此平面运动模型保留状态量 [x, y, ψ, u, v, r],忽略垂向运动与横摇纵摇的耦合,适用于航速不太高、横摇角较小的常规操纵场景。

X_E(北) Y_E(东) O 大地坐标系(惯性系) x_b(艏) y_b(右舷) o u(纵荡) v(横荡) r(艏摇) ψ 参考方向 坐标转换(船体→大地) ẋ = u·cosψ − v·sinψ ẏ = u·sinψ + v·cosψ ψ̇ = r 旋转矩阵 R(ψ) 实现两系互换 平面模型状态量 位置:x, y(大地系) 姿态:ψ(艏向角) 速度:u, v(船体系) 角速度:r(艏摇率) 六自由度 = 纵荡/横荡/垂荡 + 横摇/纵摇/艏摇;本模型取前三者中的平面分量

三自由度运动方程与转换关系

在船体坐标系中,三自由度平面运动方程可写为:

m( u̇ − v·r ) = X
m( v̇ + u·r ) = Y
I_z · ṙ       = N

其中 m 为船舶质量,Iz 为绕 zb 轴的转动惯量,X、Y、N 分别为纵向力、横向力和艏摇力矩,包含螺旋桨推力、舵力、船体水动力及阻尼项。注意 v̇ + u·r 中的 u·r 是向心加速度项,它体现了船体坐标系随船转动带来的耦合,是平面模型区别于简单质点模型的关键。

船体坐标系与大地坐标系之间的转换由旋转矩阵完成。设 R(ψ) 为绕 z 轴的旋转矩阵,则:

R(ψ) = [ cosψ  −sinψ ;
         sinψ   cosψ ]

[ẋ; ẏ] = R(ψ) · [u; v]
ψ̇ = r

在 MATLAB 中,这一转换可以直接写成矩阵乘法,便于后续用 ode45 积分。例如给定 ψ = 30°、u = 5 m/s、v = 0.4 m/s,则 ẋ = 5·cos30° − 0.4·sin30° ≈ 4.13 m/s,ẏ = 5·sin30° + 0.4·cos30° ≈ 2.85 m/s。这个手算结果可以作为仿真初期的校验基准:若代码输出的速度分量与此偏差明显,多半是角度单位(度/弧度)或正负号约定出了问题。

建模实操中的关键检查点

把上述方程落到 MATLAB 时,建议按以下顺序推进。首先定义参数结构体,把 m、Iz、各水动力导数(如 Xu、Yv、Nr)集中存放,避免散落在脚本各处。其次编写状态导数函数,输入为 [x, y, ψ, u, v, r] 和控制量 [推力, 舵角],输出为六个状态导数,函数内部严格按“先算船体系力与力矩,再算加速度,最后用 R(ψ) 转换到大地系”的顺序组织。再次,用一组简单工况做开环验证:给定恒定推力和零舵角,观察船舶是否沿近似直线加速、ψ 是否保持初值;给定一个舵角阶跃,观察 r 是否收敛到稳定值、航迹是否呈圆弧。最后再接入控制器闭环。

建模初期建议把阻尼项设为线性形式(如 X = T − Xu·u),先确认坐标转换和积分逻辑正确,再逐步替换为非线性水动力模型。这样一旦出现轨迹发散,能快速定位是转换错误还是水动力参数问题。