MATLAB与STK互联9:卫星对象操作(1)—获取卫星对象

如果要操作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;

有些命令比较灵活,如果大家有更好的方式,也请一起讨论学习。

### MATLABSTK卫星步进互联配置 #### 安装准备 为了确保MATLABSTK之间的顺利连接,建议按照推荐顺序安装软件版本。具体来说,在安装MATLAB 2018b之后再安装STK 11.6[^1]。这两个特定版本可以自动建立Connectors,从而简化了软件间的通信配置。 #### 创建Connector对象MATLAB环境中创建用于控制STK应用程序的对象实例: ```matlab stkApp = actxserver('AgStkObjectLibrary.Application'); ``` 此命令启动了一个新的STK会话并返回一个ActiveX服务器对象`stkApp`,允许后续操作通过它来调用STK的功能函数。 #### 配置场景和目标体 定义仿真时间范围以及添加所需的航天器或其他空间物体到当前打开的STK场景中: ```matlab % 设置开始时间和结束时间为指定日期 startTime = '2023-09-01'; endTime = '2023-09-07'; % 获取根节点访问权限 root = stkApp.Personality2; % 新建一个名为ScenarioName的新情景 scenarioName = 'MySatelliteStepSimulation'; root.NewScenario(scenarioName); % 添加一颗新的人造地球轨道卫星 satelliteName = 'TestSat'; newObjStr = ['Satellite/' satelliteName]; obj = root.CurrentScenario.Children.Add(1, newObjStr); ``` 上述脚本片段展示了如何设定仿真的起始条件,并向其中引入了一颗测试用途的小型卫星作为研究主体。 #### 实现卫星姿态调整(步进) 利用MATLAB编写循环结构实现对卫星的姿态角逐步改变的过程模拟。这里假设每一步增量为固定角度值deltaTheta: ```matlab deltaTheta = pi / 18; % 步长设为1度转换成弧度单位 stepsCount = round((acos(-1)*2)/deltaTheta); % 计算总步数 for i=1:stepsCount theta_i = (i-1)*deltaTheta; % 更新卫星姿态参数 attitudeCmd = sprintf('%s/Attitude/CentralBodyFixed', newObjStr); cmdString = sprintf(['Set Attitude to Fixed with Reference Frame EarthMJ2000Eq ' 'and Quaternion Components %.4f %.4f %.4f %.4f'], ... cos(theta_i), sin(theta_i), 0, 0); result = obj.ExecuteCommand(attitudeCmd, cmdString); end ``` 这段代码实现了从初始状态出发每隔一定间隔就更新一次卫星相对于中心天体的位置朝向,直到遍历整个圆周运动周期为止。 #### 结束语句 当所有指令执行完毕后,记得关闭不再使用的资源以释放内存空间: ```matlab delete(stkApp); clear all; ``` 以上就是关于MATLABSTK间进行卫星步进步骤设置的一个基本流程说明。实际应用时可能还需要考虑更多细节因素的影响,比如更复杂的动力学模型或是外部干扰源的作用等。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值