1.背景
国产化趋势越来越强,从软件到硬件,从操作系统到CPU,甚至显卡,就产生了在国产ARM CPU和Kylin系统下部署Orekit的需求,且之前的开发是基于Python的,需要做适配。
2.X86架构下安装Python/Orekit开发环境
比较简单,参考Orekit官网介绍,通常通过conda建好Python虚拟环境后,直接通过 conda install conda-forge::orekit 命令一般就能顺利安装成功。建议选择Python3.9以上的版本。
参考:https://anaconda.org/conda-forge/orekit
3.Linux/aarch64架构下安装Python/Orekit开发环境
本人走了很多弯路,有尝试失败或耐心不足中途放弃等原因,仅作参考(重点在第4条,前面废话)。
(1)首先在linux/aarch64环境下执行conda install conda-forge::orekit,会提示找不到包的。
基本符合预期,参考https://anaconda.org/conda-forge/orekit页面上介绍,只提供了linux-64、win-64、osx-arm64、osx-64这四种架构(2025年5月),后两个时苹果系统,前两个分别时Linux和windows的x64架构。
(2)在第(1)步失败后,了解到可以通过conda build命令自己本地编译,但是由于目前官方的代码没有适配linux/aarch64,还需要修改环境,且还有jcc、jdk等依赖需要安装和配置,折腾了大半天最终放弃。
(3)后来看到https://github.com/petrushy/orekit_python_artifacts这个链接,想着通过提示的“mvn -B package -Ppython-jar --file pom.xml”能够编译出安装包,由于对内容不熟悉,对Java不熟悉,瞎折腾后也放弃,没有找到pom.xml,从orekit的仓库下瞎拷贝过来的也不太行,编译不过...
(4)重点!!! 突然在anaconda.org还是在orekit.org搜索orekit看到了orekit_jpype这个包,特别是在https://gitlab.orekit.org/orekit/orekit_jpype/-/tree/master 还有详细示例,并且不限定架构,还能够通过conda安装,大喜! 遂尝试,且通过!于是,产生了这篇奔走相告的博客。总而言之,建议在Linux/aarch64架构通过“conda install conda-forge::orekit_jpype”命令安装,安装完成后参考https://gitlab.orekit.org/orekit/orekit_jpype/-/tree/master 仓库下的示例进行验证(如果偷懒的话,参考后面的简单验证代码)。
conda install conda-forge::orekit_jpype
4.Linux/aarch64架构下orekit_jpype环境验证代码
如果以下代码执行,没有报错或异常,那么恭喜你!
import orekit_jpype as orekit
orekit.initVM()
from orekit_jpype.pyhelpers import setup_orekit_data
"""需要提前安装orekit-data 或者通过setup_orekit_data('../orekit-data') 使用手工下载的数据路径"""
setup_orekit_data()
from jpype import JImplements, JOverride
from org.hipparchus.geometry.euclidean.threed import RotationOrder
from org.hipparchus.geometry.euclidean.threed import Vector3D
from org.hipparchus.ode.events import Action
from org.orekit.attitudes import AttitudeProvider;
from org.orekit.attitudes import AttitudesSequence;
from org.orekit.attitudes import LofOffset;
from org.orekit.bodies import CelestialBodyFactory, OneAxisEllipsoid;
from org.orekit.errors import OrekitException;
from org.orekit.frames import FramesFactory;
from org.orekit.frames import LOFType;
from org.orekit.orbits import KeplerianOrbit;
from org.orekit.orbits import Orbit;
from org.orekit.propagation import Propagator;
from org.orekit.propagation import SpacecraftState;
from org.orekit.propagation.analytical import EcksteinHechlerPropagator;
from org.orekit.propagation.events import EclipseDetector;
from org.orekit.propagation.events import EventDetector;
from org.orekit.propagation.events.handlers import EventHandler
from org.orekit.propagation.sampling import OrekitFixedStepHandler
from org.orekit.time import AbsoluteDate;
from org.orekit.time import TimeScalesFactory;
from org.orekit.utils import Constants, IERSConventions, AngularDerivativesFilter
from org.orekit.utils import PVCoordinates;
from org.orekit.utils import PVCoordinatesProvider
initialDate = AbsoluteDate(2004, 1, 1, 23, 30, 00.000, TimeScalesFactory.getUTC())
position = Vector3D(-6142438.668, 3492467.560, -25767.25680);
velocity = Vector3D(505.8479685, 942.7809215, 7435.922231);
initialOrbit = KeplerianOrbit(PVCoordinates(position, velocity),
FramesFactory.getEME2000(), initialDate,
Constants.EIGEN5C_EARTH_MU);
print(initialOrbit)
5.参考链接
1、orekit_jpype示例
2、orekit-feedstock
https://github.com/petrushy/orekit-feedstock
https://github.com/conda-forge/orekit-feedstock
https://anaconda.org/conda-forge/orek
3、orekit_jpype-feedstock
https://anaconda.org/conda-forge/orekit_jpype //for conda
https://gitlab.orekit.org/orekit/orekit_jpype/-/tree/master //官网
https://github.com/conda-forge/orekit_jpype-feedstock //fork