Skip to content

Synodic Frames

Transformations between GCRF and the Earth-Moon Rotating (EMR), Sun-Earth Rotating (SER), and Geocentric Solar Ecliptic (GSE) frames.

Note

For conceptual explanations and examples, see Synodic Reference Frames in the Learn section.

GCRF ↔ EMR

rotation_gcrf_to_emr builtin

rotation_gcrf_to_emr(epc: Epoch) -> ndarray

Computes the rotation matrix from GCRF axes to Earth-Moon Rotating (EMR) frame axes (NASA TP-20220014814 §4.6.2): x̂ Earth→Moon, ẑ along the Moon's orbital angular momentum relative to Earth.

Auto-initializes the default de440s ephemeris if no SPK kernel is loaded.

Parameters:

Name Type Description Default
epc Epoch

Epoch instant for computation of the transformation

required

Returns:

Type Description
ndarray

numpy.ndarray: 3x3 rotation matrix transforming GCRF -> EMR axes

Raises:

Type Description
RuntimeError

If the SPK lookup fails at epc

Example
1
2
3
4
import brahe as bh

epc = bh.Epoch.from_datetime(2024, 3, 1, 0, 0, 0.0, 0.0, bh.UTC)
r = bh.rotation_gcrf_to_emr(epc)

rotation_emr_to_gcrf builtin

rotation_emr_to_gcrf(epc: Epoch) -> ndarray

Computes the rotation matrix from Earth-Moon Rotating (EMR) frame axes to GCRF axes. Inverse of rotation_gcrf_to_emr.

Auto-initializes the default de440s ephemeris if no SPK kernel is loaded.

Parameters:

Name Type Description Default
epc Epoch

Epoch instant for computation of the transformation

required

Returns:

Type Description
ndarray

numpy.ndarray: 3x3 rotation matrix transforming EMR -> GCRF axes

Raises:

Type Description
RuntimeError

If the SPK lookup fails at epc

Example
1
2
3
4
import brahe as bh

epc = bh.Epoch.from_datetime(2024, 3, 1, 0, 0, 0.0, 0.0, bh.UTC)
r = bh.rotation_emr_to_gcrf(epc)

position_gcrf_to_emr builtin

position_gcrf_to_emr(epc: Epoch, x_gcrf: Union[ndarray, List]) -> ndarray

Transforms a Cartesian GCRF position into the equivalent Earth-Moon Rotating (EMR) frame position. The EMR origin is the Earth-Moon barycenter.

Auto-initializes the default de440s ephemeris if no SPK kernel is loaded.

Parameters:

Name Type Description Default
epc Epoch

Epoch instant for computation of the transformation

required
x_gcrf ndarray or list

Cartesian GCRF position (m), shape (3,)

required

Returns:

Type Description
ndarray

numpy.ndarray: Cartesian EMR position (m), shape (3,)

Raises:

Type Description
RuntimeError

If the SPK lookup fails at epc

Example
1
2
3
4
import brahe as bh

epc = bh.Epoch.from_datetime(2024, 3, 1, 0, 0, 0.0, 0.0, bh.UTC)
x_emr = bh.position_gcrf_to_emr(epc, [1e8, -2e8, 5e7])

position_emr_to_gcrf builtin

position_emr_to_gcrf(epc: Epoch, x_emr: Union[ndarray, List]) -> ndarray

Transforms a Cartesian Earth-Moon Rotating (EMR) frame position into the equivalent Cartesian GCRF position. Inverse of position_gcrf_to_emr.

Auto-initializes the default de440s ephemeris if no SPK kernel is loaded.

Parameters:

Name Type Description Default
epc Epoch

Epoch instant for computation of the transformation

required
x_emr ndarray or list

Cartesian EMR position (m), shape (3,)

required

Returns:

Type Description
ndarray

numpy.ndarray: Cartesian GCRF position (m), shape (3,)

Raises:

