基于模型预测人工势场的船舶运动规划方法,考虑复杂遭遇场景下的COLREG(Matlab代码实现)

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

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

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

目录

[💥1 概述](#💥1 概述)

[📚2 运行结果](#📚2 运行结果)

[🎉3 参考文献](#🎉3 参考文献)

[🌈4 Matlab代码实现](#🌈4 Matlab代码实现)


💥1 概述

船舶运动规划是海上自主水面舰艇(MASS)自主导航的核心问题。该文提出一种考虑避碰规则的复杂遭遇场景模型预测人工势场(MPAPF)运动规划方法。建立了一个新的船舶域,其中设计了一个闭区间势场函数来表示船舶域的不可侵犯属性。在运动规划过程中,采用具有预定义速度的Nomoto模型来生成符合船舶运动学的可遵循路径。为解决传统人工势场(APF)方法的局部最优问题,保证复杂遭遇场景下的防撞安全,提出一种基于模型预测策略和人工势场的运动规划方法MPAPF。该方法将船舶运动规划问题转化为具有机动性、导航规则、通航航道等多重约束的非线性优化问题。4个算例的仿真结果表明,与APF、A星和快速探索随机树(RRT)的变体相比,所提出的MPAPF算法能够解决上述问题,并生成可行的运动路径,避免复杂遭遇场景下的船舶碰撞。

文献来源:

📚 2 运行结果

输入预测步长(我们建议应该是1~10,在这个程序中,1步可能花费你120秒,而10步可能比1步高100倍。

部分代码:

%% initialization

static_obs_num = [12;6];

mailme = 0;

% static_obs_area = [0.8, 2, 7, 8;

% 2, 0.2, 10, 2];

static_obs_area = [0.5, 0, 4.5, 4;

4.5, 2, 6.5 3.5];

dynamic_ships = [1;1;1;1];

parameter.waterspeed = 0/1852;

parameter.waterangle = 45;

parameter.water = [sind(parameter.waterangle) cosd(parameter.waterangle)]*parameter.waterspeed;

parameter.minpotential = 0.001;

parameter.minpotential4ship = 0.01;

parameter.minobstacle = 0.03;

parameter.maxobstacle = 0.2;

parameter.safeobstacle = 5;

parameter.amplification = 5;

parameter.safecv = 2.5;%n mile safety collision aviodance distance

parameter.dangercv = 0.5;% danger collision aviodance distance

parameter.shipdomain = 5;

parameter.tsNum = 1;

%% simulation environment

map_size = [8,4.5];

start_point = [1 1];

end_point = [7,4];

tmp_end_point = end_point;

parameter.endbeta = -log(parameter.minpotential)/(norm(end_point-start_point)*2)^2;

mat_point = init_obstacles(static_obs_num,static_obs_area); % Generate static obstacles randomly

ship.speed = 8.23; % meters per second equal to 16 knots

ship.v = 0;

ship.data = [... data = [ U K T n3]

6 0.08 20 0.4

9 0.18 27 0.6

12 0.23 21 0.3 ];

% interpolate to find K and T as a function of U from MSS toolbox 'frigate'

prompt = 'Prediction Step\n'; % input the prediction step, 1~10

parameter.prediction_step = input(prompt);

ship.k = interp1(ship.data(:,1),ship.data(:,2),ship.speed,'linear','extrap'); %ship dynamic model you can change the dynamic model in shipdynamic.m

ship.T = interp1(ship.data(:,1),ship.data(:,3),ship.speed,'linear','extrap');

ship.n3 = interp1(ship.data(:,1),ship.data(:,4),ship.speed,'linear','extrap');

ship.Ddelta = 10*pi/180; % max rudder rate (rad/s)

ship.delta = 30*pi/180; % max rudder angle (rad)

ship.length = 100;

ship.p_leader = -8;

ship.alpha_leader = 3;

ship.yaw = 45;

ship.yaw_rate = 0;

ship.rudder = 0;

ship.rudder_rate = 0;

ship.position = [1 1];

ship.gamma = 1;

ship.lamda = log(1/parameter.minpotential4ship-1)/((parameter.shipdomain)^2-1);

ship.prediction_postion = [];

tsPath{parameter.tsNum} = [];

ship1 = ship;

parameter.scale = 1852; % 1852m in real world ,1 in simulation;

parameter.time = 5; % time per step

parameter.searching_step = 3000; % max searching step

parameter.map_size = map_size; % map size for display

parameter.map_min = 0.05; % minmum map details

parameter.end1 = 0.05;

% parameter.situs1 = [6.1 1.75 3.25 1.75];

parameter.situs1 = [6.1 3.9 3.25 1.75]; % a quaternion ship domain proposed in Wang 2010,situs1 means in head-on situation

parameter.situs2 = [6.1 3.9 3.25 1.75]; % a quaternion ship domain proposed in Wang 2010,situs2 means in crossing and give-way situation

parameter.situs3 = [0.0 0.0 0.00 0.00]; % a quaternion ship domain proposed in Wang 2010,situs3 means in crossing and stand-on situation

parameter.situs0 = [6.0 6.0 1.75 1.75]; % a quaternion ship domain proposed in Wang 2010,situs0 means in norm naviation situation

ship_scale = 1;

leader_stop = 0;

tic

draw2();

set(gcf,'position',[200 200 1361/1.5 750/2]);

hold on

LB_follower = [];

UB_follower = [];

for i = 1 : parameter.prediction_step

LB_follower = [LB_follower 0 -ship.delta];% lower limiting value

UB_follower = [UB_follower 0 ship.delta];% upper limiting value

end

parameter.navars = 2*parameter.prediction_step;% number of navars

targetship=init_ship(ship,'others',1000);

🎉 3 参考文献

[1]He, Zhibo, et al. "A Novel Model Predictive Artificial Potential Field Based Ship Motion Planning Method Considering COLREGs for Complex Encounter Scenarios." ISA Transactions, Elsevier BV, Sept. 2022, doi:10.1016/j.isatra.2022.09.007.

🌈4 Matlab代码实现

相关推荐
PythonFun19 分钟前
Python批量下载PPT模块并实现自动解压
开发语言·python·powerpoint
Death20023 分钟前
Qt 6 相比 Qt 5 的主要提升与更新
开发语言·c++·qt·交互·数据可视化
机器视觉知识推荐、就业指导25 分钟前
使用Qt实现实时数据动态绘制的折线图示例
开发语言·qt
快乐就好ya1 小时前
Java多线程
java·开发语言
CS_GaoMing2 小时前
Centos7 JDK 多版本管理与 Maven 构建问题和注意!
java·开发语言·maven·centos7·java多版本
2401_858120533 小时前
Spring Boot框架下的大学生就业招聘平台
java·开发语言
转调3 小时前
每日一练:地下城游戏
开发语言·c++·算法·leetcode
Java探秘者3 小时前
Maven下载、安装与环境配置详解:从零开始搭建高效Java开发环境
java·开发语言·数据库·spring boot·spring cloud·maven·idea
2303_812044463 小时前
Bean,看到P188没看了与maven
java·开发语言
秋夫人3 小时前
idea 同一个项目不同模块如何设置不同的jdk版本
java·开发语言·intellij-idea