Guidance, Navigation and Control · Theory · M11
M11-T2 — Relative Motion and Rendezvous
Near a circular orbit, the motion of one spacecraft relative to another is a linear system with a surprise in it: pushing up makes you drift backward.
Rendezvous is a guidance problem in a frame where intuition fails. Two spacecraft in nearby circular orbits move relative to each other under gravity and the rotation of the frame in which their separation is measured, and the result is a linear system, the Clohessy-Wiltshire (Hill) equations, with closed-form solutions. This lesson derives them, shows that a radial offset produces an along-track drift of 12π times the offset per orbit, plans a two-impulse transfer from 1000 m behind a target to a hold point 20 m behind, checks it against the nonlinear two-body motion, and gives the cost of a straight-line approach.
Learning objectives
After this lesson, you should be able to:
- State the Clohessy-Wiltshire equations and their closed-form state transition matrix.
- Explain the drift of a chaser from a radial offset and the condition for bounded relative motion.
- Plan a two-impulse transfer between two points of the relative frame and find its delta-v against the transfer time.
- Say how far the linear equations remain accurate.
The intuition
UAV M5-T4: Quaternion-based orientation treats the attitude of a vehicle; M11-T1: Orbits for Guidance: Elements, Energy and Delta-v gave the orbit of one spacecraft. Rendezvous asks about two: where is the chaser relative to the target, and what burn takes it to a chosen point? Hopper's landing is a rendezvous with a pad in a uniform gravity field; the orbital version is stranger, because the frame rotates.
The frame and the equations
Fix a frame to the target on a circular orbit: x radially outward, y along the direction of motion, z out of the plane. The target's mean motion is (1.131×10⁻³ rad/s at 400 km, a period of 92.6 min). For a chaser close to the target (distance much smaller than the orbit radius), subtracting the two gravity fields and including the Coriolis and centrifugal terms of the rotating frame gives a linear system with constant coefficients:
, , . These are the Clohessy-Wiltshire equations. The out-of-plane motion is a separate oscillator at the orbital rate.
The counter-intuitive drift
A chaser 100 m above the target with no relative velocity does not stay there or fall toward the target. After one orbit it is back at the same height but 3770 m behind: per orbit. The reason is energy: at the higher radius the chaser has the target's speed but not the circular speed for that radius, so it falls into a different orbit with a different period. Bounded relative motion needs an along-track velocity of (−0.226 m/s for 100 m): then the chaser moves on a 2:1 ellipse and returns to its start.
A transfer
Given the initial relative state and a time , the equations are solved for the impulse that takes the chaser to a chosen position. Starting 1000 m behind and arriving at a hold point 20 m behind in half an orbit (46 min) needs a first burn of 0.277 m/s radially (down) and a second burn of the same size to stop: 0.554 m/s in total. Longer transfers are cheaper: a quarter orbit costs 1.51 m/s, three quarters 0.22 and a full orbit 0.12 m/s. The path swings 245 m below the target's orbit.
How far the linear equations hold
Checked against the nonlinear two-body equations after half an orbit, the difference is 0.20 m for a 100 m separation, 1.5 m for 1 km and 145 m for 10 km: the error grows as the square of the separation. The approximation is excellent for approach manoeuvres inside a few kilometres.
Near a circular orbit the relative motion is linear. A radial offset drifts you backward by 12π times the offset each orbit, bounded motion needs ẏ = −2nx, and a transfer between two relative positions has a closed-form delta-v that falls as the time grows.
Definitions
- Target frame (LVLH)
- Local vertical, local horizontal: x radially outward, y along the target's velocity, z along the orbit normal (completing the set).
- Mean motion
- of the target's circular orbit.
- Clohessy-Wiltshire (Hill) equations
- The linearized relative equations of motion in the target frame for a chaser near a circular orbit.
- V-bar, R-bar
- The lines along the target's velocity ( axis) and along its radius ( axis) used for approach.
- Hold point
- A point near the target at which the chaser stops relative to it before the final approach.
Derivation: the equations, the drift and the transfer
The relative acceleration in the rotating frame.
The difference of the gravitational accelerations of chaser and target in the inertial frame (no thrust).
Expand about the target for a separation much smaller than the orbit radius, to first order.
Transform to the frame rotating at : Coriolis and centrifugal terms appear on the left.
Use and write out the components: the CW equations.
The drift
The along-track solution for a pure radial offset.
After one orbit and : the chaser has drifted backward for an offset above the target (for m: 3770 m).
The secular term in y is , which vanishes when : the 2:1 ellipse of bounded relative motion.
The two-impulse transfer
The position at time t from the position and the velocity just after the first burn: and are the 2 × 2 blocks of the solution above.
Solve for the velocity that arrives at the target position . The first impulse is this minus the initial velocity; the second is minus the arrival velocity (to stop).
The two costs; they are equal here by the symmetry of the transfer.
The CW equations are the linearization of two-body gravity in a rotating frame. Their solution makes a transfer a 2 × 2 linear solve, and shows that along-track position is the quantity that drifts, at a rate set by the energy difference.
A worked example
A target on a circular 400 km orbit ( rad/s, period 92.56 min).
- Drift. A chaser 100 m above the target with no relative velocity is at +100.00 m radially and −3769.9 m along-track after one orbit (the formula gives −3769.9 m).
- Bounded motion. With the along-track speed −0.2263 m/s (= −2nx₀) the drift disappears: after one orbit the chaser is at (+100.00, +0.00) m.
- Transfer. From 1000 m behind (at rest relative to the target) to 20 m behind: transfer time 0.25, 0.5, 0.75, 1.0, 1.5 orbits give total delta-v 1.508, 0.554, 0.224, 0.118, 0.554 m/s (23, 46, 69, 93, 139 min). The half-orbit transfer: first burn (−0.277, 0.000) m/s in (radial, along-track), a radial swing of 245 m.
- Nonlinear check. After half an orbit with a 0.5 m/s radial kick, the CW prediction differs from the full two-body motion by 0.20 m (100 m separation), 1.53 m (1 km) and 145 m (10 km).
- Straight-line approach. Holding a constant closing speed along the velocity bar needs a radial acceleration of 2.26×10⁻⁴ m/s² (23 µg) at 0.1 m/s, 1.13×10⁻³ (115 µg) at 0.5 m/s and 2.26×10⁻³ (231 µg) at 1.0 m/s. Closing 980 m takes 163, 33 and 16 min, and the braking delta-v is about the closing speed.
import math
import gnckit as g
MU, RE = 3.986004418e14, 6378137.0
R0 = RE + 400e3
n = math.sqrt(MU / R0 ** 3)
Torb = 2 * math.pi / n
print(f'target on a circular 400 km orbit: mean motion n = {n:.4e} rad/s, period {Torb / 60:.2f} min')
def cw_phi(t):
"""Clohessy-Wiltshire state transition for (x radial up, y along track, xdot, ydot); the out-of-plane motion is a separate oscillator."""
s, c = math.sin(n * t), math.cos(n * t)
Prr = [[4 - 3 * c, 0.0], [6 * (s - n * t), 1.0]]
Prv = [[s / n, 2 * (1 - c) / n], [2 * (c - 1) / n, (4 * s - 3 * n * t) / n]]
Pvr = [[3 * n * s, 0.0], [6 * n * (c - 1), 0.0]]
Pvv = [[c, 2 * s], [-2 * s, 4 * c - 3]]
return Prr, Prv, Pvr, Pvv
def propagate(r0, v0, t):
Prr, Prv, Pvr, Pvv = cw_phi(t)
r = [sum(Prr[i][j] * r0[j] for j in range(2)) + sum(Prv[i][j] * v0[j] for j in range(2)) for i in range(2)]
v = [sum(Pvr[i][j] * r0[j] for j in range(2)) + sum(Pvv[i][j] * v0[j] for j in range(2)) for i in range(2)]
return r, v
print('Drift from a radial offset: a chaser 100 m above the target with no relative velocity')
r, v = propagate([100.0, 0.0], [0.0, 0.0], Torb)
print(f' after one orbit the radial offset is {r[0]:+.2f} m and the along-track position {r[1]:+.1f} m (formula -12 pi x0 = {-12 * math.pi * 100:.1f} m per orbit)')
v0 = [0.0, -2 * n * 100.0]
r, v = propagate([100.0, 0.0], v0, Torb)
print(f' with the along-track speed {v0[1]:+.4f} m/s (= -2 n x0) the drift disappears: after one orbit ({r[0]:+.2f}, {r[1]:+.2f}) m, and the motion is a 2:1 ellipse')
print('Two-impulse transfer from 1000 m behind the target (y = -1000 m, x = 0, at rest relative to it) to a hold point 20 m behind:')
rinit, rfin = [0.0, -1000.0], [0.0, -20.0]
def two_impulse(t):
Prr, Prv, Pvr, Pvv = cw_phi(t)
rhs = [rfin[i] - sum(Prr[i][j] * rinit[j] for j in range(2)) for i in range(2)]
v1 = g.mat_solve(Prv, rhs) # the velocity just after the first burn
rr, vv = propagate(rinit, v1, t)
dv1 = math.hypot(*v1)
dv2 = math.hypot(-vv[0], -vv[1]) # stop at the hold point
return dv1, dv2, v1, vv
print(' transfer time (fraction of an orbit) dv1 (m/s) dv2 (m/s) total (m/s) time (min)')
for frac in (0.25, 0.5, 0.75, 1.0, 1.5):
t = frac * Torb
dv1, dv2, v1, vv = two_impulse(t)
print(f' {frac:5.2f} {dv1:9.3f} {dv2:9.3f} {dv1 + dv2:10.3f} {t / 60:9.1f}')
dv1, dv2, v1, vv = two_impulse(0.5 * Torb)
print(f' half-orbit transfer: first burn ({v1[0]:+.3f}, {v1[1]:+.3f}) m/s in (radial, along-track); the path swings {max(abs(propagate(rinit, v1, k * Torb / 100)[0][0]) for k in range(51)):.0f} m radially')
print('Check against the nonlinear two-body motion (target on a circular orbit, chaser started from the same relative state):')
def two_body(state, dt):
def f(t, s):
r_ = math.hypot(s[0], s[1])
return [s[2], s[3], -MU * s[0] / r_ ** 3, -MU * s[1] / r_ ** 3]
return g.rk4_step(f, 0.0, state, dt)
def to_lvlh(tgt, cha, ang):
"""Relative position in the frame x = radial of the target, y = along its track (forward)."""
dx, dy = cha[0] - tgt[0], cha[1] - tgt[1]
ux, uy = tgt[0] / math.hypot(tgt[0], tgt[1]), tgt[1] / math.hypot(tgt[0], tgt[1])
return dx * ux + dy * uy, -dx * uy + dy * ux
for sep in (100.0, 1000.0, 10000.0):
# target at angle 0, speed along +y; the chaser is sep m behind along the track (y negative in the local frame)
tgt = [R0, 0.0, 0.0, math.sqrt(MU / R0)]
ang = -sep / R0
cha = [R0 * math.cos(ang), R0 * math.sin(ang), -math.sin(ang) * math.sqrt(MU / R0) , math.cos(ang) * math.sqrt(MU / R0)]
# give the chaser a 0.5 m/s radial kick so that the motion is not trivial
cha[2] += 0.5 * math.cos(ang); cha[3] += 0.5 * math.sin(ang)
t = 0.0; dt = 2.0
# CW initial relative state
rel0 = to_lvlh(tgt, cha, 0.0)
cw_r0 = [rel0[0], rel0[1]]
cw_v0 = [0.5, 0.0]
while t < 0.5 * Torb:
tgt = two_body(tgt, dt); cha = two_body(cha, dt); t += dt
nl = to_lvlh(tgt, cha, 0.0)
cw, _ = propagate(cw_r0, cw_v0, t)
print(f' separation {sep:7.0f} m, half an orbit: nonlinear ({nl[0]:+9.2f}, {nl[1]:+10.2f}) m, CW ({cw[0]:+9.2f}, {cw[1]:+10.2f}) m, difference {math.hypot(nl[0] - cw[0], nl[1] - cw[1]):8.2f} m')
print('Straight-line approach along the velocity bar (V-bar) at constant closing speed:')
for vc in (0.1, 0.5, 1.0):
ax = 2 * n * vc
print(f' closing speed {vc:3.1f} m/s: radial acceleration needed to hold the line a_x = 2 n v = {ax:.2e} m/s2 ({ax / 9.80665 * 1e6:.0f} micro-g); time to close 980 m: {980 / vc / 60:6.1f} min; braking delta-v about {vc:.1f} m/s')target on a circular 400 km orbit: mean motion n = 1.1314e-03 rad/s, period 92.56 min Drift from a radial offset: a chaser 100 m above the target with no relative velocity after one orbit the radial offset is +100.00 m and the along-track position -3769.9 m (formula -12 pi x0 = -3769.9 m per orbit) with the along-track speed -0.2263 m/s (= -2 n x0) the drift disappears: after one orbit (+100.00, +0.00) m, and the motion is a 2:1 ellipse Two-impulse transfer from 1000 m behind the target (y = -1000 m, x = 0, at rest relative to it) to a hold point 20 m behind: transfer time (fraction of an orbit) dv1 (m/s) dv2 (m/s) total (m/s) time (min) 0.25 0.754 0.754 1.508 23.1 0.50 0.277 0.277 0.554 46.3 0.75 0.112 0.112 0.224 69.4 1.00 0.059 0.059 0.118 92.6 1.50 0.277 0.277 0.554 138.8 half-orbit transfer: first burn (-0.277, +0.000) m/s in (radial, along-track); the path swings 245 m radially Check against the nonlinear two-body motion (target on a circular orbit, chaser started from the same relative state): separation 100 m, half an orbit: nonlinear ( -0.74, -1867.91) m, CW ( -0.60, -1867.76) m, difference 0.20 m separation 1000 m, half an orbit: nonlinear ( -1.04, -2767.91) m, CW ( -1.11, -2766.38) m, difference 1.53 m separation 10000 m, half an orbit: nonlinear ( -10.69, -11767.90) m, CW ( -52.23, -11628.60) m, difference 145.36 m Straight-line approach along the velocity bar (V-bar) at constant closing speed: closing speed 0.1 m/s: radial acceleration needed to hold the line a_x = 2 n v = 2.26e-04 m/s2 (23 micro-g); time to close 980 m: 163.3 min; braking delta-v about 0.1 m/s closing speed 0.5 m/s: radial acceleration needed to hold the line a_x = 2 n v = 1.13e-03 m/s2 (115 micro-g); time to close 980 m: 32.7 min; braking delta-v about 0.5 m/s closing speed 1.0 m/s: radial acceleration needed to hold the line a_x = 2 n v = 2.26e-03 m/s2 (231 micro-g); time to close 980 m: 16.3 min; braking delta-v about 1.0 m/s
In robotics
Every rendezvous and proximity operation uses these equations or a close relative.
- Approach corridors. Stations and servicing missions approach along the velocity bar (V-bar) or radial bar (R-bar), with a hold at about 20 m and a final approach at tens of centimetres per second. The equations give the delta-v and the drift the corridor must absorb.
- Passive safety. A trajectory on which a failed chaser drifts away without hitting the target is designed with the bounded-motion condition and the drift direction in mind: the chaser below the target drifts ahead, above drifts behind.
- Formation flying. A constellation maintained as a 2:1 relative ellipse needs only occasional corrections to cancel the along-track drift from small energy differences.
- Cost against time. The delta-v of a transfer falls as the time grows (0.55 m/s in 46 min, 0.12 m/s in 93 min), so mission planners trade fuel for time: the least-fuel choices are slow and use drift.
- Validity. The linear model is accurate to 1.5 m at 1 km after half an orbit but 145 m at 10 km: far-range phasing uses the orbital elements of the previous lesson, and near range the linear equations, with the correction applied by an onboard filter.
The lab M11-L2: Approach Along the Velocity Bar brings a chaser from 1 km to a hold point inside an approach corridor. The absolute orbits used for far-range phasing are in M11-T1: Orbits for Guidance: Elements, Energy and Delta-v; the navigation of the relative state uses the range and angle sensors of M7-T5: The Aiding Sensors of Aircraft and Spacecraft.
Common misconceptions
“To catch a target ahead of you in the same orbit, speed up.”
Speeding up raises your orbit, and a higher orbit is slower: you fall behind. To close on a target ahead, lower the orbit first so that you gain on it, then raise it again.
“A radial offset stays a radial offset.”
It turns into an along-track drift of 12π times the offset every orbit (3770 m for 100 m), unless the along-track velocity is set to −2nx₀.
“The CW equations are exact.”
They are a first-order approximation for a separation small against the orbit radius and a circular target orbit. The error grows as the square of the separation: 0.2 m at 100 m, 145 m at 10 km after half an orbit.
“A straight line in the target frame is a straight line in space.”
A constant closing speed along the velocity bar needs a continuous radial acceleration of 2nv (115 µg at 0.5 m/s) to cancel the Coriolis force; without it the path curves.
“A faster transfer is always better.”
It costs more delta-v: 1.51 m/s for a quarter orbit and 0.12 m/s for a full orbit. Fuel and time are traded, and the cheapest option is slow.
Key takeaways
- Near a circular orbit, relative motion obeys , , , with a closed-form solution.
- A radial offset x₀ produces an along-track drift of −12πx₀ per orbit: 3770 m for 100 m.
- Bounded relative motion needs ẏ₀ = −2nx₀: −0.226 m/s for a 100 m offset.
- A two-impulse transfer is a 2 × 2 solve: 1000 m behind to 20 m behind costs 0.554 m/s in half an orbit and 0.118 m/s in a full orbit.
- The equations are accurate to 0.2 m at 100 m, 1.5 m at 1 km and 145 m at 10 km after half an orbit.
- A constant-speed approach along V-bar needs a radial acceleration 2nv.
References and further reading
Each source is marked free or paid. Free to read does not mean free to reuse: the course resources page lists every source with its licence.
- W. H. Clohessy and R. S. Wiltshire, "Terminal guidance system for satellite rendezvous", Journal of the Aerospace Sciences 27(9), 1960, the original paper. Paid.
- H. D. Curtis, Orbital Mechanics for Engineering Students, 4th edition, Butterworth-Heinemann, 2020, the chapter on relative motion and rendezvous. Paid.
- W. Fehse, Automated Rendezvous and Docking of Spacecraft, Cambridge University Press, 2003, the practical reference on approach strategies. Paid.
- MIT 16.851 Satellite Engineering (OpenCourseWare) , which covers orbits and relative motion as part of satellite design. Free; licence CC BY-NC-SA 4.0.
Knowledge check
Three questions. Write an answer, then reveal the explanation. Your answers stay in your browser.
Question 1
A chaser is 200 m above a target in a 400 km orbit with no relative velocity. How far does it drift along track in one orbit, and what along-track velocity would prevent it?
Explanation
The drift is −12π x₀ = −12π × 200 = −7540 m, the chaser ends up 7.5 km behind. To prevent it, set the along-track speed to −2 n x₀ = −2 × 1.1314×10⁻³ × 200 = −0.453 m/s, which puts the chaser on the 2:1 relative ellipse that returns to its starting point every orbit.
Question 2
Why does the delta-v of a 1000 m to 20 m transfer fall from 0.554 m/s at half an orbit to 0.118 m/s at a full orbit?
Explanation
The transfer has to cover 980 m of along-track distance. A short transfer needs a large relative velocity, since distance is speed times time; a long one can use a small velocity, and near one full orbit the natural drift of the relative motion carries the chaser along the track so that very little is needed. The cost is time (93 min against 46 min), and it rises again at 1.5 orbits because the dynamics are then not helping in the same way (0.554 m/s again).
Question 3
The linear equations differ from the nonlinear motion by 145 m after half an orbit at a 10 km separation but only 0.2 m at 100 m. What does that say about their use?
Explanation
The error scales roughly as the square of the separation (100 times larger separation gives about 700 times larger error), since the neglected terms are second order. They are reliable for approaches inside a few kilometres, where a metre of error matters little to planning, and unreliable for far-range phasing at ten kilometres, where an orbit-element or nonlinear propagation should be used and the linear equations only for the final corrections.
What’s next
Related content
Nothing below is required to finish this lesson.
- BeforeM11-T1: Orbits for Guidance: Elements, Energy and Delta-v
Describe an orbit by its elements, use the vis-viva equation, and compute the delta-v of a Hohmann transfer and of a plane change.
- LabM11-L2: Approach Along the Velocity Bar
Bring a chaser from 1 km behind a station to a hold point at 20 m, inside an approach corridor, with the least delta-v, using the Clohessy-Wiltshire equations.
Other courses on this site treat neighbouring topics from their own angle:
- UAV M5-T4: Quaternion-based orientation
- UAV M5-T5: Attitude control
- Linear Algebra M7-T4: SO(3)
- Linear Algebra M10-T4: The Exponential Map
- SLAM M2-T3: Rotation Matrices, Quaternions, and Pose Representation
This course leaves the following to the pages that already teach them:
- Quaternion algebra and the rotation group
- Mission design, launch windows and interplanetary transfers (outside the scope of this site)
- Structural, thermal and propulsion design (outside the scope of this site)
Get notified when the next lesson and new labs are released.
One email per new lesson or lab.