Python3.6.8 调用 STK11.6 仿真【地面站对卫星的可见圈次】及【每分钟外推1个点的卫星星历(时刻、纬度、经度、轨道高度)】

屏幕录像下载地址:

【STK+Python仿真】搭建仿真环境调试效果_屏幕录像.mp4.zip-其它文档类资源-CSDN下载

啥也不说, Code is everything!

# -*- coding: utf-8 -*-
"""
Python调用STK11.6
可以在STK软件的【STK Help】网页帮助里看到详细介绍:
file:///C:/Program%20Files/AGI/STK%2011/Help/index.htm#training/StartPython.htm%3FTocPath%3DTraining%7CLevel%25202%2520-%2520Advanced%2520Training%7C_____10
网页帮助的文档标题《Part 16: Integrating STK with Python》
"""
# Set up your python workspace
from win32api import GetSystemMetrics
"""
报错:ImportError: No module named win32api
需要安装 pypiwin32 , 手动安装 pypiwin32 如下: 
pip install pywin32-226-cp36-cp36m-win32.whl
"""

import comtypes
from comtypes.client import CreateObject

# 以下2句:是因为【 root=uiApplication.Personality2 】 运行后,生成了【comtypes.gen】
from comtypes.gen import STKUtil
from comtypes.gen import STKObjects

###################################################################################
# 第01步: 打开STK软件
# 打开STK11软件  type(uiApplication) 为 <class 'comtypes.POINTER(_IAgUiApplication)'>
uiApplication    = CreateObject("STK11.Application")
# 显示 STK11 软件界面
uiApplication.Visible = True
uiApplication.UserControl=True

# Personality2 返回【STK对象模型的根对象】的新实例 IAgStkObjectRoot 接口
# 假如是 Personality, 则 打开现有STK对象
root = uiApplication.Personality2  # root类型: IAgStkObjectRoot

"""
Note: When 'root=uiApplication.Personality2' is executed, 
the comtypes library automatically creates a gen folder that contains STKUtil and STK Objects. 
After running this at least once on your computer, 
the following two lines should be moved before the 'uiApplication=CreateObject("STK11.Application")'  line for improved performance.  
"""
#from comtypes.gen import STKUtil
#from comtypes.gen import STKObjects


###################################################################################
# 第02步: 创建 一个新的场景
# 创建 一个新的场景
root.NewScenario("Python_Starter")

# 创建的场景 赋给 scenario
#   type(scenario) 为 <class 'comtypes.POINTER(IAgStkObject)'>
scenario = root.CurrentScenario
#         Remarks: Cast the returned object to IAgScenario to access scenario methods and properties
#                    COM组件编程 对象转换 用 "QueryInterface"
# 设置 仿真分析 的时间段
scenario2 = scenario.QueryInterface(STKObjects.IAgScenario)
scenario2.SetTimePeriod('Today', '+24hr')  # 开始时间:今天;结束时间:24小时
""" +24hr 的语法规则
【网页帮助】:
  file:///C:/Program%20Files/AGI/STK%2011/Help/index.htm#../Subsystems/connectCmds/Content/cmd_SetStateClassical.htm
【时间增量/StopTime结束时间】
“+n{Unit}”  输入时间增量。这仅对“StopTime结束时间”有效,并定义添加到开始时间的时间长度。
其中: n是一个整数,
       {Unit}可以是以下任意值: Day, Days, Hour, Hours, Hr, Hrs, Min, Mins, Minute, Minutes, Sec, Secs, Second, Seconds
例如: "+1 day"
"""

# 【STK对象模型的根对象root】调用方法: 重置仿真时间;注意: Rewind 本身是 IAgAnimation 的方法
root.Rewind()
"""
Rewind 是 IAgAnimation 的方法:停止、重置动画(Stop and reset the animation.)
type(root) 为 <class 'comtypes.POINTER(_IAgStkObjectRoot)'>
"""

