TH方程学习 (7)
一、内容介绍
TH存在广泛应用,在下面案例中,将介绍几种相对运动模型,斜滑接近模型,本节学习斜滑接近制导方法能够对接近时间、接近方向以及自主接近过程的相对速度进行控制。施加脉冲时刻追踪器的位置连线可构成一条直线,即理想轨道,实际接近轨道和理想接近轨道在脉冲施加时刻相交。脉冲施加的次数越多,则实际轨道偏离理想轨道越少;脉冲施加次数趋近于无穷大时,实际交会轨道将会和理想轨道重合,接近一条直线,从大范围看,多脉冲斜滑接近整个过程基本是沿直线运动的。
设追踪器在接近段的初始时刻,相对运动状态为和
,接近段终端时刻
的相对状态为
和
。设追踪器沿准直线完成对目标器的接近,由
指向
的直线矢量
为规划轨迹。所以,在任意时刻
有
其中,为追踪器在该直线上某点处的位置矢量。
矢量的单位矢量为
其中,表示矢量
在VVLH坐标系中投影与三个坐标轴的夹角,从而决定了接近方向。矢量可以表示为
在接近过程中,可根据接近轨迹快速性和安全性等多种需求来确定的变化关系,即设计理想的交会轨迹。典型的相对运动速度变化模式有指数型,这里采用指数型,
和
为线性关系
上式中为斜率。则整个接近段的转移时间T为
设接近段采用多脉冲分段控制,作用次速度脉冲使绕飞卫星在时间T内从初始位置
转移到终点位置
。任意控制段的两次脉冲作用的时间间隔是相同的,即
。
在时刻,经过第m次速度脉冲后,绕飞卫星从
转移到
,有
每个阶段相当于一次双脉冲轨道转移,可通过如下编程
% 本节旨在利用TH方程实现椭圆的轨道的滑行制导
clc;clear
% 初始化条件
Ecc = 0.1;
Perigee= 500;
TA = 45;
N = 5 ; %施加脉冲次数
r_i = [1;1;1];
v_i = [0.01;0.01;0.01];
% 期望末端条件
r_f = [0.1;0;0];
v_f = [0;0;0];
% 求出初始相对距离
rho0 = norm(r_i-r_f);
rhof = 0;%设计初始和结束沿着rho方向的速度
drho0 = -0.005;
drhof = -0.0001;
a = (drho0-drhof)/rho0;
t = 1/a *log(drhof/drho0);
% 求出单位矢量
u_rho = (r_i-r_f)/rho0;rho1_vec = zeros(3,N);
rho1_vec(:,1)= r_i;
% 记录每次施加脉冲前的速度
vvff = zeros(3,N);
vvff(:,1) = v_i;
% 记录每次施加脉冲后的速度
vvrr = zeros(3,N);
vvrr(:,N) = v_f;
delta_t = t/(N-1);
% 脉冲希望到达的位置
for i=1:N-1t1 = i*t/(N-1);rho1 = rho0*exp(a*t1)+drhof/a*(exp(a*t1)-1);rho1_vec(:,i+1) = r_f+rho1*u_rho; [v,Phi,vv] = TH_solver(Ecc,Perigee,TA,rho1_vec(:,i),vvff(:,i),t/(N-1));Phiall{i} = Phi;Phi_rr = Phi(1:3,1:3);Phi_rv = Phi(1:3,4:6);vvrr(:,i) = inv(Phi_rv)*(rho1_vec(:,i+1)-Phi_rr*rho1_vec(:,i));[x,Phi0,xx] = TH_solver(Ecc,Perigee,TA,rho1_vec(:,i),vvrr(:,i),t/(N-1));yy(:,i) = x(1:3);vvff(:,i+1) = x(4:6);
end
dv=vvrr-vvff;
Phiall{4}*[rho1_vec(:,4);vvrr(:,4)];
tt = linspace(0,delta_t,1000);
for ss=1:Nfor j=1:length(tt)[mm,Phi00,zz0]= TH_solver(Ecc,Perigee,TA,rho1_vec(:,ss),vvrr(:,ss),tt(j));tarx((ss-1)*1000+j) = mm(1);tary((ss-1)*1000+j) = mm(2);tarz((ss-1)*1000+j) = mm(3);end
end
% 使用STK验证VVLH坐标系
uiApplication = actxGetRunningServer('STK12.application');
root = uiApplication.Personality2;
checkempty = root.Children.Count;
if checkempty ~= 0root.CurrentScenario.Unloadroot.CloseScenario;
end
root.NewScenario('VVLH');
StartTime = '26 Jan 2024 04:00:00.000'; % 场景开始时间
StopTime = '10 Feb 2024 04:00:00.000'; % 场景结束时间
root.ExecuteCommand(['SetAnalysisTimePeriod * "',StartTime,'" "',StopTime,'"']);
root.ExecuteCommand(' Animate * Reset');
SatName = 'Target'; % SAR_ GX_ Sat_ GX_1_ SAR_1_
satellite = root.CurrentScenario.Children.New('eSatellite', SatName);
satellite.SetPropagatorType('ePropagatorAstrogator'); % 不设置的时候默认为二体模型 ePropagatorJ4Perturbation
satellite.Propagator;
% 目标星初始状态
Perigee = 500;
T = 60;
% 追踪星在VVLH坐下的相对位置
delta_r = [1;1;1];
delta_v = [0.01;0.01;0.01];
Perige = 6378.137+Perigee;
ecc = 0.1;
sma = Perige/(1-ecc);
Inc = 30;
w = 0;
RAAN = 0;
TA = 45;
root.ExecuteCommand(['Astrogator */Satellite/',SatName,' SetValue MainSequence.SegmentList Initial_State Propagate']);
InitialState=satellite.Propagator.MainSequence.Item(0);
%% 初始化卫星参数
root.ExecuteCommand(['Astrogator */Satellite/',SatName,' SetValue MainSequence.SegmentList.Initial_State.CoordinateType Modified Keplerian']);
root.ExecuteCommand(['Astrogator */Satellite/',SatName,' SetValue MainSequence.SegmentList.Initial_State.InitialState.Epoch ',StartTime,' UTCG']);
root.ExecuteCommand(['Astrogator */Satellite/',SatName,' SetValue MainSequence.SegmentList.Initial_State.InitialState.Keplerian.sma ',num2str(sma),' km']);
root.ExecuteCommand(['Astrogator */Satellite/',SatName,' SetValue MainSequence.SegmentList.Initial_State.InitialState.Keplerian.ecc ',num2str(ecc)]);
root.ExecuteCommand(['Astrogator */Satellite/',SatName,' SetValue MainSequence.SegmentList.Initial_State.InitialState.Keplerian.inc ',num2str(Inc),' deg']);
root.ExecuteCommand(['Astrogator */Satellite/',SatName,' SetValue MainSequence.SegmentList.Initial_State.InitialState.Keplerian.w ',num2str(w),' deg']);
root.ExecuteCommand(['Astrogator */Satellite/',SatName,' SetValue MainSequence.SegmentList.Initial_State.InitialState.Keplerian.RAAN ',num2str(RAAN),' deg']);
root.ExecuteCommand(['Astrogator */Satellite/',SatName,' SetValue MainSequence.SegmentList.Initial_State.InitialState.Keplerian.TA ',num2str(TA),' deg']);
%% 二体传播
Propagate=satellite.Propagator.MainSequence.Item(1);
Propagate.PropagatorName='Earth Point Mass';
root.ExecuteCommand(['Astrogator */Satellite/',SatName,' RunMCS']);% 插入目标星
SatName2 = 'Chaser';
satellite2 = root.CurrentScenario.Children.New('eSatellite', SatName2);
satellite2.SetPropagatorType('ePropagatorAstrogator'); % 不设置的时候默认为二体模型 ePropagatorJ4Perturbation
satellite2.Propagator;
InitialState2=satellite2.Propagator.MainSequence.Item(0);
InitialState2.CoordSystemName='Satellite/Target VVLH';
InitialState2.Element.X=delta_r(1);
InitialState2.Element.Y=delta_r(2);
InitialState2.Element.Z=delta_r(3);
InitialState2.Element.Vx=delta_v(1);
InitialState2.Element.Vy=delta_v(2);
InitialState2.Element.Vz=delta_v(3);
Propagate2=satellite2.Propagator.MainSequence.Item(1);
Propagate2.PropagatorName='Earth Point Mass';
for j=1:NManeuverName=['Maneuver',num2str(j)];PropagateName=['Propagate',num2str(j)];satellite2.Propagator.MainSequence.Insert('eVASegmentTypeManeuver',ManeuverName,'Propagate');Maneuver=satellite2.Propagator.MainSequence.Item(ManeuverName);root.ExecuteCommand(['Astrogator */Satellite/',SatName2,' SetValue MainSequence.SegmentList.',ManeuverName,'.ImpulsiveMnvr.AttitudeControl Thrust Vector']);Maneuver.Maneuver.AttitudeControl.ThrustAxesName='Satellite VVLH.Axes';Maneuver.Maneuver.AttitudeControl.X=dv(1,j)*1000;Maneuver.Maneuver.AttitudeControl.Y=dv(2,j)*1000;Maneuver.Maneuver.AttitudeControl.Z=dv(3,j)*1000;satellite2.Propagator.MainSequence.Insert('eVASegmentTypePropagate',PropagateName,'Propagate');Propagate3=satellite2.Propagator.MainSequence.Item(PropagateName);Propagate3.PropagatorName='Earth Point Mass';Propagate3.Properties.Color=255;Propagate3.StoppingConditions.Item(0).Properties.Trip = delta_t;
end
satellite2.Propagator.MainSequence.Cut('Propagate')
root.ExecuteCommand(['Astrogator */Satellite/',SatName2,' RunMCS']);
% 报告二颗卫星的三维关系
satellite.VO.OrbitSystems.InertialByWindow.IsVisible=0;
satellite2.VO.OrbitSystems.InertialByWindow.IsVisible=0;
satellite2.VO.OrbitSystems.Add('Satellite/Target VVLH System')
satellite.VO.Vector.RefCrdns.Item(2).Visible=1;targetdata=root.ExecuteCommand(['Report_RM */Satellite/Target Style "VVLH" TimePeriod "26 Jan 2024 04:00:00.000" "26 Jan 2024 4:30:00.000" TimeStep 1']);
Num=targetdata.Count;
root.ExecuteCommand('Astrogator */Satellite/Target ClearDWCGraphics');
root.ExecuteCommand('Astrogator */Satellite/Chaser ClearDWCGraphics');
for j=1:Num-2struct=regexp(targetdata.Item(j),',','split');Tar_x(j)=str2double(struct{2});Tar_y(j)=str2double(struct{3});Tar_z(j)=str2double(struct{4});
endfigure(1)
plot3(Tar_x(1:floor(t)),Tar_y(1:floor(t)),Tar_z(1:floor(t)),'LineWidth',1);
hold on
plot3(tarx,tary,tarz,'LineWidth',1)
axis([-1.5 1.5 -1.5 1.5 -1.5 1.5])
set(gca,'XDir','reverse');
set(gca,'YDir','reverse');
set(gca,'ZDir','reverse');
xlabel('X axis(km)','FontName','Times New Roman')
ylabel('Y axis(km)','FontName','Times New Roman')
zlabel('Z axis(km)','FontName','Times New Roman')
title('e=0.1,Perigee=500km','FontName','Times New Roman')
grid onplot3(rho1_vec(1,:),rho1_vec(2,:),rho1_vec(3,:),'g.')
plot3(delta_r(1),delta_r(2),delta_r(3),'r.')legend('transfer trajectory(STK)','trasnfer trajecoty(TH)','Impulsive Point','Original','Location','Northeast')
得到最终的结果,滑移的曲线如图所示
下图是每次施加脉冲前和施加脉冲后的位置速度,将上述脉冲形式写入STK,使用二体预报,发现计算出来的脉冲曲线与TH状态转移方程计算出来的曲线不一致,存在微小的误差。并且随着脉冲次数的增多,该误差会更加明显。
相关文章:

