二维比例导引制导及其MATLAB仿真

仿真结果:

比例导引计算公式为:a_m=NV_c\.\{lambda_{tm}}

其中a为导弹加速度,N为比例导引系数,λ为导弹目视线角变化率。其中在平面交战几何有以下关系:

%比例导引,目标阶跃机动

clc
clear
close all


%导弹的初始参数
VM = 1200.;%导弹的初始速度
RM1 = 0;%导弹初始位置
RM2 = 10000;
XNP = 4.;%比例导引系数,根据经验取3-5
THET=0/180*pi;%导弹的初始飞行航向角
VM1=VM*cos(THET);%导弹的初始速度
VM2=VM*sin(THET);
XNM_R=0;%导弹实际加速度指令的初始值
TAU_M=1;%导弹制导系统的时间常数

%目标的初始参数
VT = 600.;
RT1 = 50000;%目标初始位置
RT2 = 30000;
BETA=-5/57.3;%目标的初始飞行航向角
VT1=-VT*cos(BETA);
VT2=VT*sin(BETA);
XNT_R=0;
XNTLIM=2.5*9.8;%30km高度,目标最大过载初始值
TAU_T=0.5;

%弹目初始相对信息
RTM1=RT1-RM1;%X轴上的相对距离
RTM2=RT2-RM2;%Y轴上的相对距离
RTM=sqrt(RTM1*RTM1+RTM2*RTM2);%相对距离
XLAM=atan2(RTM2,RTM1); %视线角
VTM1 = VT1 - VM1;%相对距离在X轴上的投影
VTM2 = VT2 - VM2;%相对距离在Y轴上的投影
VC=-(RTM1*VTM1 + RTM2*VTM2)/RTM;%接近速度(相对速度)


n=0;
w=0.5;
T=0.;
S=0.;
while VC >= 0 %弹目在接近时,就一直循环
  	if RTM < 1000
      		H=.0002;%仿真步长
   	else
      		H=.01;
   	end
   	BETAOLD=BETA;%涉及到利用二阶runge-kutta递推微分方程的值
    THETOLD=THET;
   	RT1OLD=RT1;
   	RT2OLD=RT2;
   	RM1OLD=RM1;
   	RM2OLD=RM2;
    XNMOLD=XNM_R;
    XNTOLD=XNT_R;

   	STEP=1;
	FLAG=0;

	while STEP <=1
		if FLAG==1
            STEP=2;

            BETA=BETA+H*BETAD;%对应8个微分方程,也涉及到利用二阶runge-kutta计算微分方程的值
            THET=THET+H*THETD;

            RT1=RT1+H*VT1;
            RT2=RT2+H*VT2;
            RM1=RM1+H*VM1;
            RM2=RM2+H*VM2;

            XNM_R=XNM_R+H*XNM_RD;
            XNT_R=XNT_R+H*XNT_RD;

            T=T+H;
        end
        %比例导引公式中需要计算的参数的值
        RTM1=RT1-RM1;
        RTM2=RT2-RM2;
        RTM=sqrt(RTM1*RTM1+RTM2*RTM2);
        VTM1=VT1-VM1;
        VTM2=VT2-VM2;
        VC=-(RTM1*VTM1+RTM2*VTM2)/RTM;
        XLAM=atan2(RTM2,RTM1);
        XLAMD=(RTM1*VTM2-RTM2*VTM1)/(RTM*RTM);

        %导弹进行制导
        XNM=XNP*VC*XLAMD;%比例导引公式
        XNM_RD=(XNM-XNM_R)/TAU_M;
        VM1=VM*cos(THET);
        VM2=VM*sin(THET);
        THETD=XNM_R/VM;

        %目标进行阶跃机动
        VT1=-VT*cos(BETA);
        VT2=VT*sin(BETA);
        XNTLIM=2.5*9.8*2^((30000-RT2)/10000);%假设目标过载与高度有关
        XNT=-XNTLIM;
        XNT_RD=(XNT-XNT_R)/TAU_T;
        BETAD=XNT_R/VT;

		FLAG=1;
	end
	FLAG=0;
    %求解下一步长的值,利用二阶runge-kutta递推微分方程的值
   	BETA=.5*(BETAOLD+BETA+H*BETAD);
    THET=.5*(THETOLD+THET+H*THETD);
   	RT1=.5*(RT1OLD+RT1+H*VT1);
   	RT2=.5*(RT2OLD+RT2+H*VT2);
   	RM1=.5*(RM1OLD+RM1+H*VM1);
   	RM2=.5*(RM2OLD+RM2+H*VM2);
    XNM_R=.5*(XNMOLD+XNM_R+H*XNM_RD);
    XNT_R=.5*(XNTOLD+XNT_R+H*XNT_RD);

   	S=S+H;
	if S>=.09999
      		S=0.;
		n=n+1;
		ArrayT(n)=T;
		ArrayRT1(n)=RT1;
		ArrayRT2(n)=RT2;
		ArrayRM1(n)=RM1;
		ArrayRM2(n)=RM2;
		ArrayXNCG(n)=XNM/9.8;
        ArrayXNTG(n)=XNT/9.8;
		ArrayRTM(n)=RTM;
        ArrayXLAMD(n)=XLAMD;
        ArrayTHET(n)=THET;
	end
end
figure
plot(ArrayRT1,ArrayRT2,ArrayRM1,ArrayRM2),grid
title('导弹目标交战轨迹')
xlabel('X轴(m) ')
ylabel('Y轴(m)')

 讲解:https://www.bilibili.com/video/BV1124y1T7cL/?spm_id_from=333.788.recommend_more_video.-1&vd_source=e0242e1938661c351319b621705c7cc3icon-default.png?t=N7T8https://www.bilibili.com/video/BV1124y1T7cL/?spm_id_from=333.788.recommend_more_video.-1&vd_source=e0242e1938661c351319b621705c7cc3

  • 7
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值