基于COM方法的Matlab+STK的StarLink系统仿真(一)——基础环境搭建

目录

一、总体考虑       

二、仿真环境构建


一、总体考虑       

        基于StarLink的快速发射部署现状,采用COM方法可以有效固化场景,实现对分析对象的快速更新。一方面通过获取Celestrak网站上StarLink的TLE数据,通过读取分析目标NORAD编号文件,实现对不同版本(V1.0、V1.5)和不同轨道倾角(53.2°、70°、97.6°)的不同类型StarLink卫星性能指标分析。最终实现单星功率、推进剂消耗,系统级的对地覆盖、通信容量等指标分析。

二、仿真环境构建

        首先需要在Matlab软件中打开STK软件,并建立二者连接。

% 建立STK与Matlab的连接                     
stkInit; % 建立连接
remMachine = stkDefaultHost;
stkClose('all');
conid = stkOpen(stkDefaultHost); % 得到连接句柄(用于发送指令)
% 判断场景是否存在
scen_open = stkValidScen;
if scen_open == 1
    rtn = questdlg('Close the current scenario?')
    if ~strcmp(rtn,'Yes')
        stkClose(conid);
        return;
    else
        stkUnload('/*');
    end
end

        在STK中建立场景,设置场景的名称、起止时间及单位……

% 新建场景
disp('创建一个场景');
stkNewObj('/','Scenario','StarLink');
% 设定场景时间
disp('设定场景时间');
strBegTime = '25 Jan 2023 00:00:00.000';
strEndTime = '31 Jan 2023 00:00:00.000';
stkSetTimePeriod(strBegTime,strEndTime,'GREGLCL');%北京本地时,协调世界时为GREGUTC
Time_Step=120;%STK 仿真时间步长
% 使aeroToolbox中函数的历元时间与场景一致
stkSetEpoch(strBegTime,'GREGLCL');
stkSyncEpoch;
% 设定场景动画开始时间
strQuteBegTime = ['"' strBegTime '"']; 
rtn = stkConnect(conid,'Animate','Scenario/StarLink','SetValues "25 Jan 2023 00:00:00.000" 600 0.1');
% 设定动画时间回到起始点
rtn = stkConnect(conid,'Animate','Scenario/StarLink','Reset');

        进行插入卫星的准备工作。

% 新建种子卫星
disp('创建种子卫星');
vehNames = atbTLERead('E:\Starlink\StarLinkTle.txt', '');% 此为读取TLE数据文件
Sat_Number=length(vehNames);%卫星数量
% 读取存储有目标卫星NORAD编号的xlsx文件
strSeedSat = xlsread('E:\Starlink\AnalysisGoal.xlsx');

        预处理,读取卫星根数。

% 输入卫星轨道
str3TLEFilePath = 'E:\Starlink\StarLinkTle.txt';%读取文件
nStarCount = size(strSeedSat,1);%卫星数量
% 读入3TLE根数
fidin = fopen(str3TLEFilePath);
nReadNum = 0;% 生成卫星计数
vecTLE = [];
Sat_Name={};
matReadNum = [];
while ~feof(fidin) && nStarCount>nReadNum
    % 读取根数
    strNameLine = fgetl(fidin);
    % 避免空格
    if isempty(strNameLine)
        continue;
    end
    % 处理名字
    strNameLine = regexp(strNameLine,' ','split');
    strName = strNameLine(1);
    strTLELine1 = fgetl(fidin);
    strTLELine2 = fgetl(fidin);
    % 获取NoradID
    vecTLELine2 = regexp(strTLELine2,' ','split');
    vecTLELine2(strcmp(vecTLELine2,''))=[];
    if find(strSeedSat==str2double(vecTLELine2(2)))
        % 增加计数
        nReadNum = nReadNum+1;
        % 获取卫星名称
        % nReadNum为循环数
        Sat_Name(nReadNum)={strNameLine};
        %tmpTLE.Name = [char(strName) cell2mat(Sat_Name{1,nReadNum}) '-' char(vecTLELine2(2))];
        tmpTLE.Name = [cell2mat(Sat_Name{1,nReadNum}) '-' char(vecTLELine2(2))];
        tmpTLE.Code = str2double(vecTLELine2(2));
        tmpTLE.Line1 = strTLELine1;
        tmpTLE.Line2 = strTLELine2;
        vecTLE = [vecTLE,tmpTLE];
        matReadNum = [matReadNum,str2double(vecTLELine2(2))];
    end