###################################################################################
# 第03步: 添加 一个【目标对象】“地面站目标对象” 、【卫星对象】 到场景中
""" 插入和配置对象
创建了一个新场景后,是时候用对象填充场景了。花点时间使用Python创建一个设施[a facility]和一个LEO卫星[a LEO satellite]。
==> SetState 的经典[Connect]命令和语法可在此处找到!
"""
# ① 添加 【目标对象】“地面站目标对象”
# scenario 类型为 IAgStkObject
#   file:///C:/Program%20Files/AGI/STK%2011/Help/Programming/index.htm#DocX/STKObjects~IAgStkObject.html?Highlight=IAgStkObject
#         Children属性: 返回当前对象的直接后代的集合; 返回类型为 IAgStkObjectCollection
#             IAgStkObjectCollection.New 方法: 使用指定的类和实例名称创建STK对象。
# target = scenario.Children.New(STKObjects.eTarget, "地面站01")
#   ==> 注意: COM对象模型编程时, 字符串只能是 英文,如果是中文,会报错!
#              _ctypes.COMError:
#                   (-2147220982, '如果其事件类不存在,则无法储存订购', ('Instance name ???01 incorrectly formatted', None, None, 0, None))
target = scenario.Children.New(STKObjects.eTarget, "IAgTarget-GroundTarget01")
""" 第1个参数: EClassType
                   eTarget    23 Target
        其他的参数取值还有:
                   eReceiver  17 Receiver
                   eSatellite 18 Satellite 
     第2个参数: InstName
                   对象的名称。将在STK的对象浏览器中显示。
     返回类型: IAgStkObject 
"""
# 将 New创建 的 IAgStkObject 用 [QueryInterface] 转换为 [STKObjects.IAgTarget] 类型
#   ★★★ COM对象模型编程中的命名技巧:
#             在 New 新建时,        STKObjects.eTarget 类型,
#   则强制转换时,为QueryInterface(STKObjects.IAgTarget)
#   即, 只需将 前缀 e 改为 前缀 IAg
target2          = target.QueryInterface(STKObjects.IAgTarget)
# 将 地面站对象 的位置 设置为 【 纬度50°,经度-100°,海拔高度0米 】
target2.Position.AssignGeodetic(50,-100,0)
"""
Position 是只读属性, 但“COM对象编程”时,其接口类型为 IAgPosition  
通过 IAgPosition 接口的 AssignGeodetic(
                                            Lat,   # 纬度
                                            Lon,   # 经度
                                            Alt    # 海拔高度 
                                           )
        使用大地坐标表示指定位置的辅助方法(Helper method to assign the position using the Geodetic representation.)
"""

# ②添加 【卫星对象】 到场景  satellite 的类型 为 IAgStkObject
satellite = scenario.Children.New(STKObjects.eSatellite, "LEOsatellite01")  # 卫星名字取为LEOsatellite01

