东北大学秦皇岛分校
数学软件认识实习报告
MATLAB\SIMULINK仿真应用及导弹制导系统
模拟
学院数学与统计学院
专业信息与计算科学
学号7110211
姓名李振兴
指导教师张尚国李明维
成绩
教师评语:
指导教师签字:
2010年12月27日
1 绪论
1.1 课题的背景及目的
导弹制导系统(missile guidance system)也称导弹导引和控制系统。测量和计算导弹对目标或空间基准线的相对位置,以预定的导引规律控制导弹飞达目标的系统。导引和控制导弹按选定的规律调整飞行路线并导向目标的全部装置。亦称导弹导引和控制系统。其功能是测量、计算导弹实际飞行路线和理论飞行路线的差别,形成制导指令,经过放大和转换,由伺服机构调整导弹的发动机推力方向或舵面偏转角,控制导弹的飞行路线,以允许的误差(脱靶距离)靠近或命中目标。
Matlab是一种具有广泛应用前景的全新的计算机高级编程语言,它集科学计算、图形界面设计、图像处理、声音处理、曲线显示等特点于一身,且其编程效率与可读性、可移植性要高于其他高级语言。
1.1.1 Matlab/Simulink的特点:
1)高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;
2)具有完备的图形处理功能,实现计算结果和编程的可视化;
3)功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。
4)Matlab提供强大的、交互式的二维及三维绘图功能,有一系列绘图函数,可是实现曲线渲染、线框图、伪彩图、光源、等位(值)图、图像显示、体积可视等,而且数据的可视化水平高,易于实现,并具有较强的图形编辑和用户图形界面设计能力。
5)Matlab提供了强大的Simulink系统仿真软件。Simulink提供航空航天飞行器推进系统、控制系统、动力学模块及六自由度和三自由度模型库,可以进行固定质量或者变质量体系的建模与仿真;提供重力场、磁场、大气和风的标准环境模型。可以利用各种转换模块,方便实现坐标转换,能够完成各物理量的单位制转换,也可以方便地构造出导弹飞行所需的数字模型。
1.2课题的研究方法
本课题主要是用MATLAB软件求解常微分方程数值解以及微分方程解的稳定性和数值解法,并建立数学模型,绘制相应导弹的运行模式图,和船只运行过程的图像。利用图像分析导弹与船只运行状态。
1.3 论文构成及研究内容
本课题是基于Matlab强大的绘图计算能力和较强的图像编辑能力,来模拟导弹制导过程中的的运动过程。利用简单的实例来说明导弹的实际运行路线。
2 Matlab/Simulink仿真应用及导弹制导系统模拟
2.1 Simulink仿真
2.1.1 Simulink概述
Simulink是Matlab的重要组成部分。是Matlab环境下对动态系统建模、仿真和分析的软件包。它提供图形用户界面,用户可以用鼠标操作,从模板库中调用标准模板,将它们适当地连接起来,以构成动态系统模型。Simulink与用户交互接口是基于Windows的模型化图形输入,从而可使用户吧更多的精力投入到系统建模的构建。
2.1.2 Simulink模块库
模块库有各个模块组成,整个Simulink模块库包含有若干模块组。例如:常用模块组:Commonly Used Blocks。
连续模块组:Continuous。
非连续模块组:Discontinuties。
离散模块组:Discrete。
逻辑与二进制操作模块组:Logic and Bit Operations。
寻表操作组:Lookup Tables。
等,用户可以自定义模块组。模块作为仿真模型的基本组成单元,其基本操作包括选定、复制、移动、调整、删除、、标志和连接等。
Simulink模块基本操作为:
1)建立简单模型(如图1)
图1.
启动仿真(图2):
图2.
2)模块的操作
模块的操作主要包括模块的选取、复制、调整、旋转、删除、颜色设定、参数设定、注释以及连线。
2.1.3 仿真配置
在系统仿真的过程中必须事先对仿真算法、输出模式等各种仿真参数进行设置。其方法是:打开系统仿真模型,选择模型编辑窗口Simulation菜单下的Configuration Parameters 命令。仿真参数设置地Simulink仿真的一个优点和亮点,也是一个难点。
图3
1)Solver选项
仿真时间设置:
这里所指的时间概念与真实的时间并不一样,只是计算机仿真中对时间的一种表示。需要设置的有仿真开始时间和仿真结束时间。一般仿真开始时间设为0,而结束时间则视不同情况而定。
仿真步长模式设置
用户可在Type下拉列表框中指定仿真的步长选择方式,可供选择的有Variable-step(变步长)和Fixed-step(固定步长)方式。
解法器设置
用户可以再Solver下拉列表框中选择变步长模式解法器和固定步长模式解法器。
变步长参数设定
对于变步长模式,用户常用的设置有最大和最小步长参数、相对误差和绝对误差、初始步长以及过零控制。默认情况下,步长自动确定,用auto值表示。
固定步长参数设置
对于固定步长模式,用户常用的设置有:Multiasking、Singletasking、Auto。
2)Data Import\Export选项
Load fron workspace:
选中Input复选框即可从Matlab工作空间获取时间和输入变量,一般时间变量定义为他,输入变量定义为u。Initial state用来定义从Matlab工作空间获取的状态初始值的变量名。Simulink通过设置模型的输入端口,实现在仿真过程中从工作空间读入数据。常用的输入端口模块为信号与系统模块库(Signal &Systems)中的In1模块,设置其中的参数时,选中Input复选框,并在后面的文本框中输入输入数据的变量名,可以用命令窗口或M文件编辑器输入数据。Simulink根据输入端口参数中设置的采样时间读取输入数据。
Save to work
用来设置保存在Matlab工作空间的变量类型和变量名。可以选择保存的选项时间、端口输出、状态和最终状态。选中某一选项前面的复选框并在该选项后面的文本框中输入变量名,就会把想要的数据保存到指定的变量中。
Save options
用来设置存往工作空间的有关选项。
2.1.4 子系统的创建及封装
1)子系统的创建
用户可以通过以下两种方式建立子系统:先添加模块,再将模块组合到子系统中。或先构建空白子系统,再把子系统块所包含的模块添加进去。Simulink子系统的作用是使系统更加简洁,可读性高;而且子系统可以反复调用,节省时间。
压缩子系统方法:
建立如图所示的系统模型图,
图4.
生成的子系统模块Subsystem:
图15.
2)子系统的封装
可以将Simulink子系统包装成一个模块,并且可以像使用Simulink内部模块一样使用它,这样可以将子系统内部结构隐藏起来,访问时只出现一个参数设置对话框,所需要的参数在对话框中来进行设置。
图17.
2.1.5 S-函数应用及对单摆进行仿真实验
使用S-函数对单摆系统进行仿真具体步骤:
图 18.
1) 利用S-函数对单摆进行建模。
2) 利用Simulink 进行仿真,并对其位移进行分析 3) 利用S-函数动画模块来演示单摆的运动效果。 单摆的运动方程为:
)sin(K M θθθ
g d F u -=+ 其中,u 为作用在单摆上的外力;d K 为阻尼系数;g F 为单摆重力。
令θ=1x ,θ
=2x ,则动力学方程为 ??
????-+-=??????)sin(K 122
1x F u x x x g d
根据状态方程,在模版的基础上编写S-函数
function [sys, x0,str, ts]=dbyd(t,x,u,flag,d,g,a,m)
%标志flag控制仿真流程
switch flag,
case 0,[sys,x0,str,ts]=mdlInitializeSizes(a);
case 1,sys=mdlDerivatives(t,x,u,d,g,m);
case 2,sys=mdlUpdate(t,x,u);
case 3,sys=mdlOutputs(t,x,u);
case 9,sys=mdlTerminate(t,x,u);
otherwise error(['Unhandled flag = ' ,num2str(flag)]);
end
%初始化例程子函数
function [sys,x0,str,ts]=mdlInitializeSizes(a)
sizes = simsizes;
sizes.NumContStates = 2;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 1;
sizes.NumInputs =1;
sizes.DirFeedthrough =0;
sizes.NumSampleTimes =1;
sys = simsizes(sizes);
x0=a;
str = [];
ts = [0, 0];
%计算导数例程子函数
function sys = mdlDerivatives(t,x,u,d,g,m)
dx(1)=x(2);dx(2)=-d*x(2)-m*g*sin(x(1))+u;sys = dx;
%状态更新例程子函数
function sys = mdlUpdate(t,x,u)
sys = [];
%计算输出例程子函数
function sys = mdlOutputs(t,x,u)
sys = x(1);
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1; sys = t + sampleTime;
function sys=mdlTerminate(t,x,u) sys = [];
构建Simulink模型仿真图并对Signal Generator模块、S-function模块进行参数设置
图19.单摆Simulink仿真模型图
图20.Signal Generator模块参数设置
图21.S-Function模块参数设置在命令窗口输入并运行:
>> d=0.6;g=10;a=[0;0];m=0.4;
图21. 摆仿真效果
进行动态仿真,建立动态仿真模型图:
图22. 修改后的Simulink模型
动态仿真效果图:
图23. 单摆动态效果
2.2 导弹跟踪问题实例
例:A方导弹基地发现正北120km处海面有敌对方舰只正以90km/h的速度向正东方行驶,该基地立即发射导弹跟踪追击。已知导弹速度为450km/h ,导弹的制导系统能使导弹在任何时刻都对准敌舰飞行。试模拟导弹与敌舰的运动轨迹,根据模拟结果,导弹在何时何处击中敌舰?
2.2.1 分析问题
1)建立坐标系:
图 24.
2)建立数学模型:
时刻t 导弹的位于为P(x(t),y(t)),其速度可由水平分速度与垂直分速度合成
22
2d d d d w v t y t x =??
? ??+??? ?? 导弹方向指向敌艇,故有
x t v y H x y e --=d d ? )(d d d d x
t v y H t x t y e --= Vw =450 (km/h) Ve =90 (km/h)
导出一阶微分方程组
????
??????
???
??
?
?
==--+=--+=0)0(0
)0()
(1d d )
(1d d 22y x x t v y H v t x
x t v y H v t x e w e w
3)利用解析方法求解: 消去 t ,化为二阶方程
λ
=+-1
)()
(22
2dy dx y H y d x d ,
)(w
e
v v =
λ 连同初始条件
0,
00
====o
y y dy
dx x
设dy
dx
p =
降阶得到一阶可分离变量方程 y
H p dy dp
-+=
12λ ?])()[(
21λ
λH
y H y H H p ---= 解得代入将,dy dx
p =
2
111]1)()1()([21λ
λλλλλλλ-+---+-=-+H
y H H H y H x 导弹击中艇时y=H, 得到此时其位置和时刻
2778.0,)km (2512
≈===-=
=e v L
T t H L x λλ
4) 利用Euler 方法(数值方法)求解: Euler 方法十分简单, 就是用差商代替微商,即
k
k k
k k
k k
k t t y y t y dt dy t t x x t x dt dx --=???--=???++++1111, 通常取Δt 为常数τ,就得到由第k 步的值到第k+1步的值之间的关系式 ,t = t k +1时导弹位置为(x k +1 ,y k +1)
???
?
????
????
?
????
==--++=--++=++0,0)
(1)(100212
1y x y H x t v v y y x t v y H v x x
k k k e w k
k k k e k w k k ττ 计算到H H k k ≥<+1y ,y 停止,取L ≈k x
2.2.2 利用Matlab 进行建模
1)求微分方程(组)数值解的MATLAB 命令
ode23 2/3阶Runge-Kutta 法;
ode45 4/5阶Runge-Kutta 法; ode15s 刚性方程组的解法;
ode23s 刚性方程组的解法
[T,Y]=solver(‘odefun ’,tspan,y0,options);
solver 取上述四个函数之一,不同的函数代表不同的内部算法,ode45是最常用的求解微分方程命令,它采用变步长四阶Runge-Kutta 法和五阶Runge-Kutta-Felhberg 法, ode23与ode45类似,只是精度低一些,对于刚性方程,宜采用ode15s 或ode23s 。 字符串odefun 是用于表示待解方程写成的M 文件名;
tspan=[t0 tf]表示自变量初值t0和终值 tf ,y0表示函数的初始向量;
Options 用于设计求解的误差限(该参数可以缺省,缺省时相对误差是3-10,绝对误 为6-10);输出列向量T 表示节点T n t t t ),,(10 ,输出矩阵Y 表示微分方程(组)数值解;
2)Matlab 计算机求解 建立M 文件fun1.m 如下:
function f = fun1(t,x) a=450;b=90;c=120;
f(1) = a/(sqrt(1+((c-x(2))/(b*t-x(1))))^2); f(2) = a/(sqrt(1+((b*t-x(1))/(c-x(2))))^2);\ f=f(:);
在MATLAB 命令框中输入命令:
>>clear;[t,x]=ode45(@fun1,[0 0.4],[0.01;0]);plot(t,x(:,1),t,x(:,2),':');
>>clear;[t,x]=ode45(@fun1,[0 0.4],[0.01;0]);plot(x(:,1),x(:,2)); %画出导弹运动图 >>hold on %在同一个图形坐标上继续作图 >>plot(x,y,‘-’)%画一条经过y 值为120的横线
图25.
有图像可以看出导弹的运行轨迹,知:在大约27分钟时刻,导弹击中船只。 2.3 用Simulink 建立弹道仿真模型
根据物理知识,可以建立导弹运动三维公式:
目标质心的运动学方程(为了简化方程,将地面面坐标系Axyz 视为惯性坐标系,并把矢量坐标系投影到弹道坐标系2Ox ,2y ,2z ,经过变换得):
??????????=??????
??
?
?????????-2x 22F F c os x x v
m m m
m m F dt d mv dt
d mv dt dv m ?θθ
目标质心运动学方程:
???????
???=???????
?
?
?????????-vm m m m
m vm
m m m m v v v dt dz dt dy dt dx ?θθ?sin cos sin cos
根据目标运动及相对运动方程组,在Simulink 环境下编辑三维比例导引导弹的仿真模
型,鉴于该模型整体编辑时比较复杂,为了使这个系统便于观察和操作,可以通过把模块组成子系统来简化模型。整个仿真模型如图。模型中包含3个子系统:目标云动模块、导弹追踪模块和虚拟现实显示模块。
图27.导弹仿真模型
目标运动模块
该模块通过应用目标质心的动力学方程式,根据目标质心作用力2x F、2y F、2z F,求出
?;再通过目标质心的运动学方程式,即可计算目标的速度m v、弹道倾角mθ、弹道偏角vm
出每一时刻目标位置(m x,m y,m z)
可视化仿真及结果分析
VR Sink模块可实现Simulink模型与虚拟场景的连接。在Simulink模型窗口中双击VR Sink模块,在弹出的参数对话框中,单机Browse按钮,选中保存的Missile_Target.wrl文件,在右侧显示的节点结构中分别选择导弹、目标Translation和rotation选项,以此来接收Simulink模型中导弹、目标的位置和姿态信号,选定后在VRSink模块上会出现相应的输入端口。
图28.
通过Simulink模型输出的信号不能被虚拟现实模块直接接收,故将位置信号通过VR
Signal Expander模块扩展为虚拟信号;为了真实反应导弹和目标在运动过程中的姿态变化,使其时刻沿轨迹的切线方向运动,将弹道倾角和弹道偏角先转换为方向余弦矩阵,然后通过RotationMatrix2VR模块将方向余弦矩阵转换为虚拟现实模块所需要的旋转矢量,最终实现Simulink模型。
3 结论
本文通过对Simulink基础建模的应用,来模拟导弹追击船只的动力学系统,利用Simulink仿真,实现了导弹运行过程的可视化,来帮助解决导弹等相关建模问题。利用它提供一个动态系统建模、仿真和综合分析的集成环境,高效、灵活的建立模型。营造了一个使人有置身于真正的现实世界中感觉的环境。这对于优化导弹运行规律、研究导弹的外弹道特性提供了有力的帮助,亦可作为教学和演示使用。
参考文献
[1]赵广元. MATLAB与控制系统仿真实践[M]. 北京: 北京航空航天大学出版社, 2009.
[2]张德丰.雷晓平.周燕. MATLAB基础与工程应用[M]. 北京: 清华大学出版社,2011.
[3]李庆杨. 数值分析[M]. 北京: 清华大学出版社,2008.
[4]罗小明. 弹道导弹攻防对抗的建模与仿真[M]. 北京: 国防工业出版社.2009.
[5]王正. 林王琪. MATLAB/Simulink与控制系统仿真[M]. 北京:电子工业出版社.2008