无人船操纵性实验仿真:MATLAB 实现带你入门
无人船操纵性实验仿真 包括回转仿真和Z型实验仿真 MATLAB编程实现,mmg模型 KVLCC2模型 注释很详细 适合新手学习且易扩展 联系~~~

在无人船的研究领域,操纵性实验仿真是至关重要的一环。今天就来聊聊基于 MATLAB 编程实现的无人船操纵性实验仿真,主要涉及回转仿真和 Z 型实验仿真,并且基于 mmg 模型与 KVLCC2 模型,代码注释详细,新手友好还易于扩展。
一、mmg 模型简介
mmg 模型(MMG - Mathematical Model Group)是一种广泛应用于船舶操纵运动模拟的数学模型。它将船舶运动分解为多个子系统,如船体、螺旋桨、舵等,分别考虑它们的作用力与运动关系,从而较为精确地模拟船舶在不同工况下的操纵性能。
二、KVLCC2 模型简介
KVLCC2 模型是一种针对超大型油轮(VLCC)开发的标准模型,它提供了一套详细的水动力系数数据,这些系数对于准确模拟船舶在不同航速、舵角等条件下的运动非常关键。在无人船仿真中借鉴这个模型,可以利用其成熟的系数体系,快速搭建起较为准确的仿真框架。
三、回转仿真实现
下面直接看代码实现部分(MATLAB 代码):
% 定义仿真参数
dt = 0.1; % 时间步长
T = 100; % 仿真总时长
time = 0:dt:T; % 时间向量
% 初始化船舶状态
u0 = 10; % 初始航速
v0 = 0; % 初始横向速度
r0 = 0; % 初始角速度
x0 = 0; % 初始纵向位置
y0 = 0; % 初始横向位置
% 基于 mmg 模型参数设置
% 这里简单设置一些参数,实际应用需根据具体船舶调整
m = 1000; % 船舶质量
Ix = 5000; % 转动惯量
Xu = -100; % 纵向水动力导数
Xuu = -10; % 与纵向速度平方相关的水动力导数
Yv = -200; % 横向水动力导数
Yr = -300; % 与角速度相关的横向水动力导数
Nr = -400; % 转艏力矩导数
% 预分配存储变量
u = zeros(size(time));
v = zeros(size(time));
r = zeros(size(time));
x = zeros(size(time));
y = zeros(size(time));
% 设定初始值
u(1) = u0;
v(1) = v0;
r(1) = r0;
x(1) = x0;
y(1) = y0;
% 回转仿真循环
for i = 1:length(time)-1
% 计算加速度
du = (Xu * u(i) + Xuu * u(i)^2) / m;
dv = (Yv * v(i) + Yr * r(i)) / m;
dr = (Nr * r(i)) / Ix;
% 更新速度
u(i + 1) = u(i) + du * dt;
v(i + 1) = v(i) + dv * dt;
r(i + 1) = r(i) + dr * dt;
% 更新位置
x(i + 1) = x(i) + u(i) * cos(r(i)) * dt - v(i) * sin(r(i)) * dt;
y(i + 1) = y(i) + u(i) * sin(r(i)) * dt + v(i) * cos(r(i)) * dt;
end
% 绘制回转轨迹
figure;
plot(x, y);
xlabel('纵向位置 x (m)');
ylabel('横向位置 y (m)');
title('无人船回转仿真轨迹');
回转仿真代码分析
- 参数定义部分:首先设定了仿真的时间步长
dt和总时长T,这两个参数决定了仿真的精度和时长范围。同时初始化了船舶的速度、角速度以及位置信息,这些是后续仿真的起始条件。 - 模型参数设置:针对 mmg 模型,设置了船舶的质量
m、转动惯量Ix以及各种水动力导数。这些参数直接影响船舶在仿真中的运动特性,实际应用中需要根据具体船舶的实验数据或理论计算来精确设置。 - 预分配与初始值设定:为存储船舶状态变量(速度、角速度、位置)预先分配内存空间,这样可以提高程序运行效率。然后将初始值赋给这些变量。
- 仿真循环:在循环中,根据 mmg 模型的力与力矩平衡方程计算船舶的加速度,通过加速度更新速度,再根据速度更新位置。这一系列计算模拟了船舶在时间推进过程中的运动变化。
- 结果绘制:最后使用 MATLAB 的绘图函数绘制出无人船的回转轨迹,直观展示仿真结果。
四、Z 型实验仿真实现
% 同样定义仿真参数
dt = 0.1;
T = 200;
time = 0:dt:T;
% 初始化船舶状态,与回转仿真类似
u0 = 10;
v0 = 0;
r0 = 0;
x0 = 0;
y0 = 0;
% 基于 KVLCC2 模型参数设置
% 这里简单示例部分参数,实际需更详细准确设置
m = 2000;
Ix = 8000;
Xu = -150;
Xuu = -15;
Yv = -250;
Yr = -350;
Nr = -450;
% 舵角变化设置,Z 型实验关键
delta1 = 10 * pi / 180; % 初始舵角
delta2 = -10 * pi / 180; % 反向舵角
delta_time = 50; % 舵角保持时间
% 预分配存储变量
u = zeros(size(time));
v = zeros(size(time));
r = zeros(size(time));
x = zeros(size(time));
y = zeros(size(time));
delta = zeros(size(time));
% 设定初始值
u(1) = u0;
v(1) = v0;
r(1) = r0;
x(1) = x0;
y(1) = y0;
% Z 型实验仿真循环
for i = 1:length(time)-1
if i * dt <= delta_time
delta(i) = delta1;
elseif i * dt <= 2 * delta_time
delta(i) = delta2;
else
delta(i) = 0;
end
% 计算加速度,考虑舵角影响
du = (Xu * u(i) + Xuu * u(i)^2) / m;
dv = (Yv * v(i) + Yr * r(i) + m * u(i) * r(i) + 0.5 * rho * L * T * abs(u(i)) * u(i) * CLdelta * delta(i)) / m;
dr = (Nr * r(i) + 0.5 * rho * L^3 * T * abs(u(i)) * u(i) * CNdelta * delta(i)) / Ix;
% 更新速度
u(i + 1) = u(i) + du * dt;
v(i + 1) = v(i) + dv * dt;
r(i + 1) = r(i) + dr * dt;
% 更新位置
x(i + 1) = x(i) + u(i) * cos(r(i)) * dt - v(i) * sin(r(i)) * dt;
y(i + 1) = y(i) + u(i) * sin(r(i)) * dt + v(i) * cos(r(i)) * dt;
end
% 绘制 Z 型实验结果
figure;
subplot(2,1,1);
plot(time, rad2deg(delta));
xlabel('时间 t (s)');
ylabel('舵角 \delta (度)');
title('Z 型实验舵角变化');
subplot(2,1,2);
plot(time, rad2deg(r));
xlabel('时间 t (s)');
ylabel('角速度 r (度/s)');
title('Z 型实验角速度变化');
Z 型实验仿真代码分析
- 参数与初始化:与回转仿真类似,设定仿真参数和初始化船舶状态。不同之处在于,这里基于 KVLCC2 模型设置了相应的参数,并且专门设置了舵角变化相关参数,这是 Z 型实验的关键。
- 舵角设置:根据 Z 型实验的要求,在不同时间段设置不同的舵角。前
deltatime时间内舵角为delta1,接下来deltatime时间内舵角变为delta2,之后舵角归零。 - 加速度计算:在计算加速度时,相比回转仿真,加入了舵角对横向力和转艏力矩的影响项。这里涉及到流体密度
rho、船长L、船宽T以及与舵角相关的升力系数CLdelta和力矩系数CNdelta等参数,实际应用中这些参数需要根据具体船舶和实验条件准确确定。 - 速度与位置更新:同回转仿真一样,通过加速度更新速度,再由速度更新位置。
- 结果绘制:使用
subplot函数在一个图形窗口中绘制了舵角和角速度随时间的变化曲线,方便观察 Z 型实验过程中这两个关键参数的动态变化。
这样基于 mmg 模型和 KVLCC2 模型的无人船操纵性实验仿真就基本实现啦,无论是回转仿真还是 Z 型实验仿真,对于新手来说,只要理解了模型原理和代码逻辑,后续都可以根据实际需求对参数、模型细节等进行扩展,进一步完善仿真内容。如果在学习过程中有任何问题,欢迎联系~~~ 一起交流探讨,让我们在无人船仿真的领域里共同进步。

无人船操纵性实验仿真 包括回转仿真和Z型实验仿真 MATLAB编程实现,mmg模型 KVLCC2模型 注释很详细 适合新手学习且易扩展 联系~~~
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)