Type Description
RuntimeError

If the SPK lookup fails at epc

Example
1
2
3
4
import brahe as bh

epc = bh.Epoch.from_datetime(2024, 3, 1, 0, 0, 0.0, 0.0, bh.UTC)
x_gcrf = bh.position_emr_to_gcrf(epc, [3.8e8, 0.0, 0.0])

state_gcrf_to_emr builtin

state_gcrf_to_emr(epc: Epoch, x_gcrf: Union[ndarray, List]) -> ndarray

Transforms a Cartesian GCRF state (position and velocity) into the equivalent Earth-Moon Rotating (EMR) frame state. The EMR origin is the Earth-Moon barycenter; the velocity transform uses the exact rotation- matrix time derivative (including dẑ/dt) evaluated from SPK acceleration.

Auto-initializes the default de440s ephemeris if no SPK kernel is loaded.

Parameters:

Name Type Description Default
epc Epoch

Epoch instant for computation of the transformation

required
x_gcrf ndarray or list

Cartesian GCRF state [position (m), velocity (m/s)], shape (6,)

required

Returns:

Type Description
ndarray

numpy.ndarray: Cartesian EMR state [position (m), velocity (m/s)], shape (6,)

Raises:

Type Description
RuntimeError

If the SPK lookup fails at epc

Example
1
2
3
4
import brahe as bh

epc = bh.Epoch.from_datetime(2024, 3, 1, 0, 0, 0.0, 0.0, bh.UTC)
x_emr = bh.state_gcrf_to_emr(epc, [1e8, -2e8, 5e7, 1.0e3, -2.0e3, 0.5e3])

state_emr_to_gcrf builtin

state_emr_to_gcrf(epc: Epoch, x_emr: Union[ndarray, List]) -> ndarray

Transforms a Cartesian Earth-Moon Rotating (EMR) frame state (position and velocity) into the equivalent Cartesian GCRF state. Inverse of state_gcrf_to_emr.

Auto-initializes the default de440s ephemeris if no SPK kernel is loaded.

Parameters:

Name Type Description Default
epc Epoch

Epoch instant for computation of the transformation

required
x_emr ndarray or list

Cartesian EMR state [position (m), velocity (m/s)], shape (6,)

required

Returns:

Type Description
ndarray

numpy.ndarray: Cartesian GCRF state [position (m), velocity (m/s)], shape (6,)

Raises:

Type Description
RuntimeError

If the SPK lookup fails at epc

Example
1
2
3
4
5
import brahe as bh

epc = bh.Epoch.from_datetime(2024, 3, 1, 0, 0, 0.0, 0.0, bh.UTC)
x_emr = [3.8e8, 0.0, 0.0, 0.0, 1.0e3, 0.0]
x_gcrf = bh.state_emr_to_gcrf(epc, x_emr)

GCRF ↔ SER

rotation_gcrf_to_ser builtin

rotation_gcrf_to_ser(epc: Epoch) -> ndarray

Computes the rotation matrix from GCRF axes to Sun-Earth Rotating (SER) frame axes (NASA TP-20220014814 §4.6.4): x̂ Sun→Earth, ẑ along Earth's orbital angular momentum relative to the Sun.

Auto-initializes the default de440s ephemeris if no SPK kernel is loaded.

Parameters:

Name Type Description Default
epc Epoch

Epoch instant for computation of the transformation

required

Returns:

Type Description
ndarray

numpy.ndarray: 3x3 rotation matrix transforming GCRF -> SER axes

Raises:

Type Description
RuntimeError

If the SPK lookup fails at epc

Example
1
2
3
4
import brahe as bh

epc = bh.Epoch.from_datetime(2024, 3, 1, 0, 0, 0.0, 0.0, bh.UTC)
r = bh.rotation_gcrf_to_ser(epc)

rotation_ser_to_gcrf builtin

rotation_ser_to_gcrf(epc: Epoch) -> ndarray

