Skip to main content

Orbit determination

·446 words·3 mins
Adrien Raimbault
Author
Adrien Raimbault

Orbit Determination
#

In this post, I’ll dive into orbit determination — the science of estimating the position and velocity of a satellite in space. This is part of my ongoing research and contributions to an open-source project called Nyx, a Rust-based astrodynamics toolkit.

Why Is Orbit Determination Important?
#

Orbit determination is essential for space missions. It allows us to track and predict the movement of satellites using measurements from ground stations. The “state” of a satellite includes its position and velocity — both of which are needed to determine its orbit.


Satellite Position
#

Definition
#

The satellite’s position is defined by a position vector — a 3D vector from the center of the Earth to the satellite. It’s typically expressed in the Earth-Centered Inertial (ECI) frame, which considers Earth’s rotation.

To determine this vector, we often rely on three observational measurements from ground stations:

  • Azimuth: The angle between the satellite and the North, measured clockwise (in degrees).
  • Elevation: The angle between the satellite and the horizon (in degrees).
  • Range: The straight-line distance between the ground station and the satellite (in kilometers).

These values are obtained via radio signals. The round-trip time of the signal gives us the range, assuming the speed of light is constant.

Azimuth and Elevation Diagram

Figure 1: Azimuth and elevation of a satellite. Source


Example Calculation
#

Let’s say our satellite is located at point A(-2.8, 4.13, 4). Using measured azimuth, elevation, and range, we can derive this position with trigonometry:

Given:

  • Distance = 6.39 km
  • Elevation = 38.74°
  • Azimuth = 235.86°

Altitude (z-axis)
#

let distance = 6.39;
let elevation = 38.74;
let altitude = distance * elevation.to_radians().sin();

Result: altitude ≈ 3.99 km (close to actual z = 4)

x Coordinate
#

let azimuth = 235.86;
let x = distance * elevation.to_radians().cos() * azimuth.to_radians().sin();

Result: x ≈ -2.8 km

y Coordinate
#

let azimuth = 63.26;
let y = distance * azimuth.to_radians().cos() * elevation.to_radians().cos();

Result: y ≈ 4.13 km

This shows how trigonometric relations using elevation and azimuth angles help convert observations into position vectors.

Position Calculation Diagram

Figure 2: Visual representation of satellite position derived from measurements.

Azimuth and Elevation with Doppler

Figure 3: Observing satellite position and velocity using azimuth, elevation, and Doppler effect.


Satellite Velocity
#

Doppler Effect
#

The Doppler effect is the change in frequency of a wave due to the relative motion between the transmitter (satellite) and the receiver (ground station). When a satellite moves toward a ground station, the received frequency increases; when it moves away, the frequency decreases.

This shift can be used to determine radial velocity — the component of velocity along the line of sight. By combining Doppler measurements with position data, we can compute the full velocity vector.

(WIP)