比例导引(PNG)-Matlab 程序

本文提供比例导引的matlab程序,想要看理论的可以看书《导弹飞行力学》或者我的博客 比例导引详解

代码

%% 三维比例导引末制导

clc;clear;
close all;

%% 设置导弹初始参数和目标参数

% 总步长
length = 1000000;
x_m = zeros(length,1);
y_m = zeros(length,1);
z_m = zeros(length,1);
v_m = zeros(length,1);
theta_m = zeros(length,1);
phi_m = zeros(length,1);
r = zeros(length,1);
gamma_m = zeros(length,1);
psi_m = zeros(length,1);
dr = zeros(length,1);
d_gamma_m = zeros(length,1);
d_psi_m = zeros(length,1);
a_vz_save = zeros(length,1);
a_vy_save = zeros(length,1);

% 初始化
u_max = 200;
t = 0;
dt = 0.001;
% 目标位置(m)
x_T = 30000;
y_T = 0;
z_T = 10000;
% 导弹初始位置(m)
x_m(1) = 0;
y_m(1) = 20000;
z_m(1) = 0;
v_m(1) = 200;
theta_m(1) = 0;
phi_m(1) = 0;
% 比例系数
N = 4;


% 循环
for i = 1:length

    % 计算导弹位置、视线距离、视线倾角、视线偏角更新量
    dx     = v_m(i).*cos(theta_m(i)).*cos(phi_m(i));
    dy     = v_m(i).*sin(theta_m(i));
    dz     = -v_m(i).*cos(theta_m(i)).*sin(phi_m(i));
    delta_x = x_T - x_m(i);
    delta_y = y_T - y_m(i);
    delta_z = z_T - z_m(i);
    delta_vx = - dx;
    delta_vy = - dy;
    delta_vz = - dz;

    r(i)       = sqrt(delta_x .^ 2 + delta_y .^ 2 + delta_z .^ 2);
    gamma_m(i) = atan(delta_y ./ sqrt(delta_x .^ 2 + delta_z .^ 2));
    psi_m(i)   = atan(- delta_z ./ delta_x);
    d_gamma_m(i) = ((delta_x .^ 2 + delta_z .^ 2) .* delta_vy - delta_y .* (delta_x .* delta_vx + delta_z .* delta_vz)) ./ (delta_x .^ 2 + delta_y .^ 2 + delta_z .^ 2) ./ (sqrt(delta_x .^ 2 + delta_z .^ 2));
    d_psi_m(i)   = (delta_z .* delta_vx - delta_x .* delta_vz) ./ (delta_x .^ 2 + delta_z .^ 2); 

    % 求解制导指令
    a_vy   = N.*v_m(i).*d_gamma_m(i);
    a_vz   = -N.*v_m(i).*d_psi_m(i);
    
    % 限幅
    if abs(a_vz) > u_max
        a_vz = sign(a_vz) .* u_max;
    end
    if abs(a_vy) > u_max
        a_vy = sign(a_vy) .* u_max;
    end

    dtheta = a_vy./v_m(i);
    dphi   = -a_vz./(v_m(i).*cos(theta_m(i)));

    % 更新状态
    x_m(i+1)     = x_m(i)+dx.*dt;
    y_m(i+1)     = y_m(i)+dy.*dt;
    z_m(i+1)     = z_m(i)+dz.*dt;
    v_m(i+1)     = v_m(i);
    theta_m(i+1) = theta_m(i)+dtheta.*dt;
    phi_m(i+1)   = phi_m(i)+dphi.*dt;
    t            = t+dt;

    % 保存数据
    a_vy_save(i) = a_vy;
    a_vz_save(i) = a_vz;

    % 导弹高度低于目标高度时表示击中或脱靶
    if abs(r(i)) < 10 
        break
    end

    if i > 1 && abs(r(i)) > abs(r(i-1))
        break
    end

end

len = t ./ dt;
fig1 = figure(1);
plot3(x_m(1:len,:),z_m(1:len,:),y_m(1:len,:));
view([145.8,32.4]);
title('3D trajectory')
xlabel('x');
ylabel('z');
zlabel('y');

