Skip to content

HCW Dynamics

Hill-Clohessy-Wiltshire (HCW) relative motion dynamics.

Provides the state derivative for linearised relative motion about a circular reference orbit. The HCW equations describe a deputy satellite's motion relative to a chief on a circular Keplerian orbit in the chief's RTN frame.

The unforced equations of motion are:

.. math::

\ddot{x} &=  3n^2 x + 2n\dot{y} \\
\ddot{y} &= -2n\dot{x} \\
\ddot{z} &= -n^2 z

where n is the mean motion of the chief's circular orbit and (x, y, z) are the RTN components of relative position.

All inputs and outputs use SI base units (metres, metres/second, radians/second).

References
  1. W. H. Clohessy and R. S. Wiltshire, "Terminal Guidance System for Satellite Rendezvous", Journal of the Aerospace Sciences, vol. 27, no. 9, pp. 653-658, 1960.
  2. D. Vallado, Fundamentals of Astrodynamics and Applications (4th Ed.), Microcosm Press, 2013, sec. 6.8.

hcw_derivative(state, n)

Compute the HCW state derivative for unforced relative motion.

This is a pure function suitable for use with any numerical integrator. It is compatible with jax.jit, jax.vmap, and jax.grad.

Parameters:

Name Type Description Default
state ArrayLike

6-element relative state in RTN [x, y, z, x_dot, y_dot, z_dot]. Units: m, m/s.

required
n ArrayLike

Mean motion of the chief orbit. Units: rad/s.

required

Returns:

Type Description
Array

6-element state derivative [x_dot, y_dot, z_dot, x_ddot, y_ddot, z_ddot]. Units: m/s, m/s^2.

Examples:

import jax.numpy as jnp
from astrojax.relative_motion import hcw_derivative
from astrojax.constants import GM_EARTH, R_EARTH
sma = R_EARTH + 500e3
n = jnp.sqrt(GM_EARTH / sma**3)
state = jnp.array([100.0, 0.0, 0.0, 0.0, 0.0, 0.0])
deriv = hcw_derivative(state, n)
float(deriv[3])  # x_ddot = 3 n^2 x

hcw_stm(t, n, use_degrees=False)

Compute the analytical HCW state transition matrix.

Returns the 6x6 matrix :math:\Phi(t) that maps an initial relative state to the state at elapsed time t:

.. math::

\mathbf{x}(t) = \Phi(t)\,\mathbf{x}_0

The state vector is ordered [x, y, z, x_dot, y_dot, z_dot] in the chief RTN frame with SI units (metres, metres/second).

Parameters:

Name Type Description Default
t ArrayLike

Elapsed time since the initial state. Units: s.

required
n ArrayLike

Mean motion of the chief orbit. Units: rad/s (or deg/s when use_degrees=True).

required
use_degrees bool

If True, interpret n as degrees/second.

False

Returns:

Type Description
Array

The 6x6 state transition matrix :math:\Phi(t).

Examples:

import jax.numpy as jnp
from astrojax.constants import GM_EARTH, R_EARTH
from astrojax.relative_motion import hcw_stm

sma = R_EARTH + 500e3
n = jnp.sqrt(GM_EARTH / sma**3)
state0 = jnp.array([100.0, 0.0, 0.0, 0.0, 0.0, 0.0])
state_t = hcw_stm(600.0, n) @ state0