巨型星座try7_2(stk串口导入卫星文件并仿真)

建立新场景

tic
con2 = actxserver('STK11.application');
root = con2.Personality2;
con2.Visible = 0;
root.NewScenario('some_stellite');
root.SaveAs('D:\STK_Job\Try4\some_stellite.sc');
ss = root.CurrentScenario;
toc
%%%%%%%%%%%%%%%%%%%%%%%%%场景设置%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ss.SetTimePeriod('1 Mar 2021 04:00:00.000','21 Apr 2021 04:00:00.000');%时间
root.ExecuteCommand('Animate * Reset');
root.UnitPreferences.SetCurrentUnit('Distance','km');
root.UnitPreferences.SetCurrentUnit('Latitude','deg');
root.UnitPreferences.SetCurrentUnit('Longitude','deg');

读取刚刚创立的卫星文件,批量导入卫星如下(这里不用)

.oc文件才能导入

 sat = ss.Children.New(18,'sat');
 sat.SetPropagatorType('ePropagatorStkExternal');%轨道类型为导入参数
 sat.Propagator.Filename = 'D:\STK_Job\TLEData.pg';
 sat.Propagator.Propagate;%画出轨道
% sat.Propagator.get
root.Save();

创建33颗卫星

for i = 1:33%10个卫星
   satname = ['sat_',num2str(i)]; 
   sat = ss.Children.New(18,satname);
   sat.SetPropagatorType('ePropagatorHPOP');
%    sat.Graphics.IsObjectGraphicsVisible = 0;%2D不显示卫星
   kepler = sat.Propagator.InitialState. Representation.ConvertTo('eOrbitStateClassic');%经典轨道根数句柄
   kepler.SizeShapeType = 'eSizeShapeAltitude';
   kepler.LocationType = 'eLocationTrueAnomaly';%真近点角
   kepler.Orientation.AscNodeType = 'eAscNodeLAN';
   kepler.SizeShape.PerigeeAltitude = 10000 + 10000*rand*(rand*3);%近地点高度
   kepler.SizeShape.ApogeeAltitude = 10000 + 10000*rand*(rand*3);
   kepler.Orientation.Inclination = 10 + 50 * rand;%轨道倾角
   kepler.Orientation.ArgOfPerigee = 0;%近地点幅角
   kepler.Orientation.AscNode.Value = 180 * rand + 180 * rand;%升交点赤经
   kepler.Location.Value = 180 * rand + 180 * rand;
   sat.Propagator.InitialState.Representation.Assign(kepler);
   sat.Propagator.Propagate;
end

建立Sensor仿真

ck2021 = ss.Children.New('eFacility','ck2021');
ck2021.Position.AssignGeodetic(30,120,0);%经纬度高程
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%开始Sensor%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sensor = ck2021.Children.New('eSensor','sensor');
sensor.SetPatternType('eSnSimpleConic');
%sensor.CommonTasks.invoke;%查看参数操作命令
sensor.CommonTasks.SetPatternSimpleConic(60,1);%角度设置,半张角60°,角分辨率1°。
%%%%%%%%%%%%%%%%%%%%%%%%%%%卫星群句柄建立%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% con2 = actxserver('STK11.application');
% root = con2.Personality2;
% con2.Visible = 1;
% root.Load('D:\STK_Job\Try4\some_stellite.sc');
% ss = root.CurrentScenario;
eSatellite = 'eSatellite';
for j = 1:33
    satnamegetmy = ['sat',num2str(j)];
    satnameget = ['sat_',num2str(j)];
    eval([satnamegetmy,' = ss.Children.GetElements(eSatellite).Item(satnameget)']);
end
%%验证后删除%%
% sat5.Children.New('eSensor','sensor');
% b = sat5.Children.GetElements('eSensor').Item('sensor')
% b.Unload
%% %%%%%%%%%%%%%%%%%%%%%%测控站可见性分析%%%%%%%%%%%%%%%%%%%%%%%%%%,try
disp('* 获取卫星与地面站之间的可见关系 *')
%COM连接采用DataProviders获取
%方法:进入对象的报告,然后再报告点右键进入属性,然后分别设置如下代码:
%sat.DataProviders.Item('报告第一层').Group.Item('第二层').Exec(起始时间,结束时间,步长);
%cell2mat(V1.DataSets.GetDataSetByName('报告中的元素').GetValues);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%星站Access连接%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%对我没啥用,随便做一个卫星
%
accessaa = sat1.GetAccessToObject(ck2021);%从卫星看向地面站的连接关系
accessaa.ComputeAccess;%计算access
accessaa_info = accessaa.ComputedAccessIntervalTimes;%获取计算过的时间间隔
accessaa_count = accessaa_info.Count;%获取可见次数
accessaa_Interval = accessaa_info.ToArray(0,-1);%获取可见弧段的时间列表
%检索开始停止时间
StartTime = '1 Mar 2021 04:00:00.000';
StopTime = '21 Apr 2021 04:00:00.000';
accessDP = accessaa.DataProviders.Item('Access Data').Exec(ss.StartTime,ss.StopTime);
accessStartTimes = accessDP.DataSets.GetDataSetByName('Start Time').GetValues;%必须与场景时间相同
accessStopTimes = accessDP.DataSets.GetDataSetByName('Stop Time').GetValues;
%检索卫星高度变化数据
satelliteDP = sat1.DataProviders.Item('LLA State').Group.Item('Fixed').ExecElements(accessStartTimes{1},accessStopTimes{1},60,{'Time';'Alt'});
satellitealtitude = satelliteDP.DataSets.GetDataSetByName('Alt').GetValues;
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%星、传感器chain%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%---------------------创建地面测控站观测卫星的链路Chian---------------
chainaa = ss.Children.New('eChain', 'SensorTOsat1');
chainaa.Objects.AddObject(sat1);
chainaa.Objects.AddObject(sensor);
chainaa.ComputeAccess();%链的访问权限,允许我们分析并查看何时以及如何访问
%--------------------在链路中获取测控站与卫星可见关系-------------------
See = chainaa.DataProviders.Item('Access Data').Exec(ss.StartTime,ss.StopTime); %获取关键时间点,这里不知道可能是几个,所以缺省时间步长。
starttime1 = cell2mat(See.DataSets.GetDataSetByName('Start Time').GetValues);%读取Start Time矢量
stoptime1 = cell2mat(See.DataSets.GetDataSetByName('Stop Time').GetValues);%读取Start Time矢量
sat2fac_count2=length(datenum(starttime1));%可见次数
See = chainaa.DataProviders.Item('Base Object Data').Exec(ss.StartTime,ss.StopTime,60);   %获取关键时间点,这里不知道可能是几个,所以缺省时间步长。
Access2sat= cell2mat(See.DataSets.GetDataSetByName('Number Of Accesses').GetValues);

问题

  1. 如何快捷批量导入卫星
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值