Computes the rotation matrix from Sun-Earth Rotating (SER) frame axes to GCRF axes. Inverse of rotation_gcrf_to_ser.

Auto-initializes the default de440s ephemeris if no SPK kernel is loaded.

Parameters:

Name Type Description Default
epc Epoch

Epoch instant for computation of the transformation

required

Returns:

Type Description
ndarray

numpy.ndarray: 3x3 rotation matrix transforming SER -> GCRF axes

Raises:

Type Description
RuntimeError

If the SPK lookup fails at epc

Example
1
2
3
4
import brahe as bh

epc = bh.Epoch.from_datetime(2024, 3, 1, 0, 0, 0.0, 0.0, bh.UTC)
r = bh.rotation_ser_to_gcrf(epc)

position_gcrf_to_ser builtin

position_gcrf_to_ser(epc: Epoch, x_gcrf: Union[ndarray, List]) -> ndarray

Transforms a Cartesian GCRF position into the equivalent Sun-Earth Rotating (SER) frame position. The SER origin is the (computed) Sun-Earth barycenter.

Auto-initializes the default de440s ephemeris if no SPK kernel is loaded.

Parameters:

Name Type Description Default
epc Epoch

Epoch instant for computation of the transformation

required
x_gcrf ndarray or list

Cartesian GCRF position (m), shape (3,)

required

Returns:

Type Description
ndarray

numpy.ndarray: Cartesian SER position (m), shape (3,)

Raises:

Type Description
RuntimeError

If the SPK lookup fails at epc

Example
1
2
3
4
import brahe as bh

epc = bh.Epoch.from_datetime(2024, 3, 1, 0, 0, 0.0, 0.0, bh.UTC)
x_ser = bh.position_gcrf_to_ser(epc, [1e8, -2e8, 5e7])

position_ser_to_gcrf builtin

position_ser_to_gcrf(epc: Epoch, x_ser: Union[ndarray, List]) -> ndarray

Transforms a Cartesian Sun-Earth Rotating (SER) frame position into the equivalent Cartesian GCRF position. Inverse of position_gcrf_to_ser.

Auto-initializes the default de440s ephemeris if no SPK kernel is loaded.

Parameters:

Name Type Description Default
epc Epoch

Epoch instant for computation of the transformation

required
x_ser ndarray or list

Cartesian SER position (m), shape (3,)

required

Returns:

Type Description
ndarray

numpy.ndarray: Cartesian GCRF position (m), shape (3,)

Raises:

Type Description
RuntimeError

If the SPK lookup fails at epc

Example
1
2
3
4
import brahe as bh

epc = bh.Epoch.from_datetime(2024, 3, 1, 0, 0, 0.0, 0.0, bh.UTC)
x_gcrf = bh.position_ser_to_gcrf(epc, [1.5e11, 0.0, 0.0])

state_gcrf_to_ser builtin

state_gcrf_to_ser(epc: Epoch, x_gcrf: Union[ndarray, List]) -> ndarray

Transforms a Cartesian GCRF state (position and velocity) into the equivalent Sun-Earth Rotating (SER) frame state. The SER origin is the (computed) Sun-Earth barycenter; the velocity transform uses the exact rotation-matrix time derivative (including dẑ/dt) evaluated from SPK acceleration.

Auto-initializes the default de440s ephemeris if no SPK kernel is loaded.

Parameters:

Name Type Description Default
epc Epoch

Epoch instant for computation of the transformation

required
x_gcrf ndarray or list

Cartesian GCRF state [position (m), velocity (m/s)], shape (6,)

required

Returns:

Type Description
ndarray

numpy.ndarray: Cartesian SER state [position (m), velocity (m/s)], shape (6,)

Raises:

Type Description
RuntimeError

If the SPK lookup fails at epc

Example
1
2
3
4
import brahe as bh

