目录
SPICE官方课程学习文档链接:
https://naif.jpl.nasa.gov/naif/tutorials.html
一、SPICE 概述
NASA 的导航和辅助信息设施 (NAIF,The Navigation and Ancillary Information Facility) ,建立了一个名为“SPICE”的信息系统,以协助 NASA 科学家规划和解释来自太空仪器的科学观测,并协助 NASA 工程师参与进行行星探索任务所需的建模、规划和执行活动。
SPICE可以计算选定时间的多种观测几何参数,例如行星、卫星、彗星、小行星、飞船的位置和速度;行星、卫星、彗星和小行星的大小、形状和方向;飞船以及它所搭载的众多活动部件的指向。SPICE还能计算指定几何事件发生的事件,例如什么时候发生掩星,什么时候一个航天器的高度在指定的范围内、什么时候仪器可以指向地面的位置等。
SPICE将各种来源的行星、卫星、彗星、仪器设备的数据打包为辅助数据文件“Kernels”,即内核。通过在个人项目中调用SPICE提供的API即可读取内核中的数据从而计算所需参数,如图1。
二、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:元内核(一种方便地指定您想要一起使用的实际内核集合的方法)。
三、Spice Toolkit Software介绍
STS软件包括API接口库、数据文件和文档,官方支持Fortran 77、C、IDL、Matlab和Java等程序语言,同时第三方程序语言还支持Python(SpiceyPy)、Ruby等。
- SPS可以在不同电脑间进行移植
- 不定期发布具有足够多新功能的SPS版本
- STS在发布给用户之前都会被很好的测试
- 新的工具箱永远可以向后兼容
- 提供包含完整文档的源代码
- 所有的数据计算都是用double精度
- 内核文件可以在不同的电脑之间移植
- 内核文件是可以分离的,你只需安装你需要的特定内核
- 所有都是免费的!!!!!!
四、基础概念
4.1 前言
本节介绍在后面教程中使用到的术语(terminology)和概念(concepts)。部分内容具有一定的难度,仅使用SPICE无需完全理解材料中的内容,但作者仍认为这些属于和概念可能会很有帮助。
4.2 时间
4.2.1 概念
- Epoch(历元):历元是指某个单一事件发生的时间瞬间,即时刻。
- Clocks(时钟):时钟用来记录指定事件发生的历元。
- Time Systems(时间系统):一些达成共识的命名、测量和同步时钟的系统。
4.2.2 时间系统
- 国际原子时(TAI):TAI以天文上确定的午夜1958年1月1日00:00:00之后的原子秒数来表示。
- 世界时/天文时(UT):世界时是根据地球自转测定的时间,其定义为太阳两次经过格林尼治天顶子午线经过的时间,其单位为平太阳日,1/86400平太阳日为秒长。根据天文观测直接测定的世界时(UT0)加长引起测站子午圈位置变化的地极异动的修正即可得到对应平均极的子午圈世界时(UT1)。由于地球自转的不均匀性,UT1并不是均匀的时间尺度。
- 协调世界时(UTC):协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统,即为常用的年月日时分秒时刻。
理想情况下,UTC午时应该和UT1午时对应,但由于UT1并不是均匀的时间尺度,因此二者并不是同步的,当误差积累超过0.9原子秒时,一次跳秒会增加或减少到UTC天的最后,一般会在6月30日或者12月31日进行。
- 质心力学时(TDB)/星历时(ET):在SPICE文档中TDB和ET是同义的,是以太阳系质心系框架下定义的一种连续均匀的时间系统,时牛顿运动方程中的独立变量,也是SPICE接口的独立变量,其余TAI十分接近,差异几乎是周期性的。
- 地球力学时(TDT):地球力学时是地球海平面上的理想时间,TDB和TDT拥有几乎相同的参考历元,大约为J2000时刻。
4.3 参考系
参考系是三个相互正交(可能与时间相关)的单位长度方向向量的有序集合,加上一个称为参考系中心或原点的位置。SPICE文档常常用系(Frame)替代参考系(Reference Frame)。参考系轴的有序集合也称为基。坐标系统规定了在参考系中定位一个点的方法。参考系的中心是一个历元对象,其位置与系的原点重合。在SPICE中,任何惯性系的中心都是太阳系中心。
4.3.1 参考系的种类
-
惯性系:坐标系中心没有加速度并且坐标系没有转动的参考系,例如J2000坐标系
- 非惯性系:例如本体固连坐标系、运动系、仪器设备坐标系等
4.3.2 J2000坐标系与ICRF坐标系的对比
J2000(又名EME2000)的框架定义是基于地球的赤道和春分,由行星运动观测和其他数据确定的,而ICRF框架是由295个河外射电源所采用的位置定义的。
J2000坐标系与ICRF坐标系几乎是相同的,二者仅有0.1角秒的旋转。在SPICE中任何数据都参考J2000坐标系,同样也可以说为参考ICRF坐标系。出于历史原因,SPICE中只能识别J2000坐标系。在Spice中从J2000坐标系到ICRF坐标系不需要任何转换
4.4 坐标系
坐标系相关内容见其他任意天体力学或轨道力学相关书籍和资料,此处SPICE并无任何特别,因此不作介绍。
4.5 状态
4.5.1 状态矢量
一个物体的状态矢量是指其相对另一个物体的位置和速度矢量。在SPICE中,这些物体一般被称之为目标(Target)、观察者(Observer)或者中心(Center)。一个状态矢量总是在TDB/ET时间系统下给定的。在SPK(航天器和行星星历内核)中状态矢量是一个六维矢量,单位分别为km和km/s,其数值是由参考系决定的。
4.5.2 坐标转换
记坐标系B到坐标系A的坐标轴转换矩阵为,坐标系A相对坐标系B的转动角速度为,转动角速度叉乘矩阵记为,则有状态矢量转换矩阵:
同理有坐标系A到坐标系B的状态是矢量转换矩阵:
4.6 像差校正
在SPICE系统中,像差校正是对状态矢量和时间相关参考系进行的调整,以准确反映从指定观察者在指定时间看到的目标物体的真实状态和姿态。星历中实际的、未经校正的状态称为几何状态。当计算状态矢量时,SPICE用户可以要求几何或像差校正状态矢量。
像差校正需要准确地回答如下问题:
- 遥感仪器观测感兴趣的目标时必须指向哪个方向?
- 在给定的指向方向和观测时间下,遥感仪器观测到的目标体表位置是什么?
- 为了向指定的目标发射信号,天线必须指向哪个方向?
为了计算像差校正状态,计算中使用的状态矢量必须全部链接回太阳系质心,具体内容请参考官方文档。
五、SPICE惯例
5.1 词典
- SPICE Toolkit:指JPL的NAIF团队作为SPICE信息系统的一部分制作的软件的主要集合。
- Toolkit:Toolkit的Fortran 77版本。
- SPICELIB:在工具包的Fortran版本中找到的主要用户库。
- CSPICE:引用整个C工具包,以及在工具包的C版本中找到的主要用户库。
- Icy:CSPICE 的 IDL 接口。
- Mice:CSPICE 的 Matlab 接口。
- Kernel:SPICE数据文件
- Text kernel(文本内核)
任何完全由ASCII信息组成的内核类型,每行使用本地操作系统约定结束,包括FK、IK、text PcK、LSK、SCLK、MK。除了mk之外,任何文本内核集都可以组合在一个文件中。但我们当然不建议这样做。
- Binary kernel(二进制内核)
任何使用二进制文档格式的内核类型,包括SPK、binary PcK、CK、DBK、DSK。不同的二进制内核类型不能组合在一起。
- Transfer format kernel(格式转换内核)
二进制内核的十六进制(ASCII)版本,仅用于在不兼容的计算机之间移植二进制内核。不像在Toolkit版本N0052(2002年1月)中增加的“实时翻译”功能那么重要,但在制作某些操作所需的本机二进制内核方面仍然发挥着作用。
- Command file(输入文件)
许多SPICE应用程序和实用程序要么需要,要么可选地接受包含程序指令,有时也是输入数据的输入文件。同义词包括setup file、preferences file、specifications file、definitions file。
- Found flag(查找标识符)
来自SPICE API的布尔输出(True或False),通知您的程序是否找到了与您的请求匹配的数据。
- Database kernel(数据库内核)
SPICE内核与Toolkit DBK软件结合,提供了自包含的类似sql的数据库功能。
- Coverge
基于时间的内核包含数据的时间段
- Deprecated software(已弃用的软件)
工具包代码,虽然仍然可用,但已被更新且可能更好的版本所取代,我们鼓励您不要使用已弃用的SPICE软件,过时的模块在他们的标题中如此标记。
- Toolkit version naming
"Nxxxx" e.g. N0066 is Version 66,用于给定工具包版本的所有实例。
- “Satellite”仅指天然卫星,而不指宇宙飞船
- "Run-time"发生在执行进程时
同义词
- Kernel, SPICE file, SPICE kernel, SPICE kernel file
- Meta-kernel, Furnsh Kernel
- Module, routine, subroutine, procedure, function, application program interface (API)
- Application, program, utility, executable
- Metadata, comments
- Time, Epoch
- Encoded SCLK, ticks*
- Frame, Reference Frame** ( ≠ Coordinate System) (See the "Frames & Coordinate Systems tutorial)
- Fixed offset frame, constant offset frame, TK frame, class 4 frame
- Ephemeris, trajectory
- Rectangular coordinates, Cartesian coordinates**
- Geodetic, Planetodetic (coordinate system)
- Ephemeris time (ET), Barycentric Dynamical Time (TDB)
- Attitude, orientation
- International Celestial Reference Frame (ICRF) and Earth Mean Equator and Equinox of 2000
- reference frame (J2000)
- “Body”, “solar system object,” “ephemeris object”
5.2 内核文件命名
SPICE对内核文件名施加了一些限制,例如名称中不允许有空白、名称(包括任何路径规范)的最大长度为 255 个字符。NAIF建议符合PDS3标准的名字:"36.3"。下一块列出了在NAIF中SPICE内核文件扩展名的常用用法,并使用了以下一般样式:t - text format(e.g. pck00010.tpc)、b - binary format(e.g. de430.bsp)、x - transfer format(e.g. de430.xsp)。
SPK:
.bsp binary SPK file
.xsp transfer format SPK file
PcK:
.tpc text PcK file (The most common type PcK)
.bpc binary PcK file (Very few instances of this)
.xpc transfer format PcK file
IK:
.ti text IK file
FK:
.tf text FK file
LSK:
.tls text LSK file
CK:
.bc binary CK file
.xc transfer format CK file
SCLK:.tsc text SCLK file
MK:
.tm text meta-kernel file (“FURNSH kernel”)
DSK:
.bds binary DSK file
DBK:
.bdb binary database kernel
.xdb transfer format database kernelEK Family
ESP:
.bep binary Science Plan EK file
.xep transfer format Science Plan EK file
ESQ:
.bes binary Sequence Component EK file
.xes transfer format Sequence Component EK file
ENB:
.ten text Experimenter's Notebook EK file
这些扩展用于每个Toolkit交付中包含的纯ASCII文档:
.ug 用户指南
.req “必读”技术参考文档
.txt 用于一些杂项文件
.idx 仅用于排列索引文档
5.3 引文使用
提醒一下在API参数中引用作为值的字符串的特定语言规则:
- 在C和Java Native Interface (JNI)代码中使用双引号"This is a string"
- 在Fortran、IDL、MATLAB和Python代码中使用单引号'This is a string'
- 无论您使用的是哪种语言版本的SPICE工具箱,在所有SPICE文本内核中,字符串值都用单引号括起来。例如INS-43012_FOV_SHAPE = 'CIRCLE'
5.4 特殊事项
由于实际和历史的原因,在谈论星历表(SPK)时,冥王星被视为行星,但冥王星在方向和旋转状态(PCK)方面被视为矮行星。
六、IDs和命名
本节将介绍SPICE中使用的命名/编号方案,包括对象命名/编号、参考系命名/编号、DSK surfaces命名/编号以及方案间的联系、奇怪的情况:SCLK和CK id和一些例子。
6.1 概述
SPICE使用IDs和names来识别对象、参考系和数字形状内核表面(DSK surfaces),一个ID是一个整数、一个name是一个文本字符串。IDs主要用作SPICE内核中的数据标识符,name主要用作SPICE软件接口(api)中的输入和输出参数,因此用户主要使用的是name。用于为对象和参考系分配IDs和names的方案是独立的,这意味着,通常情况下,SPICE不会根据关联的对象名称和id对参考系名称和id做出任何假设(特殊情况除外)。
6.2 对象关联的names和IDs
6.2.1 概述
将单个ID分配给以下任何类型的对象:
- 自然天体——行星、卫星、彗星、小行星
- 人造物体——航天器、航天器结构、科学仪器、科学仪器内的单个探测器、深网站
- 在SPICE上下文中可以知道其位置的任何其他点,例如太阳系和行星系统的质心、着陆点、太阳能电池阵角、天线焦点等
一个或多个名称可以分配给同一个对象,在SPICE软件中,ID和对象名称之间有一个1对多的映射:在输入时,名称被视为同义词,在输出时,将返回最后与ID关联的名称。对象 IDs 在内核中用作数据标识符:
- 在SPK中 -- 识别天体及其运动中心
- 在文本PCK中 -- 在与天体关联的关键字中
- 在DSK中 -- 识别天体
- 在IKs中 -- 在与仪器相关的关键字中
- 在FKs中 -- 指定用来计算光时校正的中心,并且用来识别基于PCK坐标系的天体
- 在FKs中 -- 在动系规范中识别目标和观察者
- 在SCLK中 -- 通常关键字中使用的SCLK ID是航天器ID的负数(因此是一个正整数)。
- ...
对象IDs在一些API中用作输入或输出参数,对象names在高级用户API中用作输入或输出参数,在内核中,对象名不用作数据标识符。
SPICE 使用的对象name-toID映射可以在两个地方定义:
- Toolkit 软件内置:硬编码在源代码中;
- 在文本内核中:通常用于定义仪器、其子系统、探测器和航天器结构的name/ID映射,这些赋值通常存在于FKs(例如MER, MEX, JUNO, MSL)中,有时存在于IKs(例如CASSINI, MGS)中,但可以放置在任何文本内核中。在文本内核中定义的映射优先于在Toolkit源代码中定义的映射。
对象IDs和Names的例子:
航天器
对于DSN(美国国家航空航天局深空网络)支持的航天器,该数字为DSN航天器ID的负数。
- -6 'PIONEER-6','P6'
- -64 'OSIRIS-REX','ORX'
不幸的是,有时DSN会重复使用一个数字,NAIF不给未被DSN跟踪的航天器分配NAIF IDs,不使用DSN的项目可以自己自由选择NAIF IDs,NAIF建议这些id的取值范围为-9999 -1000。
DSN地面站(399000+地面站数目)
- 399005 'DSS-05'
- ...
- 399066 'DSS-66'
Non-DSN地面站(398000+有些整数0-999)
- 398990 'NEW_NORCIA'
- ...
行星
太阳系质心和太阳
- 0 'SOLAR SYSTEM BARYCENTER','SSB'
- 10 'SUN'
行星系统质心
- 1 'MERCURY BARYCENTER'
- 2 'VENUS BARYCENTER'
- 3 'EARTH MOON BARYCENTER','EMB'
- 4 'MARS BARYCENTER'
- ...
- 9 'PLUTO BARYCENTER'
只有行星的质量中心
- 199 'MERCURY'
- 299 'VENUS'
- 399 'EARTH'
- 499 'MARS'
- ...
- 999 'PLUTO'
卫星
- 301 'MOON'
- 401 'PHOBOS'
- 402 'DEIMOS'
- 501 'IO'
- ...
- 901 'CHARON','1978P1'
其余小行星、彗星、仪器设备等命名和编号样例见官方文档,此处不一一列出。
6.2.2 映射API
SPICE提供了两个例程来将对象IDs映射到names,反之亦然。
从对象名得到ID:
CALL BODN2C(NAME,ID,FOUND)
CALL BODS2C(NAME,ID,FOUND) // (This is a more general version as compared to BODN2C. Use this one.)
从ID得到对象名:
CALL BODC2N(ID,NAME,FOUND)
如果这些例程返回的FOUND标志返回FALSE,则不能映射输入ID或name.
6.2.2 添加新的或额外的对象Name-to-ID映射
您可以在任何文本内核中使用赋值来定义新的或额外的Name-to-ID映射。例如,对于一个航天器:
NAIF_BODY_NAME += ('my_spacecrafr_name')
NAIF_BODY_CODE += (my_spacecraft_ID)
详细信息请参见NAIF_IDs必读文档,注意对象名称长度限制为36个字符。
6.3 参考系关联的names和IDs
6.3.1 概述
将单个ID和单个名称分配给以下任何类型的参考系:惯性系、固连系、航天器和仪器坐标系、地面坐标系和任何其他参考系,其方向可能需要计算观测几何。
SPICE 使用的参考系name-toID映射可以在两个地方定义:
- Toolkit 软件内置:硬编码在源代码中;
- 在文本内核中:由KEYWORD=VALUE sets提供
与对象不同,只有一个名称可以直接与参考系ID相关联,但是,可以通过定义一个具有自己唯一名称和ID的新的零偏移系来建立给定参考系的别名。
坐标系IDs和Names的例子:
惯性系(从1开始的正整数)
- 1 'J2000'
- ...
- 17 'ECLIPJ2000'
- ...
固连系(从10001开始的正整数)
- ...
- 10012 'IAU_VENUS'
- 10013 'IAU_EARTH'
- 10014 'IAU_MARS'
- ...
- 10020 'IAU_MOON'
- ...
- 13000 'ITRF93'
- ...
注意:SPICE用户很少需要知道或使用参考系ID;您只使用参考系名称,其余小行星、彗星、仪器设备等的相关参考系命名和编号样例见官方文档,此处不一一列出。
6.3.2 映射API
SPICE提供了两个例程NAMFRM和FRMNAM来将参考系ID转换(映射)为名称,反之亦然。
从给定参考系名称得到ID
CALL NAMFRM(NAME,ID)
从给定ID得到参考系名称
CALL FRMNAM(ID,NAME)
如果不能映射ID或名称,这些例程分别返回0和一个empty - blank字符串。SPICE还提供CCIFRM例程来获取与给定参考系类和ID类相关联的参考系名成、ID和中心。
CALL CCIFRM(FRCLSS,CLSSID,FRCODE,FRNAME,CENT,FOUND)
这个例程用于确定与CK和二进制PCK文件中使用的参考系ID类相关联的参考系的属性。 注意:SPICE用户很少需要调用这些例程。
6.4 DSK Surfaces关联的names和IDs
具体参考官方文档,此处不做使用故而省略。
标签:--,SpiceyPy,坐标系,内核,file,参考系,ID,SPICE From: https://blog.csdn.net/buaaspring/article/details/137375528