TH方程学习 (7)
一、内容介绍 TH存在广泛应用,在下面案例中,将介绍几种相对运动模型,斜滑接近模型,本节学习斜滑接近制导方法能够对接近时间、接近方向以及自主接近过程的相对速度进行控制。施加脉冲时刻追踪器的位置连线可构成一条直线…...

2024最新python入门教程|python安装|pycharm安装
前言:在安装PyCharm之前,首先需要明确PyCharm是一款功能强大的Python集成开发环境(IDE),由JetBrains公司开发。PyCharm旨在通过提供智能代码补全、语法高亮、代码检查、快速导航和重构等丰富的编码辅助工具,…...
docker架构
docker架构 Docker daemon 是Docker最核心的后台进程,它负责响应来自Dockerclient的请求,然后将这此请求翻译成系统调用完成容器管理操作。该进程会在后台后启动一个APIServer,负责接收由 Dockerclient发送的请求;接收到的请求将通…...

使用Java进行网络采集:代理IP与参数传递详解
在Java编程语言中,参数传递机制是一个常见的讨论话题。理解这一点对于编写高效且无错误的Java代码至关重要。本文将探讨Java的参数传递机制,解析其究竟是“按引用传递”还是“按值传递”,并结合网络爬虫技术的实例,展示如何在实际…...

