e2m2e.core package
e2m2e 核心模块
包含三体问题系统定义、动力学方程、轨道数据结构和坐标变换的核心类。
- Classes:
CR3BP_System: 圆型限制性三体问题系统 LibrationPoint: 平动点枚举 Dynamics: 通用动力学基类 CR3BP_Dynamics: CR3BP 动力学方程 Orbit: 轨道数据容器 OrbitFamily: 轨道族容器 CoordinateTransformation: 坐标系变换 ReferenceFrame: 参考坐标系枚举
- Functions:
propagate_state_at_orbit_time: 沿轨道周期外推状态
- class e2m2e.core.CR3BP_System(mu, primary, secondary)[源代码]
基类:
object圆型限制性三体问题系统
- mu
质量参数 μ = m2/(m1+m2)
- primary_body
主天体名称
- secondary_body
次天体名称
- L_points
平动点位置字典
- L1
L1平动点坐标
- L2
L2平动点坐标
- L3
L3平动点坐标
- L4
L4平动点坐标
- L5
L5平动点坐标
- characteristic_length
特征长度 (km)
- characteristic_time
特征时间 (s)
- characteristic_velocity
特征速度 (km/s)
- mass_primary
主天体质量 (kg)
- mass_secondary
次天体质量 (kg)
- total_mass
总质量 (kg)
- semi_major_axis
半长轴 (km)
- orbital_period
轨道周期 (s)
- mean_motion
平均角速度 (rad/s)
- has_L_points
是否已计算平动点
- EARTH_MOON_DISTANCE_KM = 384400.0
- AU = 149597870.7
- G = 6.6743e-20
- DAY = 86400
- YEAR = 31557600.0
- KNOWN_SYSTEMS: dict[str, dict[str, str | float]] = {'earth_moon': {'distance': 384400.0, 'mu': 0.01215, 'period': 2360448.0, 'primary': 'Earth', 'secondary': 'Moon'}, 'sun_earth': {'distance': 149597870.7, 'mu': 3.0039e-06, 'period': 31557600.0, 'primary': 'Sun', 'secondary': 'Earth'}, 'sun_jupiter': {'distance': 777908927.64, 'mu': 0.0009535, 'period': 374273136.0, 'primary': 'Sun', 'secondary': 'Jupiter'}}
- classmethod from_known_system(system_name)[源代码]
从已知系统创建CR3BP系统
- 参数:
system_name (str) -- 系统名称,如 "earth_moon", "sun_earth", "sun_jupiter"
- 返回:
CR3BP_System实例
- 抛出:
ValueError -- 系统名称不在已知系统中
- 返回类型:
- get_libration_point(point)[源代码]
获取指定平动点
若尚未计算平动点,会自动调用 compute_libration_points()。
- 参数:
point (LibrationPoint) -- LibrationPoint枚举值
- 返回:
平动点坐标数组
- 抛出:
ValueError -- 平动点无效
- 返回类型:
- get_jacobi_constant(state)[源代码]
计算Jacobi常数
- 参数:
state (ArrayLike) -- 状态向量 [x, y, z, vx, vy, vz]
- 返回:
Jacobi常数
- 返回类型:
- compute_stability_index(L_point)[源代码]
计算平动点稳定性指标
通过线性化运动方程的特征值分析平动点稳定性。
- 参数:
L_point (LibrationPoint) -- LibrationPoint枚举值
- 返回:
稳定性指标字典,包含 is_stable、max_real_part、max_imag_part、 eigenvalues 和 linear_matrix
- 返回类型:
- class e2m2e.core.LibrationPoint(*values)[源代码]
基类:
Enum平动点枚举
- L1 = 1
- L2 = 2
- L3 = 3
- L4 = 4
- L5 = 5
- class e2m2e.core.Dynamics(system)[源代码]
基类:
object通用天体系统动力学基类
采用 Template Method 模式:基类定义
propagate()的算法骨架, 子类通过钩子方法提供具体的 ODE 函数和步长配置。契约(对应 MBSE REQ-002): -
propagate()返回的states形状始终为(n_points, 6)-stm``(如果存在)形状为 ``(n_points, 6, 6)- 参数:
system (Any)
- system
关联的系统对象
- integrator
数值积分器类型
- rtol
相对积分容差
- atol
绝对积分容差
- max_step
最大积分步长
- last_trajectory
最近一次积分的轨迹 [t, y]
- last_stm
最近一次积分的状态转移矩阵
- cross_section_tolerance
截面检测容差
- last_crossing
上次穿过截面的点和时间
- initialized
初始化完成标志
- DEFAULT_TOLERANCE = 1e-12
- DEFAULT_MAX_STEP = 0.01
- STATE_DIM = 6
- STM_DIMENSION = 42
- propagate(initial_state, t_span, t_eval=None, with_stm=False, with_jacobi=False)[源代码]
传播轨迹(Template Method)
统一的传播入口,保证: - states 形状为 (n_points, 6)(REQ-002) - stm 形状为 (n_points, 6, 6)(当 with_stm=True 时) - time 数组单调递增
- 参数:
- 返回:
轨迹结果字典,包含
time和states键; 当with_stm=True时额外包含stm键; 当with_jacobi=True时额外包含jacobi与jacobi_error键- 返回类型:
- compute_jacobi_constant(state)[源代码]
计算能量常数(子类需实现)
- 参数:
state (ArrayLike) -- 状态向量
- 返回:
能量常数
- 抛出:
NotImplementedError -- 子类未实现此方法
- 返回类型:
- class e2m2e.core.CR3BP_Dynamics(system)[源代码]
基类:
DynamicsCR3BP动力学方程
封装了CR3BP的动力学模型,提供状态传播、状态转移矩阵计算、 Jacobi常数计算等核心功能。支持6维状态向量(位置+速度)和 42维增广状态向量(状态+状态转移矩阵)的数值积分。
- CR3BP 运动方程(旋转坐标系中):
ẍ - 2ẏ = ∂Ω/∂x ÿ + 2ẋ = ∂Ω/∂y z̈ = ∂Ω/∂z
其中 Ω 为伪势能(见 equations_of_motion 方法的详细注释), 等号左侧的 2ẏ、-2ẋ 项为科里奥利力(Coriolis),伪势能中 已包含离心力项 x²/2 + y²/2。
- 参数:
system (CR3BP_System)
- __init__(system)[源代码]
初始化CR3BP动力学
- 参数:
system (CR3BP_System) -- CR3BP_System对象,包含质量参数μ等系统常数
- 返回类型:
None
- equations_of_motion(t, state)[源代码]
6维状态向量的运动方程
实现 CR3BP 在旋转坐标系中的运动方程。旋转坐标系以两个主天体的 公共质心为原点,与主天体同步旋转(角速度 ω = 1),因此两个主天体 在坐标系中固定不动。
- 在旋转坐标系中,运动方程为:
ẍ - 2ẏ = ∂Ω/∂x (x 方向:离心力 + 引力 + 科里奥利力) ÿ + 2ẋ = ∂Ω/∂y (y 方向:离心力 + 引力 + 科里奥利力) z̈ = ∂Ω/∂z (z 方向:仅引力,无科里奥利力)
- 伪势能 Ω = (x² + y²)/2 + (1-μ)/r₁ + μ/r₂,其偏导数为:
∂Ω/∂x = x - (1-μ)(x+μ)/r₁³ - μ(x-1+μ)/r₂³ ∂Ω/∂y = y - (1-μ)y/r₁³ - μy/r₂³ ∂Ω/∂z = - (1-μ)z/r₁³ - μz/r₂³
- 因此加速度各项的物理含义:
"x" / "y" 项:离心力(伪势能中的二次项贡献)
"(1-μ)(x+μ)/r₁³" 等:较大天体(如地球)的引力加速度
"μ(x-1+μ)/r₂³" 等:较小天体(如月球)的引力加速度
"2vy" / "-2vx":科里奥利力(旋转坐标系中的虚拟力)
- compute_jacobian_A(state)[源代码]
计算 CR3BP 状态方程的雅可比矩阵 A(t)
A(t) 是 6x6 矩阵,满足 dΦ/dt = A(t)·Φ。 结构为:
0₃ₓ₃ I₃ₓ₃ | 位置方程的雅可比:∂(v)/∂(r,v) = [0, I]U_ij Ω | 速度方程的雅可比:∂(a)/∂(r,v) = [U, Ω]此方法提取自 equations_with_stm,供 Continuation 等模块复用(REQ-103)。
- equations_with_stm(t, augmented_state)[源代码]
42维增广状态向量的运动方程(包含状态转移矩阵)
同时积分状态向量和状态转移矩阵(STM),满足 dΦ/dt = A(t)·Φ。
- 状态转移矩阵 Φ(t, t₀) 将初始状态的微小扰动映射到当前时刻:
δx(t) = Φ(t, t₀) · δx(t₀)
通过将 Φ 拉伸为 36 维向量并与 6 维状态拼接为 42 维增广状态, 可以用标准的 ODE 积分器同时求解轨道和 STM。
- propagate_orbit_state_at_time(orbit, t, integration_dt=0.01)[源代码]
从轨道首点状态积分到给定时刻对应的相位(周期轨道上对周期取模)
利用周期轨道的周期性,将目标时间对周期取模后从轨道起始状态 重新积分,得到该相位处的精确状态。
- 参数:
- 返回:
积分末端状态
[x, y, z, vx, vy, vz]- 抛出:
ValueError -- 轨道无状态或周期无效
- 返回类型:
npt.NDArray[np.floating]
- class e2m2e.core.CR3BP_SRP_Dynamics(system, area=1.0, mass=1000.0, Cr=1.5, non_lambertian_front=0.038, non_lambertian_back=0.004, specular_reflection=0.975, nreflection_coeff=0.999, emission_front=0.8, emission_back=0.2, P_srp=4.56e-06)[源代码]
-
带太阳辐射压的 CR3BP 动力学
在标准 CR3BP 运动方程基础上添加太阳辐射压扰动力。 SRP 力模型基于 EXOSIMS 实现,支持非完美反射表面的光学系数。
- 参数:
- area
航天器截面积 (m²)
- mass
航天器质量 (kg)
- Cr
反射系数 (1=完全吸收, 2=完全反射)
- b1
漫反射光学系数
- b2
镜面反射光学系数
- b3
非朗伯光学系数
- beta
SRP 加速度系数 (solar sail parameter)
- P_srp
太阳辐射压常数 (N/m² at 1 AU)
示例
>>> from e2m2e.core.system import CR3BP_System >>> from e2m2e.core.srp_dynamics import CR3BP_SRP_Dynamics >>> system = CR3BP_System.from_known_system("earth_moon") >>> dynamics = CR3BP_SRP_Dynamics(system, area=100.0, mass=1000.0) >>> result = dynamics.propagate([0.8, 0, 0, 0, 0.6, 0], (0, 1))
- DEFAULT_NON_LAMBERTIAN_FRONT = 0.038
- DEFAULT_NON_LAMBERTIAN_BACK = 0.004
- DEFAULT_SPECULAR_REFLECTION = 0.975
- DEFAULT_NREFLECTION_COEFF = 0.999
- DEFAULT_EMISSION_FRONT = 0.8
- DEFAULT_EMISSION_BACK = 0.2
- DEFAULT_P_SRP = 4.56e-06
- __init__(system, area=1.0, mass=1000.0, Cr=1.5, non_lambertian_front=0.038, non_lambertian_back=0.004, specular_reflection=0.975, nreflection_coeff=0.999, emission_front=0.8, emission_back=0.2, P_srp=4.56e-06)[源代码]
初始化 SRP 动力学
- 参数:
system (CR3BP_System) -- CR3BP_System 对象
area (float) -- 航天器截面积 (m²)
mass (float) -- 航天器质量 (kg)
Cr (float) -- 反射系数 (1=完全吸收, 2=完全反射)
non_lambertian_front (float) -- 前表面非朗伯系数
non_lambertian_back (float) -- 后表面非朗伯系数
specular_reflection (float) -- 镜面反射因子
nreflection_coeff (float) -- 反射系数
emission_front (float) -- 前表面发射系数
emission_back (float) -- 后表面发射系数
P_srp (float) -- 太阳辐射压常数 (N/m² at 1 AU)
- 返回类型:
None
- class e2m2e.core.Orbit(states, times, system=None)[源代码]
基类:
object单条轨道的数据容器与处理工具
Orbit 是 e2m2e 中最基本的轨道数据结构,用于存储、计算和持久化 一条 CR3BP 轨道的全部信息。
v4.0 重构:采用组合模式组织属性。
- 参数:
states (npt.ArrayLike)
times (npt.ArrayLike)
system (CR3BP_System | None)
- states
状态序列
[x, y, z, vx, vy, vz],形状为(n, 6)
- times
时间序列,形状为
(n,)
- system
关联的 CR3BP_System 对象
- family_type
轨道族类型
- parameters
轨道参数字典
- metadata
轨道元数据
- jacobi_constants
Jacobi 常数序列
- stability_indices
稳定性指标(由外部算法填充)
- VALID_FAMILY_TYPES = ['halo', 'lyapunov', 'vertical', 'axial', 'butterfly', 'dragonfly']
- VALID_COMPONENTS = ['x', 'y', 'z', 'vx', 'vy', 'vz']
- __init__(states, times, system=None)[源代码]
初始化轨道对象
- 参数:
states (ArrayLike) -- 状态序列,形状
(n, 6)或(6,)times (ArrayLike) -- 时间序列,形状
(n,)system (CR3BP_System | None) -- CR3BP_System 对象(可选)
- 抛出:
ValueError -- 状态分量数不等于 6 或时间序列长度不一致
- 返回类型:
None
- compute_basic_properties()[源代码]
计算轨道的基本几何与物理属性
自动计算: 1. Jacobi 常数序列(当 system 不为 None) 2. 平均状态向量 3. 位置极值与振幅 4. 轨道中心 5. 周期估计(零交叉检测)
- 返回类型:
None
- compute_monodromy_matrix(dynamics)[源代码]
计算轨道的单值矩阵(Monodromy Matrix)
- 参数:
dynamics (CR3BP_Dynamics) -- CR3BP_Dynamics 对象
- 返回:
单值矩阵 (6, 6)
- 抛出:
ValueError -- 轨道周期未知
- 返回类型:
- compute_stability(dynamics)[源代码]
计算轨道的稳定性指标
- 参数:
dynamics (CR3BP_Dynamics) -- CR3BP_Dynamics 对象
- 返回:
稳定性分析结果字典
- 返回类型:
- classmethod load_from_file(filename, system=None, orbit_index=None)[源代码]
从 JSON 文件反序列化加载轨道数据(v3 格式兼容)
- 参数:
system (CR3BP_System | None)
orbit_index (int | None)
- 返回类型:
- class e2m2e.core.OrbitFamily(orbits=None, family_type=None, system=None)[源代码]
基类:
object轨道族容器
用于存储和管理多个 Orbit 对象组成的轨道族。
- 参数:
family_type (str | None)
system (CR3BP_System | None)
- orbits
Orbit 对象列表
- family_type
轨道族类型
- system
关联的 CR3BP_System 对象
- metadata
轨道族元数据
- classmethod load_from_file(filename, system=None)[源代码]
- 参数:
system (CR3BP_System | None)
- 返回类型:
- e2m2e.core.propagate_state_at_orbit_time(orbit, t, dynamics, integration_dt=0.01)[源代码]
委托
CR3BP_Dynamics.propagate_orbit_state_at_time(),便于顶层导入兼容
- class e2m2e.core.CoordinateTransformation(system)[源代码]
基类:
object坐标系变换器
在CR3BP系统的不同参考系之间进行状态向量变换,支持旋转系/惯性系、 质心系/天体中心系之间的转换,并内置旋转矩阵缓存机制。
- 参数:
system (CR3BP_System)
- system
关联的CR3BP_System对象
- mu
系统的质量参数
- rotation_matrices
旋转矩阵缓存,键为时间,值为3x3旋转矩阵
- rotation_matrix_derivatives
旋转矩阵导数缓存
- initialized
初始化完成标志
- VELOCITY_TRANSFORM_INCLUDE_CORIOLIS = True
- CACHE_ROTATION_MATRICES = True
- MAX_CACHE_SIZE = 1000
- __init__(system)[源代码]
初始化变换器
- 参数:
system (CR3BP_System) -- CR3BP_System对象,提供质量参数等信息
- 返回类型:
None
- transform(state, from_frame, to_frame, time=0.0)[源代码]
通用坐标变换接口
- 参数:
state (ArrayLike) -- 状态向量 [x, y, z, vx, vy, vz]
from_frame (ReferenceFrame | str) -- 源参考系(ReferenceFrame枚举或字符串)
to_frame (ReferenceFrame | str) -- 目标参考系(ReferenceFrame枚举或字符串)
time (float) -- 时间(仅对涉及旋转系/惯性系的变换需要)
- 返回:
变换后的状态向量 [x, y, z, vx, vy, vz]
- 抛出:
NotImplementedError -- 不支持指定的坐标系变换组合时抛出
- 返回类型:
- class e2m2e.core.SynodicJ2000Transformation(cr3bp_system, spice)[源代码]
基类:
objectCR3BP synodic坐标系与J2000惯性坐标系之间的转换器。
该类提供了CR3BP归一化synodic坐标系与J2000惯性坐标系之间的双向转换, 使用SPICE获取月球瞬时状态来构建旋转矩阵,支持单个状态和批量转换。
- 参数:
cr3bp_system (CR3BP_System)
- cr3bp_system
CR3BP系统对象,提供质量参数等信息
- spice
SPICEManager对象,用于获取天体状态
- __init__(cr3bp_system, spice)[源代码]
初始化转换器
- 参数:
cr3bp_system (CR3BP_System) -- CR3BP系统对象
spice -- SPICEManager对象
- 返回类型:
None
- class e2m2e.core.ReferenceFrame(*values)[源代码]
基类:
Enum参考系枚举
- ROTATING
旋转系
- INERTIAL
惯性系
- BARYCENTRIC
质心系
- PRIMARY_CENTERED
主天体中心系
- SECONDARY_CENTERED
次天体中心系
- SYNODIC
会合系(同旋转系)
- ROTATING = 'rotating'
- INERTIAL = 'inertial'
- BARYCENTRIC = 'barycentric'
- PRIMARY_CENTERED = 'primary_centered'
- SECONDARY_CENTERED = 'secondary_centered'
- SYNODIC = 'synodic'
- class e2m2e.core.SPICEManager[源代码]
基类:
objectSPICE 内核管理器,统一管理内核加载与天体状态查询。
负责自动加载闰秒内核、提供星历查询接口(位置/状态)、 时间格式转换(UTC ↔ ET)以及天体引力参数查询。
使用流程:
mgr = SPICEManager() # 搜索并加载星历内核 kernel = mgr.find_ephemeris_kernel("/path/to/kernels") mgr.load_kernel(kernel) # 查询天体状态 et = mgr.utc_to_et("2025-06-21T11:00:00") state = mgr.get_body_state("MOON", et, "J2000", "EARTH") # 使用完毕后卸载 mgr.unload_kernel(kernel)
- load_kernel(path)[源代码]
加载一个 SPICE 内核文件(.bsp / .bpc / .tf 等)。
加载前会自动确保闰秒内核已就绪。
- 参数:
path (str) -- 内核文件的路径。
- 抛出:
FileNotFoundError -- 当指定路径的文件不存在时。
- 返回类型:
None
- unload_kernel(path)[源代码]
卸载一个已加载的 SPICE 内核文件,释放相关资源。
- 参数:
path (str) -- 之前通过 load_kernel 加载的内核文件路径。
- 返回类型:
None
- find_ephemeris_kernel(search_dir)[源代码]
在指定目录中按优先级搜索星历内核文件(.bsp)。
优先级:de440.bsp > de440s.bsp > de435.bsp > de438.bsp。
- 参数:
search_dir (str) -- 要搜索的目录路径。
- 返回:
找到的第一个 .bsp 内核文件的绝对路径。
- 抛出:
FileNotFoundError -- 目录不存在或其中无匹配的内核文件。
- 返回类型:
- class e2m2e.core.EphemerisSystem(bodies, spice, origin='EARTH', frame='J2000')[源代码]
基类:
object星历系统,管理一组天体的星历查询。
封装 SPICE 工具包,为轨道设计流程提供统一的天体数据访问层。 支持自定义参考原点和坐标框架。
- 参数:
spice (SPICEManager)
origin (str)
frame (str)
- bodies
天体名称列表,如 ["EARTH", "MOON", "SUN"]。
- spice
SPICE 管理器实例,负责底层星历数据读取。
- origin
参考原点天体名称,默认为 "EARTH"。
- frame
坐标系名称,默认为 "J2000"。
- __init__(bodies, spice, origin='EARTH', frame='J2000')[源代码]
初始化星历系统。
- 参数:
spice (SPICEManager) -- 已完成内核加载的 SPICE 管理器实例。
origin (str) -- 参考原点天体,所有位置矢量将相对于此天体计算。
frame (str) -- 参考坐标系名称,用于确定位置矢量的坐标框架。
- 返回类型:
None
- class e2m2e.core.EphemerisDynamics(system)[源代码]
基类:
Dynamics星历 N 体动力学类,提供运动方程、STM 变分方程与轨道传播功能。
- 参数:
system (EphemerisSystem) -- 星历系统配置,包含天体列表、SPICE 内核接口、参考系与原点天体等信息。
- rtol
相对积分容差。
- atol
绝对积分容差。
- max_step
积分器最大步长(秒)。
- MIN_DISTANCE = 1e-06
- equations_of_motion(t, state)[源代码]
计算受限 N 体问题的运动方程右端项(加速度)。
对每个天体分别处理: - 原点天体:中心引力
-μ₀ r/|r|³- 摄动天体:第三体摄动-μᵢ [(r-rᵢ)/|r-rᵢ|³ + rᵢ/|rᵢ|³],第二项为间接项(扣除摄动天体对原点的引力)。
- compute_jacobian_A(t, state)[源代码]
计算星历 N 体状态方程的雅可比矩阵 A(t)。
- A = | 0₃ₓ₃ I₃ₓ₃ |
- U₃ₓ₃ 0₃ₓ₃ |
其中 U = ∂a/∂r 是加速度对位置的偏导数 (3x3)。 N 体问题中无速度相关力,因此 ∂a/∂v = 0。
Submodules
e2m2e.core.system module
三体问题系统模块
包含 CR3BP_System 类,用于定义和操作圆型限制性三体问题系统。
- class e2m2e.core.system.LibrationPoint(*values)[源代码]
基类:
Enum平动点枚举
- L1 = 1
- L2 = 2
- L3 = 3
- L4 = 4
- L5 = 5
- class e2m2e.core.system.CR3BP_System(mu, primary, secondary)[源代码]
基类:
object圆型限制性三体问题系统
- L_points
平动点位置字典
- Type:
dict[e2m2e.core.system.LibrationPoint, numpy.ndarray[tuple[Any, ...], numpy.dtype[numpy.floating]]] | None
- L1
L1平动点坐标
- Type:
numpy.ndarray[tuple[Any, ...], numpy.dtype[numpy.floating]] | None
- L2
L2平动点坐标
- Type:
numpy.ndarray[tuple[Any, ...], numpy.dtype[numpy.floating]] | None
- L3
L3平动点坐标
- Type:
numpy.ndarray[tuple[Any, ...], numpy.dtype[numpy.floating]] | None
- L4
L4平动点坐标
- Type:
numpy.ndarray[tuple[Any, ...], numpy.dtype[numpy.floating]] | None
- L5
L5平动点坐标
- Type:
numpy.ndarray[tuple[Any, ...], numpy.dtype[numpy.floating]] | None
- EARTH_MOON_DISTANCE_KM = 384400.0
- AU = 149597870.7
- G = 6.6743e-20
- DAY = 86400
- YEAR = 31557600.0
- KNOWN_SYSTEMS: dict[str, dict[str, str | float]] = {'earth_moon': {'distance': 384400.0, 'mu': 0.01215, 'period': 2360448.0, 'primary': 'Earth', 'secondary': 'Moon'}, 'sun_earth': {'distance': 149597870.7, 'mu': 3.0039e-06, 'period': 31557600.0, 'primary': 'Sun', 'secondary': 'Earth'}, 'sun_jupiter': {'distance': 777908927.64, 'mu': 0.0009535, 'period': 374273136.0, 'primary': 'Sun', 'secondary': 'Jupiter'}}
- classmethod from_known_system(system_name)[源代码]
从已知系统创建CR3BP系统
- 参数:
system_name (str) -- 系统名称,如 "earth_moon", "sun_earth", "sun_jupiter"
- 返回:
CR3BP_System实例
- 抛出:
ValueError -- 系统名称不在已知系统中
- 返回类型:
- get_libration_point(point)[源代码]
获取指定平动点
若尚未计算平动点,会自动调用 compute_libration_points()。
- 参数:
point (LibrationPoint) -- LibrationPoint枚举值
- 返回:
平动点坐标数组
- 抛出:
ValueError -- 平动点无效
- 返回类型:
- get_jacobi_constant(state)[源代码]
计算Jacobi常数
- 参数:
state (ArrayLike) -- 状态向量 [x, y, z, vx, vy, vz]
- 返回:
Jacobi常数
- 返回类型:
- compute_stability_index(L_point)[源代码]
计算平动点稳定性指标
通过线性化运动方程的特征值分析平动点稳定性。
- 参数:
L_point (LibrationPoint) -- LibrationPoint枚举值
- 返回:
稳定性指标字典,包含 is_stable、max_real_part、max_imag_part、 eigenvalues 和 linear_matrix
- 返回类型:
e2m2e.core.dynamics module
三体问题动力学模块
包含通用 Dynamics 基类和 CR3BP_Dynamics 类,用于计算和积分圆型限制性三体问题的动力学方程。
物理背景
在圆型限制性三体问题 (CR3BP) 中,两个主天体(如地球和月球)绕其公共质心做圆周运动, 第三体(航天器)质量小到不影响两个主天体的运动。采用以质心为原点的旋转坐标系, 使得两个主天体固定在 x 轴上。
- 坐标系约定:
原点:系统质心
x 轴:从质心指向较大天体(质量 1-μ)的方向
较大天体位于 x = -μ,较小天体(质量 μ)位于 x = 1-μ
y 轴在轨道平面内垂直于 x 轴
z 轴与 x-y 平面正交
所有量均采用无量纲化单位(距离单位 DU = 主天体间距,时间单位 TU 使主天体角速度为 1)。
重构说明 (v4.0 MBSE)
采用 Template Method 模式统一传播逻辑:
- 基类 Dynamics 拥有 propagate() 模板方法
- 子类覆写 _get_eom_func() 和 _get_max_step() 钩子方法
- 结果提取逻辑统一在基类中,保证 states 形状始终为 (n_points, 6)
- class e2m2e.core.dynamics.Dynamics(system)[源代码]
基类:
object通用天体系统动力学基类
采用 Template Method 模式:基类定义
propagate()的算法骨架, 子类通过钩子方法提供具体的 ODE 函数和步长配置。契约(对应 MBSE REQ-002): -
propagate()返回的states形状始终为(n_points, 6)-stm``(如果存在)形状为 ``(n_points, 6, 6)- 参数:
system (Any)
- system
关联的系统对象
- last_trajectory
最近一次积分的轨迹 [t, y]
- Type:
tuple[numpy.ndarray, numpy.ndarray] | None
- last_stm
最近一次积分的状态转移矩阵
- cross_section_tolerance
截面检测容差
- last_crossing
上次穿过截面的点和时间
- initialized
初始化完成标志
- DEFAULT_TOLERANCE = 1e-12
- DEFAULT_MAX_STEP = 0.01
- STATE_DIM = 6
- STM_DIMENSION = 42
- propagate(initial_state, t_span, t_eval=None, with_stm=False, with_jacobi=False)[源代码]
传播轨迹(Template Method)
统一的传播入口,保证: - states 形状为 (n_points, 6)(REQ-002) - stm 形状为 (n_points, 6, 6)(当 with_stm=True 时) - time 数组单调递增
- 参数:
- 返回:
轨迹结果字典,包含
time和states键; 当with_stm=True时额外包含stm键; 当with_jacobi=True时额外包含jacobi与jacobi_error键- 返回类型:
- compute_jacobi_constant(state)[源代码]
计算能量常数(子类需实现)
- 参数:
state (ArrayLike) -- 状态向量
- 返回:
能量常数
- 抛出:
NotImplementedError -- 子类未实现此方法
- 返回类型:
- class e2m2e.core.dynamics.CR3BP_Dynamics(system)[源代码]
基类:
DynamicsCR3BP动力学方程
封装了CR3BP的动力学模型,提供状态传播、状态转移矩阵计算、 Jacobi常数计算等核心功能。支持6维状态向量(位置+速度)和 42维增广状态向量(状态+状态转移矩阵)的数值积分。
- CR3BP 运动方程(旋转坐标系中):
ẍ - 2ẏ = ∂Ω/∂x ÿ + 2ẋ = ∂Ω/∂y z̈ = ∂Ω/∂z
其中 Ω 为伪势能(见 equations_of_motion 方法的详细注释), 等号左侧的 2ẏ、-2ẋ 项为科里奥利力(Coriolis),伪势能中 已包含离心力项 x²/2 + y²/2。
- 参数:
system (CR3BP_System)
- __init__(system)[源代码]
初始化CR3BP动力学
- 参数:
system (CR3BP_System) -- CR3BP_System对象,包含质量参数μ等系统常数
- 返回类型:
None
- equations_of_motion(t, state)[源代码]
6维状态向量的运动方程
实现 CR3BP 在旋转坐标系中的运动方程。旋转坐标系以两个主天体的 公共质心为原点,与主天体同步旋转(角速度 ω = 1),因此两个主天体 在坐标系中固定不动。
- 在旋转坐标系中,运动方程为:
ẍ - 2ẏ = ∂Ω/∂x (x 方向:离心力 + 引力 + 科里奥利力) ÿ + 2ẋ = ∂Ω/∂y (y 方向:离心力 + 引力 + 科里奥利力) z̈ = ∂Ω/∂z (z 方向:仅引力,无科里奥利力)
- 伪势能 Ω = (x² + y²)/2 + (1-μ)/r₁ + μ/r₂,其偏导数为:
∂Ω/∂x = x - (1-μ)(x+μ)/r₁³ - μ(x-1+μ)/r₂³ ∂Ω/∂y = y - (1-μ)y/r₁³ - μy/r₂³ ∂Ω/∂z = - (1-μ)z/r₁³ - μz/r₂³
- 因此加速度各项的物理含义:
"x" / "y" 项:离心力(伪势能中的二次项贡献)
"(1-μ)(x+μ)/r₁³" 等:较大天体(如地球)的引力加速度
"μ(x-1+μ)/r₂³" 等:较小天体(如月球)的引力加速度
"2vy" / "-2vx":科里奥利力(旋转坐标系中的虚拟力)
- compute_jacobian_A(state)[源代码]
计算 CR3BP 状态方程的雅可比矩阵 A(t)
A(t) 是 6x6 矩阵,满足 dΦ/dt = A(t)·Φ。 结构为:
0₃ₓ₃ I₃ₓ₃ | 位置方程的雅可比:∂(v)/∂(r,v) = [0, I]U_ij Ω | 速度方程的雅可比:∂(a)/∂(r,v) = [U, Ω]此方法提取自 equations_with_stm,供 Continuation 等模块复用(REQ-103)。
- equations_with_stm(t, augmented_state)[源代码]
42维增广状态向量的运动方程(包含状态转移矩阵)
同时积分状态向量和状态转移矩阵(STM),满足 dΦ/dt = A(t)·Φ。
- 状态转移矩阵 Φ(t, t₀) 将初始状态的微小扰动映射到当前时刻:
δx(t) = Φ(t, t₀) · δx(t₀)
通过将 Φ 拉伸为 36 维向量并与 6 维状态拼接为 42 维增广状态, 可以用标准的 ODE 积分器同时求解轨道和 STM。
- propagate_orbit_state_at_time(orbit, t, integration_dt=0.01)[源代码]
从轨道首点状态积分到给定时刻对应的相位(周期轨道上对周期取模)
利用周期轨道的周期性,将目标时间对周期取模后从轨道起始状态 重新积分,得到该相位处的精确状态。
- 参数:
- 返回:
积分末端状态
[x, y, z, vx, vy, vz]- 抛出:
ValueError -- 轨道无状态或周期无效
- 返回类型:
npt.NDArray[np.floating]
- e2m2e.core.dynamics.propagate_state_at_orbit_time(orbit, t, dynamics, integration_dt=0.01)[源代码]
委托
CR3BP_Dynamics.propagate_orbit_state_at_time(),便于顶层导入兼容
e2m2e.core.srp_dynamics module
太阳辐射压动力学模块
实现 CR3BP 框架下的太阳辐射压 (SRP) 扰动。 基于 EXOSIMS 的 equationsOfMotion_CRTBP 实现,采用光学系数模型。
物理背景
太阳辐射压是光子撞击航天器表面产生的力。对于非完美反射表面, SRP 力可分解为径向和切向分量,由光学系数 b1, b2, b3 决定。
- 光学系数模型(来自 EXOSIMS):
b1 = 0.5 * (1 - s * p):漫反射分量
b2 = s * p:镜面反射分量
b3 = 0.5 * (Bf * (1-s) * p + (1-p) * (ef*Bf - eb*Bb) / (ef + eb)):非朗伯分量
- 其中:
s: 镜面反射因子
p: 反射系数
Bf, Bb: 前/后表面非朗伯系数
ef, eb: 前/后表面发射系数
引用
EXOSIMS ObservatoryL2Halo.equationsOfMotion_CRTBP
Vallado, D. A. (2013). Fundamentals of Astrodynamics and Applications.
- class e2m2e.core.srp_dynamics.CR3BP_SRP_Dynamics(system, area=1.0, mass=1000.0, Cr=1.5, non_lambertian_front=0.038, non_lambertian_back=0.004, specular_reflection=0.975, nreflection_coeff=0.999, emission_front=0.8, emission_back=0.2, P_srp=4.56e-06)[源代码]
-
带太阳辐射压的 CR3BP 动力学
在标准 CR3BP 运动方程基础上添加太阳辐射压扰动力。 SRP 力模型基于 EXOSIMS 实现,支持非完美反射表面的光学系数。
- 参数:
- area
航天器截面积 (m²)
- mass
航天器质量 (kg)
- Cr
反射系数 (1=完全吸收, 2=完全反射)
- b1
漫反射光学系数
- b2
镜面反射光学系数
- b3
非朗伯光学系数
- beta
SRP 加速度系数 (solar sail parameter)
- P_srp
太阳辐射压常数 (N/m² at 1 AU)
示例
>>> from e2m2e.core.system import CR3BP_System >>> from e2m2e.core.srp_dynamics import CR3BP_SRP_Dynamics >>> system = CR3BP_System.from_known_system("earth_moon") >>> dynamics = CR3BP_SRP_Dynamics(system, area=100.0, mass=1000.0) >>> result = dynamics.propagate([0.8, 0, 0, 0, 0.6, 0], (0, 1))
- DEFAULT_NON_LAMBERTIAN_FRONT = 0.038
- DEFAULT_NON_LAMBERTIAN_BACK = 0.004
- DEFAULT_SPECULAR_REFLECTION = 0.975
- DEFAULT_NREFLECTION_COEFF = 0.999
- DEFAULT_EMISSION_FRONT = 0.8
- DEFAULT_EMISSION_BACK = 0.2
- DEFAULT_P_SRP = 4.56e-06
- __init__(system, area=1.0, mass=1000.0, Cr=1.5, non_lambertian_front=0.038, non_lambertian_back=0.004, specular_reflection=0.975, nreflection_coeff=0.999, emission_front=0.8, emission_back=0.2, P_srp=4.56e-06)[源代码]
初始化 SRP 动力学
- 参数:
system (CR3BP_System) -- CR3BP_System 对象
area (float) -- 航天器截面积 (m²)
mass (float) -- 航天器质量 (kg)
Cr (float) -- 反射系数 (1=完全吸收, 2=完全反射)
non_lambertian_front (float) -- 前表面非朗伯系数
non_lambertian_back (float) -- 后表面非朗伯系数
specular_reflection (float) -- 镜面反射因子
nreflection_coeff (float) -- 反射系数
emission_front (float) -- 前表面发射系数
emission_back (float) -- 后表面发射系数
P_srp (float) -- 太阳辐射压常数 (N/m² at 1 AU)
- 返回类型:
None
e2m2e.core.orbit module
轨道数据模块
本模块定义了圆型限制性三体问题(CR3BP)中轨道数据的表示与处理逻辑, 是 e2m2e 四层架构中 core 层的核心组件之一。
重构说明 (v4.0 MBSE)
采用组合模式重构 Orbit 类: - 核心数据(states, times, system)直接持有 - 计算属性(period, amplitudes, extrema, center 等)通过 property 代理 - 稳定性属性(monodromy_matrix, eigenvalues, stability 等)通过 property 代理 - 删除所有未使用的保留字段
(radius, shape, orientation, is_quasi_periodic, is_chaotic, segments, segment_indices)
保持 v3 JSON 格式向后兼容
- 主要类:
Orbit: 单条轨道的数据容器,支持属性计算、序列化/反序列化和稳定性分析。 OrbitFamily: 轨道族容器,用于存储和管理多条同族轨道。
- class e2m2e.core.orbit.Orbit(states, times, system=None)[源代码]
基类:
object单条轨道的数据容器与处理工具
Orbit 是 e2m2e 中最基本的轨道数据结构,用于存储、计算和持久化 一条 CR3BP 轨道的全部信息。
v4.0 重构:采用组合模式组织属性。
- 参数:
states (npt.ArrayLike)
times (npt.ArrayLike)
system (CR3BP_System | None)
- states
状态序列
[x, y, z, vx, vy, vz],形状为(n, 6)
- times
时间序列,形状为
(n,)
- system
关联的 CR3BP_System 对象
- jacobi_constants
Jacobi 常数序列
- Type:
numpy.ndarray | None
- VALID_FAMILY_TYPES = ['halo', 'lyapunov', 'vertical', 'axial', 'butterfly', 'dragonfly']
- VALID_COMPONENTS = ['x', 'y', 'z', 'vx', 'vy', 'vz']
- __init__(states, times, system=None)[源代码]
初始化轨道对象
- 参数:
states (ArrayLike) -- 状态序列,形状
(n, 6)或(6,)times (ArrayLike) -- 时间序列,形状
(n,)system (CR3BP_System | None) -- CR3BP_System 对象(可选)
- 抛出:
ValueError -- 状态分量数不等于 6 或时间序列长度不一致
- 返回类型:
None
- compute_basic_properties()[源代码]
计算轨道的基本几何与物理属性
自动计算: 1. Jacobi 常数序列(当 system 不为 None) 2. 平均状态向量 3. 位置极值与振幅 4. 轨道中心 5. 周期估计(零交叉检测)
- 返回类型:
None
- compute_monodromy_matrix(dynamics)[源代码]
计算轨道的单值矩阵(Monodromy Matrix)
- 参数:
dynamics (CR3BP_Dynamics) -- CR3BP_Dynamics 对象
- 返回:
单值矩阵 (6, 6)
- 抛出:
ValueError -- 轨道周期未知
- 返回类型:
- compute_stability(dynamics)[源代码]
计算轨道的稳定性指标
- 参数:
dynamics (CR3BP_Dynamics) -- CR3BP_Dynamics 对象
- 返回:
稳定性分析结果字典
- 返回类型:
- classmethod load_from_file(filename, system=None, orbit_index=None)[源代码]
从 JSON 文件反序列化加载轨道数据(v3 格式兼容)
- 参数:
system (CR3BP_System | None)
orbit_index (int | None)
- 返回类型:
- class e2m2e.core.orbit.OrbitFamily(orbits=None, family_type=None, system=None)[源代码]
基类:
object轨道族容器
用于存储和管理多个 Orbit 对象组成的轨道族。
- 参数:
family_type (str | None)
system (CR3BP_System | None)
- orbits
Orbit 对象列表
- Type:
- family_type
轨道族类型
- system
关联的 CR3BP_System 对象
- metadata
轨道族元数据
- classmethod load_from_file(filename, system=None)[源代码]
- 参数:
system (CR3BP_System | None)
- 返回类型:
e2m2e.core.coordinate module
坐标变换模块
包含CoordinateTransformation类,用于在不同参考系之间转换轨道状态。
- class e2m2e.core.coordinate.ReferenceFrame(*values)[源代码]
基类:
Enum参考系枚举
- ROTATING
旋转系
- INERTIAL
惯性系
- BARYCENTRIC
质心系
- PRIMARY_CENTERED
主天体中心系
- SECONDARY_CENTERED
次天体中心系
- SYNODIC
会合系(同旋转系)
- ROTATING = 'rotating'
- INERTIAL = 'inertial'
- BARYCENTRIC = 'barycentric'
- PRIMARY_CENTERED = 'primary_centered'
- SECONDARY_CENTERED = 'secondary_centered'
- SYNODIC = 'synodic'
- class e2m2e.core.coordinate.CoordinateTransformation(system)[源代码]
基类:
object坐标系变换器
在CR3BP系统的不同参考系之间进行状态向量变换,支持旋转系/惯性系、 质心系/天体中心系之间的转换,并内置旋转矩阵缓存机制。
- 参数:
system (CR3BP_System)
- system
关联的CR3BP_System对象
- mu
系统的质量参数
- rotation_matrices
旋转矩阵缓存,键为时间,值为3x3旋转矩阵
- Type:
dict[float, numpy.ndarray[tuple[Any, ...], numpy.dtype[numpy.floating]]]
- rotation_matrix_derivatives
旋转矩阵导数缓存
- Type:
dict[float, numpy.ndarray[tuple[Any, ...], numpy.dtype[numpy.floating]]]
- initialized
初始化完成标志
- VELOCITY_TRANSFORM_INCLUDE_CORIOLIS = True
- CACHE_ROTATION_MATRICES = True
- MAX_CACHE_SIZE = 1000
- __init__(system)[源代码]
初始化变换器
- 参数:
system (CR3BP_System) -- CR3BP_System对象,提供质量参数等信息
- 返回类型:
None
- transform(state, from_frame, to_frame, time=0.0)[源代码]
通用坐标变换接口
- 参数:
state (ArrayLike) -- 状态向量 [x, y, z, vx, vy, vz]
from_frame (ReferenceFrame | str) -- 源参考系(ReferenceFrame枚举或字符串)
to_frame (ReferenceFrame | str) -- 目标参考系(ReferenceFrame枚举或字符串)
time (float) -- 时间(仅对涉及旋转系/惯性系的变换需要)
- 返回:
变换后的状态向量 [x, y, z, vx, vy, vz]
- 抛出:
NotImplementedError -- 不支持指定的坐标系变换组合时抛出
- 返回类型:
- class e2m2e.core.coordinate.SynodicJ2000Transformation(cr3bp_system, spice)[源代码]
基类:
objectCR3BP synodic坐标系与J2000惯性坐标系之间的转换器。
该类提供了CR3BP归一化synodic坐标系与J2000惯性坐标系之间的双向转换, 使用SPICE获取月球瞬时状态来构建旋转矩阵,支持单个状态和批量转换。
- 参数:
cr3bp_system (CR3BP_System)
- cr3bp_system
CR3BP系统对象,提供质量参数等信息
- spice
SPICEManager对象,用于获取天体状态
- __init__(cr3bp_system, spice)[源代码]
初始化转换器
- 参数:
cr3bp_system (CR3BP_System) -- CR3BP系统对象
spice -- SPICEManager对象
- 返回类型:
None
e2m2e.core.ephemeris_dynamics module
星历动力学模型 —— 在多体 N 体引力场中传播航天器轨道。
本模块实现 EphemerisDynamics,它继承自 Dynamics,利用
SPICE 星历数据提供的高精度天体位置与引力参数,计算多体引力加速度、
状态转移矩阵 (STM) 并完成数值积分传播。
核心物理模型
采用 受限 N 体问题 (Restricted N-Body Problem) 建模:
以
system.origin为坐标原点(通常是主天体,如地球)。原点天体对航天器施加中心引力加速度。
其余天体(如月球、太阳等)对航天器施加第三体摄动加速度, 同时扣除其对原点天体的引力加速度(即间接项),以保持坐标原点 位于原点天体而非质心。
加速度公式(以原点天体 P₀ 为中心):
重构说明 (v4.0 MBSE)
调用
super().__init__()(REQ-005)覆写
_get_eom_func()和_get_max_step()钩子方法propagate()继承自基类,states 形状统一为(n_points, 6)(REQ-002)stm形状统一为(n_points, 6, 6)
引用
Battin, R. H. An Introduction to the Methods of Astrodynamics.
Gurfil, P., & Seidelmann, P. K. Celestial Mechanics and Astrodynamics.
- class e2m2e.core.ephemeris_dynamics.EphemerisDynamics(system)[源代码]
基类:
Dynamics星历 N 体动力学类,提供运动方程、STM 变分方程与轨道传播功能。
- 参数:
system (EphemerisSystem) -- 星历系统配置,包含天体列表、SPICE 内核接口、参考系与原点天体等信息。
- MIN_DISTANCE = 1e-06
- equations_of_motion(t, state)[源代码]
计算受限 N 体问题的运动方程右端项(加速度)。
对每个天体分别处理: - 原点天体:中心引力
-μ₀ r/|r|³- 摄动天体:第三体摄动-μᵢ [(r-rᵢ)/|r-rᵢ|³ + rᵢ/|rᵢ|³],第二项为间接项(扣除摄动天体对原点的引力)。
- compute_jacobian_A(t, state)[源代码]
计算星历 N 体状态方程的雅可比矩阵 A(t)。
- A = | 0₃ₓ₃ I₃ₓ₃ |
- U₃ₓ₃ 0₃ₓ₃ |
其中 U = ∂a/∂r 是加速度对位置的偏导数 (3x3)。 N 体问题中无速度相关力,因此 ∂a/∂v = 0。
e2m2e.core.ephemeris_system module
星历系统模块。
提供天体位置、引力常数等星历信息的统一查询接口, 底层通过 SPICE 工具包获取数据。
- class e2m2e.core.ephemeris_system.EphemerisSystem(bodies, spice, origin='EARTH', frame='J2000')[源代码]
基类:
object星历系统,管理一组天体的星历查询。
封装 SPICE 工具包,为轨道设计流程提供统一的天体数据访问层。 支持自定义参考原点和坐标框架。
- 参数:
spice (SPICEManager)
origin (str)
frame (str)
- bodies
天体名称列表,如 ["EARTH", "MOON", "SUN"]。
- spice
SPICE 管理器实例,负责底层星历数据读取。
- origin
参考原点天体名称,默认为 "EARTH"。
- frame
坐标系名称,默认为 "J2000"。
- __init__(bodies, spice, origin='EARTH', frame='J2000')[源代码]
初始化星历系统。
- 参数:
spice (SPICEManager) -- 已完成内核加载的 SPICE 管理器实例。
origin (str) -- 参考原点天体,所有位置矢量将相对于此天体计算。
frame (str) -- 参考坐标系名称,用于确定位置矢量的坐标框架。
- 返回类型:
None
e2m2e.core.spice module
SPICE 工具封装模块。
本模块对 spiceypy(NASA SPICE 工具包的 Python 绑定)进行二次封装, 提供天体星历查询、时间转换、以及内核文件管理等常用功能, 使其更易于在轨道设计流程中使用。
SPICE 内核文件说明
SPICE 内核是 NASA NAIF 提供的数据文件,包含天体星历、姿态、时间转换等信息。 本模块使用两类内核:
**闰秒内核**(
.tls):提供 UTC ↔ ET 时间转换所需的闰秒表。 模块会自动在kernels/目录和SPICE_KERNEL_DIR环境变量指定的路径中 搜索并加载.tls文件,无需手动操作。**星历内核**(
.bsp):包含天体位置/速度数据(如 JPL DE440)。 需要手动加载,可通过find_ephemeris_kernel()搜索或load_kernel()加载。
支持的星历内核(按推荐优先级):
文件名
说明
de440.bsp
JPL DE440(推荐,覆盖 1550–2650 年)
de440s.bsp
JPL DE440 精简版(覆盖 1849–2150 年)
de435.bsp
JPL DE435(覆盖 1550–2650 年)
de438.bsp
JPL DE438(覆盖 1550–2650 年)
内核文件获取:从 NASA NAIF 下载,
或设置 SPICE_KERNEL_DIR 环境变量指向已下载的内核目录。
典型用法
手动指定路径加载:
from e2m2e.core import SPICEManager
mgr = SPICEManager()
mgr.load_kernel("path/to/de440.bsp")
et = mgr.utc_to_et("2024-01-01T00:00:00")
state = mgr.get_body_state("MOON", et, "J2000", "EARTH")
mgr.unload_kernel("path/to/de440.bsp")
自动搜索内核文件:
from e2m2e.core import SPICEManager
mgr = SPICEManager()
kernel = mgr.find_ephemeris_kernel("/path/to/kernels")
mgr.load_kernel(kernel)
# ... 使用完毕后卸载
mgr.unload_kernel(kernel)
- class e2m2e.core.spice.SPICEManager[源代码]
基类:
objectSPICE 内核管理器,统一管理内核加载与天体状态查询。
负责自动加载闰秒内核、提供星历查询接口(位置/状态)、 时间格式转换(UTC ↔ ET)以及天体引力参数查询。
使用流程:
mgr = SPICEManager() # 搜索并加载星历内核 kernel = mgr.find_ephemeris_kernel("/path/to/kernels") mgr.load_kernel(kernel) # 查询天体状态 et = mgr.utc_to_et("2025-06-21T11:00:00") state = mgr.get_body_state("MOON", et, "J2000", "EARTH") # 使用完毕后卸载 mgr.unload_kernel(kernel)
- load_kernel(path)[源代码]
加载一个 SPICE 内核文件(.bsp / .bpc / .tf 等)。
加载前会自动确保闰秒内核已就绪。
- 参数:
path (str) -- 内核文件的路径。
- 抛出:
FileNotFoundError -- 当指定路径的文件不存在时。
- 返回类型:
None
- unload_kernel(path)[源代码]
卸载一个已加载的 SPICE 内核文件,释放相关资源。
- 参数:
path (str) -- 之前通过 load_kernel 加载的内核文件路径。
- 返回类型:
None
- find_ephemeris_kernel(search_dir)[源代码]
在指定目录中按优先级搜索星历内核文件(.bsp)。
优先级:de440.bsp > de440s.bsp > de435.bsp > de438.bsp。
- 参数:
search_dir (str) -- 要搜索的目录路径。
- 返回:
找到的第一个 .bsp 内核文件的绝对路径。
- 抛出:
FileNotFoundError -- 目录不存在或其中无匹配的内核文件。
- 返回类型: