SPICE系统中一个非常重要的概念就是内核,spiceypy的核心也是调用内核数据进行相关的处理,这里先简要介绍元内核 (MK Meta-Kernel)、闰秒内核 ( LSK, Leapseconds Kernel )、航天器和行星星历(SPK , Spacecraft and Planet Ephemeris Kernel)、行星常数内核 ( PCK, Planetary Constants Kernel )
以UTC、ET时间和航天器时间转换为例介绍,MK、LSK、相关函数
一、时间尺度转换
UTC 协调世界时
通常是日月年的字符形式,不利于科学计算因此需要转化为数值型的时间尺度
ET 历书时(Ephemeris Time)
描述天体运动的方程式中采用的时间,或天体历表中应用的时间。它是由天体力学的定律确定的均匀时间,又称牛顿时,最初被设计为一种统一时间尺度的方法,以摆脱地球自转不规则的影响。主要是他为数值型的时间尺度。
UTC与ET存在不规则变化的差异,称为闰秒,因此转换需要闰秒内核LSK。相关内核文件可在SPICE网站中下载,SPK、LSK主要在通用内核目录下
https://naif.jpl.nasa.gov/pub/naif/
航天器计时(Spacecraft Clock Time),航天器携带的时钟计时,为了测量航天器的空间轨迹,导航员使用这些计时器来精确跟踪信号的发送和接收时间。利用这些时间测量来计算航天器的确切距离、速度和行进方向。这一参数需要加载航天器星历内核SCLK,可在SPICE网站中相关任务目录下下载
spiceype的绝大多数程序需要加载内核,且涉及多过程的情况下需要加载多个内核
1、内核的加载与卸载
import spiceypy
kernel = "D:\\Spice\\kernel\\naif0012.tls" # 内核文件路径
# 载入内核文件
spiceypy.furnsh(kernel)
# 卸载内核文件
spiceypy.unload( kernel )
2、元内核的加载
由于程序常常涉及大量内核的加载,SPICE提供元内核MK形式的加载,加载方式同上,元内核文件构建
,只需新建txt按如下格式写入内核路径即可。
\begindata
KERNELS_TO_LOAD = ( 'E:/working/shallow/Spice/kernel/naif0012.tls',
'E:/Spice/kernel/lro_clkcor_2009210_v00.tsc')
\begintext
或
\begindata
PATH_VALUES = ( 'cspice/kernels/fk',
'cspice/kernels/pck',
'cspice/kernels/lsk',
'cspice/kernels/spk' )
PATH_SYMBOLS = ( 'FK', 'PCK', 'LSK', 'SPK' )
KERNELS_TO_LOAD = ( '$FK/earth_assoc_itrf93.tf',
'$PCK/earth_predict.bpc',
'$PCK/earth_720101_070426.bpc',
'$PCK/earth_latest_high_prec.bpc',
'$PCK/pck00010.tpc',
'$LSK/latest_leapseconds.tls',
'$SPK/de440s.bsp' )
\begintext
3、时间转换函数
def convtm(time):
# 元内核的加载
kernel = "D:\\Spice\\kernel\\convtm.txt"
spiceypy.furnsh(kernel)
# 航天器编号 LRO探测器的航天器编号 可在SLCK中找到,航天器为负的,星体编号为正
SCLKID = -85
utctim = time
print( 'Converting UTC Time: {:s}'.format( utctim ) )
# UTC转ET 世界时转历书时
et = spiceypy.str2et( utctim )
print( ' ET Seconds Past J2000: {:16.3f}'.format( et ) )
#ET 历书时字符串形式
calet = spiceypy.timout( et, 'YYYY-MON-DDTHR:MN:SC ::TDB' )
print( ' Calendar ET (timout): {:s}'.format( calet ) )
# 转化为航天器计时
sclkst = spiceypy.sce2s( SCLKID, et )
print( ' Spacecraft Clock Time: {:s}'.format( sclkst ) )
spiceypy.unload( kernel )
convtm("2009-06-30T15:11:03")
#结果展示
Converting UTC Time: 2009-06-30T15:11:03
ET Seconds Past J2000: 299646729.184
Calendar ET (timout): 2009-JUN-30T15:12:09
Spacecraft Clock Time: 1/0268067462.63877
参考内容:
相关概念百度百科
https://spiceypy.readthedocs.io/en/master/insitu_sensing.html