STK一次性计算所有可见性access

编程知识 更新时间:2023-04-06 10:40:14

在使用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

 

其中,主要涉及到的代码

  1. 利用MATLAB代码得到卫星或地面站的集合,再两两计算access
  2. 得到的access集合中,时间格式需要转换一下使得后续的处理更加方便

这是和access有关的代码,其他方面需要通过MATLAB来扩展自定义STK功能的代码可以参考:

  1. http://help.agi/stkdevkit/11.0/index.html?page=source%2FstkObjects%2FObjModMatlabCodeSamples.htm
  2. http://help.agi/stkdevkit/Content/DocX/STKObjects~IAgStkObject.html

这部分代码只涉及到了求access可见性,对象只有卫星satellite和地面站facility,更详细的各个接口及示例可以参考STKObjects.chm这个文件。这个文件安装STK应该自带,在安装目录下的Help文件夹里。

更多推荐

STK一次性计算所有可见性access

本文发布于:2023-04-06 10:40:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/afef1bdb5d768a9f2fd742b2d0c56d81.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:见性   STK   access

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 49106文章数
  • 14阅读数
  • 0评论数