fig2 = figure(2);
plot(dt:dt:len.*dt,a_vy_save(1:len,:));
xlabel('t(sec)');
ylabel('U_y(m/s^2)');

fig3 = figure(3);
plot(dt:dt:len.*dt,a_vz_save(1:len,:));
xlabel('t(sec)');
ylabel('U_z(m/s^2)');

fig4 = figure(4);
plot(dt:dt:len.*dt,r(1:len,:));
xlabel('t(sec)');
ylabel('r(m)');

print(fig1, './fig1.png', '-dpng', '-r300');
print(fig2, './fig2.png', '-dpng', '-r300');
print(fig3, './fig3.png', '-dpng', '-r300');
print(fig4, './fig4.png', '-dpng', '-r300');

仿真

三维轨迹
请添加图片描述
法向加速度
请添加图片描述
侧向加速度
请添加图片描述
与目标距离
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/259130.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

node.js mongoose

目录 官方文档 mongoose Schema Model Query document 关系 官方文档 Mongoose v8.0.3: Getting Started mongoose Mongoose 是一个 Node.js 环境下 MongoDB 的对象建模工具。它提供了一种在应用程序中与 MongoDB 数据库进行交互的方式&#xff0c;使得开发者能够使用…

基于k6和python进行自动化性能测试

摘要&#xff1a;在性能测试中&#xff0c;达到相应的性能指标对于一个软件来说十分重要&#xff0c;在本文中&#xff0c;将介绍一种现代化性能测试工具k6。 import http from k6/http; import { sleep } from k6; export default function () {http.get(https://test-api.co…

JNI 注册

一、 JNI 静态注册 ① 在 Android 的 Java 层定义方法 : 在 MainActivity 类中定义 如下 Native 方法 ; public native String stringFromJNI();② Native 方法实现 : 下面是一个 Native 方法实现的示例 ; extern "C" JNIEXPORT jstring JNICALL Java_kim_hsl_jni_…

JMeter如何进行多服务器远程测试

JMeter是Apache软件基金会的开源项目&#xff0c;主要来做功能和性能测试&#xff0c;用Java编写。 我们一般都会用JMeter在本地进行测试&#xff0c;但是受到单个电脑的性能影响&#xff0c;往往达不到性能测试的要求&#xff0c;无法有效的模拟高并发的场景&#xff0c;那么…

css实现0.5px宽度/高度显——属性: transform: scale

在大多数设备上&#xff0c;实际上无法直接使用 CSS 来精确地创建 0.5 像素的边框。因为大多数屏幕的最小渲染单位是一个物理像素&#xff0c;所以通常只能以整数像素单位渲染边框。但是&#xff0c;有一些技巧可以模拟出看起来像是 0.5 像素的边框。 这里介绍使用&#xff1a…

Linux内核模块

文章目录 一、内核模块介绍二、模块讲解1、最简模块代码&#xff1a;2、模块三要素3、常用操作命令3.1、 lsmod&#xff1a;显示已加载模块状态3.2、 insmod&#xff1a;载入模块3.3、rmmod&#xff1a;卸载模块3.4、dmesg&#xff1a;显示信息3.5、modinfo&#xff1a;显示ker…

Azure Machine Learning - 提示工程高级技术

本指南将指导你提示设计和提示工程方面的一些高级技术。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&#xff0c;阿里云认证的资深架构师&#xff0c…

2023/12/20 work

1. 使用select完成TCP客户端程序 2. 使用poll完成TCP并发服务器 3. 思维导图

linux 内核的 lru_list 的结构

在linux的slab分配的入口slab_alloc有一个传入参数lru&#xff0c;它的作用是使每个slab对象在unused&#xff0c;但可能后面继续使用的时候&#xff0c;不需要free&#xff0c;可以先放在lru_list上。lru_list的结构为&#xff1a; struct list_lru {struct list_lru_node *n…

【Axure RP9】中继器应用及相关案例

一 中继器简介 1.1 中继器是什么 中继器&#xff08;Repeater&#xff09;是一种高级的组件&#xff08;Widget&#xff09;&#xff0c;用于显示文本、图像和其他元素的重复集合。它是一个容器&#xff0c;容器中的每一个项目称作“item”&#xff0c;由于“item”中的数据由…

