Attitude Ephemeris Message (AEM)

class ccsds_ndm.AdmHeader(creation_date, originator, classification=None, message_id=None, comment=None)

Represents the admHeader complex type from the XSD.

classification

User-defined free-text message classification/caveats of this ADM. It is recommended that selected values be pre-coordinated between exchanging entities by mutual agreement.

Examples: SBU, ‘Operator-proprietary data; secondary distribution not permitted’

Type:

Optional[str]

comment

User-defined comments. (See 7.8 for formatting rules.)

Examples: This is a comment

Type:

list[str]

creation_date

File creation date/time in UTC. (For format specification, see 6.8.9.)

Examples: 2001-11-06T11:17:33, 2002-204T15:56:23Z

Type:

str

message_id

ID that uniquely identifies a message from a given originator. The format and content of the message identifier value are at the discretion of the originator.

Examples: APM_201113719185, ABC-12_34

Type:

Optional[str]

originator

Creating agency or operator. Select from the accepted set of values indicated in annex B, subsection B1 from the ‘Abbreviation’ column (when present), or the ‘Name’ column when an Abbreviation column is not populated. If desired organization is not listed there, follow procedures to request that originator be added to SANA registry.

Examples: CNES, ESOC, GSFC, GSOC, JPL, JAXA, INTELSAT, USAF, INMARSAT

Type:

str

class ccsds_ndm.Aem(header, segments)

Attitude Ephemeris Message (AEM).

An AEM specifies the attitude state of a single object at multiple epochs, contained within a specified time range. The AEM is suited to interagency exchanges that involve automated interaction and require higher fidelity or higher precision dynamic modeling than is possible with the APM.

The AEM allows for dynamic modeling of any number of torques (solar pressure, atmospheric torques, magnetics, etc.). It requires the use of an interpolation technique to interpret the attitude state at times different from the tabular epochs.

static from_file(path, format=None)
static from_str(data, format=None)
header

Attitude Ephemeris Message (AEM).

An AEM specifies the attitude state of a single object at multiple epochs, contained within a specified time range. The AEM is suited to interagency exchanges that involve automated interaction and require higher fidelity or higher precision dynamic modeling than is possible with the APM.

The AEM allows for dynamic modeling of any number of torques (solar pressure, atmospheric torques, magnetics, etc.). It requires the use of an interpolation technique to interpret the attitude state at times different from the tabular epochs.

Type:

AdmHeader

id

The message identifier.

Type:

Optional[str]

segments

AEM Segments.

Type:

list[AemSegment]

to_file(path, format, validate=True)

Write to file.

to_str(format, validate=True)

Serialize to string.

validate(strict=True)

Validate the message against CCSDS rules.

Parameters:

strict (bool, optional) – If True (default), raises ValueError on the first error found. If False, returns a list of validation error messages (or None if valid).

version

The message version.

Type:

str

class ccsds_ndm.AemSegment(metadata, data)
data

AEM Data Section.

Type:

AemData

metadata

AEM Metadata Section.

Type:

AemMetadata

validate()

Validate the segment against CCSDS rules.

class ccsds_ndm.AemMetadata(object_name, object_id, ref_frame_a=None, ref_frame_b=None, start_time=None, stop_time=None, time_system=None, attitude_type=Ellipsis, center_name=None, useable_start_time=None, useable_stop_time=None, euler_rot_seq=None, angvel_frame=None, interpolation_method=None, interpolation_degree=None, comment=None)

AEM Metadata Section.

angvel_frame

The frame of reference in which angular velocity data are specified. The set of allowed values is described in annex B, subsection B3. This keyword is applicable only if ATTITUDE_TYPE specifies the use of angular velocities in conjunction with either quaternions or Euler angles.

Examples: ICRF, SC_BODY_1

Type:

str | None

attitude_type

The type of information contained in the data lines. This keyword must have a value from the set specified at the right. (See table 4-4 for details of the data contained in each line.)

Examples: QUATERNION, QUATERNION/DERIVATIVE, QUATERNION/ANGVEL, EULER_ANGLE, EULER_ANGLE/DERIVATIVE, EULER_ANGLE/ANGVEL, SPIN, SPIN/NUTATION, SPIN/NUTATION_MOM

Type:

str

center_name

Celestial body orbited by the object, which may be a natural solar system body (planets, asteroids, comets, and natural satellites), including any planet barycenter or the solar system barycenter. The set of allowed values is described in annex B, subsection B8.

Examples: EARTH, STS-106

Type:

str | None

comment

Comments allowed only at the beginning of the Metadata section. Each comment line shall begin with this keyword.

