比例导引法Matlab仿真

合集下载

三维比例导引弹道的可视化仿真研究

三维比例导引弹道的可视化仿真研究

第30卷 第4期2010年8月弹 箭 与 制 导 学 报Journal of Projectiles,Rockets,Missiles and GuidanceVol.30 No.4Aug 2010 三维比例导引弹道的可视化仿真研究*苏跃斌,辛长范,郭本亮,魏胜桃(中北大学机电工程学院,太原 030051)摘 要:为弥补二维平面内弹道仿真的缺陷,体现三维仿真多视角动态演示的优越性。

以比例导引法为例对弹道进行仿真,在MATLAB/Simulink环境下建立三维弹道的仿真模型,采用虚拟现实建模语言VRML(vir-tual-reality modeling language)建立三维虚拟场景,并通过Simulink接口将仿真模型导入,实现了对三维导引弹道的可视化仿真,形象地演示了导弹从发射到击中目标的整个过程,并且目标的运动轨迹可以实时控制,可以从不同角度观察导弹的飞行状态,更好的实现了对导引规律的仿真。

关键词:导引弹道;比例导引法;仿真模型;虚拟场景;可视化中图分类号:TJ765.3;V241.622 文献标志码:AResearch on Visualization Simulation of Three-dimensionalProportional Guidance TrajectorySU Yuebin,XIN Changfan,GUO Benliang,WEI Shengtao(School of Mechatronics Engineering,North University of China,Taiyuan 030051,China)Abstract:In order to counteract the defect of two-dimensional simulation and embody the advantage of three-dimensional simulation,taking the proportional guidance law as an example,the three-dimensional simulation model was established based on MATLAB/Simulink,the virtual-reality modeling language(VRML)was applied to establish the three-dimensional visual scene and with theSimulink to get the result of guidance equations.The whole flight process form different angles was demonstrated,and the guid-ance law can be completed much better.Keywords:guidance trajectory;proportional guidance law;simulation model;virtual scene;visualization0 引言比例导引法是自导引制导规律中最重要的一种制导规律,它是追踪法、前置点法、平行接近法制导规律的综合描述。

反舰导弹末制导段制导控制技术研究

反舰导弹末制导段制导控制技术研究

反舰导弹末制导段制导控制技术研究摘要:本文针对反舰导弹末制导段制导控制问题进行了研究。

首先分析了反舰导弹的基本结构和末制导段的工作原理,然后介绍了目前常见的末制导段制导控制技术以及存在的问题。

随后文中提出了一种基于模糊PID控制算法的反舰导弹末制导段制导控制策略。

最后通过仿真实验验证了该策略的有效性和优越性。

关键词:反舰导弹;末制导段;制导控制;模糊PID控制算法一、导言反舰导弹自20世纪70年代问世以来,一直是各国海军装备中不可或缺的利器。

反舰导弹能够以超音速高速飞行,触发导弹末端的制导器件,利用雷达、红外等传感器对目标进行搜索和跟踪,然后实施制导和攻击。

在现代战争中,反舰导弹的使用范围越来越广,对反制舰队等具有强大的杀伤力。

反舰导弹的末制导段是导弹实现精确制导的关键。

在过去的几十年里,人们开发出了许多末制导段制导控制技术,包括比例导引、比例导引-微分修正、预估导引、滑模控制等。

但是在实践中,这些技术往往存在制导精度不高、动态性能差、抗扰性差等问题。

因此,如何提高反舰导弹末制导段制导控制精度,一直是研究的热点和难点。

本文主要研究反舰导弹末制导段制导控制技术,提出一种基于模糊PID控制算法的制导控制策略。

本文分为五个部分:第一部分介绍反舰导弹的基本结构和末制导段的工作原理;第二部分介绍目前常见的末制导段制导控制技术以及存在的问题;第三部分提出了一种基于模糊PID控制算法的反舰导弹末制导段制导控制策略;第四部分仿真模拟了该策略的控制效果;第五部分进行了总结和展望。

二、反舰导弹的基本结构和末制导段的工作原理反舰导弹一般由导引头、弹体、推进器及制导控制装置等部分组成。

