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.533984
julia> 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.533984
julia> 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.