首页 > 编程语言 >制导弹药(导弹) 中制导律+末制导律+导引头控制 打击目标弹道程序

制导弹药(导弹) 中制导律+末制导律+导引头控制 打击目标弹道程序

时间:2024-09-18 15:20:38浏览次数:3  
标签:初始条件 iniStates vm psiv 导引头 theta 打击目标 制导

声明:本文仅用于学习交流用途

1.引言

最近用matlab写了一个 空地导弹的有控弹道程序 ,现在把它分写出来:
导弹从空中发射后,分别经过 (1)中制导段;(2)末制导段,,,两个部分。
在这里,中制导律 的俯仰和偏航通道用的是程序角控制,末制导律俯仰通道用的弹道成型制导律,偏航通道用的比例导引。导引头在距离目标2km的时候开始启控,启控距离可以自行调整。在本文中,我们将介绍两个用于子弹药仿真的 MATLAB 程序。这些程序用于模拟子弹药在末制导阶段的运动过程。通过简要展示部分代码,并重点解释程序的逻辑和物理模型,我们希望帮助读者理解其实现过程。

2. 初始条件设置与仿真初始化

主要用于设置飞行器的初始条件和初始化仿真环境。这些初始条件为后续的运动方程提供了必要的输入。

2.1. 关键变量的含义

以下是一些关键变量的含义:

vm: 飞行器初速度(米/秒)。
theta: 俯仰角(弧度)。
psiv: 偏航角(弧度)。
xm, ym, zm: 飞行器的初始位置(米)。

2.2. 初始条件设置

程序中的初始条件设置:

vm = 240;            % 初速度 (m/s)
theta = 0 * pi / 180; % 初始俯仰角 (弧度)
psiv = 0 * pi / 180;  % 初始偏航角 (弧度)
xm = 0;              % 初始位置 x (m)
ym = 1000;           % 初始位置 y (m)
zm = 0;              % 初始位置 z (m)

这些初始条件用于定义飞行器在仿真开始时的状态。

3. 空地导弹微分方程

3.1. 程序结构与控制逻辑

程序通过定义 dynamic 函数来模拟子弹药的动态行为。这个函数接收时间 t 和初始状态 iniStates,并返回状态变化率:

function[dydt, alpha, beta, ny, nz] = dynamic(t, iniStates)
    vm = iniStates(1);
    theta = iniStates(2);
    psiv = iniStates(3);
    xm = iniStates(4);
    ym = iniStates(5);
    zm = iniStates(6);
    
    % 计算速度分量
    Vx = vm * cos(theta) * cos(psiv);
    Vy = vm * sin(theta);
    Vz = -vm * cos(theta) * sin(psiv);
    
    % 初始化 dydt
    dydt = zeros(6, 1);
    % 计算控制逻辑...
end

此函数定义了子弹药在不同状态下的动态行为。

3.2. 导引头激活条件

    导引头的激活距离可以随意调整
distance_to_target = sqrt((xt - xm)^2 + (yt - ym)^2 + (zt - zm)^2); % 计算弹目距离
distance_open_guidehead = 200; % 导引头激活距离

if distance_to_target < distance_open_guidehead
    alpha = limit(-a1 * exp((t - a3) / a2) / 57.3 - theta);
    beta = limit(psi - psiv);
    % 计算 ny 和 nz ...
end

3.3. 空气动力学模型

cx = 0.272;
cy = 0.1003 * alpha * 57.3 + 0.0023 * dz * 57.3;
cz = -0.0787 * beta * 57.3 + (-0.0446) * dy * 57.3;
X = q * S * cx;  % 阻力
Y = q * S * cy;  % 升力
Z = q * S * cz;  % 侧向力

这些系数根据子弹药的攻角和偏航角动态变化,从而影响飞行器的轨迹。

4. 仿真结果

下面是部分仿真结果图:
仿真结果图

欢迎感兴趣的读者和作者沟通交流,qq:2414342361

标签:初始条件,iniStates,vm,psiv,导引头,theta,打击目标,制导
From: https://blog.csdn.net/weixin_47115999/article/details/142334252

相关文章

  • 【气动学】卡尔曼滤波器和红外传感器导弹制导仿真(含导弹位置和速度)【含Matlab源码 683
    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。......
  • pytorch 自定义 dataloader 维度不对齐+广播机制导致不易察觉 bug
    很简单,自定义了一个dataloader,出现以下不易察觉buginputs维度:[bs,4],这个没问题labels维度:正确应该是[bs,1],但是dataloader出来是[bs]模型的outputs维度:[bs,1]如果用torch.mean(torch.abs(labels-outputs))计算L1Loss/MAE由于pytorch的广播机制,torch.ab......
  • Unity 导航路线生成,小地图同步映射, 经过以后地图与小地图删除点位(点击小地图控制导航
    效果:(如下图所示)操作方法:搭建小地图UI截取图片创建地面挂载如下代码:usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;[RequireComponent(typeof(MeshFilter),typeof(MeshCollider),typeof(MeshRenderer))]publicclassMap:Mo......
  • 实验3 中间代码生成 *语法制导的代码+生成语句代码生成+条件判断语句代码生成
    实验3中间代码生成help-assignment代码已完成除了语法树,编译器里另一个核心数据结构就是中间代码(IntermediateRepresentation,IR)。中间代码是编译器从源语言到目标语言之间采用的一种过渡性质的代码形式,往往介于语法树和汇编代码之间,其表示独立于机器,易于分析和翻译......
  • 5.x 主从复制导致的命令执行
    Redis4.x/5.x主从复制导致的命令执行Redis是著名的开源Key-Value数据库,其具备再沙箱中执行Lua脚本的能力。Redis未授权访问在4.x/5.0.5以前版本下,我们可以使用master/slave模式加载远程模块,通过动态链接库的方式执行任意目录。环境搭建cdvulhub/redis/4-unaccdocker0compo......
  • 语法制导翻译与中间代码
    语法制导翻译与中间代码综合属性和继承属性的区别在于:()A综合属性可以传递给父节点,而继承属性只能传递给子节点B综合属性和继承属性没有区别C综合属性只能由终结符计算得出,而继承属性可以由非终结符计算得出D综合属性可以在语法树的任意节点计算,而继承属性只能在叶......
  • OpenMP - 编译制导(五)task、team
    task制导显式地将代码块作为任务创建,并将这些任务分配给线程池中的线程执行,多个任务可以并行执行,每个任务都可能在不同的线程上执行。通过#pragmaomptask指令来创建任务,以及通过#pragmaomptaskwait指令来等待任务的完成。#include<iostream>#include<omp.h>usingnamesp......
  • OpenMP - 编译制导(三)
    ordered制导#include<iostream>#include<omp.h>usingnamespacestd;intmain(intargc,char*argv[]){intd[6];#pragmaompparallelfororderedfor(inti=0;i<6;++i){#pragmaompordered{co......
  • OpenMP - 编译制导(二)
    section制导OpenMP中的section子句是用于在sections子句内部将代码划分成几个不同的段。当与#pragmaompparallelsections结合使用时,这些代码段会并行处理。每个section由其中的一个线程执行一次,不同的section可以由不同的线程执行。当然,如果一个线程运行得足够快,它可能会执行......
  • OpenMP - 编译制导(1)
    编译制导是对程序设计语言的扩展。通过对串行程序添加制导语句实现并行化。编译制导语句由下列几部分组成:制导标识符(#pragmaomp)制导名称(parallel,for,section等)子句(private,shared,reduction,copyin等)并行域制导一个并行域就是一个能被多个线程并行执行的程序段。在......