末制导段是导弹攻击目标时最后一个反动段,是导弹实现精确制导和命中目标的关键一步。

末制导段通常由内部传感器、指令处理器、制导器等组成。

它的工作原理是在离目标很近的距离范围内,利用内部传感器对目标进行搜索和跟踪,然后将指令通过指令处理器进行计算和传递,最终控制导弹的姿态与航向,实现精确制导和攻击。

Matlab中的模拟与仿真方法与工具

Matlab中的模拟与仿真方法与工具

Matlab中的模拟与仿真方法与工具Matlab是一种广泛应用于科学与工程领域的编程语言和开发环境。

它提供了丰富的工具集与函数库,用于数据处理、数值计算、绘图等应用。

而在模拟与仿真方面,Matlab也拥有强大的功能与灵活性。

本文将介绍Matlab中的模拟与仿真方法与工具,涵盖数学建模、动态系统仿真、计算机视觉等方面的应用。

一、数学建模与仿真数学建模是一种通过数学方法来描述现实问题的过程,而Matlab提供了丰富的数学工具与函数,方便用户进行建模与仿真。

例如,可以利用Matlab中的优化工具箱,通过数学模型寻找最佳解决方案。

在这个过程中,用户可以选择合适的模型,引入约束条件,并使用优化算法求解。

另一方面,Matlab还提供了符号计算功能,可以实现对数学公式的符号化处理。

这对于一些复杂的问题尤为重要,它可以帮助用户更好地理解数学模型,并更方便地进行模拟与仿真。

通过符号计算,用户可以进行符号求导、符号积分等操作,从而得到更清晰的数学表达式。

二、动态系统仿真动态系统仿真是指利用数学模型来模拟和分析现实世界中的动态系统,Matlab拥有丰富的工具与函数库,用于动态系统的建模与仿真。

例如,用户可以利用Matlab中的Simulink工具箱,通过图形界面搭建动态系统的模型。

Simulink提供了丰富的模块库,用户可以选择合适的组件,通过连接与参数设置,构建完整的系统模型。

在动态系统仿真过程中,Matlab还支持对系统进行参数优化与辨识。

用户可以通过改变系统参数,观察系统响应,并使用优化算法来寻找最佳参数组合。

这对于系统设计与优化非常重要,可以帮助用户在系统设计初期就得到全面的性能评估。

三、计算机视觉仿真计算机视觉是指通过计算机算法和技术来模拟和实现人类的视觉功能,Matlab拥有强大的计算机视觉工具箱,可以进行图像处理、模式识别、目标检测等应用。

用户可以利用Matlab中的图像处理函数,对图像进行滤波、边缘检测、特征提取等操作。

“制导技术”课程教学模式改革的探索与体会

“制导技术”课程教学模式改革的探索与体会

“制导技术”课程教学模式改革的探索与体会作者:朱建生王曙光陈栋来源:《教育界·下旬》2018年第10期【摘要】文章针对“制导技术”的课程特点,结合新形势对人才培养提出的新要求,对基于校园网微课资源的翻转课堂教学模式进行了积极探索和尝试,以比例导引法教学为例,分析了教学实践的实施过程及需要注意的几个问题,以期为其他课程教学模式改革提供借鉴和参考。

【关键词】“制导技术”;比例导引法;翻转课堂一、引言“制导技术”是弹药工程与爆炸技术专业本科生的一门限选课,通过课程学习,主要让学员理解和掌握制导装置及其原理在弹药工程领域的技术应用。

该课程涉及数学、力学和控制理论等相关知识,理论性较强,对于弹药工程相关专业本科学员来说,学习难度较大。

本文以“比例导引法”教学为例,探索翻转课堂教学模式在“制导技术”课程教学中的应用。

二、课前学习安排与传统课堂教学中的课前预习不同,翻转课堂教学模式中采用的是课前学习,包括线上自学与线下学习两部分内容。

(1)线上自学,根据教员提前下发的相应知识点,观看相关视频。

(2)线上学习,课前学员根据教员提前下发的课上讨论知识点进行视频学习、教材阅读、资料查阅、团队讨论,课后完成与知识点相对应的习题,进一步巩固学习知识点。

