✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。
🍎 往期回顾关注个人主页:Matlab科研工作室
🍊个人信条:格物致知,完整Matlab代码及仿真咨询内容私信。
🔥 内容介绍
本文针对多艘欠驱动自主水面航行器(USV)在约束边界下的编队路径跟踪控制问题,提出基于模型预测控制(LMPC)的解决方案。首先建立欠驱动 USV 的动力学模型,并对约束边界进行数学描述。然后基于模型预测控制原理,构建以编队误差和控制输入代价为目标的优化函数,在每个采样时刻求解有限时域内的最优控制序列,实现对 USV 的实时控制。通过引入约束处理机制,确保 USV 在编队路径跟踪过程中始终满足边界约束条件。仿真实验结果表明,该方法能够有效实现多艘欠驱动 USV 在约束边界下的精确编队路径跟踪,具有较强的鲁棒性和适应性,为实际工程应用中多 USV 协同作业提供了可靠的控制策略。
一、引言
1.1 研究背景与意义
自主水面航行器(USV)因其具备自主航行、环境感知和任务执行等能力,在海洋监测、水文勘测、海上救援、军事侦察等领域得到广泛应用 。在实际任务中,多艘 USV 协同作业能够显著提高任务执行效率和可靠性,如多 USV 编队进行大面积海域监测时,可通过合理的编队路径规划实现对目标区域的全面覆盖 。然而,欠驱动 USV 由于其自身结构特点,在控制自由度上存在限制,难以实现精确的运动控制 。同时,在实际海洋环境中,USV 的作业区域往往存在各种约束边界,如禁航区、航道边界等,如何确保多艘欠驱动 USV 在满足约束边界条件下实现稳定的编队路径跟踪,成为当前研究的热点和难点问题 。模型预测控制(Model Predictive Control,MPC)是一种基于模型的滚动时域优化控制方法,能够有效处理约束条件,在复杂系统控制中展现出良好的性能 。将 LMPC 应用于多艘欠驱动 USV 在约束边界下的编队路径跟踪控制,对于提升多 USV 协同作业能力,拓展其在复杂海洋环境下的应用范围具有重要的现实意义。
1.2 国内外研究现状
在多 USV 编队控制领域,国内外学者开展了大量研究工作 。在欠驱动 USV 控制方面,[国外学者姓名 1] 采用反步法设计控制器,实现了欠驱动 USV 的轨迹跟踪控制,但该方法在处理约束条件时存在一定局限性 。[国内学者姓名 1] 利用滑模控制技术对欠驱动 USV 进行控制,提高了系统的鲁棒性,但控制过程中存在抖振现象 。在模型预测控制应用方面,[国外学者姓名 2] 将 MPC 应用于多智能体系统的编队控制,取得了较好的效果,但未考虑系统的欠驱动特性和约束边界 。[国内学者姓名 2] 研究了基于 MPC 的 USV 路径跟踪控制,但在多 USV 协同编队及约束处理方面研究不够深入 。目前,将 LMPC 应用于多艘欠驱动 USV 在约束边界下的编队路径跟踪控制的研究相对较少,本文旨在填补这一研究空白,为该领域提供新的研究思路和方法。
二、欠驱动 USV 模型与约束边界描述
2.1 欠驱动 USV 动力学模型
⛳️ 运行结果
📣 部分代码
function [pos,pos_dw,thetao,wo] = virtualLeader1( pc, eF, eL, vs, ts )
%LOS [ud, rd, posd] = LOS( pc, eta, nu, ts )
% curved path LOS guidace law
% Author : Yinsong Qu
% Date : 7 15 2022
%[xd, yd, psid, psif, xe, ye, w] = LOS2( pc, k1, delta, x, y, psi, U, beta, w, ts )
% Author : Quyinsong
% Date: 2022 6 1
% reference : Path-Following Algorithms and Experiments for an Unmanned Surface Vehicle
%%%% INPUT:
% pc : chose curved path
% -------------------pc-----------------------------------
% 1: stright line path; 2: sinusoidal path; 3: circle path
% -------------------pc-----------------------------------
% eta = [x y psi]' : the position and heading angle of USV
% nu = [u v r]' : the speed and yaw angular rate
% ts : sample time
% check input and state dimentions
% if nargin ~=5,error('input number must be 4!');end
% states initializing
% states initializing
persistent theta
if isempty(theta)
theta = 0;
end
% curved path
switch pc
case 1
%---------------直线路径-----------------
xd = 50;
yd = theta;
xd_dw = 0;
yd_dw = 1;
xd_ddw = 0; yd_ddw = 0;
case 2
%---------------Wang 正弦曲线路径--------------
xd = 8*sin(0.5*theta) + 4*theta+60;
yd = 4*theta;
xd_dw = 4*cos(0.5*theta)+4;
yd_dw = 4;
xd_ddw = -2*sin(0.5*theta); yd_ddw = 0;
case 3
%---------------圆形路径------------------
R = 30;
xd = R*cos(theta)+30;
yd = R*sin(theta)+30;
xd_dw = -R*sin(theta);
yd_dw = R*cos(theta);
xd_ddw = -R*cos(theta); yd_ddw = -R*sin(theta);
case 4
%---------------混合路径------------------
xd = 10;
yd = theta;
xd_dw = 0; xd_ddw = 0;
yd_dw = 1; yd_ddw = 0;
if theta >= 80
R = 10;
xd = R*cos(theta-80);
yd = R*sin(theta-80)+80;
xd_dw = -R*sin(theta-80); xd_ddw = -R*cos(theta-80);
yd_dw = R*cos(theta-80); yd_ddw = -R*sin(theta-80);
end
if theta >= 80+pi
xd = -10;
yd = -(theta-80-pi)+80;
xd_dw = 0; xd_ddw = 0;
yd_dw = -1; yd_ddw = 0;
end
if theta >= 160+pi
xd = R*cos(theta-160-pi+pi);
yd = R*sin(theta-160-pi+pi);
xd_dw = -R*sin(theta-160-pi+pi); xd_ddw = -R*cos(theta-160-pi+pi);
yd_dw = R*cos(theta-160-pi+pi); yd_ddw = -R*sin(theta-160-pi+pi);
end
if theta >= 160+2*pi
xd = 10;
yd = theta-160-2*pi;
xd_dw = 0; xd_ddw = 0;
yd_dw = 1; yd_ddw = 0;
end
case 5
xd = 4*cos(theta);
yd = 3*theta;
xd_dw = -4*sin(theta);
yd_dw = 3;
xd_ddw = -4*cos(theta); yd_ddw = 0;
case 6
xd = theta;
yd = theta;
xd_dw = 1;
yd_dw = 1;
xd_ddw = 0; yd_ddw = 0;
if theta>=15
xd = 30-theta;
yd = theta;
xd_dw = -1;
yd_dw = 1;
xd_ddw = 0; yd_ddw = 0;
end
case 7
xd = 0;
yd = theta;
xd_dw = 0;
yd_dw = 1;
xd_ddw = 0; yd_ddw = 0;
end
%---------------------------------------------------------
kc = abs(xd_dw*yd_ddw-yd_dw*xd_ddw)/sqrt(xd_dw^2+yd_dw^2)^3; % 曲线路径的曲率
psip = atan2(yd_dw,xd_dw); % 路径虚拟参考点切线与x轴夹角
persistent psipf
if isempty(psipf)
psipf = psip;
end
psipf_dot = -(psipf-psip)/0.1;
psipf = ts*psipf_dot+psipf;
kcs = kc*sign(psipf_dot);
% 路径参数的更新
% 和参考文献中变量略有出入,w->theta, theta->w
persistent kg1 kg2 wk
if isempty(kg1)
kg1 = 0.05;
kg2 = 0.5;
wk = 0;
end
% wk = -kg*(eF-eL);
wk = -kg1*eF+kg2*eL;
% wk_dot = 0.001*(-eF+3*eL-0.5*wk);
% wk = wk_dot*ts+wk;
theta_dot = vs-wk;
theta = theta_dot*ts+theta;
pos = [xd,yd]';
pos_dw = [xd_dw,yd_dw]';
thetao = theta;
wo = wk;
en
🔗 参考文献
🎈 部分理论引用网络文献,若有侵权联系博主删除
👇 关注我领取海量matlab电子书和数学建模资料
🏆团队擅长辅导定制多种科研领域MATLAB仿真,助力科研梦:
🌈 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱调度、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化、CVRP问题、VRPPD问题、多中心VRP问题、多层网络的VRP问题、多中心多车型的VRP问题、 动态VRP问题、双层车辆路径规划(2E-VRP)、充电车辆路径规划(EVRP)、油电混合车辆路径规划、混合流水车间问题、 订单拆分调度问题、 公交车的调度排班优化问题、航班摆渡车辆调度问题、选址路径规划问题、港口调度、港口岸桥调度、停机位分配、机场航班调度、泄漏源定位
🌈 机器学习和深度学习时序、回归、分类、聚类和降维
2.1 bp时序、回归预测和分类
2.2 ENS声神经网络时序、回归预测和分类
2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类
2.4 CNN|TCN|GCN卷积神经网络系列时序、回归预测和分类
2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类
2.7 ELMAN递归神经网络时序、回归\预测和分类
2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类
2.9 RBF径向基神经网络时序、回归预测和分类