HCW Propagation

Top  Previous  Next

The Hill-Clohessy-Wiltshire (HCW) equations of motion are a simplified model for the orbital relative motion of a secondary Spacecraft with respect to a primary Spacecraft. The HCW equations of motion assume that the primary Spacecraft is in a circular orbit around a point mass central body and the secondary Spacecraft is orbiting close to the primary Spacecraft. A Spacecraft's relative motion modeling through time is accomplished in FreeFlyer via a Propagator object using the HCW motions of equation.

 

Image of HCW Relative Motion Propagation

Image of HCW Relative Motion Propagation

 

 

Background


The HCW equations of motion are defined based on G.W. Hill's1 initial equations for the motion of relative objects in orbit and W.H. Clohessy & R.S Wiltshire's2 linearization of those equations. The equations of motion have been used to design various relative motion models for the relative motion between two satellites. These equations do not account for any disturbance forces, such as non-point-mass gravitational perturbations or environmental forces (atmospheric drag and solar radiation pressure).

 

The HCW equations of motion are only applicable when two general conditions are met:

 

The distance between the secondary Spacecraft and the primary Spacecraft is small when compared to the distance between the primary Spacecraft and both Spacecraft's shared central body.

The leader Spacecraft's orbit is circular.

 

 

Using the HCW Propagator


The HCW propagator is a Propagator object type that uses the HCW equations of motion to propagate a Spacecraft object forward in time. HCW propagation is always referenced against a specified Cartesian or curvilinear coordinate set and additionally requires an initial orbit reference from which to begin the HCW formulation.

 

Object Editor Approach

To configure a Spacecraft to use HCW equations, you can define the HCW Integrator on the Spacecraft's Propagator page within the object browser. The HCW propagator requires an initial reference orbit definition using Keplerian elements and a selected coordinate set to propagate.

 

 

FreeFlyer Scripting Approach

A Spacecraft can also be configured to use HCW equations using the FreeForm script editor. To define a HCW propagator in FreeFlyer script, specify the propagator type as shown in the example below.

 

Spacecraft Spacecraft1;

 

// Set the Propagator to use HCW Equations

Spacecraft1.SetPropagatorType(TypeOf(HCW));

 

Reference Orbit

The reference orbit is the orbit of the primary Spacecraft used when propagating a secondary Spacecraft using the HCW (Hills-Clohessy-Wiltshire) equations of relative motion. The reference orbit is specified in Keplerian elements with respect to the ICRF frame. The reference orbit can also be initialized using another Spacecraft's Keplerian state. Once the reference orbit is set, it will be propagated using a Two Body (Keplerian) propagator when the Spacecraft is stepped.

 

To set the reference orbit, use the numeric text entry fields shown in the image above, or set the reference orbit via FreeFlyer script using the following syntax:

 

Spacecraft1.SetPropagatorType(TypeOf(HCW));

 

TimeSpan RefEpoch = "Jan 01 2020 00:00:00.000000000".ParseCalendarDate();

Array RefKeplerianState = {7088.44 /*Semi-major axis*/, 1.54 /* Eccentricity*/, 98.23 /*Inclination*/, 301.98 /*RAAN*/, 171.13 /*W*/, 23.64 /*TA*/};

 

Alias HCWprop = (Spacecraft1.Propagator AsType HCW);

 

// Three different options for setting the Reference Orbit

// Set the HCW Reference Orbit using a Spacecraft

HCWprop.SetReferenceOrbit(Spacecraft1);

 

// --OR--

// Set the HCW Reference Orbit using a Keplerian State (A, E, I, RAAN, W, TA)

HCWprop.SetReferenceOrbit(RefKeplerianState);

 

// --OR--

// Set the HCW Reference Orbit using a Keplerian State with a Reference Epoch

HCWprop.SetReferenceOrbit(RefKeplerianState, RefEpoch);

 

Coordinate Set to Propagate

The HCW propagator uses one of three attitude reference frame sets for propagation of the HCW equations of motion. The default propagation set used is the RIC Cartesian coordinates, which is considered the classical HCW formulation. The curvilinear RIC Cylindrical or RIC Spherical relative elements can also be propagated, with the possibility to achieve more accurate results, using the same HCW equations. The HCW.CoordinateSetToPropagate property does not affect the element type used to propagate the reference orbit, which is the Keplerian element type.

 