比例导引法教学内容包括比例导引法的弹目相对运动方程、弹道特性的讨论、比例系数K 的选择以及比例导引法弹道仿真,共计4学时。

课前给学员布置的预习任务包括两个方面。

(1)课前观看关于比例导引法的7个视频,并完成相应的讲间练习。

(2)尝试利用仿真软件,对比例导引法进行弹道仿真,并对结果进行分析。

三、课上讨论安排在课堂时间里,要组织学员对课前学习内容进行深入讨论,有针对性地解决每个学员在课下学习过程中遇到的问题,并根据学员情况对所学内容进行理论与应用两方面的拓展。

课堂讨论内容通常包括以下三个方面。

(1)课前所学内容的知识点讨论,并对各知识点之间的相互关系进行梳理,帮助学员认识其本质。

如何使用Matlab技术进行模拟仿真

如何使用Matlab技术进行模拟仿真

如何使用Matlab技术进行模拟仿真引言在科学研究和工程设计中,模拟仿真是一种重要的工具。

它可以帮助研究人员和工程师预测和评估系统的性能、优化设计方案、解决问题等。

近年来,Matlab成为了广泛使用的科学计算软件,具有强大的数值计算和仿真功能。

本文将介绍如何使用Matlab技术进行模拟仿真,以及一些常见的应用案例。

一、Matlab的基本介绍Matlab是由美国MathWorks公司开发的一种科学计算软件。

它具有丰富的数学函数库和各种工具箱,可以进行数值计算、数据可视化、统计分析、信号处理、控制系统设计等。

Matlab是一种解释性的编程语言,用户可以通过编写脚本文件或使用命令行进行交互式计算。

二、Matlab的仿真建模工具Matlab提供了Simulink这一强大的仿真建模工具。

Simulink使用图形化界面,可以直观地构建系统模型。

可以将系统抽象成各种不同的模块,通过连接这些模块来描述系统的结构和行为。

Simulink支持常见的连续时间仿真、离散时间仿真和混合仿真,并提供了丰富的仿真调试工具。

三、Matlab的数值计算和优化在模拟仿真过程中,通常需要进行数值计算和参数优化。

Matlab提供了强大的数值计算功能,可以进行矩阵运算、数值积分、微分方程求解、优化等。

用户可以通过编写自定义函数和调用内置函数来实现数值计算和优化任务。

Matlab还提供了各种优化算法,如遗传算法、模拟退火算法、粒子群优化算法等,可以解决复杂的优化问题。

四、Matlab在控制系统设计中的应用控制系统是一种常见的工程系统,如何设计合适的控制策略是一个重要的问题。

Matlab提供了专门的控制系统工具箱,包括系统建模、控制器设计、仿真测试等功能。

用户可以使用Matlab进行控制系统建模,通过调整控制器参数来达到所需的性能指标,并使用Simulink进行仿真测试。

Matlab还提供了自适应控制、最优控制、模糊控制等高级控制方法,可以满足不同的控制需求。

(518618873) 典型导引规律三维弹道仿真分析

(518618873) 典型导引规律三维弹道仿真分析

总第164 期200 8年第2期舰船电子工程Vo l.28No. 211 0Sh i p E lec tron ic En gin ee ringt3典型导引规律三维弹道仿真分析周纪元 1 ) 童幼堂2) 张磊1) 王亚1)(海军大连舰艇学院研究生1队1 )大连11 601 8)( 海军大连舰艇学院舰载武器系2 )大连11 601 8)摘要介绍几种典型导弹导引规律及其约束方程,运用MA T L AB 语言对纯追踪法、平行接近法和比例导引法的理想弹道进行了三维仿真。

绘制导弹速度和目标速度变化时,其对应的三维理想弹道,并进行比较分析。

关键词导引规律;弹道;仿真; MA T LAB中图分类号TP391. 91 引言导弹在攻击目标时,为了使导弹稳定的跟踪并命中目标,导引系统必须及时准确地提供导引信号,而导引信号又必须严格遵循某种规律,这种规律就是导引规律。

导引规律一般分为两大类,即两点法和三点法。

