MATLABSIMULINK仿真应用及导弹制导系统模拟 下载本文

东北大学秦皇岛分校

数学软件认识实习报告

MATLAB\\SIMULINK仿真应用及导弹制导系统

模拟

学 院 专 业 学 号 姓 名 指导教师 成 绩

数学与统计学院 信息与计算科 学

7110211 李振兴 张尚国 李明维

教师评语:

指导教师签字:

2010年12月27日

1.1 课题的背景及目的

数学与统计学院认识实习报告 第 2 页 1 绪 论

导弹制导系统(missile guidance system)也称导弹导引和控制系统。测量和计算导弹对目标或空间基准线的相对位置,以预定的导引规律控制导弹飞达目标的系统。导引和控制导弹按选定的规律调整飞行路线并导向目标的全部装置。亦称导弹导引和控制系统。其功能是测量、计算导弹实际飞行路线和理论飞行路线的差别,形成制导指令,经过放大和转换,由伺服机构调整导弹的发动机推力方向或舵面偏转角,控制导弹的飞行路线,以允许的误差(脱靶距离)靠近或命中目标。

Matlab是一种具有广泛应用前景的全新的计算机高级编程语言,它集科学计算、图形界面设计、图像处理、声音处理、曲线显示等特点于一身,且其编程效率与可读性、可移植性要高于其他高级语言。 1.1.1 Matlab/Simulink的特点:

1)高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来; 2)具有完备的图形处理功能,实现计算结果和编程的可视化;

3)功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。

4)Matlab提供强大的、交互式的二维及三维绘图功能,有一系列绘图函数,可是实现曲线渲染、线框图、伪彩图、光源、等位(值)图、图像显示、体积可视等,而且数据的可视化水平高,易于实现,并具有较强的图形编辑和用户图形界面设计能力。

5)Matlab提供了强大的Simulink系统仿真软件。Simulink提供航空航天飞行器推进系统、控制系统、动力学模块及六自由度和三自由度模型库,可以进行固定质量或者变质量体系的建模与仿真;提供重力场、磁场、大气和风的标准环境模型。可以利用各种转换模块,方便实现坐标转换,能够完成各物理量的单位制转换,也可以方便地构造出导弹飞行所需的数字模型。 1.2课题的研究方法

本课题主要是用MATLAB软件求解常微分方程数值解以及微分方程解的稳定性和数

值解法,并建立数学模型,绘制相应导弹的运行模式图,和船只运行过程的图像。利用图像分析导弹与船只运行状态。 1.3 论文构成及研究内容

数学与统计学院认识实习报告 第 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):

数学与统计学院认识实习报告 第 4 页

图2.

2) 模块的操作

模块的操作主要包括模块的选取、复制、调整、旋转、删除、颜色设定、参数设定、注释以及连线。 2.1.3 仿真配置

在系统仿真的过程中必须事先对仿真算法、输出模式等各种仿真参数进行设置。其方法是:打开系统仿真模型,选择模型编辑窗口Simulation菜单下的Configuration Parameters命令。仿真参数设置地Simulink仿真的一个优点和亮点,也是一个难点。

图3

1) Solver选项 仿真时间设置:

数学与统计学院认识实习报告 第 5 页 这里所指的时间概念与真实的时间并不一样,只是计算机仿真中对时间的一种表示。需要设置的有仿真开始时间和仿真结束时间。一般仿真开始时间设为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)子系统的创建

数学与统计学院认识实习报告 第 6 页 用户可以通过以下两种方式建立子系统:先添加模块,再将模块组合到子系统中。或先构建空白子系统,再把子系统块所包含的模块添加进去。Simulink子系统的作用是使系统更加简洁,可读性高;而且子系统可以反复调用,节省时间。

压缩子系统方法:

建立如图所示的系统模型图,

图4.

生成的子系统模块Subsystem:

图15.

2)子系统的封装

可以将Simulink子系统包装成一个模块,并且可以像使用Simulink内部模块一样使用它,这样可以将子系统内部结构隐藏起来,访问时只出现一个参数设置对话框,所需要的参数在对话框中来进行设置。

数学与统计学院认识实习报告 第 7 页

图17.

2.1.5 S-函数应用及对单摆进行仿真实验

使用S-函数对单摆系统进行仿真具体步骤:

图 18.

1) 利用S-函数对单摆进行建模。

2) 利用Simulink进行仿真,并对其位移进行分析 3) 利用S-函数动画模块来演示单摆的运动效果。 单摆的运动方程为:

???Kd???u?Fgsin(?) M? 其中,u为作用在单摆上的外力;Kd为阻尼系数;Fg为单摆重力。

?,则动力学方程为 令x1??,x2???1??x2?x???x???Kd?u?Fgsin(x1)? ?2????

根据状态方程,在模版的基础上编写S-函数

数学与统计学院认识实习报告 第 8 页 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仿真模型图

数学与统计学院认识实习报告 第 9 页

图20.Signal Generator模块参数设置

图 21.S-Function模块参数设置

