水下航行器能量收集器动力学和控制研究(Matlab代码实现)

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

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

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

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

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

随着可再生能源技术的不断发展,水下航行器能量收集器在节能与环保方面具有重要意义。本文针对水下航行器能量收集器的动力学特性与控制策略展开研究,探讨了不同工作模式下能量收集器的性能优化方法,为提高水下航行器的能源效率和自主续航能力提供理论支持。

通过建立动力学模型、设计控制器以及开展实验验证,得出以下结论:

1)能量收集器在不同工作模式下具有明显的性能优势,可提高水下航行器的能源效率和自主续航能力。

2)所设计的基于状态依赖Riccati方程的非线性次优控制器具有较好的控制性能,可实现能量收集器的高效运行。

3)实验结果验证了能量收集器控制策略的有效性,为实际应用提供了理论支持。

未来研究可针对不同类型水下航行器能量收集器的特点,进一步优化控制策略,提高其在实际应用中的性能表现。​

📚2 运行结果

主函数部分代码:

clear
clc
close all
​
global Mmat Props X Y Z K M N inputs;
global var1;
​
var1 = 1;
​
save_msg = 0; test_msg = 'PositiveB_1en5pcnt'; case_msg = 'RollStab';
​
x = 0; y = 0; z = 0;
phi = 0; theta = 0; psi = 0;
​
u = 0; v = 0; w = 0;
p = 0; q = 0; r = 0;
​
props = 0; delR = 0; delS = 0;
Xprops = 4.0;
inputs = [Xprops;delR;delS];
​
[Mmat,Props,X,Y,Z,K,M,N] = RemusAUV();
​
told = 0;
tend = 500;
tspan = told:1:tend;
​
init = [u,v,w,p,q,r,x,y,z,phi,theta,psi];
​
StateVec = [init];
TVec = told;
​
while (told <= tend)
    told
    tspan = told:0.1:told + 1;
    [t,states] = ode45('odefunc',tspan,init);
    u = states(end,1);
    v = states(end,2);
    w = states(end,3);
    p = states(end,4);
    q = states(end,5);
    r = states(end,6);
    x = states(end,7);
    y = states(end,8);
    z = states(end,9);
    phi = states(end,10);
    theta = states(end,11);
    psi = states(end,12);
    told = t(end);
    init = [u,v,w,p,q,r,x,y,z,phi,theta,psi];
    StateVec = vertcat(StateVec,init);
    TVec = vertcat(TVec,told);
end
​
​
figure(1)
plot(TVec,StateVec(:,1),'LineWidth',2);
xlabel('time(s)')
ylabel('velocity(m/s)')
title('Surge Velocity');
grid on
% if (max(abs(StateVec(:,1))) < 0.01)
%     ylim([-1 1]);
% end
set(gca, 'FontName', 'Calibri');
set(gca, 'FontSize', 17);   
set(gcf, 'Color', [1, 1, 1])
if (save_msg == 1)
    fpath = 'C:\Users\sdivi\Documents\AUV\Matlab\control test\Dynamic Model\Remus\Plots\';
    filename = [test_msg,'_',case_msg,'_','SurgeVel'];
    saveas(gcf,fullfile(fpath,filename),'jpeg');
end
​
figure(2)
plot(TVec,StateVec(:,2),'LineWidth',2);
xlabel('time(s)')
ylabel('velocity(m/s)')
title('Sway Velocity');
grid on
% if (max(abs(StateVec(:,2))) < 0.01)
%     ylim([-1 1]);
% end
set(gca, 'FontName', 'Calibri');
set(gca, 'FontSize', 17);   
set(gcf, 'Color', [1, 1, 1])
if (save_msg == 1)
    fpath = 'C:\Users\sdivi\Documents\AUV\Matlab\control test\Dynamic Model\Remus\Plots\';
    filename = [test_msg,'_',case_msg,'_','SwayVel'];
    saveas(gcf,fullfile(fpath,filename),'jpeg');
end
​
figure(3)
plot(TVec,StateVec(:,3),'LineWidth',2);
xlabel('time(s)')
ylabel('velocity(m/s)')
title('Heave Velocity');
grid on
% if (max(abs(StateVec(:,3))) < 0.01)
%     ylim([-1 1]);
% end
set(gca, 'FontName', 'Calibri');
set(gca, 'FontSize', 17);   
set(gcf, 'Color', [1, 1, 1])
if (save_msg == 1)
    fpath = 'C:\Users\sdivi\Documents\AUV\Matlab\control test\Dynamic Model\Remus\Plots\';
    filename = [test_msg,'_',case_msg,'_','HeaveVel'];
    saveas(gcf,fullfile(fpath,filename),'jpeg');
end

🎉3 参考文献

​[1]徐东,李晓斌,杨雪.欠驱动条件下自主水下航行器轨迹跟踪动态性能预设控制[J/OL].系统工程与电子技术,1-14[2023-12-12]

部分理论引用网络文献,若有侵权联系博主删除。

🌈4 Matlab代码实现

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值