船舶操纵1要点.docx
- 文档编号:9165027
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:17
- 大小:192.12KB
船舶操纵1要点.docx
《船舶操纵1要点.docx》由会员分享,可在线阅读,更多相关《船舶操纵1要点.docx(17页珍藏版)》请在冰豆网上搜索。
船舶操纵1要点
船舶操纵运动仿真报告
指导老师:
王先洲
班级:
船海1303
小组成员:
徐田丰U201312305
桂强U201312311
张琳U201312296
李坚宇U201312316
丁逸轩U201312323
王睿哲U201212135
2016年5月7日
一·国内外研究现状
船舶操纵性是指船舶在驾驶者的操纵下,通过控制装置来保持或改变航速、航向和位置等运动状态的能力,他是船舶的运动性能之一。
它直接影响到船舶的经济性和安全性。
航运业的不断发展促进了船舶的大型化多样化和高速化航道航行密度的增加导致海上事故发生的概率上升使得人们对船舶操纵性的要求提高。
船舶操纵运动仿真作为一种在设计阶段常用的预报船舶操作性能的方法,在现代计算机迅速发展,多媒体进步的今天,这种方法更是有了深厚的发展前景。
目前这种技术在航海人员的训练中得到了广泛地引用;并且在港口航道的设计和管理上有一定作用。
同时在各工况下对船舶运动的仿真研究,各船型下运动的仿真研究,各个辅助装置对船舶运动影响的仿真研究都多如繁星。
如大型船舶进坞的仿真:
大型油轮进出坞时依靠船坞引船系统或拖船拖曳运动,由于船坞的坞口以及进出坞航道狭窄,使油轮的进出坞运动控制较困难,事故风险较高。
本文比较了油轮进出坞运动与深海域拖航系统运动的差异,从理论出发,建立了油轮进坞运动方程,利用四阶Runge-Kutta方法求解一阶微分方程组,得到了油轮进坞的运动轨迹及瞬时速度。
仿真结果表明,该油轮在较好的海况条件下进坞是安全的。
如风浪流作用下的船舶操纵运动仿真:
将OpenGL虚拟现实仿真技术运用到船舶操纵与控制领域中,利用MMG数学模型,建立了风浪流作用下船舶操纵运动的三维动态仿真系统,在系统开发过程中,首先采用MMG分离式数学模型及相关的系列化试验结果,建立单桨单舵海洋运输船舶在静水中的船舶操纵运动方程,并编制计算程序,经与试验结果比较,证实了计算结果的正确性;为了解MMG数学模型中模型参数变化对操纵性指数的影响程度在上述已有程序基础上,对有关模型参数进行偏移修正,探讨了相应参数变化后的操纵性指数,对船舶操纵性指数对模型参数的灵敏度进行了详细的分析与探讨 。
如半潜船的六维自由度仿真:
采用分离建模的思想,通过对船舶运动以及受力进行分析,建立了一个对半潜船在外力风、浪、流作用下的船舶运动数学模型进行了6自由方向上的建模。
并对船舶进行受力分析,建立了6自由度裸体船体水动力及力矩、6自由度流体动力及力矩和6自由度外力干扰力及力矩等计算模型和吊舱螺旋桨推进器的推力以及推力矩的计算模型。
最后通过计算机进行仿真,利用数值分析方法四阶Runge-Kutta算法计算出船舶6自由度运动状态。
目前主流的数学模型是mmg,这种模型通过水动力系数、桨和舵的相关系数对水动力进行建模,因此数学模型与上面的系数有很大的关系。
而本次我们采用abkowitz模型,这种模型需要船舶的所有水动力导数,进而计算出该模型在各种操舵规律下,各种运动参数随时间变化的曲线和模型的运动轨迹。
二·船舶运动方程
由于回转过程的速降、各种激烈的操纵运动,船舶操纵的线性模型因其局限性而无法准确地预报各种情况下的操纵运动。
因此,为了对船舶操纵运动进行更为精确的数学模拟,一般采用非线性数学模型。
在此介绍Abkowitz非线性数学模型。
该模型将方程中的流体动力函数X、Y、N在直航状态附近对各运动参数做泰勒级数展开,即把XYN表示为各种状态变量及耦合项的泰勒级数之和。
由上式可知,常系数非线性方程组的解如下:
上式即为一阶微分方程组,可利用计算机迅速求得其近似解。
只要一直前一瞬时t的u,v,r,
值,便可解出该瞬时的
值。
进而推算出下一瞬间的速度状态变量。
因此微分后可以求得船舶相对于固定坐标系的线速度值,即为绝对速度:
对上式进行积分:
其中:
为初始时刻状态值。
由各瞬时之
值就可以绘制其轨迹。
如果船体重心G与动坐标原点O不重合,则需要进行适当的修正从而得到正确的重心轨迹。
以上即Abkowitz非线性模型的简要内容,如果某船的全部水动力导数已知,则运用该模型可以方便的计算出其在各种操舵情况下,运动参数随时间的变化及其轨迹,由实际实验证明,该数学模型预报值和实船实验值符合较好,所以为了计算某船的操纵运动,确定其水动力导数是非常重要的。
Abkowitz数学模型中众多水动力导数可以通过各种约束船模实验而测得,而阻力实验和螺旋桨敞水试验可以提供另一部分系数值。
三·仿真结果及分析
本次测试的船型为mariner
Matlab代码如下
functionxdot=mariner(x,ui)
if~(length(x)==7),error('x-vectormusthavedimension7!
');end
if~(length(ui)==1),error('u-vectormusthavedimension1!
');end
U0=7.72;
U=sqrt((U0+x
(1))^2+x
(2)^2);
L=160.93;
delta_c=ui
(1);
u=x
(1)/U;v=x
(2)/U;delta=x(7);
r=x(3)*L/U;psi=x(4);
delta_max=15;
Ddelta_max=5;
m=798e-5;Iz=39.2e-5;xG=-0.023;
Xudot=-840e-5;Yvdot=-1546e-5;Nvdot=23e-5;
Xu=-184e-5;Yrdot=9e-5;Nrdot=-83e-5;
Xuu=-110e-5;Yv=-1160e-5;Nv=-264e-5;
Xuuu=-215e-5;Yr=-499e-5;Nr=-166e-5;
Xvv=-899e-5;Yvvv=-8078e-5;Nvvv=1636e-5;
Xrr=18e-5;Yvvr=15356e-5;Nvvr=-5483e-5;
Xdd=-95e-5;Yvu=-1160e-5;Nvu=-264e-5;
Xudd=-190e-5;Yru=-499e-5;Nru=-166e-5;
Xrv=798e-5;Yd=278e-5;Nd=-139e-5;
Xvd=93e-5;Yddd=-90e-5;Nddd=45e-5;
Xuvd=93e-5;Yud=556e-5;Nud=-278e-5;
Yuud=278e-5;Nuud=-139e-5;
Yvdd=-4e-5;Nvdd=13e-5;
Yvvd=1190e-5;Nvvd=-489e-5;
Y0=-4e-5;N0=3e-5;
Y0u=-8e-5;N0u=6e-5;
Y0uu=-4e-5;N0uu=3e-5;
m11=m-Xudot;m23=m*xG-Yrdot;m33=Iz-Nrdot;
m22=m-Yvdot;m32=m*xG-Nvdot;
ifabs(delta_c)>=delta_max*pi/180,
delta_c=sign(delta_c)*delta_max*pi/180;end
delta_dot=delta_c-delta;
ifabs(delta_dot)>=Ddelta_max*pi/180,
delta_dot=sign(delta_dot)*Ddelta_max*pi/180;end
X=Xu*u+Xuu*u^2+Xuuu*u^3+Xvv*v^2+Xrr*r^2+Xrv*r*v+Xdd*delta^2+Xudd*u*delta^2+Xvd*v*delta+Xuvd*u*v*delta;
Y=Yv*v+Yr*r+Yvvv*v^3+Yvvr*v^2*r+Yvu*v*u+Yru*r*u+Yd*delta+Yddd*delta^3+Yud*u*delta+Yuud*u^2*delta+Yvdd*v*delta^2+Yvvd*v^2*delta+(Y0+Y0u*u+Y0uu*u^2);
N=Nv*v+Nr*r+Nvvv*v^3+Nvvr*v^2*r+Nvu*v*u+Nru*r*u+Nd*delta+Nddd*delta^3+Nud*u*delta+Nuud*u^2*delta+Nvdd*v*delta^2+Nvvd*v^2*delta+(N0+N0u*u+N0uu*u^2);
xdot=[X*(U^2/L)/m11
-(-m33*Y+m23*N)/(m22*m33-m23*m32)*U^2/L
(-m32*Y+m22*N)/(m22*m33-m23*m32)*U^2/L^2
r*U/L
(cos(psi)*(U0/U+u)-sin(psi)*v)*U
(sin(psi)*(U0/U+u)+cos(psi)*v)*U
delta_dot];
end
①回转运动
回转运动仿真轨迹
可以根据上图直接得到测试船型mariner的回转圈的主要特征参数:
反撗距
,正横距
,纵距
,战术直径
,定常回转直径
。
直接判断测试船型的回转性可以看战术直径的大小,当
=3L~6L时。
可以说该船的回转性达标,
越小越好。
GUI
代码如下
functionvarargout=GUI1(varargin)
gui_Singleton=1;
gui_State=struct('gui_Name',mfilename,...
'gui_Singleton',gui_Singleton,...
'gui_OpeningFcn',@GUI1_OpeningFcn,...
'gui_OutputFcn',@GUI1_OutputFcn,...
'gui_LayoutFcn',[],...
'gui_Callback',[]);
ifnargin&&ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
end
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
});
end
functionGUI1_OpeningFcn(hObject,eventdata,handles,varargin)
handles.output=hObject;
guidata(hObject,handles);
functionvarargout=GUI1_OutputFcn(hObject,eventdata,handles)
varargout{1}=handles.output;
functionedit1_Callback(hObject,eventdata,handles)
input=str2num(get(hObject,'String'));
if(isempty(input))
set(hObject,'String','');end;
guidata(hObject,handles)
functionedit1_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functionedit3_Callback(hObject,eventdata,handles)
functionedit3_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functionedit4_Callback(hObject,eventdata,handles)
input=str2num(get(hObject,'String'));
if(isempty(input))
set(hObject,'String','');end;
guidata(hObject,handles)
functionedit4_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functionpushbutton1_Callback(hObject,eventdata,handles)
a=get(handles.edit4,'String');
b=str2num(a);
t=0:
0.1:
1500;
u=t;v=t;r=t;psi=t;xpos=t;ypos=t;delta=t;
delta_c=b*pi/180;
u
(1)=0;v
(1)=0;r
(1)=0;psi
(1)=0;xpos
(1)=0;ypos
(1)=0;delta
(1)=0;
fori=1:
15000
x=[u(i)v(i)r(i)psi(i)xpos(i)ypos(i)delta(i)];ui=delta_c;
xdot=mariner(x,ui);
u(i+1)=u(i)+0.1*xdot
(1);
v(i+1)=v(i)+0.1*xdot
(2);
r(i+1)=r(i)+0.1*xdot(3);
psi(i+1)=psi(i)+0.1*xdot(4);
xpos(i+1)=xpos(i)+0.1*xdot(5);
ypos(i+1)=ypos(i)+0.1*xdot(6);
delta(i+1)=delta(i)+0.1*xdot(7);
end;
plot(xpos,ypos)
guidata(hObject,handles);
②Z型操舵
Z型操舵运动仿真轨迹
试验曲线
,
~t曲线
根据上图,可以通过测量得出超越角
在很长一段时间里,其为表征船舶的操纵性的直接参数之一
=KT
由上式可以看出超越角可以在一定程度上表征操纵性
还可以测量得出转向滞后
,是对回转惯性的一种度量。
由以上两个可以直观测得的参数可以评价试验船舶的操纵性是否优良。
此外还可以通过野本谦作建议的K-T分析,做大量的辅助线及计算,求得K,T,这种方法更为精确,也更为直接。
GUI代码如下
functionvarargout=GUI2(varargin)
gui_Singleton=1;
gui_State=struct('gui_Name',mfilename,...
'gui_Singleton',gui_Singleton,...
'gui_OpeningFcn',@GUI2_OpeningFcn,...
'gui_OutputFcn',@GUI2_OutputFcn,...
'gui_LayoutFcn',[],...
'gui_Callback',[]);
ifnargin&&ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
end
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
});
end
functionGUI2_OpeningFcn(hObject,eventdata,handles,varargin)
handles.output=hObject;
guidata(hObject,handles);
functionvarargout=GUI2_OutputFcn(hObject,eventdata,handles)
varargout{1}=handles.output;
functionedit1_Callback(hObject,eventdata,handles)
if(isempty(input))
set(hObject,'String','');end;
guidata(hObject,handles)
functionedit1_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functionedit2_Callback(hObject,eventdata,handles)
if(isempty(input))
set(hObject,'String','');end;
guidata(hObject,handles)
functionedit2_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functionpushbutton1_Callback(hObject,eventdata,handles)
a=get(handles.edit2,'String');
b=str2num(a);
c=get(handles.edit3,'String');
d=str2num(c);
t=0:
0.1:
500;
u=t;v=t;r=t;psi=t;xpos=t;ypos=t;delta=t;toda=t;gakki=t;
delta_c=b*pi/180;
u
(1)=0;v
(1)=0;r
(1)=0;psi
(1)=0;xpos
(1)=0;ypos
(1)=0;delta
(1)=0;toda
(1)=delta_c;gakki
(1)=-1;
fori=1:
5000
if(abs(psi(i))>=d*pi/180&&sign(psi(i))==sign(gakki(i))),
toda(i+1)=-toda(i);gakki(i+1)=-gakki(i);
elsetoda(i+1)=toda(i);gakki(i+1)=gakki(i);end
x=[u(i)v(i)r(i)psi(i)xpos(i)ypos(i)delta(i)];ui=toda(i);
xdot=mariner(x,ui);
u(i+1)=u(i)+0.1*xdot
(1);
v(i+1)=v(i)+0.1*xdot
(2);
r(i+1)=r(i)+0.1*xdot(3);
psi(i+1)=psi(i)+0.1*xdot(4);
xpos(i+1)=xpos(i)+0.1*xdot(5);
ypos(i+1)=ypos(i)+0.1*xdot(6);
delta(i+1)=delta(i)+0.1*xdot(7);
end;
plot(xpos,ypos)
plot(delta,'DisplayName','delta');holdon;plot(psi,'DisplayName','psi');holdoff;
guidata(hObject,handles);
functionedit3_Callback(hObject,eventdata,handles)
if(isempty(input))
set(hObject,'String','');end;
guidata(hObject,handles)
functionedit3_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
四·结论
通过本次仿真试验,得到测试船型的回转直径,超越角及转向滞后,粗略的通过这些参数评估了测试船型mariner的回转性能和操纵性能。
其中
≈0.15,
≈50s,
≈1350=8.4L
所以mariner的回转性不是很好,操纵性不错。
此外,也可以看到回转轨迹并不是圆形而是椭圆形,回转半径大于战术直径等图中出现的与一般情况不太一样的现象,因此说明我组的仿真并不是很准确(考虑到mariner船型的适用范围很广),因此根据仿真数据得出的战术回转直径可能并不准确,因此导致以上的mariner回转性不是很好的结论。
所以其实本次的结论较可疑,并不能够成为值得参考的仿真试验。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 船舶 操纵 要点
![提示](https://static.bdocx.com/images/bang_tan.gif)