多功能光时域反射仪的工作原理
6426A-2101多功能光时域反射仪是新一代掌上型智能化光纤通信测量仪器,具有强大的功能和广泛的应用领域。它能够显示光纤及光缆的损耗分布曲线图,测量光纤及光缆的多种关键参数,包括长度、损耗、接续质量等,为光纤通信系统的工程施…...

目标检测数据集 - 海洋垃圾检测数据集下载「包含VOC、COCO、YOLO三种格式」
数据集介绍:海洋垃圾检测数据集,真实拍摄海洋海底场景高质量垃圾检测图片数据,涉及场景丰富,比如海底塑料垃圾数据、海底铁制品罐状垃圾数据、海底纸张垃圾数据、海洋生物和海底垃圾同框数据、海底探索仪器和海底垃圾同框数据、海…...
如何进行Java程序的性能优化
在软件开发中,性能优化是一个至关重要的环节,它直接影响到用户体验、系统稳定性和资源消耗。对于Java程序而言,性能优化更是不可或缺的一部分。下面,我将从技术难点、面试官关注点、回答吸引力和代码举例四个方面,详细…...

Echarts柱状图数据太多,自定义长度之后,自适应浏览器缩放
不知道是不是最优解,但是当前解决了我遇到的问题,如有更好的方法,希望看到这篇文章的同学可以不吝指导一番,非常感谢 1、问题描述: 因Ecahrts柱状图数据有时多有时少,所以在数据达到一定程度之后ÿ…...

