当前位置:网站首页>matlab simulink欠驱动水面船舶航迹自抗扰控制研究
matlab simulink欠驱动水面船舶航迹自抗扰控制研究
2022-07-31 04:58:00 【studyer_domi】
1、内容简介
略
454-可以交流、咨询、答疑
2、内容说明
为解决常规水面船舶的欠驱动、系统内部动态和外部干扰不确定性、控制输入饱和、运动状态约束条件特性及风流干扰作用下的横漂等控制问题,本文进行了基于自抗扰控制的欠驱动水面船舶航迹控制的研究,主要工作和成果包括:1.欠驱动船舶非线性动力学模型的研究:基于船舶分离型模型并结合前人试验数据,建立了精度较高的欠驱动船舶运动数学模型;结合模型分析了船舶运动特性;应用建立的船舶非线性水动力模型,在Matlab Simulink环境下搭建了高精度的三自由度船舶运动控制仿真平台,为后面验证航迹跟踪控制器的有效性打下基础。
2.滑模自抗扰控制算法的研究:利用扩张状态观测器能够求微分的功能将跟踪控制问题转化为镇定控制问题,简化了自抗扰控制结构;提出了滑模自抗扰控制方法,应用滑模迭代方法设计自抗扰控制律中误差反馈环节,并分别利用线性滑模和具有约束条件的非线性滑模设计误差反馈控制律以解决船舶运动状态的约束条件特性问题,改进了自抗扰控制的结构,参数物理意义明显、调整简单直观;应用单调有界的双曲正切函数解决自抗扰控制输入饱和的问题。
3.船舶路径跟踪自抗扰控制设计的研究:利用自抗扰控制主动抗扰模式,控制设计时不考虑航向,直接将船舶路径的横向偏差作为被控制量,设计了基于无参考航向角的滑模自抗扰路径跟踪控制器,实现了船舶的初始船首向与计划航向差值小于90度时的直线和曲线路径跟踪;利用双曲正切函数的单调有界性设计了路径横向偏差与航向偏差的非线性组合函数,并将对其镇定作为控制目标,设计了基于参考航向的路径跟踪自抗扰控制器,确保船舶在初始船首向与计划航向角差值大于90度依然能够回到计划航线;为解决风流干扰造成的船舶横漂问题,基于参考航向的船舶路径跟踪控制算法,采用如下三种各自独立的控制设计方法进行船舶路径跟踪自抗扰控制设计,实现了欠驱动船舶能够在风流干扰作用下对直线和(或)曲线路径的跟踪控制。三种方法分别为:(1)基于Backstepping思想的路径跟踪控制;(2)基于航迹向跟踪的路径跟踪控制;(3)基于构造期望参考船首向的路径跟踪控制。
4.船舶轨迹跟踪自抗扰分散控制设计的研究:将分散控制理论应用于欠驱动中文摘要船舶航迹跟踪控制,结合自抗扰控制方法,针对多输入多输出船舶轨迹跟踪控制系统设计欠驱动船舶轨迹跟踪自抗扰分散控制器,设计思路是将命令舵角和螺旋桨转速看做系统的控制输入,舵角控制船舶路径、螺旋桨转速控制前进速度,将耦合部分纳入总扰动由扩张状态观测器根据系统的输入和输出进行实时估计并在控制律中加以补偿。
5.以大连海事大学实习船“育龙”轮为仿真对象,基于第二章搭建的仿真平台进行了大量仿真实验,验证了本文提出的控制方法的有效性。
关键词:欠驱动水面船舶;自抗扰控制;滑模控制;跟踪控制;分散控制
3、仿真分析
略
global Cr ct cq L B D dm Tr Cb xG xC Dp P AR KR Ae Z V n Cer
global Vw Rw Va Ra Af As Cax Cay Can windmark
global W_alfa W_h wavemark
L=126.0;
B=20.8;
D=12.0;
dm=8.0;
Tr=0;
Cb=0.681;
xG=0.63;
xC=0.63;
Af=369.9;
As=1031.94;
Dp=4.6;
P=3.66;
AR=18.8;
KR=1.72;
Ae=0.67;
Z=4;
V=7.2;
n=1.72;
Va=5;
Ra=45*pi/180;
Vw=1;
Rw=45*pi/180;
windmark=1;
W_alfa=0;
W_h=0;
wavemark=0;
Cer =[-0.0003;1.7;0.5];
Cr=[2.659067;-26.710230;90.341408;-94.853523];
ct=[0.233186;0.174393;0.074838;-0.046595;-0.192006;-0.359573;-0.518262;
-0.653198;-0.703073;-0.587934;-0.569628;-0.605517;-0.650035;-0.598961;
-0.476174;-0.367517;-0.253263;-0.142511;-0.166297;-0.115714;-0.019068;
0.100802;0.246726;0.402032;0.571907;0.732503;0.813027;0.580177;0.575889;
0.638652;0.730599;0.677914;0.593469;0.473219;0.335963;0.193398;0.233186];
cq=[0.031830;0.024481;0.011163;-0.006299;-0.027863;-0.055717;-0.083420;
-0.082323;-0.083501;-0.083183;-0.086183;-0.093443;-0.101763;-0.097885;
-0.075269;-0.058861;-0.038432;-0.022762;-0.030428;-0.020431;-0.006266;
0.012706;0.036566;0.062638;0.093123;0.127133;0.098684;0.088164;0.091701;
0.100598;0.109607;0.092991;0.078355;0.065496;0.047773;0.027696;0.031830];
Cax=[-0.703442;-0.731936;-0.758889;-0.713908;-0.624090;-0.522425;-0.414308;
-0.290827;-0.145585;0.019059;0.192950;0.361189;0.508493;0.625062;
0.709686;0.762770;0.773053;0.732693;0.703599];
Cay=[0.005461;0.170876;0.367795;0.577378;0.762236;0.903312;0.998164;
1.054177;1.081991;1.090018;1.081038;1.051378;0.992554;0.894897;
0.752553;0.569293;0.363985;0.170459;0.001199];
Can=[0.001044;0.027557;0.048280;0.058471;0.054324;0.037280;0.011249;
-0.019745;-0.052726;-0.085817;-0.117542;-0.145858;-0.167474;
-0.177843;-0.172131;-0.147293;-0.105093;-0.054330;-0.000418];
%======Initial State==========
ini_y = 0; % initial state of y
ini_phai = 0*pi/180; % initial value of phai
%=======controller parameters========
limit_u = 35*pi/180;
rate_u = 6*pi/180;
limit_phai = 90*pi/180;
ini_ydot = sin(ini_phai);
% ======================================
k1=0.03;
k2=0.1;
c1 = pi/6;
c0 = 0.03;
ini_z1 = c1*tanh(c0*ini_y) + ini_phai;
%K = 0.478;
K = 0.478;
T = 216;
b01 = K/T;
wc1 = 0.03;
wo1 = 0.4;

