SpiceyPy-内核与时间尺度转换

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值