小白级教程—安装Ubuntu 20.04 LTS服务器
下载 本教程将使用20.04版进行教学 由于官方速度可能有点慢,可以下方的使用清华镜像下载 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/ 点击20.24版本 选择 ubuntu-20.04.6-live-server-amd64.iso 新建虚拟机 下载好后 我们使用 VMware 打开它 这里选…...
9、中华人民共和国个人信息保护法
第一章 总 则 第一条 为了保护个人信息权益,规范个人信息处理活动,促进个人信息合理利用,根据宪法,制定本法。 第二条 自然人的个人信息受法律保护,任何组织、个人不得侵害自然人的个人信息权益。 第三条 在中华人民共和国境内处理自然人个人信息的活动,适用本…...

经典回归模型及Python实现方法
文章目录 1. 引言2. 经典回归模型及Python实现2.1 线性回归 Linear Regression2.2 多项式回归 Polynomial Regression2.3 逻辑回归 Logistic Regression2.4 岭回归 Ridge Regression2.5 套索回归 LASSO Regression2.6 弹性网络回归 Elastic Net2.7 决策树回归 Decision Tree Re…...
Git 保留空文件夹结构
假设有如下 helloworld 项目结构: helloworld|--.git|--.gitignore|--Builds|--WebGL|--iOS|--Android现在有个需求,在上传到 github 仓库时,只想保留 WebGL、iOS、Android 文件夹的结构,不想要里面的内容,可以按以下…...