C# Tcplistener,Tcp服务端简易封装

文章目录 前言相关文章前言设计代码简单使用运行结果 前言 我最近有个需求要写Tcp服务端&#xff0c;我发现Tcp服务端的回调函数比较麻烦&#xff0c;简化Tcp的服务&#xff0c;我打算自己封装一个简单的Tcp服务端。 相关文章 C# TCP应用编程三 异步TCP应用编程 C# Tcpclient…

《数据结构、算法与应用C++语言描述》- 最小输者树模板的C++实现

输者树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_31loserTree 输者树&#xff1a;每一个内部节点所记录的都是比赛的输者&#xff0c;晋级的节点记录在边上。本文中&#xff0c;赢者是分数较低的那个&#xff0c;输者是分数高…

线性回归中的似然函数、最大似然估计、最小二乘法怎么来的(让你彻底懂原理)收官之篇

图1 图2 图3 图4 问1&#xff1a;为什么要引入似然函数&#xff1f; 在线性回归中引入似然函数是为了通过概率统计的方法对模型参数进行估计。简单来说&#xff0c;我们希望找到一组参数&#xff0c;使得我们观测到的数据在给定这组参数的情况下最有可能发生。 问:1&#xf…

js之零碎工具(四)

一、数组的去重 简单类型的去重 let arr [1, 2, 2, 3, 4, 4, 5]; let uniqueArr [...new Set(arr)]; console.log(uniqueArr); // 输出&#xff1a;[1, 2, 3, 4, 5]在这个例子中&#xff0c;我们首先创建了一个新的 Set 对象&#xff0c;并将数组 arr 作为参数传递给 Set 的…

深度学习中的张量维度

1 深度学习中的张量 在深度学习框架中&#xff0c;Tensor&#xff08;张量&#xff09;是一种数据结构&#xff0c;用于存储和操作多维数组。张量可以被视为一种扩展的矩阵&#xff0c;它可以具有任意数量的维度。 在深度学习中&#xff0c;张量通常被用来表示神经网络的输入…

管理类联考——数学——真题篇——按题型分类——充分性判断题——蒙猜——按题号

上来先找C&#xff1a;一个等号一个不等号型&#xff0c;一个定量一个定性型&#xff0c;取值范围有交集型&#xff0c;最后找选项需要联立型&#xff08;因为是否需要联立&#xff0c;不要判断&#xff0c;一般如十字交叉&#xff09;。一般也就3-4个C。详见这里 找完C后找AB&…

Java开发框架和中间件面试题(1)

1.什么是Spring框架&#xff1f; Spring是一种轻量级框架&#xff0c;旨在提高开发人员的开发效率以及系统的可维护性。 我们一般说的Spring框架就是Spring Framework,它是很多模块的集合&#xff0c;使用这些模块可以很方便的协助我们进行开发。这些模块是核心容器、数据访…

制造行业定制软件解决方案——工业信息采集平台

摘要&#xff1a;针对目前企业在线检测数据信号种类繁多&#xff0c;缺乏统一监控人员和及时处置措施等问题。蓝鹏测控开发针对企业工业生产的在线数据的集中采集分析平台&#xff0c;通过该工业信息采集平台可将企业日常各种仪表设备能够得到数据进行集中分析处理存储&#xf…

vmware离线安装docker-compose

vmware离线安装docker-compose 最近安装docker-compose&#xff0c;发现git取拉取&#xff0c;不是拒绝连接就是报443错误&#xff0c;或者其他错误 最后发现用包直接传上去好用&#xff0c;不用git拉取了 离线安装docker-compose 本文章给的docker-compose离线包&#xff0c;…

【超详细】基于单片机控制的十字道路口交通灯控制

目录 最终效果 一、设计任务 二、设计报告 1 设计说明 1.1功能分析 1.1.1整体系统功能分析 1.1.2显示状态功能分析 1.1.3设置状态功能分析 1.1.4紧急状态功能分析 1.2方案比选 1.2.1车辆LED数码管倒计时显示板块 1.2.2车辆信号灯显示板块 1.2.3行人信号灯显示板块 …
最新文章