An Orbit Mean-elements Message (OMM) is the CCSDS-standardized representation of TLE/GP data — the same orbital elements traditionally distributed as Two-Line Element sets, in a structured, self-describing format. Data sources like CelesTrak and Space-Track distribute GP data as OMM. The typical workflow is to parse an OMM and initialize an SGP4 propagator.
importbraheasbhfrombrahe.ccsdsimportOMMbh.initialize_eop()# Parse OMMomm=OMM.from_file("test_assets/ccsds/omm/OMMExample1.txt")print(f"Object: {omm.object_name} ({omm.object_id})")print(f"Theory: {omm.mean_element_theory}")print(f"Epoch: {omm.epoch}")# Extract mean elements for SGP4# The epoch string is needed in ISO format for from_omm_elementsd=omm.to_dict()epoch_str=d["mean_elements"]["epoch"]# Initialize SGP propagator from OMM elementsprop=bh.SGPPropagator.from_omm_elements(epoch=epoch_str,mean_motion=omm.mean_motion,eccentricity=omm.eccentricity,inclination=omm.inclination,raan=omm.ra_of_asc_node,arg_of_pericenter=omm.arg_of_pericenter,mean_anomaly=omm.mean_anomaly,norad_id=omm.norad_cat_id,object_name=omm.object_name,object_id=omm.object_id,classification=omm.classification_type,bstar=omm.bstar,mean_motion_dot=omm.mean_motion_dot,mean_motion_ddot=omm.mean_motion_ddot,ephemeris_type=omm.ephemeris_type,element_set_no=omm.element_set_no,rev_at_epoch=omm.rev_at_epoch,)print("\nSGP Propagator created:")print(f" NORAD ID: {prop.norad_id}")print(f" Name: {prop.satellite_name}")print(f" Epoch: {prop.epoch}")# Propagate 1 day forwardtarget=prop.epoch+86400.0state=prop.state(target)print(f"\nState after 1 day ({target}):")print(f" Position: [{state[0]/1e3:.3f}, {state[1]/1e3:.3f}, {state[2]/1e3:.3f}] km")print(f" Velocity: [{state[3]:.3f}, {state[4]:.3f}, {state[5]:.3f}] m/s")# Propagate to several epochsprint("\nState every 6 hours:")forhoursinrange(0,25,6):t=prop.epoch+hours*3600.0s=prop.state(t)r=(s[0]**2+s[1]**2+s[2]**2)**0.5print(f" +{hours:2d}h: r={r/1e3:.1f} km")
Object: GOES 9 (1995-025A)
Theory: SGP/SGP4
Epoch: 2007-03-05 10:34:41.426 UTC
SGP Propagator created:
NORAD ID: 23581
Name: GOES 9
Epoch: 2007-03-05 10:34:41.426 UTC
State after 1 day (2007-03-06 10:34:41.426 UTC):
Position: [-22455.711, 35678.856, 1446.264] km
Velocity: [-2597.006, -1638.752, 125.747] m/s
State every 6 hours:
+ 0h: r=42181.9 km
+ 6h: r=42174.0 km
+12h: r=42145.6 km
+18h: r=42153.8 km
+24h: r=42182.1 km
Object: GOES 9 (1995-025A)
Theory: SGP/SGP4
Epoch: 2007-03-05 10:34:41.426 UTC
SGP Propagator created:
NORAD ID: 23581
Name: GOES 9
Epoch: 2007-03-05 10:34:41.426 UTC
State after 1 day (2007-03-06 10:34:41.426 UTC):
Position: [-22455.711, 35678.856, 1446.264] km
Velocity: [-2597.006, -1638.752, 125.747] m/s
State every 6 hours:
+ 0h: r=42181.9 km
+ 6h: r=42174.0 km
+12h: r=42145.6 km
+18h: r=42153.8 km
+24h: r=42182.1 km
Parse from file or string, then access metadata, mean elements, and TLE parameters. The message carries two main data sections: mean elements (epoch, mean motion, eccentricity, inclination, RAAN, argument of pericenter, mean anomaly) and TLE parameters (NORAD catalog ID, classification, element set number, revolution count, \(B^*\) drag term, mean motion derivatives):
Format version: 3
Originator: NOAA/USA
Creation date: 2007-03-06 16:00:00.000 UTC
Object name: GOES 9
Object ID: 1995-025A
Center name: EARTH
Ref frame: TEME
Time system: UTC
Mean element theory: SGP/SGP4
Epoch: 2007-03-05 10:34:41.426 UTC
Mean motion: 1.00273272 rev/day
Eccentricity: 0.0005013
Inclination: 3.0539 deg
RAAN: 81.7939 deg
Arg of pericenter: 249.2363 deg
Mean anomaly: 150.1602 deg
GM: 3.9860e14 m³/s²
NORAD catalog ID: 23581
Classification: U
Ephemeris type: 0
Element set no: 925
Rev at epoch: 4316
BSTAR: 0.0001
Mean motion dot: -0.00000113 rev/day²
Mean motion ddot: 0 rev/day³
Parsing completed successfully.
Unit Convention for OMM
Mean motion, angles, and TLE drag terms are kept in their CCSDS/TLE-native units (rev/day, degrees, etc.) because these values are needed as-is for TLE generation and SGP4 initialization. Only GM is converted to SI (m\(^3\)/s\(^2\)).
Brahe's GPRecord type — returned by both CelestrakClient and SpaceTrackClient when querying GP data — has a bidirectional relationship with OMM. A GPRecord can be converted to an OMM via to_omm() for CCSDS-compliant export, and an OMM can be converted to a GPRecord via to_gp_record() for use with brahe's ephemeris infrastructure.
This means you can move freely between the two representations: query CelesTrak for a satellite, get a GPRecord, and export it as a standards-compliant OMM file for distribution. Or parse an OMM file received from an external system and convert it to a GPRecord to use the same downstream code you would with a CelesTrak or Space-Track query. Both conversions preserve all shared fields, so switching between formats introduces no data loss.