基于模型预测人工势场的船舶运动规划方法,考虑复杂遭遇场景下的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. ### [🌈](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzk0MDMzNzYwOA==&action=getalbum&album_id=2591810113208958977#wechat_redirect "🌈")****4 Matlab代码实现****

相关推荐
东方苾梦1 分钟前
SQL语言的计算机体系结构
开发语言·后端·golang
蹦蹦跳跳真可爱58911 分钟前
Python----PaddlePaddle(深度学习框架PaddlePaddle,概述,安装,衍生工具)
开发语言·人工智能·python·paddlepaddle
一只专注api接口开发的技术猿19 分钟前
京东API智能风控引擎:基于行为分析识别恶意爬虫与异常调用
大数据·开发语言·前端·爬虫
谬了个大也23 分钟前
go --- go run main.go 和 go run .
开发语言·后端·golang
可可南木27 分钟前
BT-Basic函数之首字母S
开发语言·测试工具·pcb工艺
涛涛讲AI28 分钟前
Python urllib3 全面指南:从基础到实战应用
开发语言·python·urllib3
yy_xzz36 分钟前
基于条码数据生成校验密码的C++实现方案
开发语言·c++
技术小白Byteman1 小时前
蓝桥刷题note13(排序)
开发语言·数据结构·c++·学习·算法·visualstudio
苏卫苏卫苏卫1 小时前
【Vue】选项卡案例——NBA新闻
开发语言·前端·javascript·css·vue.js·笔记
莫魂魂1 小时前
009_抽象类和接口
java·开发语言·单例模式