六自由度导弹simulink仿真建模

本文介绍了一名研究生在导师指导下,对导弹进行六自由度基础仿真建模的过程,包括动力学系数计算、过载和姿态控制模块的设计,以及使用Simulink进行整体仿真,验证了控制律在不同控制策略下的性能稳定性。
摘要由CSDN通过智能技术生成

本人为研一学生,第一学期导师安排学习六自由度基础仿真建模,搞清楚整体流程,方便后续制导控制工作展开,代码均是师兄师姐源码修改而来,笔者才疏学浅,如有错误希望读者可以指出,共同学习。

本次仿真为导弹六自由度建模,包含两种控制方法,过载控制和姿态控制。

一、程序内容

1.1 初始文件sim_init.m

初始化参数及运动状态。

%初始化参数
S_ref = 0.110447; %参考面积
L_ref = 6.2; %参考长度
L = 6.2;
S = 0.110447;
HD = 57.3;

%初始运动状态
mass_init = Mass_dandao(240);

Vmx_init = Vw_dandao(240); %初始速度   初始化
Vmy_init = 0;
Vmz_init = 0;

init_xm0 = 0; %初始位置
init_ym0 = 2000; 
init_zm0 = 0; 

wx0 = wx_dandao(240)/HD;%初始角速度-0.0132536329000000
wy0 = wy_dandao(240)/HD;%9.50546595000000e-05
wz0 = wz_dandao(240)/HD;%-6.40883682000000e-05

theta_0 = Theta_dandao(240)/HD;%初始欧拉角
psi_0 = psi_dandao(240)/HD;
gama_0 = phi_dandao(240)/HD;


g = 9.80665;%重力系数
L_0 = 104.21631;%发射点经纬高  初始化
B_0 = 41.18279;
H0 = 10000;

L_0t = 104.21631;%经纬高
B_0t = 41.18279;
H0t = 100;

L_t = 98.49998;%目标经纬高
B_t = 38.99999;
H_t = 198.64;

1.2 动力学系数kinetics_coefficient.m

包含俯仰偏航滚转三个通道的动力学系数计算,对纵向和横向导数小扰动线性化部分。

其中升力系数和阻力系数使用插值表计算得到。

例如计算俯仰通道动力学系数:

%%  %%%%%%%俯仰通道动力学系数计算
  for aa = 1:length(alphac_inter) 
      for ma = 1:length(Ma3) 
         for dz = 1:length(deltaz_inter)
             for hh = 1:length(h) 
                for m = 1:length(m3)                
              a1=0;
              a2(aa,ma,m,hh) = -57.3*Cmz_alpha(aa,ma,m)*q(ma,hh)*S*L/Iz3(m); %量级10^2
              a3(aa,ma,dz,m,hh) = -57.3*Cmz_deltaz(aa,dz,ma,m)*q(ma,hh)*S*L/Iz3(m);   %量级10^2       
              a4(aa,ma,m,hh) =(57.3*Y_alpha(aa,ma)*q(ma,hh)*S )/m3(m)/v(ma,hh);  %量级 0.1  缺推力P
              a5(aa,ma,dz,m,hh) = 57.3*Y_deltaz(aa,dz,ma)*q(ma,hh)*S/m3(m)/v(ma,hh);  %量级0.01
              KL_alpha(aa,ma,m,hh) = 57.3*Y_alpha(aa,ma)*q(ma,hh)*S_ref/m3(m)/g;
              KL_delta(aa,ma,dz,m,hh) = 57.3*Y_deltaz(aa,dz,ma)*q(ma,hh)*S_ref/m3(m)/g;

%             KL_alpha_phase1(mm,hh,aa,bb) = 57.3*Cy_alpha_config1(aa,bb,mm)*q_phase1(mm,hh)*S_ref_phase1_2/mass_vector_phase1(mm)/g;
%             KL_delta_phase1(mm,hh,aa,bb) = 57.3*Cy_deltaz_config1(aa,bb,mm)*q_phase1(mm,hh)*S_ref_phase1_2/mass_vector_phase1(mm)/g;
           
                end
             end
          end
      end
 end

1.3 过载控制模块n_controller.m

先计算飞行包线,动压分区,再取定攻角侧滑角舵偏角的设计点,设计三个通道的过载回路