end
uiapp = actxGetRunningServer('STK11.application');
root = uiapp.Personality2;
checkempty = root.Children.Count;
sc = root.CurrentScenario;
SatData={};%建立存储卫星数据的元胞数组

        开始批量创建卫星。对于目标卫星的参数修改,可以用“对象名.get”语句查看对象的属性,可以用“对象名.invoke”查看对象可以使用的操作方法,例如"Sat2D.get"、"Sat2D.Attributes.get",就可以在循环中添加相应的代码对卫星的各项参数进行修改,在后期添加传感器、天线时可照此法操作。

for i = 1:size(vecTLE,2)
    tmpStarTLE = vecTLE(i);
    strProSat = tmpStarTLE.Name;
    fprintf('Create a new satellite %s\n',char(strProSat));
    tmpSat = root.CurrentScenario.Children.New('eSatellite',char(strProSat));
    strCommendTLE = ['SetState */Satellite/' char(strProSat) ' TLE "' char(tmpStarTLE.Line1) '" "' char(tmpStarTLE.Line2) '"'];
    root.ExecuteCommand(strCommendTLE);
    propagator = tmpSat.Propagator;
    % 二维显示参数修改,同步增加至Main
    Sat2D = tmpSat.Graphics; 
    Sat2D.Attributes.Inherit = 0;
    Sat2D.Attributes.IsVisible = 1;
    Sat2D.Attributes.Color = 16777215;
    Sat2D.Attributes.MarkerStyle = 'E:\Software\STK 11\STKData\Pixmaps\MarkersWin\m010Satellite.bmp';
    Sat2D.Attributes.LabelVisible = 0;
    Sat2D.Attributes.IsGroundTrackVisible = 0;
    Sat2D.Attributes.IsGroundMarkerVisible = 1;
    Sat2D.Attributes.IsOrbitVisible = 0;
    Sat2D.Attributes.IsOrbitMarkerVisible = 0;
    propagator.StartTime = strBegTime;
    propagator.StopTime = strEndTime;
    propagator.Step = Time_Step;
    propagator.Propagate;
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %           读取数据
    %        保存为元胞数组
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    TemSatData = tmpSat.DataProviders.Item('Cartesian Position').Group.Item('Fixed').Exec(sc.StartTime,sc.StopTime,Time_Step);
    SatData{i,1} = cell2mat(TemSatData.DataSets.GetDataSetByName('Time').GetValues);%仿真时间,sec
    SatData{i,2} = cell2mat(TemSatData.DataSets.GetDataSetByName('x').GetValues);%卫星在笛卡尔坐标系x坐标,km
    SatData{i,3} = cell2mat(TemSatData.DataSets.GetDataSetByName('y').GetValues);%卫星在笛卡尔坐标系y坐标,km
    SatData{i,4} = cell2mat(TemSatData.DataSets.GetDataSetByName('z').GetValues);%卫星在笛卡尔坐标系z坐标,km
    TemSatData = tmpSat.DataProviders.Item('Cartesian Velocity').Group.Item('Fixed').Exec(sc.StartTime,sc.StopTime,Time_Step);
    SatData{i,5} = cell2mat(TemSatData.DataSets.GetDataSetByName('x').GetValues);%卫星在笛卡尔坐标系x方向速度,km/sec
    SatData{i,6} = cell2mat(TemSatData.DataSets.GetDataSetByName('y').GetValues);%卫星在笛卡尔坐标系y方向速度,km/sec
    SatData{i,7} = cell2mat(TemSatData.DataSets.GetDataSetByName('z').GetValues);%卫星在笛卡尔坐标系z方向速度,km/sec
    TemSatData = tmpSat.DataProviders.Item('Sun Vector').Group.Item('Fixed').Exec(sc.StartTime,sc.StopTime,Time_Step);
    SatData{i,8} = cell2mat(TemSatData.DataSets.GetDataSetByName('x').GetValues);%太阳在笛卡尔坐标系x坐标,km
    SatData{i,9} = cell2mat(TemSatData.DataSets.GetDataSetByName('y').GetValues);%太阳在笛卡尔坐标系x坐标,km 
    SatData{i,10} = cell2mat(TemSatData.DataSets.GetDataSetByName('z').GetValues);%太阳在笛卡尔坐标系x坐标,km  
    TemSatData = tmpSat.DataProviders.Item('Solar Intensity').Exec(sc.StartTime,sc.StopTime,Time_Step); 
    SatData{i,11} = cell2mat(TemSatData.DataSets.GetDataSetByName('Intensity').GetValues); 
