【无人水下航行器】模拟无人水下航行器(Matlab实现)

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

一、模拟目的

二、模拟内容

三、模拟工具与软件

四、模拟流程

五、应用前景

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

 模拟无人水下航行器是一种通过软件、模型或实验装置来重现无人水下航行器运行特性和功能的方法。它旨在在无需实际部署实体航行器的情况下,对其性能、行为和在各种环境及任务中的表现进行研究和预测。 在模拟过程中,会考虑无人水下航行器的机械结构、动力系统、传感器配置、导航与控制系统等多个方面。通过输入不同的参数和条件,如水流速度、水深、任务目标等,可以模拟出航行器的运动轨迹、能源消耗、数据采集能力以及对各种突发情况的响应。 这种模拟有助于在设计阶段优化航行器的结构和性能,降低研发成本和风险。同时,也为操作人员提供训练平台,帮助他们熟悉控制流程和应对策略。此外,还能够用于评估不同的任务规划和算法,以提高无人水下航行器在实际应用中的效率和可靠性。

模拟无人水下航行器(Unmanned Underwater Vehicles, UUV)是一个复杂且多学科的任务,它涉及海洋技术、机器人技术及计算机科学等多个领域。以下是对模拟无人水下航行器的详细解析:

一、模拟目的

模拟无人水下航行器的目的主要包括:

  1. 性能评估:在不涉及实体实验的情况下,对UUV的性能进行全面评估,包括速度、续航、稳定性、控制精度等。
  2. 算法开发:测试和优化UUV的控制算法,如自主导航、路径规划、姿态控制等。
  3. 任务规划:模拟UUV执行特定任务的过程,如水下勘测、目标搜索与追踪、海洋科学研究等,以评估其在实际场景下的表现。
  4. 环境适应:重现各种海洋环境条件,如水流、海浪、海底地形等,以评估UUV在复杂环境下的适应能力。

二、模拟内容

模拟无人水下航行器通常包括以下几个方面:

  1. 动力系统仿真:模拟UUV的推进系统,包括水声发动机、螺旋桨、舵和电池等,以评估其功耗、速度性能和续航能力。
  2. 水动力学仿真:通过数值方法模拟UUV在水下的运动特性,包括阻力、操纵性能和稳定性。这通常需要使用流体动力学模型,如Navier-Stokes方程或势流理论。
  3. 传感器仿真:对UUV搭载的传感器进行仿真,包括声纳、摄像头、水质传感器等。评估其性能、探测范围和精度,以确保UUV能够准确感知周围环境。
  4. 通信系统仿真:模拟UUV与地面站或其他设备之间的通信链路,包括水下通信信道的特性、信号衰减和数据传输性能。
  5. 控制系统仿真:开发和测试UUV的控制算法,包括自主导航、路径规划和姿态控制等。这需要在仿真环境中对控制策略进行验证和优化。
  6. 任务仿真:模拟UUV执行特定任务的过程,如水下勘测、目标搜索与追踪等。通过任务仿真,可以评估UUV在不同场景下的性能和效果。

三、模拟工具与软件

进行无人水下航行器模拟时,通常会使用以下工具和软件:

  1. 专业仿真软件:如MATLAB/Simulink结合ROS(Robot Operating System)进行动态模型仿真,或使用专业水下航行器仿真软件如BlueView SonarSim、Gazebo海底环境仿真等。
  2. 游戏引擎:Unity和Unreal Engine因其高保真度的图形渲染和物理模拟能力,也被用于开发复杂的UUV仿真环境。这些引擎特别适用于视觉导航和避障算法的测试。
  3. 虚拟现实技术:利用虚拟现实技术构建UUV的虚拟仿真环境,使操作人员能够在仿真环境中进行训练和操作实践。

四、模拟流程

模拟无人水下航行器的流程通常包括以下几个步骤:

  1. 需求分析:明确模拟的目的和要求,确定需要模拟的UUV类型、任务场景和性能指标。
  2. 模型建立:根据需求分析结果,建立UUV的数学模型和仿真模型。这包括动力系统、水动力学、传感器、通信系统和控制系统等。
  3. 环境设置:设置仿真环境,包括海洋环境条件、障碍物分布和任务目标等。
  4. 仿真运行:在仿真环境中运行UUV模型,执行预设的任务场景,并收集仿真数据。
  5. 数据分析:对仿真数据进行处理和分析,评估UUV的性能和效果,并根据需要进行优化和改进。

五、应用前景