%% %%%%%%动压分区
for hh=1:length(h)
    for mm=1:length(Ma3)
        if  q(mm,hh)<5.0e+004 
            q_zone(mm,hh)=1;
        elseif q(mm,hh)<8.0e+004 && q(mm,hh)>=5.0e+004
            q_zone(mm,hh)=2;
        elseif q(mm,hh)<1.1e+005 &&q(mm,hh)>=8.0e+004
            q_zone(mm,hh)=3;
        elseif q(mm,hh)<1.5e+005 && q(mm,hh)>=1.1e+005
            q_zone(mm,hh)=4;
        elseif q(mm,hh)<2e+005 && q(mm,hh)>=1.5e+005
            q_zone(mm,hh)=5;
        elseif q(mm,hh)<2.8e+005 && q(mm,hh)>=2e+005
            q_zone(mm,hh)=6;
        elseif q(mm,hh)<4e+005 && q(mm,hh)>=2.8e+005
            q_zone(mm,hh)=7;
        elseif q(mm,hh)<5.6e+005 && q(mm,hh)>=4e+005
            q_zone(mm,hh)=8;
        elseif q(mm,hh)<7e+005 && q(mm,hh)>=5.6e+005
            q_zone(mm,hh)=9;
        end
    end
end

%% 取攻角2°,侧滑角0°,舵偏5°为设计点
for aa = 1:length(alphac_inter)%[0	2	4	6	8	10	15	20]
        for mm = 1:length(Ma3)%[2  2.5  3]
            for dz = 1:length(deltaz_inter)%[-15	-10	-5	0	5	10	15]
                for hh = 1:length(h)%[ 10	  2000	 4000	6000	8000	10000	12000 ]
                    a1_design_n = 0;
                    a2_design_n(mm,hh) = a2(2,mm,2,hh);  % alpha(2)  ma  m3(1019.67)  h
                    a3_design_n(mm,hh) = a3(2,mm,3,2,hh);% alpha(2)  ma   deltaz(-5)   m3(1019.67)  h
                    a4_design_n(mm,hh) = a4(2,mm,2,hh);
                    a5_design_n(mm,hh) = a5(2,mm,3,2,hh);
                    KL_alpha_design_n(mm,hh) = KL_alpha(2,mm,2,hh);
                            
                    a1_autopilot_n=0;
                    a2_autopilot_n(aa,mm,hh) = a2(aa,mm,2,hh);
                    a3_autopilot_n(aa,mm,dz,hh) = a3(aa,mm,dz,2,hh);
                    a4_autopilot_n(aa,mm,hh) = a4(aa,mm,2,hh);
                    a5_autopilot_n(aa,mm,dz,hh) = a5(aa,mm,dz,2,hh);                 
                    KL_alpha_autopilot_n(aa,mm,hh) = KL_alpha(aa,mm,2,hh);  
                    KL_delta_autopilot_n(aa,mm,hh) = KL_delta(aa,mm,2,hh);
                end
            end
        end
end

%% 按动压分区,一个高度一个指标
kesi_phase3 = [0.8  0.8  0.8  0.8  0.9  0.9  0.9  1  1]*1.3;
wd_phase3 = [10 10 10 10 10 10 10 10 10]*1.3;
Tr_phase3 =[1  1  1  0.6  0.6 0.6 0.5 0.5 0.5];
%% 过载回路设计
for mm = 1:length(Ma3)%[2  2.5  3]
    for hh = 1:length(h)%[ 10	  2000	 4000	6000	8000	10000	12000 ]
        k_omiga_pitch_phase3(mm,hh) = -2*kesi_phase3(q_zone(mm,hh))*wd_phase3(q_zone(mm,hh))/a3_design_n(mm,hh);%%%
        k_alpha_pitch_phase3(mm,hh) = (wd_phase3(q_zone(mm,hh))^2 - a2_design_n(mm,hh))...
            /(2*kesi_phase3(q_zone(mm,hh))*wd_phase3(q_zone(mm,hh)));%%%
        %             k_n_pitch(mm,hh,tt) = KK(q_zone(mm,hh))/KL_alpha_design(mm,hh,tt);%%%
        k_n_pitch_phase3(mm,hh) = (9.81*2.2*wd_phase3(q_zone(mm,hh))^2)/((wd_phase3(q_zone(mm,hh))^2-...
            a2_design_n(mm,hh))*a4_design_n(mm,hh)*c_n(hh)*Ma3(mm)*Tr_phase3(q_zone(mm,hh)));
    end
