笔者因课题需求,在STK构建了Starlink一期一阶段共1584颗卫星的LEO卫星星座。想要导出TLE信息,但STK手动导出太麻烦,因此萌生用代码解决的念头。
通过查阅相关资料,利用matlab与STK互联的方法,获取STK场景中所构建的卫星TLE。Matlab代码如下:
clear;
clc;
%打开STK软件
uiapplication = actxserver('STK11.application');
%打开操作场景
root = uiapplication.Personality2;
%加载场景,选择你路径下的sc文件
root.LoadScenario('E:\STKfiles\starlinkk1\starlinkk1.sc');
sc = root.CurrentScenario;
%设置卫星编号,假设卫星初始编号为10000
ssc = 10000;
%c创建文件来存储tle数据
fid = fopen('TLEData_Starlink.tle','wt');
%获取所有卫星的路径
satpathcollection = root.ExecuteCommand('ShowNames * Class Satellite');
satpathcollection.Item(0);
%Item(0)中包含了卫星的所有路径,其为字符串类型
%中间用空格隔开,下面语句先将字符串切割,然后去除空格元素
%则satPaths的每个元素只包含一个卫星路径
satPaths = regexp(satpathcollection.Item(0),' ','split');
satPaths(cellfun(@isempty,satPaths)) = [];
%遍历路径,生成两行轨道根数tle数据,输出至文件中。
for i= 1:length(satPaths)
sattemp = root.GetObjectFromPath(satPaths{i});
start = sc.StartTime;
cmd1 = ['GenerateTLE ',satPaths{i},' Point "',start,'" ', sprintf('%05.0f',ssc) , ' 20 0.01 SGP4 ', ' ',sattemp.InstanceName];
root.ExecuteCommand(cmd1);
satDP = sattemp.DataProviders.Item('TLE Summary Data').Exec();
TLEData = satDP.DataSets.GetDataSetByName('TLE').GetValues;
fprintf(fid,'%s\n%s\n',TLEData{1,1},TLEData{2,1});
ssc= ssc + 1;
end
fclose(fid);
上述代码适用于已在STK中拥有卫星场景的情况,使用时将代码第八行换成自己场景的绝对路径即可,最后生成的tle结果如下图所示:
参考文献1:https://blog.csdn.net/ghboyone/article/details/136036327
参考文献2:https://blog.csdn.net/ltylty001/article/details/110150447
标签:satPaths,root,STK,matlab,TLE,卫星,ssc From: https://blog.csdn.net/weixin_58479991/article/details/142459362