OPM — Orbit Parameter Message¶
Parses CCSDS Orbit Parameter Messages containing a single state vector with optional Keplerian elements, spacecraft parameters, maneuvers, and covariance data.
OPM ¶
OPM(originator: Any, object_name: Any, object_id: Any, center_name: Any, ref_frame: Any, time_system: Any, epoch: Any, position: Any, velocity: Any)
Python wrapper for CCSDS Orbit Parameter Message (OPM).
Scalar metadata is exposed as properties with getters and setters. Maneuvers are accessed via the maneuvers property which supports indexing, iteration, and mutation.
Example
Initialize instance.
arg_of_pericenter property ¶
arg_of_pericenter: float
Argument of pericenter in degrees, or None.
Returns:
| Name | Type | Description |
|---|---|---|
float | float | Argument of pericenter (degrees), or None |
eccentricity property ¶
eccentricity: float
Eccentricity, or None if no Keplerian elements.
Returns:
| Name | Type | Description |
|---|---|---|
float | float | Eccentricity, or None |
gm property ¶
gm: float
Gravitational parameter in m^3/s^2, or None.
Returns:
| Name | Type | Description |
|---|---|---|
float | float | GM (m^3/s^2), or None |
has_keplerian_elements property ¶
has_keplerian_elements: bool
Whether Keplerian elements are present.
Returns:
| Name | Type | Description |
|---|---|---|
bool | bool | True if Keplerian elements exist |
inclination property ¶
inclination: float
Inclination in degrees, or None if no Keplerian elements.
Returns:
| Name | Type | Description |
|---|---|---|
float | float | Inclination (degrees), or None |
maneuvers property ¶
Maneuver collection, supporting len/indexing/iteration.
Returns:
| Name | Type | Description |
|---|---|---|
OPMManeuvers | OPMManeuvers | Collection of maneuvers |
mean_anomaly property ¶
mean_anomaly: float
Mean anomaly in degrees, or None.
Returns:
| Name | Type | Description |
|---|---|---|
float | float | Mean anomaly (degrees), or None |
position property ¶
position: ndarray
Position vector [x, y, z] in meters.
Returns:
| Type | Description |
|---|---|
ndarray | numpy.ndarray: Position [x, y, z] in meters |
ra_of_asc_node property ¶
ra_of_asc_node: float
Right ascension of ascending node in degrees, or None.
Returns:
| Name | Type | Description |
|---|---|---|
float | float | RAAN (degrees), or None |
semi_major_axis property ¶
semi_major_axis: float
Semi-major axis in meters, or None.
Returns:
| Name | Type | Description |
|---|---|---|
float | float | Semi-major axis (meters), or None |
solar_rad_area property ¶
solar_rad_area: float
Solar radiation pressure area in m^2, or None.
Returns:
| Name | Type | Description |
|---|---|---|
float | float | Solar radiation pressure area (m^2), or None |
solar_rad_coeff property ¶
solar_rad_coeff: float
Solar radiation pressure coefficient, or None.
Returns:
| Name | Type | Description |
|---|---|---|
float | float | Solar radiation pressure coefficient, or None |
true_anomaly property ¶
true_anomaly: float
True anomaly in degrees, or None.
Returns:
| Name | Type | Description |
|---|---|---|
float | float | True anomaly (degrees), or None |
velocity property ¶
velocity: ndarray
Velocity vector [vx, vy, vz] in m/s.
Returns:
| Type | Description |
|---|---|
ndarray | numpy.ndarray: Velocity [vx, vy, vz] in m/s |
add_maneuver method descriptor ¶
add_maneuver(epoch_ignition: Epoch, duration: float, ref_frame: str, dv: list[float], delta_mass: float | None = None) -> int
Add a maneuver to the OPM.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch_ignition | Epoch | Epoch of ignition | required |
duration | float | Duration in seconds | required |
ref_frame | str | Reference frame for delta-V | required |
dv | list[float] | Delta-V [dv1, dv2, dv3] in m/s | required |
delta_mass | float | None | Mass change in kg | None |
Returns:
| Name | Type | Description |
|---|---|---|
int | int | Index of the new maneuver |
from_file staticmethod ¶
from_str staticmethod ¶
remove_maneuver method descriptor ¶
Remove a maneuver by index.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
idx | int | Index of the maneuver to remove | required |
state_in_frame method descriptor ¶
state_in_frame(frame: CelestialFrame | ReferenceFrame) -> ndarray
State vector expressed in frame at the state-vector epoch.
The message's REF_FRAME chooses the axes and its CENTER_NAME chooses the origin of the frame the data is expressed in, and the state is converted from there through the reference frame router. A message declared in TOD about Earth yields a GCRF state directly usable for propagation, and one declared in EME2000 about the Moon converts to any frame the router reaches from Moon-centered EME2000 axes.
A TOD message that also carries a REF_FRAME_EPOCH names the true-of-date axes frozen at that epoch, and its state is converted from TOD at the frame epoch before routing.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
frame | CelestialFrame | ReferenceFrame | Target reference frame | required |
Returns:
| Type | Description |
|---|---|
ndarray | numpy.ndarray: 6-element state vector [x, y, z, vx, vy, vz] in |
Raises:
| Type | Description |
|---|---|
BraheError | If |
to_dict method descriptor ¶
to_dict() -> dict
Convert the OPM to a Python dictionary.
Epochs are serialized as CCSDS datetime strings for JSON/dict compatibility.
Returns:
| Name | Type | Description |
|---|---|---|
dict | dict | Dictionary representation of the OPM |
to_file method descriptor ¶
to_json_string method descriptor ¶
See Also¶
- OPM Format Guide — Structure, state vectors, maneuvers, and covariance
- CCSDS Module — Module overview