提示:这里可以添加本文要记录的大概内容:
按照CSDN上的帖子成功安装了STK11,并成功与MATLAB的版本号相对应。我用的是STK11与MATLAB2018b。
安装的过程很简单,按照下面的链接就可以了,使用stkInit命令进行测试的时候,出现错误的原因是STK没有打开。打开STK就不会报Error了。
接下来,就总结一下,最近这几天的STK帮助文档的使用,主要是方便自己以后查找。
这里贴上各位博主大佬的链接
STK 与Matlab 的连接
STK 11.6 安装、与MATLAB的互联及其混合编程
[ STK ](二)STK 与 Matlab 互联(亲测成功
【STK】STK11.6下载安装+MATLAB互连+各插件模块(不用再找了,这里能解决)
刚开始的时候,找个安装目录下的一个.m实例,简单地运行了一下,链接这里,有时间再补吧。
1.其实,感觉还是STK10的帮助文档更方便直观,STK11的网页文档看着有点绕,还得一个一个得找。STK的帮助文档就在开始菜单STK11文件夹内,里面的Programming Interface Hel。
2.其次,就是感觉还是利用C#进行STK编程更好一点,因为matlab的变量类型是真的不清楚。所以说,用MATLAB进行STK编程得清楚变量的类型,进而去找里面的属性和方法。
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
代码如下(示例):
%将时间单位设置为历元秒,这样我们的时间步长输入以及开始和停止时间都以秒为单位。
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec');
scenario = root.CurrentScenario;
access = satellite.GetAccessToObject(facility);
access.ComputeAccess;
%获取Access(访问)数据
accessDP = access.DataProviders.Item('Access Data').Exec(scenario.StartTime, scenario.StopTime);
%DP中获取Cell数据,转为mat
accessStartTimes = cell2mat(accessDP.DataSets.GetDataSetByName('Start Time').GetValues);
accessStopTimes = cell2mat(accessDP.DataSets.GetDataSetByName('Stop Time').GetValues);
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec');
elems = {'Time';'q1';'q2';'q3';'q4'};
satDP = satellite.DataProviders.Item('Attitude Quaternions').ExecElements(scenario.StartTime, scenario.StopTime, 60, elems);
% 无论何时将索引传递给数组,都需要将其转换为(int32)
satTime = cell2mat(satDP.DataSets.Item(cast(0,'int32')).GetValues);
satq1 = cell2mat(satDP.DataSets.Item(cast(1,'int32')).GetValues);
satq2 = cell2mat(satDP.DataSets.Item(cast(2,'int32')).GetValues);
satq3 = cell2mat(satDP.DataSets.Item(cast(3,'int32')).GetValues);
satq4 = cell2mat(satDP.DataSets.Item(cast(4,'int32')).GetValues);
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec');
facDP = facility.DataProviders.Item('Cartesian Position').Exec;
facx = cell2mat(facDP.DataSets.GetDataSetByName('x').GetValues);
facy = cell2mat(facDP.DataSets.GetDataSetByName('y').GetValues);
facz = cell2mat(facDP.DataSets.GetDataSetByName('z').GetValues);
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec');
satPosDP = satellite.DataProviders.Item('Cartesian Position').Group.Item('ICRF').Exec(scenario.StartTime,scenario.StopTime,60);
satx = cell2mat(satPosDP.DataSets.GetDataSetByName('x').GetValues);
saty = cell2mat(satPosDP.DataSets.GetDataSetByName('y').GetValues);
satz = cell2mat(satPosDP.DataSets.GetDataSetByName('z').GetValues);
satVelDP = satellite.DataProviders.GetDataPrvTimeVarFromPath('Cartesian Velocity/ICRF').Exec(scenario.StartTime,scenario.StopTime,60);
satvx = cell2mat(satVelDP.DataSets.GetDataSetByName('x').GetValues);
satvy = cell2mat(satVelDP.DataSets.GetDataSetByName('y').GetValues);
satvz = cell2mat(satVelDP.DataSets.GetDataSetByName('z').GetValues);
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec');
facChooseDP = facility.DataProviders.Item('Points Choose System');
dataProvCenter = facChooseDP.Group.Item('Center');
dataProvCenter.PreData = 'CentralBody/Earth TOD';
rptElems = {'Time';'x';'y';'z'};
results = dataProvCenter.ExecElements(scenario.StartTime, scenario.StopTime, 60, rptElems);
datasets = results.DataSets;
Time = cell2mat(datasets.GetDataSetByName('Time').GetValues);
facTODx = cell2mat(datasets.GetDataSetByName('x').GetValues);
facTODy = cell2mat(datasets.GetDataSetByName('y').GetValues);
facTODz = cell2mat(datasets.GetDataSetByName('z').GetValues);
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec');
satPassDP = satellite.DataProviders.Item('Precision Passes').ExecSingle(2600);
pass = cell2mat(satPassDP.DataSets.GetDataSetByName('Precision Pass Number').GetValues);
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec');
times = {0;15000;20000;55000};
elems = {'Time';'Precision Pass Number'};
satPassesDP = satellite.DataProviders.Item('Precision Passes').ExecSingleElementsArray(times,elems);
passes = cell2mat(satPassesDP.GetArray(cast(1,'int32')));
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec');
accessAER = access.DataProviders.Item('AER Data').Group.Item('BodyFixed').Exec(scenario.StartTime, scenario.StopTime,60);
AERTimes = cell2mat(accessAER.Interval.Item(cast(0,'int32')).DataSets.GetDataSetByName('Time').GetValues);
Az = cell2mat(accessAER.Interval.Item(cast(0,'int32')).DataSets.GetDataSetByName('Azimuth').GetValues);
El = cell2mat(accessAER.Interval.Item(cast(0,'int32')).DataSets.GetDataSetByName('Elevation').GetValues);
for i = 1:1:accessAER.Interval.Count-1
AERTimes = [AERTimes; cell2mat(accessAER.Interval.Item(cast(i,'int32')).DataSets.GetDataSetByName('Time').GetValues)];
Az = [Az; cell2mat(accessAER.Interval.Item(cast(i,'int32')).DataSets.GetDataSetByName('Azimuth').GetValues)];
El = [El; cell2mat(accessAER.Interval.Item(cast(i,'int32')).DataSets.GetDataSetByName('Elevation').GetValues)];
end
其实,我也不是很懂上面的程序,只是简单地从STK帮助文档中copy出来,希望以后再回头看的时候,能更加深入理解吧。