【避碰】基于人工势场法的船舶自动避碰系统附matlab代码

0 阅读1分钟

cover_image

【避碰】基于人工势场法的船舶自动避碰系统附matlab代码

天天Matlab 天天Matlab 天天Matlab

2023年04月18日 00:00 福建 __

在小说阅读器中沉浸阅读

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法 神经网络预测 雷达通信 无线传感器 电力系统

信号处理 图像处理 路径规划 元胞自动机 无人机

⛄ 内容介绍

船舶自动避碰是航海研究的热点之一,国内外专家学者提出了许多方法并开发了多种系统.然而,如何测试和验证这些方法和系统仍然是一个有待解决的问题.实船海上试验风险高费用大,同时灵活性差花费时间长;许多研究人员所采用的单机仿真试验则难以有效仿真复杂的海上航行情况.本文分析了现有船舶自动避碰系统的不足,提出了基于人工势场法的船舶自动避碰系统.根据船舶的操纵特性,建立了引力场和斥力场函数,实现船舶自动避碰航行的合力和方向,在电子海图所建立的仿真环境中,验证了人工势场法可用于船舶自动避碰系统中

⛄ 部分代码

clc

clear

close all

%% 信息

%

X_o = 0;

Y_o = 0;

Yt = 100;

Xt = 100;

v_o = 20;

fai_o = atan((Yt-Y_o)/(Xt-X_o));

%目标船?

% v_t_all = [10 1 1];

% fai_t_all = [270 215 215];

%

% X_t_all = [16 50 84];

% Y_t_all = [10 47 50];

v_t_all = [5, 5, 5];

fai_t_all = [330,150,400];

X_t_all = [32,25,60];

Y_t_all = [22,35,50];

fai_t_all = fai_t_all./180.*pi;

set = 1;

xx1=X_o;

yy1=Y_o;

yy2=Yt;

xx2=Xt;

%% 相对信息

%两船距离 R_t

%?标船的相对速度 v_tao

%?标船相对速度的?度 fai_tao

%?标船相对本船的真实?位 a_t

%?标船的相对?位 theta_t

t = 1/3600;

X = [X_o, Y_o];

Y = [X_t_all, Y_t_all];

fai = [fai_o];

am = [];

r = 0;

Rt = sqrt((Xt-X_o)^2+(Yt-Y_o)^2);

mk = 1;

mkk = [mk];

fh_temp = 0;

bp_goal = [];

dist = [];

fai_o_all = [];

while Rt > 1

mk = mk + 1;

for j = 1:length(v_t_all)

v_t = v_t_all(j);

fai_t = fai_t_all(j);

X_t = X_t_all(j);

Y_t = Y_t_all(j);

gamma_all(j) = xd_data2(X_o,X_t,Y_o,Y_t,v_o,v_t,fai_o,fai_t);

end

[~, index] = sort(gamma_all,'descend');

beta_all = 0; %转向角度

for j = index

v_t = v_t_all(j);

fai_t = fai_t_all(j);

X_t = X_t_all(j);

Y_t = Y_t_all(j);

for j = 1:size(Y,2)/2

pause(0.05)

k=k+1;

end

V0 = 10;

L = 200/1875;

kAD = 10 ^ (0.3591*log10(V0) + 0.0952);

kDT = 10 ^ (0.5441*log10(V0) - 0.0795);

Rfore = (1 + 1.34 * sqrt(kAD^2 +(kDT/2)^2) ) * L;

Raft = (1 + 0.67 * sqrt(kAD^2 +(kDT/2)^2) ) * L;

Rstarb = (0.2 + kDT) * L;

Rport = (0.2 + 0.75*kDT) * L;

for j = size(mkk):-1:1

i = mkk(j);

for kz = 1:ly

hold on

rectangle('Position',[Y(i,kz)-0.3,Y(i,kz+ly)-0.3,0.6,0.6],'Curvature',[1,1], 'FaceColor','k')

end

syms x y

x = x - X(i,1);

y = y - X(i,2);

z = [cos(fai(i)),-sin(fai(i));sin(fai(i)),cos(fai(i))]*[x;y];

x = z(1);

y = z(2);

hold on

h = ezplot((2*y/((1+sign(y))*Rfore-(1-sign(y))Raft))^2 + (2x/((1+sign(x))*Rstarb-(1-sign(x))*Rport))^2==1,[-2 50 -2 50]);

legend('','来船1','来船2','来船3');

if j==size(mkk)

str=[repmat(' fai:',[size(mkk,1)-1,1]) num2str(round(fai_o_all(mkk(1:end-1))'/pi*180)) repmat(', gamma:',[size(mkk,1)-1,1]) num2str(round(real(am(mkk(1:end-1))),2))];

text(X(mkk(1:end-1),1),X(mkk(1:end-1),2),cellstr(str))

end

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%此处将读入的图像写出 为 GIF 详细参考 imwrite 函数

filename = '3.gif'; % Specify the output file name

for idx = 1:size(im,2)

[A,map] = rgb2ind(im{idx},256);

if idx == 1

imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',0.05);

else

imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',0.05);

end

end

⛄ 运行结果

⛄ 参考文献

[1] 钟碧良, 刘先杰, 吴建生,等. 基于人工势场法的船舶自动避碰系统研究[J]. 广州航海学院学报, 2008, 16(1):8-11.

[2] 宁君, 李学健, 李伟,等. 基于改进人工势场法的船舶自动避碰研究[J]. 舰船科学技术, 2021, 43(12):7.

[3] 钟丰仰, 朱俊翰, 廖启闵,等. 基于人工势场法的船舶避碰方法及系统:, CN113495556A[P]. 2021.

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料

预览时标签不可点

继续滑动看下一个

轻触阅读原文

天天Matlab

向上滑动看下一个

知道了

微信扫一扫
使用小程序


取消 允许


取消 允许


取消 允许

× 分析

__

跳转二维码

作者头像

微信扫一扫可打开此内容,
使用完整服务

: , , , , , , , , , , , , 。 视频 小程序 赞 ,轻点两下取消赞 在看 ,轻点两下取消在看 分享 留言 收藏 听过