matlab simulink欠驱动水面船舶航迹自抗扰控制研究
Posted studyer_domi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab simulink欠驱动水面船舶航迹自抗扰控制研究相关的知识,希望对你有一定的参考价值。
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、参考论文
略
以上是关于matlab simulink欠驱动水面船舶航迹自抗扰控制研究的主要内容,如果未能解决你的问题,请参考以下文章
船舶基于matlab simulink船舶推力分配含Matlab源码 2416期
matlab/simulink自适应控制轮毂电机驱动的电动汽车主动悬架构型与控制