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

本文通过STK软件,详细介绍了如何建立卫星轨道参数,设置地面站及其约束条件,进行卫星可见性分析的过程。分析了8个地面站在一天内对500km高度圆轨道卫星的可见次数、可见弧长及弧段间隔。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习到这里,我们有必要做个仿真分析案例,把之前我们学习的零散知识点串起来,看一下在真实的分析中怎么应用。
分析要求:建立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给设置了。。我这里就不改代码了,请各位包涵。另外程序可能运行的不是特别快,里面有很多代码写的也不是特别好,大家就当个参照,学习一些用法即可。

### 解决方案 为了确保MATLAB中设置的时间能正确同步到STK,需关注几个关键方面: 在使用`stkSetPropClassical`函数时遇到的困难在于其语法不够直观,特别是在处理时间间隔设定上。对于更简便的操作,推荐采用`stkConnect`函数来实现两者之间的连接数据传递[^1]。 具体来说,在MATLAB环境中通过调用`stkConnect`建立STK的应用程序接口(API),之后利用此API执行命令或脚本以控制STK内的对象属性,包括但不限于轨道参数、姿态模式等。当涉及到时间同步问题时,应确保每次向STK发送指令前都更新当前模拟时刻,这可以通过查询系统实时钟或是基于特定事件触发器完成。 另外,在创建仿真场景过程中,务必确认MATLAB端定义的任务序列里包含了必要的等待语句(`pause`)以便让STK有足够的时间响应来自外部源的数据更改请求;同时也要核查是否存在任何可能引起延迟的因素,比如网络状况不佳影响通信效率等问题。 最后值得注意的是,若要精确匹配两者的时基,则建议统一采用UTC作为标准参照系,并且仔细校准各自平台内部计时机制间的微小偏差——即便这些差异看似微不足道也可能累积成显著错误尤其在长时间跨度下的分析计算当中。 ```matlab % 创建并启动STK应用程序实例 stkApp = actxserver('AgI.STKX.Application'); % 设置可见性(可选) visibleProperty = stkApp.get('Visible'); visibleProperty.Value = true; % 获取根节点对象用于后续操作 rootObject = stkApp.Personality2; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值