Examples: This is a comment.

Type:

list[str]

euler_rot_seq

Rotation sequence that defines the REF_FRAME_A to REF_FRAME_B transformation. The order of the transformation is from left to right, where the leftmost letter (X, Y, or Z) represents the rotation axis of the first rotation, the second letter (X, Y, or Z) represents the rotation axis of the second rotation, and the third letter (X, Y, or Z) represents the rotation axis of the third rotation. This keyword is applicable only if ATTITUDE_TYPE specifies the use of Euler angles.

Examples: ZXZ, XYZ

Type:

str | None

interpolation_degree

Recommended interpolation degree for attitude ephemeris data in the block immediately following this metadata block. It must be an integer value. This keyword must be used if the ‘INTERPOLATION_METHOD’ keyword is used.

Examples: 1, 5

Type:

int | None

interpolation_method

Recommended interpolation method for attitude ephemeris data in the block immediately following this metadata block.

Examples: LINEAR, HERMITE, LAGRANGE

Type:

str | None

object_id

Spacecraft identifier of the object corresponding to the attitude data to be given. While there is no CCSDS-based restriction on the value for this keyword, it is recommended to use international designators from the UN Office of Outer Space Affairs (reference [ADM-2]). Recommended values have the format YYYY-NNNP{PP}, where: YYYY = Year of launch. NNN = Three- digit serial number of launch in year YYYY (with leading zeros). P{PP} = At least one capital letter for the identification of the part brought into space by the launch. In cases in which the asset is not listed in reference [ADM-2], the UN Office of Outer Space Affairs designator index format is not used, or the content cannot be disclosed, the value should be set to UNKNOWN.

Examples: 2000-052A

Type:

str

object_name

Spacecraft name for which the attitude state is provided. While there is no CCSDS-based restriction on the value for this keyword, it is recommended to use names from the UN Office of Outer Space Affairs designator index (reference [ADM-2], which include Object name and international designator). When OBJECT_NAME is not known or cannot be disclosed, the value should be set to UNKNOWN.

Examples: EUTELSAT W1

Type:

str

ref_frame_a

Name of the reference frame that defines the starting point of the transformation. The set of allowed values is described in annex B, subsection B3.

Examples: ICRF, SC_BODY_1, INSTRUMENT_A

Type:

str

ref_frame_b

Name of the reference frame that defines the end point of the transformation. The set of allowed values is described in annex B, subsection B3.

Examples: SC_BODY_1, INSTRUMENT_A

Type:

str

start_time

Start of TOTAL time span covered by attitude ephemeris data immediately following this metadata block.

Examples: 1996-12-18T14:28:15.11

Type:

str

stop_time

End of TOTAL time span covered by the attitude ephemeris data immediately following this metadata block.

Examples: 1996-12-18T14:28:15.11

Type:

str

time_system

Time system used for both attitude ephemeris data and metadata. The set of allowed values is described in annex B, subsection B2.

Examples: UTC, TAI

Type:

str

useable_start_time

Optional start of USEABLE time span covered by attitude ephemeris data immediately following this metadata block. To allow for proper interpolation near the beginning/end of the attitude ephemeris data block, it may be necessary to utilize this keyword with values within the time span covered by the attitude ephemeris data records as denoted by the START/STOP_TIME time tags. The USEABLE_START_TIME time tag of a new block of ephemeris data must be greater than or equal to the USEABLE_STOP_TIME time tag of the previous block.

Examples: 1996-12-18T14:28:15.11

Type:

str | None

useable_stop_time

Optional stop of USEABLE time span covered by attitude ephemeris data immediately following this metadata block. (See also USEABLE_START_TIME.)

Examples: 1996-12-18T14:28:15.11

Type:

str | None

validate()

Validate the metadata section against CCSDS rules.

class ccsds_ndm.AemData(attitude_states, attitude_type=None, comment=None)

AEM Data Section.

attitude_states

Attitude ephemeris data lines.

Type:

list[AttitudeState]

attitude_states_epochs

Epochs for attitude states (ISO 8601).

Type:

list[str]

attitude_states_numpy

Get attitude states as a 2D NumPy array.

Use attitude_states_epochs for the corresponding epochs.

Supports all AEM attitude state types, but all rows must be of the same type.

Type:

numpy.ndarray

comment

Comments allowed only at the beginning of the Data section. Each comment line shall begin with this keyword.

Type:

list[str]

static from_numpy(epochs, array, attitude_type=None, comment=None)
validate(attitude_type)

Validate the data section against CCSDS rules.

Attitude States