两点法又包括纯追踪法、比例导引法和平行接近法及固定前置角法等[ 1 ] 。

目前,大多数文献给出的两点法的运动学弹道多为导弹和目标在同一平面内的二维弹道,本文使用 MA T LAB 语言,对两点法前三种导引规律的理想弹道进行了三维仿真。

绘制出了三维仿真弹道,分析比较了不同导引规律对应的导弹和目标运动参数变化时的弹道变化特性。

2 两点法导引规律式中: r = d r/ d t:距离变化率;θ: V 与目标视线的夹角, 即目标运动前置角;β: Vm与目标视线的夹角;即导弹运动前置角;φ: 目标视线与x 轴夹角, 即视线角; r:目标与导弹之间的距离。

如图1所示。

图1导弹与目标相对关系图由图1可得各夹角之间的相互关系为:φ= η+θ (3)φ= β+γ(4)将( 3) 、( 4 )式代入(1)、( 2 ) 式可得:r = V t co s(φ- η) - V m co s(φ- γ) (5)两点法是确定导弹与目标两点在空间相对位置的方法。

比例积分控制的直流调速系统matlab仿真文件

比例积分控制的直流调速系统matlab仿真文件

比例积分控制的直流调速系统matlab仿真文件比例积分控制的直流调速系统是一种控制直流电机转速的方法,这种方法可以通过调整比例和积分控制器的参数来实现对电机转速的精确控制。

在实际应用中,比例积分控制的直流调速系统被广泛应用于工业生产、交通运输等领域。

为了实现比例积分控制的直流调速系统的仿真,我们可以使用MATLAB软件进行仿真模拟。

下面是一个比例积分控制的直流调速系统MATLAB仿真文件的实现过程。

首先,我们需要定义一个直流电机模型。

在MATLAB中,可以使用如下代码来定义一个电机模型:```MATLABJ = 0.01;b = 0.1;K = 0.01;R = 1;L = 0.5;s = tf('s');P_motor = K/((J*s+b)*(L*s+R)+K^2);```其中,J、b、K、R、L分别表示电机的转动惯量、阻尼系数、电动势系数、电阻和电感,P_motor表示电机传递函数。

接下来,我们需要定义一个比例积分控制器模型。

在MATLAB中,可以使用如下代码来定义一个控制器模型:```MATLABKp = 0.5; % 比例系数Ki = 0.2; % 积分系数C = pid(Kp, Ki);```其中,Kp和Ki分别表示比例系数和积分系数,C表示控制器传递函数。

然后,我们需要将电机模型和控制器模型进行连接。

在MATLAB中,可以使用如下代码将其进行连接:```MATLABsys_cl = feedback(C*P_motor,1);```其中,sys_cl表示闭环系统的传递函数。

接下来,我们需要设置仿真参数,并运行仿真程序。

在MATLAB中,可以使用如下代码来设置仿真参数:```MATLABt = 0:0.01:10;r = 0.2*ones(size(t));```其中,t表示仿真时间,r表示输入信号。

然后,我们可以运行仿真程序并绘制输出结果。

在MATLAB中,可以使用如下代码来运行仿真程序并绘制输出结果:```MATLAB[y,t,x] = lsim(sys_cl,r,t);plot(t,r,'b',t,y,'r');xlabel('Time (sec)');ylabel('Speed (rad/sec)');title('DC Motor Speed Response');legend('Input','Output');```以上代码将输出仿真结果图像,其中蓝色曲线表示输入信号,红色曲线表示输出信号。

比例导引法Matlab仿真

比例导引法Matlab仿真