To set the coordinate set to propagate, use the drop down menu shown in the image above, or set the property via FreeFlyer script using the following syntax:

 

// Propagate the Cartesian Coordinate Set;

(Spacecraft1.Propagator AsType HCW).CoordinateSetToPropagate = 0; 

 

 

Manuever Modeling with the HCW Propagator


The HCW propagator can be used with an ImpulsiveBurn using the Maneuver command. In addition, FreeFlyer provides the ability to predict the required delta-v and future relative state of a Spacecraft using the RelativeMotionUtilities object ComputeDeltaVHCW() method.

 

 

Example: Propagate with HCW


In this example, the HCW equations are used to propagate a secondary Spacecraft that has an initial relative position of 10 km in the primary Spacecraft's Z-axis. The secondary Spacecraft is configured to use the HCW propagator with the primary Spacecraft as the reference orbit.

 

Spacecraft primarySC;

Spacecraft secondarySC;

 

Array relativeState = {0, 0, 10}; // km

 

// Set the Primary Spacecraft to use a TwoBody propagator

primarySC.SetPropagatorType(TypeOf(TwoBody));

 

// Set the Secondary Spacecraft HCW propagator and Reference Orbit

secondarySC.SetPropagatorType(TypeOf(HCW));

(secondarySC.Propagator AsType HCW).SetReferenceOrbit(primarySC);

 

// Set the Secondary Spacecraft Relative Cartesian Position

secondarySC.SetRelativeCartesianPosition(primarySC, relativeState);

 

// Propagate using HCW Relative Moiton equations for 4 hours

While (primarySC.ElapsedTime < TimeSpan.FromHours(4));

 

      Step primarySC;

      Step secondarySC to (secondarySC.Epoch == primarySC.Epoch);

 

End;

 

 

Example: Maneuver with HCW


In this example, the HCW equations are used by the Relative Motion Utility to predict the implementation of an impulsive burn. The burn is executed in the secondary Spacecraft's ICRF frame using the predicted burn direction. The Maneuver Command can also generate a maneuver report. This report includes the pre- and post-maneuver states of the Spacecraft as well as burn durations, vector deltas, and Tank and Thruster data if applicable.

 

Spacecraft secondarySC;

Spacecraft primarySC;

 

Array futurePosition = {0,0,100}; // km

Array predictedDV[3];

 

TimeSpan deltaT = TS(1 hours);

 

// Set the Primary Spacecraft to use a TwoBody propagator

primarySC.SetPropagatorType(TypeOf(TwoBody));

 

// Set the Secondary Spacecraft HCW propagator and Reference Orbit

secondarySC.SetPropagatorType(TypeOf(HCW));

(secondarySC.Propagator AsType HCW).SetReferenceOrbit(primarySC);

 

// Compute the Delta-V in the Secondary Spacecraft’s ICRF frame

predictedDV = RelativeMotionUtilities.ComputeDeltaVHCW(secondarySC, primarySC, futurePosition, deltaT, 0 /* ICRF */);

 

ImpulsiveBurn ImpulsiveBurn1;

 

ImpulsiveBurn1.AttitudeSystem = 0; // ICRF

ImpulsiveBurn1.BurnDirection = predictedDV; // km/s

 

Maneuver secondarySC using ImpulsiveBurn1 generating "ImpulsiveBurn.txt";

 

TimeSpan futureTime = secondarySC.Epoch + deltaT;

 

// Step Spacecraft to future epoch

Step secondarySC to (secondarySC.Epoch == futureTime);

Step primarySC to (primarySC.Epoch == futureTime);

 

// Report the Predicted Future Position and Actual Future Position

Report futurePosition, secondarySC.GetRelativeCartesianPosition(primarySC, 0);

 

Output File: "ImpulsiveBurn.txt"

 

 

References:


1. Hill, G.W.: Researches in Lunar Theory. Am. J. Math. 1, 5–26, 1878.

2. Clohessy, W.H. and Wiltshire, R.S., Terminal Guidance System for Satellite Rendezvous. J. Aerosp. Sci. 27(9), 653–674, 1960.

 

 

See Also


Integrator Properties and Methods

Type Casting

Object Constructors

Working with Objects