3. 船舶运动学与动力学建模基础

自主航行系统的决策、制导与控制都建立在同一个前提上:系统必须能在任意时刻回答“船现在处于什么运动状态、下一时刻会怎样”。这个回答来自船舶运动模型。本节不追求水动力学研究的完整严谨性,而是面向集成工程,讲清三件事:如何建立可用于实时计算的六自由度简化模型,如何从试验或实船数据中辨识操纵性参数,以及如何验证模型是否“够用”。

一、坐标系与六自由度状态定义

建模的第一步是统一参照系,否则后续所有符号都会混乱。工程上通常采用两个右手坐标系:大地坐标系(北-东-地,NED)用于描述船舶航迹与位置;船体坐标系(x 指向船首、y 指向右舷、z 指向龙骨下方)用于描述船体受力与相对运动。六自由度状态量为:

  • 位置:北向位置 N、东向位置 E、垂向位置 D(下为正);
  • 姿态:横摇角 φ、纵摇角 θ、艏向角 ψ(北偏东为正,顺时针);
  • 速度:纵荡 u、横荡 v、垂荡 w(船体系);
  • 角速度:横摇角速度 p、纵摇角速度 q、艏摇角速度 r。

需要特别强调符号约定:本文艏向角 ψ 以正北为 0、顺时针为正,与船体坐标系 z 轴向下构成右手系一致;横摇角 φ 以右舷下沉为正。集成时若飞控或雷达模块使用逆时针为正的数学约定,必须在接口层做一次显式转换,而不是在模型内部混用。

二、六自由度简化模型的结构

完整六自由度模型包含刚体惯性项、附加质量、阻尼、恢复力、推进与舵力、环境扰动力。对自主航行集成而言,通常做如下简化:忽略垂荡、纵摇、横摇的耦合动态(或将其降阶为准静态),保留纵荡、横荡、艏摇三自由度平面运动作为主模型,横摇仅作为安全约束量参与监控。这样得到的平面运动方程可写为:

m(u̇ − v·r) = X_prop + X_rudder + X_env
m(v̇ + u·r) = Y_rudder + Y_env
I_z·ṙ      = N_rudder + N_env

运动学:
ṅ = u·cosψ − v·sinψ
ė = u·sinψ + v·cosψ
ψ̇ = r

其中 m 为含附加质量的等效质量,I_z 为含附加惯性矩的等效转动惯量。舵力与舵力矩常采用线性化形式 X≈0、Y = Y_δ·δ、N = N_δ·δ,δ 为舵角。这一组方程的计算量极小,适合在船载控制器中以 10~50 Hz 运行,是模型预测控制与状态估计器的常用内核。

六自由度简化模型:输入—状态—输出结构 推进指令 转速 / 螺距 舵角 δ −35°~+35° 环境扰动 风 / 流 / 浪 简化运动模型 刚体惯性 + 附加质量 阻尼项(线性/二次) 舵力 Y_δ、N_δ 推进力 X_prop 环境力 X/Y/N_env 平面三自由度为主,横摇作约束 运动状态输出 u, v, r(船体系速度) N, E, ψ(大地系位姿) φ, θ 监控量 下游集成用途 状态估计 / 航迹预测 MPC 预测模型 操纵性参数辨识链路 试验数据 Z 形 / 回转 / 直航 参数估计 最小二乘 / 卡尔曼 参数集 K, T, Y_δ, N_δ 模型验证 残差 / 轨迹偏差

三、操纵性参数辨识:从试验到参数集

简化模型中的关键参数包括等效质量与惯量、阻尼系数、舵效系数 Y_δ 与 N_δ,以及工程上常用的 Nomoto 一阶模型参数 K(回转性指数)与 T(追随性指数)。这些参数很难仅靠理论计算获得,必须通过辨识。典型做法如下:

1. 设计激励试验。最常用的是 10°/10° 与 20°/20° Z 形试验,以及 15°~35° 舵角下的定常回转试验。Z 形试验能同时激发艏摇动态与舵响应,是辨识 K、T 的标准输入。试验需记录时间同步的舵角 δ(t)、艏向角 ψ(t)、航速 u(t),采样率建议不低于 10 Hz。

2. 选择模型形式。若只关心艏向响应,可用 Nomoto 一阶模型 Ṫψ̇ + ψ̇ = K·δ,其离散形式便于递推最小二乘。若需同时描述横荡与漂角,则采用三自由度线性模型,待辨识参数向量为 θ = [Y_v, Y_r, N_v, N_r, Y_δ, N_δ]。

3. 参数估计。以三自由度模型为例,将方程整理为线性回归形式 y(k) = φ(k)ᵀ·θ + ε(k),其中 y 为加速度项(由速度差分得到),φ 为速度与舵角组成的回归向量。用递推最小二乘即可在线更新,示例代码框架如下:

# 示例:三自由度模型递推最小二乘(参数为教学假设值)
theta = np.zeros(6)          # [Y_v, Y_r, N_v, N_r, Y_δ, N_δ]
P = np.eye(6) * 1e4
for k in range(1, len(t)):
    phi = np.array([v[k], r[k], 0, 0, delta[k], 0])   # 横荡方程回归向量
    y   = (v[k] - v[k-1]) / dt
    K   = P @ phi / (1 + phi @ P @ phi)
    theta = theta + K * (y - phi @ theta)
    P = (np.eye(6) - np.outer(K, phi)) @ P

需要注意:速度差分对噪声敏感,实际工程中应先对 v、r 做低通滤波(截止频率约 1~2 Hz),或改用积分形式的回归方程以抑制噪声放大。辨识得到的参数应带有置信区间,若某参数标准差过大,说明该试验激励不足,需补充相应工况。

四、模型验证:判断“够用”而非“完美”

验证不是看拟合曲线是否漂亮,而是看模型在未参与辨识的数据上能否复现关键操纵特征。建议采用三级验证:

  • 回放验证:用辨识数据本身回放,检查残差是否为零均值白噪声,主要排除系统性偏差;
  • 交叉验证:用 10°/10° Z 形数据辨识,用 20°/20° 数据验证,观察艏向超调量与周期误差,工程上通常要求超调量误差小于 15%、稳态回转角速度误差小于 10%;
  • 轨迹验证:在回转试验中比较模型预测轨迹与实测轨迹的横向偏差,若在 3 倍船长范围内则认为满足自主航行预测需求。
集成提示:模型验证的通过标准应由下游任务反推。用于航迹预测的模型,关注 30~60 秒内的轨迹偏差;用于控制的模型,更关注舵响应相位滞后。不要用同一套指标评价所有用途的模型。

五、集成中的常见问题

实际集成时,模型误差往往不是来自方程本身,而是来自三处:一是坐标系转换遗漏,导致艏向角符号相反,表现为“船越控越偏”;二是参数随航速、吃水变化而未做插值,低速时舵效显著下降却仍用高速参数;三是环境扰动未建模,风流浪被误当作模型误差吸收进参数,造成参数漂移。建议在模型输出端保留一个扰动估计通道,将辨识参数与环境力解耦,并在不同航速点分别辨识、以查表方式调用。这样得到的简化模型既能满足实时性,又能在自主航行系统的预测与控制中保持可解释、可维护。