# 卫星轨道外推 Propagate the Satellite object's orbit.
#   使用 IAgStkObjectRoot 接口 的 ExecuteCommand 【执行命令】方法
#   注意: 如果更改了 卫星的名称后, 在 CMD命令字符串里面【*/Satellite/LeoSat】中的'LeoSat'名称 也要对应修改!
# 否则报错: _ctypes.COMError:
#   (-2147220988, '在查询字符串中使用了一个无效的作用域名', ('Command has failed.', 'AgStkObjects11.AgStkObjectRoot.1', None, 0, None))
strCMD = 'SetState */Satellite/LEOsatellite01 Classical TwoBody "' + scenario2.StartTime + '" "' + scenario2.StopTime + '" 60 ICRF "' + scenario2.StartTime + '" 7200000.0 0.0 90 0.0 0.0 0.0'
root.ExecuteCommand(strCMD)
""" 执行的 命令 【详细分析】
     SetState */Satellite/LEOsatellite01 Classical TwoBody "12 Dec 2021 16:00:00.000" "13 Dec 2021 16:00:00.000" 60 ICRF "12 Dec 2021 16:00:00.000" 7200000.0 0.0 90 0.0 0.0 0.0
JSLS备注: 轨道外推的命令是以'SetState''设置状态'为开头的。 
  ★★★ */Satellite/LEOsatellite01   <VehObjectPath>对象路径 中 的 【*】 表示 通配符 
         调试时可以发现:  satellite.Path = '/Application/STK/Scenario/Python_Starter/Satellite/LEOsatellite01'
  • 25
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: Ubuntu中的Python 3.6.8是该发行版的一种版本。Ubuntu是一种基于Debian的开源操作系统,因此它通过软件包管理器来管理软件安装和更新。 Python是一种高级编程语言,而Python 3.6.8则是Python 3系列的一个版本。Python 3.6.8引入了许多新的功能和改进,以提供更好的编程体验和性能。 在Ubuntu上安装Python 3.6.8可以通过几种方法。一种方法是使用包管理器apt来安装,可以使用如下命令: ``` sudo apt update sudo apt install python3.6 ``` 另一种方法是通过源代码安装Python 3.6.8。首先需要下载Python 3.6.8的源代码,并解压缩。然后在终端中进入解压缩后的目录,并执行以下命令来编译和安装Python 3.6.8: ``` ./configure make sudo make install ``` 安装完成后,可以通过在终端中运行以下命令来验证Python版本: ``` python3.6 --version ``` Python 3.6.8提供了许多新的语言特性和库,可以用于各种用途,例如Web开发、数据分析和机器学习等。此,它还提供了一个强大的标准库,以及大量的第三方库和框架。 总结来说,Ubuntu中的Python 3.6.8是一种高级编程语言的版本,它可以通过包管理器或源代码安装。它提供了许多新功能和改进,可以用于各种开发和分析任务。 ### 回答2: Ubuntu是一个基于Linux操作系统的开源操作系统,它的发行版中默认安装了Python解释器。而Python是一种高级编程语言,它可以用于开发各种类型的应用程序和脚本。 Python 3.6.8Python编程语言的一个版本,它是Python 3系列的一个较早的版本。Python 3.6.8包含了一些新的语法和功能,同时修复了一些已知的Bug。在Ubuntu上安装Python 3.6.8可以使用包管理器apt,通过以下命令安装: ```bash sudo apt update sudo apt install python3.6 ``` 安装完成后,可以通过以下命令验证Python的安装: ```bash python3.6 --version ``` Python 3.6.8的安装路径通常是`/usr/bin/python3.6`,可以通过以下命令找到Python的安装路径: ```bash which python3.6 ``` 安装Python后,可以通过编写Python脚本文件(通常以`.py`为扩展名)来编写和运行Python程序。使用任何文本编辑器编写Python代码,保存为`.py`文件后,可以通过以下命令来运行Python程序: ```bash python3.6 filename.py ``` 以上就是关于Ubuntu上安装Python 3.6.8的简要回答,希望对你有所帮助。 ### 回答3: Ubuntu上安装Python3.6.8非常简单。下面是一步一步的安装过程: 1. 打开终端:按下Ctrl+Alt+T 组合键。 2. 添加DeadSnakes PPA存储库:输入以下命令并按Enter键执行: ``` sudo add-apt-repository ppa:deadsnakes/ppa ``` 系统会要求您输入密码以确认您的身份。 3. 更新软件包列表:输入以下命令并按Enter键执行: ``` sudo apt-get update ``` 这将更新您的系统上所有可用软件包的列表。 4. 安装Python3.6:输入以下命令并按Enter键执行: ``` sudo apt-get install python3.6 ``` 您可能需要等待一段时间,以完成Python的安装过程。在安装完成后,系统将自动为您安装所需的依赖项。 5. 验证安装:输入以下命令并按Enter键执行: ``` python3.6 --version ``` 如果安装成功,会显示Python的版本号。 现在,您已经成功地在Ubuntu系统上安装了Python 3.6.8。您可以使用Python 3.6.8来运行和执行Python脚本和程序。如果您希望将Python 3.6.8作为默认Python版本,您可以使用以下命令更改默认版本: ``` sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 1 sudo update-alternatives --config python ``` 然后,选择Python 3.6作为默认版本即可。 希望这个回答能对您有所帮助。如果您有任何其他问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值