class ccsds_ndm.AttitudeState(epoch, values)
epoch
values
class ccsds_ndm.QuaternionState(ref_frame_a, ref_frame_b, q1, q2, q3, qc, q1_dot, q2_dot, q3_dot, qc_dot, comment)

Attitude quaternion.

All mandatory elements are to be provided if the block is present. (See annex F for conventions and further detail.)

comment

One or more comment line(s). Each comment line shall begin with this keyword.

Type:

list[str]

q1

Quaternion components Q1, Q2, Q3, QC.

Units: dimensionless

Type:

float

q2

Quaternion components Q1, Q2, Q3, QC.

Units: dimensionless

Type:

float

q3

Quaternion components Q1, Q2, Q3, QC.

Units: dimensionless

Type:

float

qc

Quaternion components Q1, Q2, Q3, QC.

Units: dimensionless

Type:

float

quaternion_dot

Quaternion derivative components [Q1_DOT, Q2_DOT, Q3_DOT, QC_DOT].

Units: 1/s

Type:

list[float] | None

ref_frame_a

Name of the reference frame that defines the starting point of the transformation. The set of allowed values is described in annex B, subsection B3.

Type:

str

ref_frame_b

Name of the reference frame that defines the end point of the transformation. The set of allowed values is described in annex B, subsection B3.

Type:

str

class ccsds_ndm.EulerAngleState(ref_frame_a, ref_frame_b, euler_rot_seq, angle_1, angle_2, angle_3, angle_1_dot, angle_2_dot, angle_3_dot, comment)

Euler angle elements.

All mandatory elements of the logical block are to be provided if the block is present. (See annex F for conventions and further detail.)

angle_1

Angle of the first rotation.

Units: deg

Type:

float

angle_1_dot

Time derivative of angle of the first rotation.

Units: deg/s

Type:

Optional[float]

angle_2

Angle of the second rotation.

Units: deg

Type:

float

angle_2_dot

Time derivative of angle of the second rotation.

Units: deg/s

Type:

Optional[float]

angle_3

Angle of the third rotation.

Units: deg

Type:

float

angle_3_dot

Time derivative of angle of the third rotation.

Units: deg/s

Type:

Optional[float]

comment

One or more comment line(s). Each comment line shall begin with this keyword.

Type:

list[str]

euler_rot_seq

Rotation sequence that defines the REF_FRAME_A to REF_FRAME_B transformation. The order of the transformation is from left to right, where the leftmost letter (X, Y, or Z) represents the rotation axis of the first rotation, the second letter (X, Y, or Z) represents the rotation axis of the second rotation, and the third letter (X, Y, or Z) represents the rotation axis of the third rotation.

Type:

str

ref_frame_a

Name of the reference frame that defines the starting point of the transformation. The set of allowed values is described in annex B, subsection B3.

Type:

str

ref_frame_b

Name of the reference frame that defines the end point of the transformation. The set of allowed values is described in annex B, subsection B3.

Type:

str

class ccsds_ndm.SpinState(ref_frame_a, ref_frame_b, spin_alpha, spin_delta, spin_angle, spin_angle_vel, nutation, nutation_per, nutation_phase, momentum_alpha, momentum_delta, nutation_vel, comment)

Spin block.

All mandatory elements are to be provided if the block is present. (See annex F for conventions and further detail.)

comment

One or more comment line(s). Each comment line shall begin with this keyword.

Type:

list[str]

momentum_alpha

Right ascension of angular momentum vector in frame A.

Units: deg

Type:

Optional[float]

momentum_delta

Declination of angular momentum vector in frame A.

Units: deg

Type:

Optional[float]

nutation

Nutation angle of spin axis.

Units: deg

Type:

Optional[float]

nutation_per

Body nutation period of the spin axis.

Units: s

Type:

Optional[float]

nutation_phase

Inertial nutation phase.

Units: deg

Type:

Optional[float]

nutation_vel

Angular velocity of spin vector around the angular momentum vector.

Units: deg/s

Type:

Optional[float]

ref_frame_a

Name of the reference frame that defines the starting point of the transformation. The set of allowed values is described in annex B, subsection B3.

Type:

str

ref_frame_b

Name of the reference frame that defines the end point of the transformation. The set of allowed values is described in annex B, subsection B3.

Type:

str

spin_alpha

Right ascension of spin axis vector in frame A.

Units: deg

Type:

float

spin_angle

Phase of the satellite about the spin axis.

Units: deg

Type:

float

spin_angle_vel

Angular velocity of satellite around spin axis.

Units: deg/s

Type:

float

spin_delta

Declination of the spin axis vector in frame A.

Units: deg

Type:

float