如果要操作STK中的某个卫星,首先要获取对象的控制句柄。无论是通过MATLAB新建STK场景及卫星对象,还是通过加载之前保存的STK场景,都会面临这个问题。下面将进行介绍,如何获取卫星对象的控制句柄。
(1)例1—新建卫星对象句柄的获取
uiap = actxserver(‘STK11.application’);
root = uiap.Personality2;
root.NewScenario(‘exam’);
sc = root.CurrentScenario;
sc.Children.New(18,‘mysat’);
通过上述语句,我们已经建立了卫星对象,但没有对象的控制句柄,也就没法再进一步操作。此时,我们知道卫星对象的名称,那么可以用以下语句获取卫星对象的控制句柄。
%方法1
satPath = ‘*/Satellite/mysat’;
sat = root.GetObjectFromPath(satPath);
sat.Propagator.Propagate;
通过以上语句,则可建立卫星对象的控制句柄sat,接下来就可以进行相关操作了。
方法2:
clear sat;%删除sat变量
sat = sc.Children.Item(‘mysat’);
sat.Propagator.Propagate;
(2)例2—加载已建立的卫星场景,场景中已建立卫星对象
方法1:如果卫星数量不多,可在STK中直接获取卫途径星名,然后按照例1提供的方法获取卫星对象的控制句柄。
方法2:如果卫星数量很多,上述方法就很没效率了。这时就需要寻找新的解决办法。这里我们将用到ExecuteCommand命令,这个是用来执行命令语句的。具体代码如下:
%在STK场景中新建多个卫星对象
clear sat;
sat = sc.Children.Item(‘mysat’);
for i = 1:10
satname = [‘sat_’,num2str(i)];
sat.CopyObject(satname);
end
%新建satItems
satItems = root.ExecuteCommand(‘ShowNames * Class Satellite’);
satPaths = strsplit(strtrim(satItems.Item(0)),’ ');
%strsplit、strtrim都是MATLAB字符串处理函数,一个是分割字符串、一个是
%去除字符串首末空格。具体用法请自行查看
%satPaths中保存的是各卫星对象的路径,则可利用以下语句获取卫星对象
sat11 = root.GetObjectFromPath(char(satPaths(11)));
%注意要char,satPaths是元胞,需要转换为字符串。用以下语句也可以
%sat11 = root.GetObjectFromPath(satPaths{11});
sat11.Unload
STK中没有直接获取卫星名字列表的函数,在AGI官网上看到过一个用MATLAB写的函数,可以实现获取相应子类对象名字的函数。根据例2的方法,也可以获取卫星名字,大家可以尝试着自己编程,这里我就不介绍了。
查看场景中有多少个卫星,可以用以下语句:
satCollection = sc.Children.GetElements(‘eSatellite’);
satCollection.Count
当然也可以通过,sat1 = satCollection.Item(‘sat_1’),来获取卫星对象控制句柄。
关闭STK场景。
uiap.Quit;
clear uiap root;
有些命令比较灵活,如果大家有更好的方式,也请一起讨论学习。