Skip to content

Coordinate Reference Frames

The satkit.frame enum identifies a coordinate reference frame throughout the satkit API — most visibly in the maneuver, thrust, uncertainty, and frame-transform functions. Frames are passed by value, e.g.:

import satkit as sk

sat.add_maneuver(t_burn, [0, 10, 0], frame=sk.frame.RTN)
sat.set_pos_uncertainty(sigma, frame=sk.frame.LVLH)
dcm = sk.frametransform.to_gcrf(sk.frame.NTW, pos, vel)

Supported values

Name Type Description
GCRF Inertial Geocentric Celestial Reference Frame — the default inertial frame
ITRF Earth-fixed International Terrestrial Reference Frame
TEME Quasi-inertial True Equator Mean Equinox (SGP4 output)
CIRS Intermediate Celestial Intermediate Reference System
TIRS Intermediate Terrestrial Intermediate Reference System
EME2000 Inertial Earth Mean Equator 2000 (J2000 inertial)
ICRF Inertial International Celestial Reference Frame
LVLH Satellite-local Local Vertical / Local Horizontal (z = nadir)
RTN Satellite-local Radial / Tangential / Normal (CCSDS OEM convention)
RSW Alias Alias for RTN — Vallado's name for the same frame
RIC Alias Alias for RTN — older NASA / Clohessy-Wiltshire name
NTW Satellite-local Normal / Tangent / Cross-track (velocity-aligned)

frame.RSW and frame.RIC are class-level aliases that resolve to the same enum value as frame.RTN, so sk.frame.RSW == sk.frame.RTN is True and all three can be used interchangeably.

See the Theory: Maneuver Coordinate Frames guide for a side-by-side comparison of the four satellite-local frames (RTN, NTW, LVLH, GCRF) and guidance on when to use each.

Enum reference

frame

Coordinate reference frame

Used to specify the frame for thrust vectors and maneuvers.

Available frames:

  • GCRF - Geocentric Celestial Reference Frame (inertial)
  • ITRF - International Terrestrial Reference Frame (Earth-fixed)
  • TEME - True Equator Mean Equinox (SGP4 output frame)
  • CIRS - Celestial Intermediate Reference System
  • TIRS - Terrestrial Intermediate Reference System
  • EME2000 - Earth Mean Equator 2000
  • ICRF - International Celestial Reference Frame
  • LVLH - Local Vertical Local Horizontal: z = -r (nadir), y = -h (opposite angular momentum), x completes right-handed system
  • RTN - Radial / Tangential / Normal (CCSDS OEM convention; also exposed as RSW and RIC aliases for Vallado / older-NASA naming): R = radial (outward), T = tangential (in-track), N = normal (cross-track)
  • NTW - Normal-to-velocity / Tangent / Cross-track (velocity-aligned): T = along velocity, N = in-plane perpendicular to v, W = cross-track

Example:

import satkit as sk

# Use RTN frame for in-track thrust (RSW and RIC are aliases and work too)
t = sk.thrust.constant([0, 1e-4, 0], t0, t1, frame=sk.frame.RTN)

GCRF class-attribute

Geocentric Celestial Reference Frame (inertial)

ITRF class-attribute

International Terrestrial Reference Frame (Earth-fixed)

TEME class-attribute

True Equator Mean Equinox

CIRS class-attribute

Celestial Intermediate Reference System

TIRS class-attribute

Terrestrial Intermediate Reference System

EME2000 class-attribute

Earth Mean Equator 2000

ICRF class-attribute

International Celestial Reference Frame

LVLH class-attribute

Local Vertical Local Horizontal — the classical crewed-spaceflight / GN&C body-pointing frame used on the ISS and most Earth-pointing vehicles.

  • z axis: -r (nadir, pointing toward Earth center)
  • y axis: -h (opposite orbital angular momentum, h = r × v)
  • x axis: completes right-handed system (approximately velocity direction for circular orbits)

Geometrically spans the same orbital plane as frame.RTN but with different labels and sign conventions:

  • LVLH +x = RTN +T (in-track; perpendicular to R, not strictly along v)
  • LVLH -z = RTN +R (radial outward)
  • LVLH -y = RTN +N (cross-track)

Supported as a maneuver frame — useful when porting GN&C code written in LVLH body-frame conventions. For eccentric orbits, note that LVLH +x is perpendicular to the position vector, not the velocity vector; for strict along-velocity semantics use frame.NTW instead.

RTN class-attribute

Radial / Tangential / Normal — CCSDS OEM/OMM/ODM convention.

Also known as RSW (Vallado) or RIC (older NASA / Clohessy- Wiltshire literature). The three names refer to the same axes; Python-level aliases frame.RSW and frame.RTN resolve to the same enum value as frame.RTN, so all three compare equal and can be used interchangeably.

  • R (radial): unit vector along position (outward from Earth center)
  • T (tangential / in-track): perpendicular to R in the orbit plane, in the prograde direction. Not strictly along velocity for eccentric orbits — for "along velocity" semantics use frame.NTW instead.
  • N (normal / cross-track): along angular momentum (h = r × v)

This is the standard choice for CCSDS OEM/OMM covariance messages, for relative-motion (Hill / Clohessy-Wiltshire) equations, and for radial/normal burn components whose physical meaning is tied to the position vector.

RSW class-attribute

Alias for frame.RTN — Vallado's name for the same orbital frame (Radial / S=Ŵ×R̂ / W=ĥ). frame.RSW == frame.RTN is True. See [RTN][frame.RTN] for the axis definition.

RIC class-attribute

Alias for frame.RTN — the older NASA / Clohessy-Wiltshire name (Radial / In-track / Cross-track). frame.RIC == frame.RTN is True. Kept for backward compatibility with code written against earlier satkit versions where RIC was the canonical name. See [RTN][frame.RTN] for the axis definition.

NTW class-attribute

Velocity-aligned orbital frame (Vallado §3.3).

  • N (in-plane normal to velocity): T̂ × Ŵ. For a circular orbit this coincides with the outward radial direction; for eccentric orbits it leans off-radial by the flight-path angle.
  • T (tangent): v̂, unit velocity vector
  • W (cross-track): (r × v) / |r × v|, same as RTN's N axis

The natural frame for prograde/retrograde maneuvers: a pure +T delta-v of magnitude Δv adds exactly Δv to |v|, regardless of orbit eccentricity.