epc = bh.Epoch.from_datetime(2024, 3, 1, 0, 0, 0.0, 0.0, bh.UTC)
x_ser = bh.state_gcrf_to_ser(epc, [1e8, -2e8, 5e7, 1.0e3, -2.0e3, 0.5e3])

state_ser_to_gcrf builtin

state_ser_to_gcrf(epc: Epoch, x_ser: Union[ndarray, List]) -> ndarray

Transforms a Cartesian Sun-Earth Rotating (SER) frame state (position and velocity) into the equivalent Cartesian GCRF state. Inverse of state_gcrf_to_ser.

Auto-initializes the default de440s ephemeris if no SPK kernel is loaded.

Parameters:

Name Type Description Default
epc Epoch

Epoch instant for computation of the transformation

required
x_ser ndarray or list

Cartesian SER state [position (m), velocity (m/s)], shape (6,)

required

Returns:

Type Description
ndarray

numpy.ndarray: Cartesian GCRF state [position (m), velocity (m/s)], shape (6,)

Raises:

Type Description
RuntimeError

If the SPK lookup fails at epc

Example
1
2
3
4
5
import brahe as bh

epc = bh.Epoch.from_datetime(2024, 3, 1, 0, 0, 0.0, 0.0, bh.UTC)
x_ser = [1.5e11, 0.0, 0.0, 0.0, 1.0e3, 0.0]
x_gcrf = bh.state_ser_to_gcrf(epc, x_ser)

GCRF ↔ GSE

rotation_gcrf_to_gse builtin

rotation_gcrf_to_gse(epc: Epoch) -> ndarray

Computes the rotation matrix from GCRF axes to Geocentric Solar Ecliptic (GSE) frame axes (NASA TP-20220014814 §2.5.4/§4.6.5): x̂ Earth→Sun, ẑ normal to the instantaneous ecliptic plane.

Auto-initializes the default de440s ephemeris if no SPK kernel is loaded.

Parameters:

Name Type Description Default
epc Epoch

Epoch instant for computation of the transformation

required

Returns:

Type Description
ndarray

numpy.ndarray: 3x3 rotation matrix transforming GCRF -> GSE axes

Raises:

Type Description
RuntimeError

If the SPK lookup fails at epc

Example
1
2
3
4
import brahe as bh

epc = bh.Epoch.from_datetime(2024, 3, 1, 0, 0, 0.0, 0.0, bh.UTC)
r = bh.rotation_gcrf_to_gse(epc)

rotation_gse_to_gcrf builtin

rotation_gse_to_gcrf(epc: Epoch) -> ndarray

Computes the rotation matrix from Geocentric Solar Ecliptic (GSE) frame axes to GCRF axes. Inverse of rotation_gcrf_to_gse.

Auto-initializes the default de440s ephemeris if no SPK kernel is loaded.

Parameters:

Name Type Description Default
epc Epoch

Epoch instant for computation of the transformation

required

Returns:

Type Description
ndarray

numpy.ndarray: 3x3 rotation matrix transforming GSE -> GCRF axes

Raises:

Type Description
RuntimeError

If the SPK lookup fails at epc

Example
1
2
3
4
import brahe as bh

epc = bh.Epoch.from_datetime(2024, 3, 1, 0, 0, 0.0, 0.0, bh.UTC)
r = bh.rotation_gse_to_gcrf(epc)

position_gcrf_to_gse builtin

position_gcrf_to_gse(epc: Epoch, x_gcrf: Union[ndarray, List]) -> ndarray

Transforms a Cartesian GCRF position into the equivalent Geocentric Solar Ecliptic (GSE) frame position. GSE is Earth-centered.

Auto-initializes the default de440s ephemeris if no SPK kernel is loaded.

Parameters:

Name Type Description Default
epc Epoch

Epoch instant for computation of the transformation

required
x_gcrf ndarray or list

Cartesian GCRF position (m), shape (3,)

required

Returns:

Type Description
ndarray