【吊打面试官系列】MySQL 中有哪几种锁?
大家好,我是锋哥。今天分享关于 【MySQL 中有哪几种锁?】面试题,希望对大家有帮助; MySQL 中有哪几种锁? 1、表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,…...

小巧、免费高级分类整理桌面图标和文件程序
一、简介 1、专为Windows操作系统设计的桌面整理工具,旨在帮助用户更好地管理和整理桌面上的图标和文件。这款软件以其小巧、免费且无广告的特点受到用户的欢迎,尤其适合那些希望保持桌面整洁、提高工作效率的用户。 二、下载 1、下载地址: 官网链接:https://www.coodesker…...
Elasticsearch挂掉后,如何快速恢复数据
目录 一、Elasticsearch使用 二、实体类 2.1 mysql 实体类 2.2 Elasticsearch实体类 三、XXL-job定时执行 一、Elasticsearch使用 当我们做搜索功能时,如果为了提高查询效率,通常使用Elasticsearch搜索引擎加快搜索效率。以搜索商品为例,我…...

eNSP学习——连接RIP与OSPF网络、默认路由
目录 相关主要命令 实验一、连接RIP与OSPF网络 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、搭建RIP和OSPF网络 3、配置双向路由引入 4、手工配置引入时的开销值 实验二、使用OSPF、RIP发布默认路由 原理介绍 实验目的 实验内容 实…...
工具MyBatis Generator(MBG)
MyBatis Generator(MBG),这是官方帮我们提供的一个自动生成代码的工具,前面的课程中,我们都是脑袋里想好,pojo有哪些属性,属性的类型是什么,对应的数据表中的字段名字是什么,匹配的类型是什么..…...
NeuralForecast 模型的参数 windows_batch的含义
NeuralForecast 模型的参数 windows_batch的含义 flyfish import pandas as pd import numpy as npAirPassengers np.array([112.0, 118.0, 132.0, 129.0, 121.0, 135.0, 148.0, 148.0, 136.0, 119.0],dtypenp.float32, )AirPassengersDF pd.DataFrame({"unique_id&qu…...

【记录】打印|用浏览器生成证件照打印PDF,打印在任意尺寸的纸上(简单无损!)
以前我打印证件照的时候,我总是在网上找在线证件照转换或者别的什么。但是我今天突然就琢磨了一下,用 PDF 打印应该也可以直接打印出来,然后就琢磨出来了,这么一条路大家可以参考一下。我觉得比在线转换成一张 a4 纸要方便的多&am…...
【python实现】实时监测GPU,空闲时自动执行脚本
文章目录 代码 代码 # author: muzhan # contact: levio.pkugmail.com import os import sys import time cmd nohup python -u train_post_2d_aut.py > output1.log & # gpu空闲时,需要执行的脚本命令 def gpu_info():gpu_status os.popen(nvidia-smi…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...