无人船操纵性实验仿真:MATLAB 实现带你入门

张开发
2026/4/16 6:51:39 15 分钟阅读

分享文章

无人船操纵性实验仿真: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模型 注释很详细 适合新手学习且易扩展 联系~~~

更多文章