在命令窗口输入并运行:

>> d=0.6;g=10;a=[0;0];m=0.4;

数学与统计学院认识实习报告 第 10 页 图21. 摆仿真效果

进行动态仿真,建立动态仿真模型图:

图22. 修改后的Simulink模型

动态仿真效果图:

图23. 单摆动态效果

2.2 导弹跟踪问题实例

例:A方导弹基地发现正北120km处海面有敌对方舰只正以90km/h的速度向正东方行驶,该基地立即发射导弹跟踪追击。已知导弹速度为 450km/h ,导弹的制导系统能使导弹在任何时刻都对准敌舰飞行。试模拟导弹与敌舰的运动轨迹,根据模拟结果,导弹在何时何处击中敌舰? 2.2.1 分析问题

1)建立坐标系:

数学与统计学院认识实习报告 第 11 页

图 24.

2)建立数学模型:

时刻t 导弹的位于为P(x(t),y(t)),其速度可由水平分速度与垂直分速度合成

?dx??dy?2??????vw ?dt??dt?导弹方向指向敌艇,故有

dyH?ydydxH?y??() ? dxvet?xdtdtvet?x22Vw =450 (km/h) Ve =90 (km/h)

导出一阶微分方程组

???dxvw??H?y2?dt1?()?vet?x?vw?dx??H?y2?dt1?()?vet?x??y(0)?0?x(0)?0???

3)利用解析方法求解: 消去 t ,化为二阶方程

数学与统计学院认识实习报告 第 12 页 d2xdy2连同初始条件

(H?y)dx2(dy)?1??,

(??ve) vwxy?0?0,dxdy?0

y?o设p?dx降阶得到一阶可分离变量方程 dy?p2?1dp ?dyH?y1H?H?y?)?()] ?p?[(2H?yH将p?dx代入,解得dy

1(H?y)??1H?(H?y)1???Hx?[??]? 22H(??1)1??1??导弹击中艇时y=H, 得到此时其位置和时刻

x?L??HL?25(km),t?T??0.2778

ve1??24) 利用Euler方法(数值方法)求解: Euler方法十分简单, 就是用差商代替微商,即

dx?xxk?1?xk??,dt?ttk?1?tkdy?yyk?1?yk?? dt?ttk?1?tk通常取Δt为常数τ,就得到由第k步的值到第k+1步的值之间的关系式 ,t = tk+1时导弹位置为(xk+1 ,yk+1)

?vw??xk?1?xk??H?yk21?()?vt?xekk???vw?? y?y??k?1kvt?xk2?1?(ek)?H?yk??x0?0,y0?0????计算到yk?H,yk?1?H停止,取L≈xk

数学与统计学院认识实习报告 第 13 页 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用于设计求解的误差限(该参数可以缺省,缺省时相对误差是10-3,绝对误 为10-6);输出列向量T表示节点(t0,t1,?tn)T,输出矩阵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的横线

数学与统计学院认识实习报告 第 14 页

图25.

有图像可以看出导弹的运行轨迹,知:在大约27分钟时刻,导弹击中船只。 2.3 用Simulink建立弹道仿真模型

根据物理知识,可以建立导弹运动三维公式:

目标质心的运动学方程(为了简化方程,将地面面坐标系Axyz视为惯性坐标系,并把矢量坐标系投影到弹道坐标系Ox2,y2,z2,经过变换得):

dvm??m??dt?Fx2???d?m?mvm???Fx2?

????dt????Fx2??d?v??mvmcos?m??dt???

目标质心运动学方程:

?dxm??dt?????vmcos?vm? ?dym???vmsin?m??dt???????vmcos?msin?vm??dzm????dt??

根据目标运动及相对运动方程组,在Simulink环境下编辑三维比例导引导弹的仿真模

型,鉴于该模型整体编辑时比较复杂,为了使这个系统便于观察和操作,可以通过把模块组成子系统来简化模型。整个仿真模型如图。模型中包含3个子系统:目标云动模块、导弹追踪模块和虚拟现实显示模块。

数学与统计学院认识实习报告 第 15 页

图27.导弹仿真模型

目标运动模块

该模块通过应用目标质心的动力学方程式,根据目标质心作用力Fx2、Fy2、Fz2,求出目标的速度vm、弹道倾角?m、弹道偏角?vm;再通过目标质心的运动学方程式,即可计算出每一时刻目标位置(xm,ym,zm)

可视化仿真及结果分析

VR Sink模块可实现Simulink模型与虚拟场景的连接。在Simulink模型窗口中双击VR

Sink模块,在弹出的参数对话框中,单机Browse按钮,选中保存的Missile_Target.wrl文件,在右侧显示的节点结构中分别选择导弹、目标Translation和rotation选项,以此来接收Simulink模型中导弹、目标的位置和姿态信号,选定后在VRSink模块上会出现相应的输入端口。

图28.

通过Simulink模型输出的信号不能被虚拟现实模块直接接收,故将位置信号通过VR

数学与统计学院认识实习报告 第 16 页 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