模拟无人水下航行器在多个领域具有广泛的应用前景,包括海洋资源勘探、水下考古、环境监测、军事侦察等。通过模拟技术,可以在不增加实际成本和风险的情况下,对UUV的设计、算法和任务规划进行验证和优化,从而推动UUV技术的快速发展和广泛应用。

📚2 运行结果

部分函数代码:

clear;
N_states = 4;
N_inputs = 2;
tspan = (0:0.1:50)'; % ode time span
syms t

%%%%%%% nominal data setting (usually equilibrium) to get the linearized system
%%%%%%% and the nominal solution
% Note that X doesn't influence the states
% We have 3 system-dependent states, and 5 variables to set to get the
% desired motion. Therefore we need to set 2 parameters to get the rest of
% the steady motion states and inputs
nominal_data_setting = [1; 5]; % Set Z, u.
nominal_x0 = [0; nominal_data_setting(1); nominal_data_setting(2); 0]; % nominal initial state: X, Z, u, w
[A,B,nominal_x,nominal_input] = getLinearSys(nominal_x0,nominal_data_setting);

%%%%%%% initial states
x0 = nominal_x0;
x0(2) = x0(2)+1/3*0.05; % initial Z. Note that the vehicle height is 1/3
x0(3) = x0(3)*1.05; % initial Z. Note that the vehicle height is 1/3
%%%%%%% Control gains

%%% PID got from transfer fucntions
Ku = getPID(1,nominal_x,nominal_input);
Kw = getPID(2,nominal_x,nominal_input);
KGains = [0 0 Ku(1) 0; 0 Kw(1) 0 Kw(3)]
% solve ode of nonlinear system
UUVode = @(tt,x) systemUUV(tt,x,nominal_x,nominal_input,KGains);
[thist,xhist] = ode45(UUVode,tspan,x0);
% solve ode of linearized system
Detx0 = x0-nominal_x0;
UUVode_Linear = @(tt,Detx) systemUUVLinear(tt,Detx,A,B,KGains);
[thist_LinearDet,xhist_LinearDet] = ode45(UUVode_Linear,tspan,Detx0);
% force record. 1st row: Fu / 2nd row: Fw
forceNonlinear = repmat(nominal_input,1,length(tspan)) + KGains*(repmat(nominal_x,1,length(tspan))-xhist');
forceLinear = repmat(nominal_input,1,length(tspan)) + KGains*(0-xhist_LinearDet');

%%%%% pole placement
dampingRatio = sin(40/180*pi);
sigma = 0.5; 
naturalFrequency = sigma/dampingRatio;
Frequency = sqrt(1-dampingRatio^2)*naturalFrequency;
timeConst = 5;
p = [-1/timeConst; -sigma+1i*Frequency; -sigma-1i*Frequency];
K = place(A(2:end,2:end),B(2:end,:),p);
KGains = [0 K(1,:); 0 K(2,:)]
% solve ode of nonlinear system
UUVode = @(tt,x) systemUUV(tt,x,nominal_x,nominal_input,KGains);
[thist2,xhist2] = ode45(UUVode,tspan,x0);
% solve ode of linearized system
Detx0 = x0-nominal_x0;
UUVode_Linear = @(tt,Detx) systemUUVLinear(tt,Detx,A,B,KGains);
[thist_LinearDet2,xhist_LinearDet2] = ode45(UUVode_Linear,tspan,Detx0);
% force record. 1st row: Fu / 2nd row: Fw
forceNonlinear2 = repmat(nominal_input,1,length(tspan)) + KGains*(repmat(nominal_x,1,length(tspan))-xhist2');
forceLinear2 = repmat(nominal_input,1,length(tspan)) + KGains*(0-xhist_LinearDet2');

%%%%% LQR
% equal "badness"
ZstdErr = 0.02;
ustdErr = 0.2;
wstdErr = 0.005;
Q = eye(N_states-1)*100;
Q(1,1) = Q(1,1)/ZstdErr^2; 
Q(2,2) = Q(2,2)/ustdErr^2;
Q(3,3) = Q(3,3)/wstdErr^2;

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]叶梦佳. 高速无人水下航行器运动控制系统设计与实现[D].浙江大学,2023.DOI:10.27461/d.cnki.gzjdx.2022.001512.

[2]王林. 基于多学科优化的无人水下航行器设计方法[D].汕头大学,2023.DOI:10.27295/d.cnki.gstou.2022.000220.

🌈4 Matlab代码实现

图片

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值