Quick Start
Let's suppose we obtained the Orbit Mean-Elements Message (OMM) below describing the orbit of the Amazonia 1 satellite. This is the XML format returned by services such as Space-Track:
<?xml version="1.0" encoding="utf-8"?>
<ndm><omm id="CCSDS_OMM_VERS" version="3.0">
<header>
<COMMENT>GENERATED VIA SPACE-TRACK.ORG API</COMMENT>
<CREATION_DATE>2025-12-30T23:36:37</CREATION_DATE>
<ORIGINATOR>18 SPCS</ORIGINATOR>
</header>
<body><segment>
<metadata>
<OBJECT_NAME>AMAZONIA 1</OBJECT_NAME>
<OBJECT_ID>2021-015A</OBJECT_ID>
<CENTER_NAME>EARTH</CENTER_NAME>
<REF_FRAME>TEME</REF_FRAME>
<TIME_SYSTEM>UTC</TIME_SYSTEM>
<MEAN_ELEMENT_THEORY>SGP4</MEAN_ELEMENT_THEORY>
</metadata>
<data>
<meanElements>
<EPOCH>2025-12-30T18:12:04.533984</EPOCH>
<MEAN_MOTION>14.40772474</MEAN_MOTION>
<ECCENTRICITY>0.00011240</ECCENTRICITY>
<INCLINATION>98.3721</INCLINATION>
<RA_OF_ASC_NODE>75.0877</RA_OF_ASC_NODE>
<ARG_OF_PERICENTER>97.3772</ARG_OF_PERICENTER>
<MEAN_ANOMALY>262.7545</MEAN_ANOMALY>
</meanElements>
</data>
</segment></body>
</omm></ndm>Assuming the string above is stored in the variable omm_xml, we can parse it into an OrbitMeanElementsMessage object using parse_omm:
julia> omm = parse_omm(omm_xml)OrbitMeanElementsMessage: Header Comment : GENERATED VIA SPACE-TRACK.ORG API Creation Date : 2025-12-30T23:36:37 Originator : 18 SPCS Body └─ Segment ├─ Metadata │ Object Name : AMAZONIA 1 │ Object ID : 2021-015A │ Center Name : EARTH │ Ref. Frame : TEME │ Time System : UTC │ Mean Element Theory : SGP4 └─ Data ├─ Mean Keplerian Elements │ Epoch : 2025-12-30T18:12:04.533984 │ Mean Motion : 14.40772474 rev/day │ Eccentricity : 0.0001124 │ Inclination : 98.3721° │ RA of Asc. Node : 75.0877° │ Arg. of Pericenter : 97.3772° │ Mean Anomaly : 262.7545° └─ TLE Related Parameters Ephemeris Type : 0 Classification Type : U NORAD Cat ID : 47699 Element Set Number : 999 Rev at Epoch : 25439 Bstar : 0.0001533 ∂(Mean Motion)/∂t : 4.47e-6 rev/day² ∂²(Mean Motion)/∂t² : 0.0 rev/day³
The message fields are organized following the CCSDS standard hierarchy (header, metadata, and data). We can access them directly:
julia> omm.header.originator"18 SPCS"julia> omm.body.segment.metadata.object_name"AMAZONIA 1"julia> omm.body.segment.data.epoch2025-12-30T18:12:04.533984julia> omm.body.segment.data.inclination98.3721
The package also provides accessor functions that flatten this hierarchy. They live in the ODM module to avoid polluting the namespace, so the most common fields can be obtained directly:
julia> ODM.originator(omm)"18 SPCS"julia> ODM.object_name(omm)"AMAZONIA 1"julia> ODM.epoch(omm)2025-12-30T18:12:04.533984julia> ODM.inclination(omm)98.3721
Every field has a corresponding accessor (e.g., ODM.eccentricity, ODM.mean_motion, ODM.norad_cat_id). See the Library page for the complete list.
If the OMM is stored in a file, use read_omm instead:
omm = read_omm("amazonia_1.xml")From here, you can explore the rest of the manual to learn how to create OMMs from scratch, write them to files, fetch them online, or convert them to a TLE.