subplot(5,1,1)
plot(x_1,y_2,'k-',x_1,y_3,'-.','linewidth',1);
grid on
hold off
xlabel('x(m)');
ylabel('y(m)');
%legend('Ref','Real track ');
%plot(x_1,y_3,'b-','linewidth',1);
axis([0 8000 -600 600]);
legend('track','ref')
%axis('square')
%box on
%figure
subplot(5,1,2)
plot(t_1,ra_1,'k-','linewidth',1);
grid on;
xlabel('t (s)');
ylabel('Rud (deg)');
axis([0 1200 -40 40]);
%figure;
subplot(5,1,3)
plot(t_1,y_1,'k-','linewidth',1);
grid on;
xlabel('t (s)');
ylabel('y(m)');
axis([0 1200 -600 600]);
%figure;
subplot(5,1,4)
plot(t_1,phai_1,'k-','linewidth',1);
grid on;
xlabel('t (s)');
ylabel('heading(deg)');
axis([0 1200 -40 40]);
subplot(5,1,5)
plot(t_1,u_1,'k-','linewidth',1);
grid on;
xlabel('t (s)');
ylabel('speed (m/s)');
axis([0 1200 0 10]);
%figure;


4、参考论文
略
边栏推荐
- ERROR 1064 (42000) You have an error in your SQL syntax; check the manual that corresponds to your
- sql语句之多表查询
- .NET-6.WinForm2.NanUI学习和总结
- PCL calculates the point cloud coordinate maximum and its index
- [Linear Neural Network] softmax regression
- 1. 获取数据-requests.get()
- 【py脚本】批量二值化处理图像
- DVWA靶场环境搭建
- centos7安装mysql5.7
- Blockbuster | foundation for platinum, gold, silver gave nameboards donors
猜你喜欢

The input input box displays the precision of two decimal places

DVWA靶场环境搭建

三道leetcode上的oj题

Unity Framework Design Series: How Unity Designs Network Frameworks

Centos7 install mysql5.7

MySQL transaction isolation level, rounding

Unity教程:URP渲染管线实战教程系列【1】

打造基于ILRuntime热更新的组件化开发

input输入框展示两位小数之precision

CentOS7 —— yum安装mysql
随机推荐
sql statement - how to query data in another table based on the data in one table
STM32——DMA
Gaussian distribution and its maximum likelihood estimation
MySQL database must add, delete, search and modify operations (CRUD)
行业落地呈现新进展 | 2022开放原子全球开源峰会OpenAtom OpenHarmony分论坛圆满召开
Create componentized development based on ILRuntime hot update
打造基于ILRuntime热更新的组件化开发
The MySQL database installed configuration nanny level tutorial for 8.0.29 (for example) have hands
What are the advantages and disadvantages of Unity shader forge and the built-in shader graph?
SQL行列转换
Unity Tutorial: URP Rendering Pipeline Practical Tutorial Series [1]
限流的原理
MySQL优化之慢日志查询
剑指offer专项突击版第15天
A complete introduction to JSqlParse of Sql parsing and conversion
input输入框展示两位小数之precision
HCIP第十天_BGP路由汇总实验
Lua,ILRuntime, HybridCLR(wolong)/huatuo热更新对比分析
.NET-6.WinForm2.NanUI学习和总结
Minio上传文件ssl证书不受信任