admin管理员组文章数量:1794759
STK一次性计算所有可见性access
在使用STK中,计算access的过程是,点击一颗星,选择计算对象,计算access。这样当星座中卫星数或地面站数量比较多时,要计算星座中所有卫星之间或与所有地面站之间的可见性时,需要点击的次数比较多,比较麻烦。
解决办法是,利用STK的Object Model,通过MATLAB编程扩展STK功能。主要部分的MATLAB代码如下:
uiApplication = actxGetRunningServer('STK11.application'); root = uiApplication.Personality2; scenario = root.CurrentScenario; %waitbar hWait = waitbar(0,'Please Wait~'); %scenario start time startTime = scenario.StartTime; formatIn = 'dd mmm yyyy HH:MM:SS'; startTimeNum = datenum(startTime,formatIn); % allChildren includes satellites and facilities allChildren = scenario.Children; allSatellites = allChildren.GetElements('eSatellite'); allFacilities = allChildren.GetElements('eFacility'); satNum = allSatellites.Count; for i=0:1:satNum-1 % eg: sat0=allSatellites.Item(cast(0,'int32')); eval(['sat',num2str(i),'=allSatellites.Item(cast(i,''int32''));']) end facNum = allFacilities.Count; for i=0:1:facNum-1 eval(['fac',num2str(i),'=allFacilities.Item(cast(i,''int32''));']) end % all access in Time(day month year...) allAccessIntervals=[]; % all access in Seconds allAccessIntervalsSec=[]; % only ISL if(var1==1) for from=0:1:satNum-1 waitbar(from/satNum,hWait); for to=from+1:1:satNum-1 eval(['fromSat=sat',num2str(from),';']); eval(['toSat=sat',num2str(to),';']); access = fromSat.GetAccessToObject(toSat); access.ComputeAccess; accessIntervals = access.ComputedAccessIntervalTimes; if(accessIntervals.Count~=0) computedIntervals = accessIntervals.ToArray(0, -1); temp=cell(accessIntervals.Count,2); for i=1:1:accessIntervals.Count temp{i,1}=from+1; temp{i,2}=to+1; end allAccessIntervals = [allAccessIntervals;temp,computedIntervals]; end end end end % transfer Time(day month year time) to Seconds [rows,cols] = size( allAccessIntervals); for row=1:1:rows intervalStart = allAccessIntervals{row,3}; intervalEnd = allAccessIntervals{row,4}; %in day intervalStartNum = datenum(intervalStart,formatIn); intervalEndNum = datenum(intervalEnd,formatIn); %in sceconds intervalSatrtSec = (intervalStartNum-startTimeNum)*24*60*60; intervalEndSec = (intervalEndNum-startTimeNum)*24*60*60; allAccessIntervalsSec = [allAccessIntervalsSec;allAccessIntervals{row,1},allAccessIntervals{row,2},intervalSatrtSec,intervalEndSec]; end
其中,主要涉及到的代码
这是和access有关的代码,其他方面需要通过MATLAB来扩展自定义STK功能的代码可以参考:
这部分代码只涉及到了求access可见性,对象只有卫星satellite和地面站facility,更详细的各个接口及示例可以参考STKObjects.chm这个文件。这个文件安装STK应该自带,在安装目录下的Help文件夹里。
版权声明:本文标题:STK一次性计算所有可见性access 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686959845a122410.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论