end

1.4 姿态控制模块attitude_control.m

三个通道需要分别设计内环穿越频率,姿态回路增益以及姿态回路积分增益

%% %%%%%偏航通道控制器 取攻角0°,侧滑角2°,舵偏-5°为设计点

for bb = 1:length(alphac_inter)%[0	 2	 4	6	8	10	15	20]   1*8
     for mm = 1:length(Ma3)%[2	 2.5  3]  1*3
            for dy = 1:length(deltay_inter)%[-15 -10  -5  0	 5	10	15]  1*7
                for hh = 1:length(h)%[10	2000	4000	6000	8000	10000	12000]  1*7
                  
                    b1_design = 0;
                    b2_design(mm,hh) = b2(2,mm,2,hh);
                    b3_design(mm,hh) = b3(2,mm,3,2,hh);
                    b4_design(mm,hh) = b4(2,mm,2,hh);
                    b5_design(mm,hh) = b5(2,mm,3,2,hh);
%                     KL_alpha_design_phase1(mm,hh) = KL_alpha_phase1(mm,hh,4,2);
                    
                    b1_autopilot=0;
                    b2_autopilot(bb,mm,hh) = b2(bb,mm,2,hh);
                    b3_autopilot(bb,mm,dy,hh) = b3(bb,mm,dy,2,hh);
                    b4_autopilot(bb,mm,hh) = b4(bb,mm,2,hh);
                    b5_autopilot(bb,mm,dy,hh) = b5(bb,mm,dy,2,hh);
%                     KL_alpha_autopilot(mm,hh,aa,bb) = KL_alpha_phase1(mm,hh,aa,bb);
%                     KL_delta_autopilot(mm,hh,aa,bb) = KL_delta_phase1(mm,hh,aa,bb);
              
                end
            end
     end
end


%% %%按动压分区,一个高度一个指标
omiga_c2 = 1*[10 10 10 10 10 13 22 24 24];%内环穿越频率
k_psi_temp = 2*[2 2 2 2 2 2 3 3.5 3.5 ];%姿态回路增益
k_psiI_temp =10*[-2 -2 -2 -2 -2 -2 -2 -2 -2];%姿态回路积分增益
for mm = 1:length(Ma3) 
    for hh=1:length(h)
        %         omiga_c(mm,hh) = 2*kesi_temp(mm,hh)*omiga_d_temp(mm,hh);
        k_r_yaw(mm,hh) = -abs(omiga_c2(q_zone(mm,hh))/b3_design(mm,hh));
        k_psi_yaw(mm,hh) = k_r_yaw(mm,hh)*k_psi_temp(q_zone(mm,hh));
        k_psiI_yaw(mm,hh) = 0.1*k_psiI_temp(q_zone(mm,hh));
    end
end

1.5 画图模块plot_dandao.m

close all
hold on
H=simout(:,1);
ktheta_out=simout(:,3);
psi_out=simout(:,4);
gama_out=simout(:,5);

x_out=simout(:,6);
y_out=simout(:,7);
z_out=simout(:,8);

vx_out=simout(:,9);
vy_out=simout(:,10);
vz_out=simout(:,11);

alpha_out=simout(:,12);
beta_out=simout(:,13);

kthetac_out=simout(:,20);
psic_out=simout(:,21);
gamac_out=simout(:,22);


plot(tout,H,'linewidth',2);
xlabel('时间(s)');
ylabel('高度(m)');
grid on
title('高度随时间变化曲线');


figure
plot(tout,alpha_out,'linewidth',2);
hold on
plot(tout,beta_out,'r--','linewidth',2);
xlabel('时间(s)');
ylabel('攻角侧滑角(\circ)');
legend('攻角曲线','侧滑角曲线')
title('攻角侧滑角随时间变化曲线');
grid on

figure
plot3(x_out, z_out, y_out, 'b-', 'LineWidth', 2);
xlabel('Z轴');
ylabel('X轴');
zlabel('Y轴');
title('三维飞行轨迹');
grid on;

二、SIXD.slx simulink整体仿真

整体

控制律模块

动力学模块

仿真结果主要查看控制模块是否可以正常工作,如果用过载控制,假如给定法向和切向过载指令为2,系统能够稳定跟上指令;如果用姿态控制,给定合适范围内的姿态角指令,控制器模块也能很迅速很稳定地跟上指令。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值