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
  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 1/ER
       ∂(Mean Motion)/∂t   : 4.47e-6 rev/day²
       ∂²(Mean Motion)/∂t² : 0.0 rev/day³

The message fields are organized into the three sections defined by the CCSDS standard (header, metadata, and data). We can access them directly:

julia> omm.header.originator"18 SPCS"
julia> omm.metadata.object_name"AMAZONIA 1"
julia> omm.data.epoch2025-12-30T18:12:04.533984
julia> omm.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.