基于模型预测人工势场的船舶运动规划方法,考虑复杂遭遇场景下的COLREG(Matlab代码实现)
💥💥💞💞歡迎來到本博客????💥💥
🏆博主優勢:🌞🌞🌞博客內容盡量做到思維縝密,邏輯清晰,為了方便讀者。
??座右銘:行百里者,半于九十。
目錄
💥1 概述
📚2 運行結果
🎉3 參考文獻
🌈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代碼實現
總結
以上是生活随笔為你收集整理的基于模型预测人工势场的船舶运动规划方法,考虑复杂遭遇场景下的COLREG(Matlab代码实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于SSM框架的人力资源管理系统毕业设计
- 下一篇: tikz包 安装_TikZ: LaTeX