MATLAB与STK互联23:卫星对象操作(14)—仿真分析案例1,建立8个地面站,分析对卫星的可见性

学习到这里,我们有必要做个仿真分析案例,把之前我们学习的零散知识点串起来,看一下在真实的分析中怎么应用。
分析要求:建立8个地面站,分析每个地面站对某个轨道高度500km、倾角60°圆轨道的卫星,1天内的可见次数、可见弧长以及可见弧段间隔列表。
基本约束:地面站仰角8°~90°,作用距离<2000km,太阳矢量与地面站到卫星视线夹角不小于15°,可见弧段应大于30s。地面站站址可随机生成,但要求在南北纬50°范围内。

下面上代码:
uiap = actxserver(‘STK11.application’);
root = uiap.Personality2;
root.NewScenario(‘exam1’);
sc = root.CurrentScenario;

%建立卫星对象,并设置参数
sat = sc.Children.New(18,‘mysat’);
kep = sat.Propagator.InitialState.Representation.ConvertTo(‘eOrbitStateClassical’);
kep.SizeShapeType = ‘eSizeShapeAltitude’;
kep.LocationType = ‘eLocationTrueAnomaly’;
kep.Orientation.AscNodeType = ‘eAscNodeLAN’;
kep.SizeShape.PerigeeAltitude = 500;
kep.SizeShape.ApogeeAltitude = 500;
kep.Orientation.Inclination = 60;
kep.Orientation.ArgOfPerigee = 0;
kep.Orientation.AscNode.Value = 0;
kep.Location.Value = 0;

sat.Propagator.InitialState.Representation.Assign(kep);
sat.Propagator.Propagate;
%定义cell,存储地面站名称、纬度经度高度(Geodetic形式)、可见次数、
%可见弧段信息
facandaccessinfo = cell(9,4)
facandaccessinfo{1,1} = ‘名称’;
facandaccessinfo{1,2} = ‘位置’;
facandaccessinfo{1,3} = ‘可见次数’;
facandaccessinfo{1,4} =‘可见弧段信息’;

%建立地面站
for i = 1:8
facname = [‘fac_’,num2str(i)];
fac = sc.Children.New(‘eFacility’,facname);
fac.Position.AssignGeodetic(sign(rand(1)-0.5)*rand(1)*50,(rand(1)-0.5)*rand(1)*180,0);
%设置地面站约束
facConstraints = fac.AccessConstraints;
%设置最大距离约束
rangeCstr = facConstraints.AddConstraint(‘eCstrRange’);
rangeCstr.EnableMax = 1;
rangeCstr.Max = 2000;
%设置仰角约束
elevationCstr = facConstraints.AddConstraint(‘eCstrElevationAngle’);
elevationCstr.EnableMin = 1;
elevationCstr.Min = 8;
%设置太阳视线角约束
lossunCstr = facConstraints.AddConstraint(‘eCstrLOSSunExclusion’);
lossunCstr.Angle = 15;
%设置最短弧段时长约束
durationCstr = facConstraints.AddConstraint(‘eCstrDuration’);
durationCstr.EnableMin = 1;
durationCstr.Min = 30;

%获取地面站名称及纬度经度高度,并写入到cell中
facandaccessinfo{i+1,1} = fac.InstanceName;
facandaccessinfo{i+1,2} = fac.Position.QueryPlanetodeticArray;
%计算可见性,获取读卫星可见次数、每个可见弧段的起止时间、弧段时长
%并写入到cell中,以便最后输出
fac2sataccess = fac.GetAccessToObject(sat);
fac2sataccess.ComputeAccess();
facandaccessinfo{i+1,3} = fac2sataccess.ComputedAccessIntervalTimes.Count;
%获取
accessinfo = cell(fac2sataccess.ComputedAccessIntervalTimes.Count,1);
for j = 1:fac2sataccess.ComputedAccessIntervalTimes.Count
[str,sto] = fac2sataccess.ComputedAccessIntervalTimes.GetInterval(j-1);
fac2sataccess. AccessTimePeriod = ‘eUserSpecAccessTime’;
fac2sataccess.SpecifyAccessTimePeriod(str,sto)
accessduration = fac2sataccess.AccessTimePeriodData.Duration;
accessinfo{j}= {str,sto,accessduration};
end
facandaccessinfo{i+1,4} = accessinfo;
fac2sataccess.RemoveAccess();
end
以上代码经过运行,没问题。大家可一起讨论学习。STK的接口很灵活,可以有很多种方式实现我们想要的结果,希望大家多尝试,多讨论。
最终效果图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对于可见弧段有个最大的时长限制,这个没有设置,然后STK给设置了。。我这里就不改代码了,请各位包涵。另外程序可能运行的不是特别快,里面有很多代码写的也不是特别好,大家就当个参照,学习一些用法即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值