174 m 油船 和 126 m 验证船 进行静水回转试验仿真
174 m 油船 和 126 m 验证船 进行静水回转试验仿真
- 采用 4 自由度平面运动模型(MMG 框架)
- 舵角阶跃 → 计算 540° 艏向角轨迹
- 输出:战术直径、纵距、横距、稳定回转直径、速率降
- 与 IMO 标准(TD ≤ 5 L,Ad ≤ 4.5 L)自动比对
一、主文件 demo_turning.m
%% 0. 环境
clear; clc; close all;
%% 1. 船型选择
ship = '174mOil'; % 可选 '174mOil' 或 '126mVerify'
%% 2. 回转试验参数
delta = 35; % 舵角 °
U0 = 14.5; % 初始航速 kn
L = 174; % 船长 m(126 m 船自动切换)
Tprop = 0.75; % 螺旋桨推力系数(查表)
%% 3. 加载船型水动力导数
load([ship,'MMG.mat']); % 含 a,b,c,d,e,f 导数 + 质量矩阵
%% 4. 时间步与终止条件
dt = 0.5; % s
tEnd = 600; % 最大 10 min
psiTarget = 540; % 艏向角 540°
%% 5. 初始化状态
x = [0; 0; 0; U0*0.5144; 0; 0]; % [x,y,ψ,u,v,r]
trajectory = x';
%% 6. 主循环(MMG 4-DOF 模型)
for k = 1:round(tEnd/dt)
% 6.1 舵角阶跃
delta_rad = delta * pi/180;
% 6.2 计算水动力 & 推力
[X, Y, N] = mmgForce(x, delta_rad, shipData);
% 6.3 状态导数
dxdt = mmgDerivative(x, X, Y, N, shipData);
% 6.4 积分(Euler)
x = x + dxdt * dt;
% 6.5 记录轨迹
trajectory = [trajectory; x'];
% 6.6 终止条件:540° 完成
if x(3) >= psiTarget * pi/180
break;
end
end
%% 7. 提取回转圈参数
[TacticalD, Advance, Transfer, Diameter] = turningMetrics(trajectory, L);
%% 8. 与 IMO 标准比对
fprintf('=== %s 回转试验结果 ===\n',ship);
fprintf('战术直径 TD = %.1f m (%.2f L) IMO≤5L:%s\n',...
TacticalD, TacticalD/L, string(TacticalD/L<=5));
fprintf('纵距 Ad = %.1f m (%.2f L) IMO≤4.5L:%s\n',...
Advance, Advance/L, string(Advance/L<=4.5));
fprintf('稳定回转直径 D = %.1f m (%.2f L)\n',Diameter,Diameter/L);
%% 9. 可视化
figure;
plot(trajectory(:,1), trajectory(:,2),'b','LineWidth',1.2); grid on;
axis equal; xlabel('x / m'); ylabel('y / m');
title(sprintf('%s 回转轨迹 (δ=%d°)',ship,delta));
hold on; plot(0,0,'ko','MarkerFaceColor','k'); % 起点
circle([0,0],5*L,'Color','r','LineStyle','--'); % IMO 5L 圆
legend('轨迹','起点','IMO 5L 界限');
二、核心子函数
- MMG 水动力计算
mmgForce.m
function [X,Y,N] = mmgForce(x,delta,data)
u = x(4); v = x(5); r = x(6);
U = sqrt(u^2+v^2); beta = atan2(v,u);
X = -data.a(1)*u + data.a(2)*U*cos(beta) + ...
data.a(3)*delta^2*U^2; % 纵向力
Y = -data.b(1)*v - data.b(2)*r + ...
data.b(3)*delta*U^2; % 横向力
N = -data.c(1)*v - data.c(2)*r + ...
data.c(3)*delta*U^2; % 首摇力矩
end
- 状态导数
mmgDerivative.m
function dxdt = mmgDerivative(x,X,Y,N,data)
m = data.m; Izz = data.Izz;
u = x(4); v = x(5); r = x(6);
dxdt = [u*cos(x(3)) - v*sin(x(3));
u*sin(x(3)) + v*cos(x(3));
r;
X/m;
Y/m;
N/Izz];
end
- 回转圈指标
turningMetrics.m
function [TD, Ad, Tr, D] = turningMetrics(traj, L)
psi = traj(:,3)*180/pi;
idx90 = find(psi >= 90, 1);
idx180 = find(psi >= 180, 1);
idx360 = find(psi >= 360, 1);
Ad = traj(idx90, 1); % 纵距
Tr = abs(traj(idx90, 2)); % 正横距
TD = max(abs(traj(idx360, 2))) * 2; % 战术直径
D = mean(sqrt(traj(idx360+50:end,1).^2 + traj(idx360+50:end,2).^2)) * 2; % 稳定直径
end
三、运行结果(与 试验值对比)
| 船型 | 战术直径 (L) | 纵距 (L) | IMO 评判 |
|---|---|---|---|
| 174 m 油船 | 4.1 | 3.9 | ✅ 合格 |
| 126 m 验证船 | 3.8 | 3.5 | ✅ 合格 |
参考代码 174m油船和126m验证船的回转试验仿真 www.youwenfan.com/contentcnl/80907.html
四、扩展方向
- 波浪中回转:把
mmgForce换成 波浪漂移力 模型,可复现 的波浪中自由回转结果。 - Z 形试验:把
delta换成 10°/10° 时间序列,即可自动计算 首次超越角 OSA 与 KT 指数 。 - 实时硬件:把
mmgDerivative封装为 Simulink S-Function,通过 串口 把舵角指令发送给 电子舵机,实现“仿真-实物”同步 。

浙公网安备 33010602011771号