end

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 基于信息系统体系对抗STK基础仿真应用的目的是利用信息系统构建一个与STK(Satellite Tool Kit)相对抗的仿真环境。STK是一种广泛使用的航天器轨道设计和分析工具,而基于信息系统体系的仿真应用则是通过构建信息系统体系,模拟和对抗STK的功能和性能。 信息系统体系对抗STK基础仿真应用的关键是通过信息系统的各个组成部分,如计算机硬件、操作系统、数据库等,来构建一个仿真环境。在这个仿真环境中,我们可以使用STK的相关功能和性能进行模拟,并对其进行对抗、分析和评估。 例如,我们可以使用信息系统体系中的计算机硬件和操作系统来模拟STK的计算和运行环境。通过模拟STK的计算和运行过程,我们可以了解其性能和瓶颈,并进一步研究如何改进和优化。 另外,通过信息系统体系中的数据库和存储系统,我们可以模拟和存储STK的相关数据,如航天器的轨道数据、通信数据等。这些数据可以用于对抗STK的相关功能进行仿真和分析,从而评估其性能和稳定性。 基于信息系统体系对抗STK基础仿真应用还可以与其他相关的信息系统集成,以扩展仿真环境的功能和应用。例如,可以将其他仿真工具、通信系统、数据分析工具等集成到这个仿真环境中,以拓展对STK仿真和对抗能力。 综上所述,基于信息系统体系对抗STK基础仿真应用是一种通过构建信息系统体系来模拟和对抗STK的功能和性能的方法。通过这种仿真应用,我们可以了解和评估STK的性能,并寻找改进和优化的方法。 ### 回答2: 基于信息系统体系的对抗STK基础仿真应用可以通过PDF文件形式进行描述和介绍。信息系统体系是指一套由计算机硬件和软件组成的系统,用于收集、处理、存储和传递信息。STK(Systems Tool Kit)是一个广泛应用于航天领域的工程软件,它集成了各种功能模块,可以用于建模、仿真和分析航天器运行、导航和姿态控制等。 在对抗STK基础仿真应用中,信息系统体系起着重要的作用。首先,信息系统可以提供对STK的支持,例如安装和配置STK软件,确保其正常运行。其次,信息系统可以用于存储和管理STK仿真数据,包括输入数据、模型数据和输出数据等,以便于后续的分析和查阅。此外,信息系统还可以用于与STK进行数据交互,例如从其他系统中导入数据,或者将仿真结果导出到其他系统中进行进一步处理。 基于信息系统体系的对抗STK基础仿真应用具有多个优势。首先,信息系统可以提供更高效的数据管理和处理能力,加快仿真过程。其次,信息系统可以提供更好的数据安全性,确保仿真数据的保密性和完整性。此外,信息系统还可以提供更多的功能模块和工具,拓展STK的应用范围,实现更复杂的仿真场景。 总而言之,基于信息系统体系的对抗STK基础仿真应用通过提供安装配置、数据存储管理和数据交互等功能,可以提升STK仿真的效率和安全性,拓展其应用范围,为航天领域的仿真建模和分析工作提供有力支持。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值