numpy.ndarray: Cartesian GSE position (m), shape (3,)

Raises:

Type Description
RuntimeError

If the SPK lookup fails at epc

Example
1
2
3
4
import brahe as bh

epc = bh.Epoch.from_datetime(2024, 3, 1, 0, 0, 0.0, 0.0, bh.UTC)
x_gse = bh.position_gcrf_to_gse(epc, [1e8, -2e8, 5e7])

position_gse_to_gcrf builtin

position_gse_to_gcrf(epc: Epoch, x_gse: Union[ndarray, List]) -> ndarray

Transforms a Cartesian Geocentric Solar Ecliptic (GSE) frame position into the equivalent Cartesian GCRF position. Inverse of position_gcrf_to_gse.

Auto-initializes the default de440s ephemeris if no SPK kernel is loaded.

Parameters:

Name Type Description Default
epc Epoch

Epoch instant for computation of the transformation

required
x_gse ndarray or list

Cartesian GSE position (m), shape (3,)

required

Returns:

Type Description
ndarray

numpy.ndarray: Cartesian GCRF position (m), shape (3,)

Raises:

Type Description
RuntimeError

If the SPK lookup fails at epc

Example
1
2
3
4
import brahe as bh

epc = bh.Epoch.from_datetime(2024, 3, 1, 0, 0, 0.0, 0.0, bh.UTC)
x_gcrf = bh.position_gse_to_gcrf(epc, [1.5e11, 0.0, 0.0])

state_gcrf_to_gse builtin

state_gcrf_to_gse(epc: Epoch, x_gcrf: Union[ndarray, List]) -> ndarray

Transforms a Cartesian GCRF state (position and velocity) into the equivalent Geocentric Solar Ecliptic (GSE) frame state. GSE is Earth-centered; the velocity transform uses the exact rotation-matrix time derivative (including dẑ/dt) evaluated from SPK acceleration.

Auto-initializes the default de440s ephemeris if no SPK kernel is loaded.

Parameters:

Name Type Description Default
epc Epoch

Epoch instant for computation of the transformation

required
x_gcrf ndarray or list

Cartesian GCRF state [position (m), velocity (m/s)], shape (6,)

required

Returns:

Type Description
ndarray

numpy.ndarray: Cartesian GSE state [position (m), velocity (m/s)], shape (6,)

Raises:

Type Description
RuntimeError

If the SPK lookup fails at epc

Example
1
2
3
4
import brahe as bh

epc = bh.Epoch.from_datetime(2024, 3, 1, 0, 0, 0.0, 0.0, bh.UTC)
x_gse = bh.state_gcrf_to_gse(epc, [1e8, -2e8, 5e7, 1.0e3, -2.0e3, 0.5e3])

state_gse_to_gcrf builtin

state_gse_to_gcrf(epc: Epoch, x_gse: Union[ndarray, List]) -> ndarray

Transforms a Cartesian Geocentric Solar Ecliptic (GSE) frame state (position and velocity) into the equivalent Cartesian GCRF state. Inverse of state_gcrf_to_gse.

Auto-initializes the default de440s ephemeris if no SPK kernel is loaded.

Parameters:

Name Type Description Default
epc Epoch

Epoch instant for computation of the transformation

required
x_gse ndarray or list

Cartesian GSE state [position (m), velocity (m/s)], shape (6,)

required

Returns:

Type Description
ndarray

numpy.ndarray: Cartesian GCRF state [position (m), velocity (m/s)], shape (6,)

Raises:

Type Description
RuntimeError

If the SPK lookup fails at epc

Example
1
2
3
4
5
import brahe as bh

epc = bh.Epoch.from_datetime(2024, 3, 1, 0, 0, 0.0, 0.0, bh.UTC)
x_gse = [1.5e11, 0.0, 0.0, 0.0, 1.0e3, 0.0]
x_gcrf = bh.state_gse_to_gcrf(epc, x_gse)

See Also