STK12与Python联合仿真(一):环境搭建
STK仿真python接口,安装与测试
安装Python和Jupyter notebook
这个各大博主都有讲解,附上几个链接吧
Jupyter Notebook介绍、安装及使用教程 @ 知乎 豆先生
jupyter notebook自动补全 @ CSDN 怎么会有不写代码的小朋友呢
1. python安装时一定要选择让pip在系统的环境变量里
2. 要记住自己Python的安装路径,后面有用
关键一步
在STK的安装目录里找到<your path>:STK\bin\AgPythonAPI里面的agi.stk12-12.2.0-py3-none-any.whl
我的是 F:\STK\bin\AgPythonAPI
路径栏中输入cmd,表示在当前目录中打开命令行
输入 pip install <TAB>
然后 Enter安装(TAB键是自动补全,因为该目录下就这一个文件,所以会很轻易的自动补全)
STK配置
其实STK也可以不配置,看个人喜好,按照官网的视频要求是要配置的
-
打开STK,如图,先把创建场景的弹窗关掉,然后点击Python的那个图标
-
配置 Python路径,前文所说要记住自己Python路径的作用就有了
这是我自己Python的路径,第一个路径选中Python.exe就对了
第二个就是Scripts文件了,就在同一级目录,然后双击进去后点击确定就可以了
配置完之后Lunch就可以了,另外那两个勾我是都勾上的
-
然后你就得到一个在软件里面的,狭小的notebook
-
先不管这个,先完成其他的配置,我们新建一个场景,随便起个名字
File > New > Name任意 > OK
进入的时间要卡一会,等一会就好了,进去后如下:
先把插入的那个close掉
然后在Edit > Preference 里面找到 Intergrated Jupyter Notebooks for Python
注意这个localhost,每个人可能不一样,我们把他复制下来,打开你的浏览器,直接输进浏览器的地址行,回车进入
这里需要登录,不过没关系啊,我们按照他的说法,随便打开一个命令,输入jupyter notebook list
找到localhost和你一样的那一个,这里我的是5281,然后把token复制下来(在命令行中,选中完成后右击一下即可完成复制)
粘贴在这里
然后 New Password随便输入就可以了,123都行,点击下面的Log in and …
点击进入StarterScripy
就能看到舒适版的了
But
这个方法我自认为有点繁琐,而且路径不能自己定义,以下方法可以自己创建notebook并且链接上去
我们新建一个场景后,可以用如下方式打开Python 视窗
- View>Toolbars>Intergrate … (如图)
然后,就会多出来这个
点一下那个Python的图标,就会弹出来了
然后进入绿色已开启的笔记本,在最后一行加入STK_PID
运行
记住这个PID,这里是40556,每个人的可能不一样
然后,自己新建笔记本,我的方法是直接在想要放的路径中,打开cmd用ipython notebook
输入以下代码,要修改的就是那个STK_PID,这个是根据刚才那一步得到的
from agi.stk12.stkdesktop import STKDesktop
from agi.stk12.stkobjects import *
from agi.stk12.stkutil import *
from agi.stk12.vgt import *
import os
STK_PID = 40556 # 根据自己刚刚得到的PID
stk = STKDesktop.AttachToApplication(pid=int(STK_PID))
# stk = STKDesktop.StartApplication(visible=True) #using optional visible argument
root = stk.Root
print(type(root))
如果允许成功了,就说明连接到STK了
由于我们已经创建了场景
因此,我们只要让代码连结现有的场景就可以了
scenario = root.CurrentScenario # 链接当前场景
scenario.SetTimePeriod('Today','+24hr') # 日期设置为今天
root.Rewind() # 复位
新建两个简单的组件
# 添加地面站
target = AgTarget(scenario.Children.New(AgESTKObjectType.eTarget,"GroundTarget"))
target.Position.AssignGeodetic(50,-100,0)
# 添加卫星
satellite = AgSatellite(root.CurrentScenario.Children.New(AgESTKObjectType.eSatellite,"LeoSat"))
print(scenario.StartTime)
print(scenario.StopTime)
root.ExecuteCommand('SetState */Satellite/LeoSat Classical TwoBody "' +
str(scenario.StartTime) + '" "' + str(scenario.StopTime) +
'" 60 ICRF "' + str(scenario.StartTime) + '" 7200000.0 0.0 90 0.0 0.0 0.0');
STK会同步更新组件
更多推荐
所有评论(0)