%三维制导模型,比例导引法求解%源代码作者不详,注释人:lylogn%Modified by lylogn,2012年4月17日clear all;close all;clcdt=0.1;%仿真时间步长alpha=pi/6;v_t=0.42;s_t=v_t*dt;%目标以0.42的速度沿alpha的角方向匀速飞行,s_t为目标在单位仿真步长前进的距离v_m=0.60;s_m=v_m*dt;%s_m为导弹在单位仿真步长沿目前速度方向前进的距离x(1)=0;y(1)=1.0;z(1)=0;pmr(:,1)=[x(1);y(1);z(1)]; %导弹初始位置,在坐标原点ptr(:,1)=[25;5;7]; %目标初始位置K=3; %比例导引系数q(1)=0; %初始的视线角,设定参考线为t和m初始位置的连线o(1)=0; %初始导弹速度向量方向角a(1)=0; %初始导弹相对目标的运动速度向量的方向角for(k=2:600)ptr(:,k)=[ptr(1,1)-v_t*cos(alpha)*dt*k;ptr(2,1);ptr(3,1)+v_t*sin(alpha)*k*dt]; %目标运行轨迹方程,匀速直线运动r(k-1)=sqrt((ptr(1,k-1)-pmr(1,k-1))^2+(ptr(2,k-1)-pmr(2,k-1))^2+(ptr(3,k-1)-pmr(3,k-1))^2); %k-1时刻导弹与目标在三维空间中的欧氏距离c=sqrt((ptr(1,k)-pmr(1,k-1))^2+(ptr(2,k)-pmr(2,k-1))^2+(ptr(3,k)-pmr(3,k-1))^2); %目标k时刻位置与导弹k-1时刻位置间的距离b=acos((r(k-1)^2+s_t^2-c^2)/(2*r(k-1)*s_t));%%%此处参见公式一%%%dq=acos((r(k-1)^2-s_t^2+c^2)/(2*r(k-1)*c));%k-1时刻到k时刻的视线角变化量(假设导弹不动,目标移动)%%%此处参见图一%%%if abs(imag(b))>0 %如果acos的值出现虚数,则说明该角度一定很小,对其进行近似操作b=0.0000001;endif abs(imag(dq))>0 %同上dq=0.0000001;endq(k)=q(k-1)+dq; %更新视线角o(k)=o(k-1)+K*dq; %更新导弹速度向量方向角a(k)=o(k)-q(k); %更新导弹相对目标的运动速度向量的方向角c1=r(k-1)*sin(b)/sin(a(k)+b); %计算k-1时刻角b所对边的长度%%%此处参见公式二%%%c2=r(k-1)*sin(a(k))/sin(a(k)+b); %计算k-1时刻角a(k)所对边的长度c3=sqrt((c1-s_m)^2+(c2-s_t)^2+2*(c1-s_m)*(c2-s_t)*cos(a(k)+b)); %计算k时刻导弹m与目标t之间的距离(在导弹不动,目标移动的假设条件下),为假值dq=a(k)-acos(((c1-s_m)^2+c3^2-(c2-s_t)^2)/(2*(c1-s_m)*c3)); %k-1时刻到k时刻的视线角变化量(假设导弹移动,目标也移动),以下代码重复以上过程,为假值%%%此处参见图二%%%if abs(imag(dq))>0dq=0.0000001;endq(k)=q(k-1)+dq;o(k)=o(k-1)+K*dq;a(k)=o(k)-q(k);c1=r(k-1)*sin(b)/sin(a(k)+b);c2=r(k-1)*sin(a(k))/sin(a(k)+b);c3=sqrt((c1-s_m)^2+(c2-s_t)^2+2*(c1-s_m)*(c2-s_t)*cos(a(k)+b)); %计算k时刻导弹m与目标t之间的距离(在导弹移动,目标也移动的假设条件下),逼近真值,以下计算使之更加精确dq=a(k)-acos(((c1-s_m)^2+c3^2-(c2-s_t)^2)/(2*(c1-s_m)*c3)); %k-1时刻到k时刻的视线角变化量(假设导弹移动,目标也移动),以下代码重复以上过程,为真值if abs(imag(dq))>0dq=0.0000001;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%�ded by lylogn 2012.04.17,To make 'dq' get closer to its true valueq(k)=q(k-1)+dq;o(k)=o(k-1)+K*dq;a(k)=o(k)-q(k);c1=r(k-1)*sin(b)/sin(a(k)+b);c2=r(k-1)*sin(a(k))/sin(a(k)+b);c3=sqrt((c1-s_m)^2+(c2-s_t)^2+2*(c1-s_m)*(c2-s_t)*cos(a(k)+b)); %计算k时刻导弹m与目标t之间的距离(在导弹移动,目标也移动的假设条件下),逼近真值,以下计算使之更加精确dq=a(k)-acos(((c1-s_m)^2+c3^2-(c2-s_t)^2)/(2*(c1-s_m)*c3)); %k-1时刻到k时刻的视线角变化量(假设导弹移动,目标也移动),以下代码重复以上过程,为真值if abs(imag(dq))>0dq=0.0000001;endq(k)=q(k-1)+dq;o(k)=o(k-1)+K*dq;a(k)=o(k)-q(k);c1=r(k-1)*sin(b)/sin(a(k)+b);c2=r(k-1)*sin(a(k))/sin(a(k)+b);c3=sqrt((c1-s_m)^2+(c2-s_t)^2+2*(c1-s_m)*(c2-s_t)*cos(a(k)+b)); %计算k时刻导弹m与目标t之间的距离(在导弹移动,目标也移动的假设条件下),逼近真值,以下计算使之更加精确dq=a(k)-acos(((c1-s_m)^2+c3^2-(c2-s_t)^2)/(2*(c1-s_m)*c3)); %k-1时刻到k时刻的视线角变化量(假设导弹移动,目标也移动),以下代码重复以上过程,为真值if abs(imag(dq))>0dq=0.0000001;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%q(k)=q(k-1)+dq;o(k)=o(k-1)+K*dq;a(k)=o(k)-q(k);c1=r(k-1)*sin(b)/sin(a(k)+b);c2=r(k-1)*sin(a(k))/sin(a(k)+b);c3=sqrt((c1-s_m)^2+(c2-s_t)^2+2*(c1-s_m)*(c2-s_t)*cos(a(k)+b)); %计算k时刻导弹m与目标t之间的距离,终于近似为真值了x1(k)=ptr(1,k-1)+c2/s_t*(ptr(1,k)-ptr(1,k-1));y1(k)=ptr(2,k-1)+c2/s_t*(ptr(2,k)-ptr(2,k-1));z1(k)=ptr(3,k-1)+c2/s_t*(ptr(3,k)-ptr(3,k-1)); %计算出角b所对边与目标运动轨迹的交点:(x1,y1,z1)%%%参见公式三%%%x(k)=pmr(1,k-1)+s_m/c1*(x1(k)-pmr(1,k-1));y(k)=pmr(2,k-1)+s_m/c1*(y1(k)-pmr(2,k-1));z(k)=pmr(3,k-1)+s_m/c1*(z1(k)-pmr(3,k-1)); %计算出导弹k时刻所运动到的位置:(x,y,z)%%%参见公式三%%%pmr(:,k)=[x(k);y(k);z(k)];r(k)=sqrt((ptr(1,k)-pmr(1,k))^2+(ptr(2,k)-pmr(2,k))^2+(ptr(3,k)-pmr(3,k))^2);if r(k)<0.06;break;end;endsprintf('遭遇时间:%3.1f',0.1*k);figure(1);plot3(pmr(1,1:k),pmr(2,1:k),pmr(3,1:k),'k',ptr(1,:),ptr(2,:),ptr(3,:));axis([0 25 0 5 0 25]);text(x(180),y(180),z(180),'\rightarrow 比例导引律制导下的导弹运动轨迹');text(ptr(1,280),ptr(2,280),ptr(3,280),'\rightarrow 目标运动轨迹');grid on之后,鉴于程序中很多地方不结合模型图也很难理解,将其中关键的图例与公式提取如下:最后,程序的运行过程分析完成,具体的细节详见注释,运行结果如下图所示:综上所述,本工作对比例导引法求解三维制导问题的仿真程序进行了详细的分析与注释,程序运行正常,希望对大家理解比例导引法有所帮助。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%三维制导模型,比例导引法求解
%源代码作者不详,注释人:lylogn
%Modified by lylogn,2012年4月17日
clear all;
close all;
clc
dt=0.1;%仿真时间步长
alpha=pi/6;v_t=0.42;s_t=v_t*dt;%目标以0.42的速度沿alpha的角方向匀速飞行,s_t为目标在单位仿真步长前进的距离
v_m=0.60;s_m=v_m*dt;%s_m为导弹在单位仿真步长沿目前速度方向前进的距离
x(1)=0;y(1)=1.0;z(1)=0;
pmr(:,1)=[x(1);y(1);z(1)]; %导弹初始位置,在坐标原点
ptr(:,1)=[25;5;7]; %目标初始位置
K=3; %比例导引系数
q(1)=0; %初始的视线角,设定参考线为t和m初始位置的连线
o(1)=0; %初始导弹速度向量方向角
a(1)=0; %初始导弹相对目标的运动速度向量的方向角
for(k=2:600)
ptr(:,k)=[ptr(1,1)-v_t*cos(alpha)*dt*k;ptr(2,1);ptr(3,1)+v_t*sin(alpha)*k*dt]; %目标运行轨迹方程,匀速直线运动
r(k-1)=sqrt((ptr(1,k-1)-pmr(1,k-1))^2+(ptr(2,k-1)-pmr(2,k-1))^2+(ptr(3,k-1)-pmr(3,k-1))^2); %k-1时刻导弹与目标在三维空间中的欧氏距离
c=sqrt((ptr(1,k)-pmr(1,k-1))^2+(ptr(2,k)-pmr(2,k-1))^2+(ptr(3,k)-pmr(3,k-1))^2); %目标k时刻位置与导弹k-1时刻位置间的距离
b=acos((r(k-1)^2+s_t^2-c^2)/(2*r(k-1)*s_t));
%%%此处参见公式一%%%
dq=acos((r(k-1)^2-s_t^2+c^2)/(2*r(k-1)*c));%k-1时刻到k时刻的视线角变化量(假设导弹不动,目标移动)
%%%此处参见图一%%%
if abs(imag(b))>0 %如果acos的值出现虚数,则说明该角度一定很小,对其进行近似操作b=0.0000001;
end
if abs(imag(dq))>0 %同上
dq=0.0000001;
end
q(k)=q(k-1)+dq; %更新视线角
o(k)=o(k-1)+K*dq; %更新导弹速度向量方向角
a(k)=o(k)-q(k); %更新导弹相对目标的运动速度向量的方向角
c1=r(k-1)*sin(b)/sin(a(k)+b); %计算k-1时刻角b所对边的长度
%%%此处参见公式二%%%
c2=r(k-1)*sin(a(k))/sin(a(k)+b); %计算k-1时刻角a(k)所对边的长度
c3=sqrt((c1-s_m)^2+(c2-s_t)^2+2*(c1-s_m)*(c2-s_t)*cos(a(k)+b)); %计算k时刻导弹m与目标t之间的距离(在导弹不动,目标移动的假设条件下),为假值
dq=a(k)-acos(((c1-s_m)^2+c3^2-(c2-s_t)^2)/(2*(c1-s_m)*c3)); %k-1时刻到k时刻的视线角变化量(假设导弹移动,目标也移动),以下代码重复以上过程,为假值
%%%此处参见图二%%%
if abs(imag(dq))>0
dq=0.0000001;
end
q(k)=q(k-1)+dq;
o(k)=o(k-1)+K*dq;
a(k)=o(k)-q(k);
c1=r(k-1)*sin(b)/sin(a(k)+b);
c2=r(k-1)*sin(a(k))/sin(a(k)+b);
c3=sqrt((c1-s_m)^2+(c2-s_t)^2+2*(c1-s_m)*(c2-s_t)*cos(a(k)+b)); %计算k时刻导弹m与目标t之间的距离(在导弹移动,目标也移动的假设条件下),逼近真值,以下计算使之更加精确
dq=a(k)-acos(((c1-s_m)^2+c3^2-(c2-s_t)^2)/(2*(c1-s_m)*c3)); %k-1时刻到k时刻的视线角变化量(假设导弹移动,目标也移动),以下代码重复以上过程,为真值
if abs(imag(dq))>0
dq=0.0000001;
end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%
�ded by lylogn 2012.04.17,To make 'dq' get closer to its true value
q(k)=q(k-1)+dq;
o(k)=o(k-1)+K*dq;
a(k)=o(k)-q(k);
c1=r(k-1)*sin(b)/sin(a(k)+b);
c2=r(k-1)*sin(a(k))/sin(a(k)+b);
c3=sqrt((c1-s_m)^2+(c2-s_t)^2+2*(c1-s_m)*(c2-s_t)*cos(a(k)+b)); %计算k时刻导弹m与目标t之间的距离(在导弹移动,目标也移动的假设条件下),逼近真值,以下计算使之更加精确
dq=a(k)-acos(((c1-s_m)^2+c3^2-(c2-s_t)^2)/(2*(c1-s_m)*c3)); %k-1时刻到k时刻的视线角变化量(假设导弹移动,目标也移动),以下代码重复以上过程,为真值
if abs(imag(dq))>0
dq=0.0000001;
end
q(k)=q(k-1)+dq;
o(k)=o(k-1)+K*dq;
a(k)=o(k)-q(k);
c1=r(k-1)*sin(b)/sin(a(k)+b);
c2=r(k-1)*sin(a(k))/sin(a(k)+b);
c3=sqrt((c1-s_m)^2+(c2-s_t)^2+2*(c1-s_m)*(c2-s_t)*cos(a(k)+b)); %计算k时刻导弹m与目标t之间的距离(在导弹移动,目标也移动的假设条件下),逼近真值,以下计算使之更加精确
dq=a(k)-acos(((c1-s_m)^2+c3^2-(c2-s_t)^2)/(2*(c1-s_m)*c3)); %k-1时刻到k时刻的视线角变化量(假设导弹移动,目标也移动),以下代码重复以上过程,为真值
if abs(imag(dq))>0
dq=0.0000001;
end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%
q(k)=q(k-1)+dq;
o(k)=o(k-1)+K*dq;
a(k)=o(k)-q(k);
c1=r(k-1)*sin(b)/sin(a(k)+b);
c2=r(k-1)*sin(a(k))/sin(a(k)+b);
c3=sqrt((c1-s_m)^2+(c2-s_t)^2+2*(c1-s_m)*(c2-s_t)*cos(a(k)+b)); %计算k时刻导弹m与目标t之间的距离,终于近似为真值了
x1(k)=ptr(1,k-1)+c2/s_t*(ptr(1,k)-ptr(1,k-1));
y1(k)=ptr(2,k-1)+c2/s_t*(ptr(2,k)-ptr(2,k-1));
z1(k)=ptr(3,k-1)+c2/s_t*(ptr(3,k)-ptr(3,k-1)); %计算出角b所对边与目标运动轨迹的交点:(x1,y1,z1)
%%%参见公式三%%%
x(k)=pmr(1,k-1)+s_m/c1*(x1(k)-pmr(1,k-1));
y(k)=pmr(2,k-1)+s_m/c1*(y1(k)-pmr(2,k-1));
z(k)=pmr(3,k-1)+s_m/c1*(z1(k)-pmr(3,k-1)); %计算出导弹k时刻所运动到的位置:(x,y,z)%%%参见公式三%%%
pmr(:,k)=[x(k);y(k);z(k)];
r(k)=sqrt((ptr(1,k)-pmr(1,k))^2+(ptr(2,k)-pmr(2,k))^2+(ptr(3,k)-pmr(3,k))^2);
if r(k)<0.06;
break;
end;
end
sprintf('遭遇时间:%3.1f',0.1*k);
figure(1);
plot3(pmr(1,1:k),pmr(2,1:k),pmr(3,1:k),'k',ptr(1,:),ptr(2,:),ptr(3,:));
axis([0 25 0 5 0 25]);
text(x(180),y(180),z(180),'\rightarrow 比例导引律制导下的导弹运动轨迹');
text(ptr(1,280),ptr(2,280),ptr(3,280),'\rightarrow 目标运动轨迹');
grid on
之后,鉴于程序中很多地方不结合模型图也很难理解,将其中关键的图例与公式提取如下:
最后,程序的运行过程分析完成,具体的细节详见注释,运行结果如下图所示:
综上所述,本工作对比例导引法求解三维制导问题的仿真程序进行了详细的分析与注释,程序运行正常,希望对大家理解比例导引法有所帮助。

2012年4月17日
于实验室
Created by lylogn。

相关文档
最新文档