基于arduino+ MPU9250激光驾驭k803反坦克导弹的部分代码

1.导弹沿激光束方向前进,导弹的底部或尾部安装激光接收器。

2.arduino控制调整,始终使导弹沿光束方向前进,不脱轨,可以把激光束想像为实体轨道。

3.战斗部二次引爆,产生液体高速高温金属射流,击穿15cm厚钢板。

4.最后确定激光束上是否传输实时数据,比如攻击前发送提前引爆信息(炸坦克附近步兵)或其他数据,还是就是只提供位置信息 ?。 

自主研发的制导和飞控系统资料(含全部编译通过的原代码,含贯导微分计算,含舵机控制)

自主研发的未端图像识别资料(抓目标图生成纹理图、对比原图,识别机场和建筑物明显目标,建立优先级,自动返回价值高的目标做为攻击目标,含全部编译通过的原代码)

注意,1、因法律和法规限制,不提供发动机和战斗部资料,请不要咨询,请多谅解。

             2、因资料是全部公开的,无隐含部分,如使用我的设计和代码或自行改造运行造成的一切后果,我 不负责。

比例导引法是在自寻的导弹上采用较多的一种导引规律,它是指在导弹飞向目标的过程中,导弹速度方向的变化率与目标视线的变化率成比例,这种导引规律易于工程实现,同时通过选择合适的导引比,就不会需要太太的法向过载,对不同机动特性的目标适应能力也较强,因此广泛应用于各类导弹上。

激光半主动制导能实现间接瞄准,可采用准比例导引法,导弹弹道特性好,对目标机动有一定的适应性。比例导引法实现了打了不用管的作战要求,这就提高了武器系统的生存能力,同时增加了其攻击效率。

三点法导引是指导弹在攻击目标的导引过程中,导弹始终处于制导站与目标的连线上。如果观察者从制导站上看目标,则目标的影像正好被导弹的影像所覆盖。因此,三点法又称目标覆盖法或重合法。

三点法导引是指导弹在攻击目标的导引过程中,导弹始终处于制导站与目标的连线上。如果观察者从制导站上看目标,则目标的影像正好被导弹的影像所覆盖。因此,三点法又称目标覆盖法或重合法。

(1-1)

其中: ——目标到制导站距离;

Rm——导弹到制导站距离;

 Vt——目标速度;

 V——导弹速度;

 ——目标高低角、目标前置角;

 ——导弹高低角、导弹前置角;

 ——、与基准线之间的夹角。

1.3  初始条件

设坦克作水平等速直线运动,如图1.2所示,Vt=27m/s ,反坦克导弹按三点法拦截目标,并作等速飞行,270m/s 。攻击平面为一水平面,制导站静止。导弹开始导引瞬间的攻击条件Rt=4700m ,Rm0=50m,qm0=qt0。

选取地面坐标系oyz,原点o与制导站重合,oz轴平行于目标的运动方向(如图1.2所示)。将方程组(1-1)改写成便于数值积分的形式,即

仿真飞行图如下

类C代码(此代码可移植到Matlab中模拟攻击)如下:

//比例引导计算部分
 //
 //   微分算法
 //  1、ψv=Qm+arcsin(Vt/v*Rm/Rt*sinQm)  ψv定义为vv
 //  2、dRm/dt=Vcos(Qm-ψv)       定义为Rm
 //  3、Rt/dt=-VtcosQm            定义为Rt
 //  4、dQm/dt=-V/Rm*sin(Qm-ψv)  定义为Qm
 

/比例引导计算部分/

//飞行时间暂定为60秒
 time  qssj       //起始时间
 time  zzsj       //终止时间
 long  sjbc       //时间步长 秒

 int i11
 string  cs1
 double  cs2    //目标速度  Vt
 double  cs3    //导弹速度  V
 double  cs4    //初始导弹与测站的距离  Rm
 double  cs5    //目标到测站的距离      Rt
 double  cs6    //角度                  Qm
 
 double  vv
 
 double  y11
 double  z11
 
 double  s11   //目标移动距离
 
 double   Rm
 double   Rt
 double   Qm
 
 
cs1=sle_1.text
cs2=double(sle_2.text)
cs3=double(sle_3.text)
cs4=double(sle_4.text)
cs5=double(sle_5.text)
cs6=double(sle_6.text)


 Rm=cs4
 Rt=cs5
 Qm=cs6
 vv=0

qssj=now()
  DELETE all FROM "blydjsdtsj"  using  itrans_destination ;  //清空 飞行动态数据表

for i11=0 to 25 step 1
   // b1bm=dwc_tjb.getitemstring(i,zdb1l)
    // dwc_tjb.scrolltorow(i)
   
    vv=Qm+Asin((cs2/cs3)*(Rm/Rt)*sin(Qm))   //ψv定义为vv
    Rm=Rm + cs3*cos(Qm - vv)         //z轴上的速度
    Rt=Rt - (cs2*cos(Qm))          //y轴上的速度
    if i11=0 then
        Rm=cs4
    end if    
    Qm=Qm - (cs3/Rm*sin(Qm - vv))
    
    //  1、ψv=Qm+arcsin(Vt/v*Rm/Rt*sinQm)
     //  2、Rm=Vcos(Qm-ψv)      ψv定义为vv
    //  3、Rt=-VtcosQm
     //  4、Qm=-V/Rm*sin(Qm-ψv)
    
  

 zzsj=now()
    sjbc=secondsafter(qssj,zzsj)
    st_10.text=string(sjbc)
    y11=Rt
    z11=Rm 
    s11=CS2*sjbc
      INSERT INTO "blydjsdtsj"  
         ( "ddxh",   
           "sx1",   
           "sy1",   
           "sz1",   
           "qm",   
           "rm",   
           "rt",
              "sj",
              "mbsd")  
        VALUES ( 'k802',   
           :y11,   
           :y11,   
           :z11,   
           :Qm,   
           :Rm,   
           :Rt,
              :sjbc,
              :s11)   using  itrans_destination;
   commit; 
    
    if(round(Rm,0)=round(Rt,0)) then
      exit
   end if
    
    

 
next    

猜你喜欢

转载自blog.csdn.net/fanxiaoduo1/article/details/108618247
今日推荐