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, JOverridefrom org.hipparchus.geometry.euclidean.threed import RotationOrder
from org.hipparchus.geometry.euclidean.threed import Vector3D
from org.hipparchus.ode.events import Actionfrom 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 PVCoordinatesProviderinitialDate = 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示例
https://gitlab.orekit.org/orekit/orekit_jpype/-/blob/master/examples/Example_EarthObservation_-_Attitude_Sequence-jpype.ipynb
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