目录
SPICE官方课程学习文档链接:
https://naif.jpl.nasa.gov/naif/tutorials.html
一、内核(Kernel)介绍
1.1 概述
Kernel是指包含低级辅助数据的文件,可与其他数据和SPICE工具包软件一起使用,以确定科学家和工程师在规划和执行空间任务时使用的高级观测几何参数,并分析从任务返回的数据。SPICE内核文件包括S(Spacecraft/航天器)、P(Planet/行星)、I(Instrument/仪器设备)、C(Camera-matrix/相机矩阵)、E(Event/事件)五种逻辑组件,每种逻辑组件均对应一个或两个内核:
- SPK:航天器(S)和行星(P)星历内核;
- PcK:行星(P)常数内核;
- IK:仪器(I)内核;
- CK:相机(C)内核;
- EK:事件(E)信息内核(ESP(科学观测计划)、ESQ(指令事件顺序)、ENB(研究员记录手册));
- FK:参考坐标系说明内核(包括固连坐标系和活动坐标系);
- LSK:闰秒内核;
- SCLK:航天器时钟内核;
- DSK:数字形状内核;
- MK:元内核(一种方便地指定您想要一起使用的实际内核集合的方法)
1.2 内核文件格式类型
- Binary form二进制形式(SPK、binary PCK、CK、DSK、ESQ、DBK)
主要包含以二进制形式编码的数据的文档,它们还包含少量 ASCII 文本。这种文件格式提供对大量数字数据的快速访问,需要使用SPICE工具包软件来创建它们,同时需要使用SPICE工具包软件来提取其内容。
- Text form文本形式(text PCK、IK、FK、LSK、SCLK、MK)
仅包含打印字符(ASCII 值 32-126)的文档,即人类可读的文本。使用文本编辑器制作,需要使用SPICE工具包软件来提取其内容。
文本内核主要功能是为特定变量赋值,例如:
BODY399_GM = ( 3.9860043550702266D+05 ) // 地球引力常数
文本内核还包含描述赋值的描述性注释(comment)。
![](https://i-blog.csdnimg.cn/blog_migrate/89df9cbda1d64e7593fd144f6c9fa880.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d39964eccc0e95dc323ddedd0b4f73d0.png)
- Transfer form 二进制内核的“传输”形式
二进制内核的 ASCII 表示,用于在不兼容的计算机之间移植文档。
1.3 创建自己的内核
详细请参考官方学习资料12_intro_to_kernels。
二、内核的使用
为了在代码中使用内核首先需要将内核加载到内存中。当你加载内核文件时,对于文本内核,文件加载后变量名和相关值都会被存储在叫做内核池(Kernel pool)的数据结构中;而对于二进制内核,SPK、CK、PCK和DSK内核只会在Toolkit发送读入请求时才会被读取数据,ESQ内核会在加载时存储在内存中,但在执行query/fetch前不会读取任何数据。对于所有实际目的,二进制文件保持打开状态,除非您明确卸载。
内核下载地址:
https://naif.jpl.nasa.gov/pub/naif/
https://naif.jpl.nasa.gov/naif/data_archived.html
https://naif.jpl.nasa.gov/naif/data_operational.html
https://naif.jpl.nasa.gov/naif/data_generic.html
任何时候可以加载的所有类型的内核的数量都很大,但是是有限的。在N67工具包版本中,它被限制在5300个(假设每个内核只加载过一次,没有卸载过)。在N67工具包版本中,可以同时加载的二进制内核数量被限制为5000个。对于所有加载的文本内核,关键字和值的数量也有限制,关键字的最大数量为 26,003,数字数据项的最大数目为400,000,字符数据项的最大数量为15,000。
SPICE内核在运行时加载的顺序决定了它们在请求数据时的优先级,对于二进制内核,当两个或多个文件包含给定对象的数据在时间上重叠时,将使用来自更高优先级文件的数据。如果两个(或多个)文本内核使用=操作符将值赋给单个关键字,则使用与该关键字的最后一次加载相关联的数据值,所有先前的值都将替换为最后一次加载的值。无论内核加载的顺序如何,来自二进制PCK的方向数据总是取代从文本PCK获得的方向数据(对于同一对象)。
FORTRAN或CSPICE应用程序很少需要卸载内核,但对于Icy、Mice、Python和类似的解释器脚本来说是必不可少的。由于IDL和MATLAB与外部共享对象库交互的方式,在IDL或MATLAB会话期间加载的任何内核都将保持加载状态,直到会话结束,除非它们被特别卸载。例程KCLEAR和UNLOAD可用于卸载包含您希望不再对程序可用的数据的内核。使用UNLOAD卸载文本内核还将删除通过内核池运行时数据插入更新api (PCPOOL、PDPOOL、PIPOOL)提供的任何内核池数据。
三、元内核(Meta Kernel)!!!重要
元内核是一个文件,它列出了SPICE内核集合的名称(和位置),这些内核将在基于SPICE的应用程序中一起使用,加载元内核会导致加载其中列出的所有内核。使用元内核可以很容易地管理将哪些SPICE文件加载到程序中。您不需要修改代码,只需编辑元内核即可。元内核是使用SPICE文本内核标准实现的。一个简单的元内核示例如下:
KPL/MK
\begindata
KERNELS_TO_LOAD = (
'/home/mydir/kernels/lowest_priority.bsp',
'/home/mydir/kernels/next_priority.bsp',
'/home/mydir/kernels/highest_priority.bsp',
'/home/mydir/kernels/leapseconds.tls',
'/home/mydir/kernels/sclk.tsc',
'/home/mydir/kernels/c-kernel.bc',
'/home/mydir/kernels+',
'/custom/kernel_data/p_constants.tpc',
)
本例中列出的最后一个文件(p_constants.tpc)演示了如何使用连续字符+来解决文本内核标准对字符串长度施加的80个字符限制。对于Windows系统下,元内核可以使用PATH VALUES和PATH SYMBOLS关键字来指定内核所在的目录。
KPL/MK
\begindata
PATH_VALUES = ( 'c:\home\mydir\kernels' )
PATH_SYMBOLS = ( 'KERNELS' )
KERNELS_TO_LOAD = (
'$KERNELS\lowest_priority.bsp',
'$KERNELS\next_priority.bsp',
'$KERNELS\highest_priority.bsp',
'$KERNELS\leapseconds.tls',
'$KERNELS\sclk.tsc',
'$KERNELS\c-kernel.bc',
'$KERNELS\custom\kernel_data\p_constants.tpc'
)
虽然操作系统环境变量符号$name用于引用使用PATH VALUES和PATH symbols关键字指定的符号,但这些符号不是操作系统环境变量,仅在这个特定的元内核上下文中由SPICE设置和用于替换。前文描述的+延续字符可用于处理超过80个字符的路径字符串。