matlab调用stk生成walker星座,并批量导出tle

uiap = actxserver('STK11.application');
root = uiap.Personality2;
root.NewScenario('TLE');
sc = root.CurrentScenario;

%建立种子卫星,并设置轨道参数。500km、倾角50°的圆轨道,其他参数选择默认值,并添加一个Sensor(Sensor形状为简单圆锥型,半张角为77°)
sat = sc.Children.New(18,'mysat');
kep = sat.Propagator.InitialState.Representation.ConvertTo('eOrbitStateClassical');
kep.SizeShapeType = 'eSizeShapeAltitude';
kep.SizeShape.ApogeeAltitude = 500;
kep.SizeShape.PerigeeAltitude = 500;
kep.Orientation.Inclination = 50;
sat.Propagator.InitialState.Representation.Assign(kep);
sat.Propagator.Propagate;

%添加Sensor,并进行设置
% sen = sat.Children.New('eSensor','mysen');
% sen.CommonTasks.SetPatternSimpleConic(77,1);%这里加一条跟星座创建无关的设置,半张角选用77°
% sen.VO.ProjectionType = 'eProjectionEarthIntersections';%保留了Sensor与地球的截线。

%生成Walker星座了。这里是利用root.ExecuteCommand来是实现。具体语句如下:
% 生成一个Delta类型、4轨道面、每个轨道面3颗星、相位因子2、同轨道面颜色相同的星座。
root.ExecuteCommand('Walker */Satellite/mysat Type Delta NumPlanes 4 NumSatsPerPlane 3 InterPlanePhaseIncrement 2 ColorByPlane Yes');

%两行轨道根数,需要卫星编号,这里假设初始编号60000
ssc = 60000;
%创建星历存储文件
fid = fopen('TLEData.tle','wt');

%获取所有卫星的路径
satpathcollection = root.ExecuteCommand('ShowNames * Class Satellite');
satpathcollection.Item(0);
%Item(0)中包含了所有卫星路径,但是是用一个字符串包含所有路径,
%中间用空格隔开,下面的语句是先将字符串分割,然后去除空格元素,
%则satPaths的每个元素都只包含一个卫星路径
satPaths = regexp(satpathcollection.Item(0),' ','split');
satPaths(cellfun(@isempty,satPaths)) = [];

%生成两行轨道根数星历,并输出至文件中
for i = 1:length(satPaths) % 从1开始排除种子卫星
    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);

参考了两篇csdn的文章,具体链接为:

MATLAB与STK互联10:卫星对象操作(2)—卫星轨道参数设置(方法1,通过轨道生成器设置实现)_kep.sizeshapetype = 'esizeshapealtitude'; kep.loca-CSDN博客MATLAB与STK互联42:创建星座(Walker星座)-CSDN博客

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB可以通过STK的COM接口来调用STK的功能。COM(Component Object Model)是一种面向对象的组件技术,它允许不同的应用程序之间进行交互和通信。 要在MATLAB调用STK,首先需要确保STK已经安装在计算机上,并且已经注册了STK的COM接口。然后,可以使用MATLAB的COM功能来创建一个与STK的连接。 下面是一个简单的示例代码,演示了如何在MATLAB调用STK的COM接口: ```matlab % 创建与STK的连接 stkApp = actxserver('STK11.Application'); % 打开STK场景 stkRoot = stkApp.Personality2; stkRoot.LoadScenario('C:\Path\to\Your\Scenario.sc'); % 在STK场景中添加一个卫星 satellite = stkRoot.CurrentScenario.Children.New('eSatellite', 'MySatellite'); satellite.SetPropagatorType('ePropagatorTwoBody'); % 设置卫星的初始轨道参数 keplerian = satellite.Propagator.InitialState.Representation.ConvertTo('eOrbitStateClassical'); keplerian.SizeShapeType = 'eSizeShapeSemimajorAxis'; keplerian.SizeShape.SemiMajorAxis = 7000; keplerian.SizeShape.Eccentricity = 0; keplerian.Orientation.Inclination = 45; satellite.Propagator.InitialState.Representation.Assign(keplerian); % 运行STK场景 stkRoot.Rewind; stkRoot.PlayForward; % 关闭与STK的连接 stkApp.Quit; ``` 上述代码中,首先使用`actxserver`函数创建了一个与STK的连接。然后,可以使用`stkRoot`对象来访问STK的各种功能和属性。在这个示例中,我们打开了一个STK场景,并在场景中添加了一个卫星,并设置了卫星的初始轨道参数。最后,通过调用`stkApp.Quit`来关闭与STK的连接。 需要注意的是,上述代码中的路径和场景名称需要根据实际情况进行修改。 希望以上信息对你有帮助!如果你还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值