How did the Kepler Telescope reach its orbit?

The Kepler Telescope was (is) in a heliocentric Earth trailing orbit, but I want to figure out how it was able to reach this orbit exactly.

It was launched on a Delta II with 3 stages and I studied the different burns and the parking orbit (picture below). After coasting in the parking orbit, the second and third stage put the telescope in its appropriate orbit. Still I find it difficult to reconstruct how exactly it went from LEO Parking orbit to a heliocentric orbit approximately the same as Earth and trailing it. How exactly did those 2 burns put it in this orbit?

A professor helped me by stating it made several widening ellipses from LEO to its orbit (she gave me this picture). But how does this work with just 2 burns? Can somebody show me how the trajectory from LEO went and where the burns took place?

Thanks! Going from the diagram you presented, it seem that after the first of those two burns (the second burn of the second stage) if was in an elliptical Earth orbit ("94 x 1180 n.mi."). A minute or so later, still pretty much at the perigee of that orbit, the third stage lit up and burned for 90 seconds. At the end of that it was in a hyperbolic Earth orbit with perigee 99 n.mi. On that orbit it escapes from Earth, slowing as it gets further away. Had Earth been all alone in the Universe, it would have approached a velocity of $$\sqrt{0.61} = 0.78 km/s$$ as the distance to Earth approached infinity. In fact though, the influence of the Sun becomes the dominant consideration once you get more than a million km or so from Earth, and from that perspective, it was now in a similar orbit to Earth's, modified by that 0.78 km/s, and the direction was chosen so that this was an ellipse a little larger than Earth's orbit, which takes a little longer, so that it slowly dropped behind Earth.

• Thank you very much, it really helped! Quick question, the 94 nmi is the distance from Earths surface to the perigee and 1180 nmi the distance from Earths surface to the apogee, right? Dec 5 '20 at 15:44
• And is the second burn of the second stage, which creates an elliptical orbit, just used to bring the launch vehicle up to a higher speed? And afterwards the third stage gives it its escape velocity? Isn't this possible in one burn from LEO to escape velocity? Dec 5 '20 at 19:13
• @veeke After the second burn they had to pause to separate the second stage. Those two burns are with different engines. Otherwise one longer burn would be optimal Dec 5 '20 at 22:56
• If I'm not mistaken. The last burn (third stage) put the spacecraft in it's hyperbolic escape trajectory from Earth. But doesn't their need to be another burn to establish the heliocentric orbit with it's specific parameters? Dec 8 '20 at 17:20
• @Veeke There may have been some tiny tweaks, but the speed and direction of the Earth escape orbit are chosen to lead to the desired heliocentric orbit. The deeper in Earth's gravity well you can do your burns, the more efficient it is. Dec 8 '20 at 18:46

If they were indeed quoted correctly here, then in that case your professor is not exactly right.

A plot of the first few days (not shown) shows a featureless departure from Earth to heliocentric orbit, no spiraling.

Nonetheless, there be spirals!

Depending on what you choose for the center of your plot and whether your frame rotates once per year or is "inertial1" it can absolutely look like a spiral around the Earth!

And I can see why one might assume, having seen the spirally pattern and not realize it always looks like that in some frame, that one might think that it looks like a spacecraft spiraling away from Earth, perhaps under ion propulsion.

But it's just the way to bodies in similar orbits look if their periods are very slightly different and one or both are slightly elliptical.

Plots of the two STEREO spacecraft will look something like this too, except there's a pair of counter-spiraling orbits since one leads and one lags.

In the plots distances are in kilometers, and the data is from JPL's Horizons every 6 hours since launch 2009-03-07 04:57. 1not a rotating frame but still accelerating because origin moves with the Earth import numpy as np
import matplotlib.pyplot as plt

class Body(object):
def __init__(self, name):
self.name = name

def rotz(vecs, th):
x, y, z = vecs
cth, sth = np.cos(th), np.sin(th)
xrot = x * cth - y * sth
yrot = y * cth + x * sth
return np.vstack((xrot, yrot, z))

fnames = ('Kepler Sun full horizons_results.txt',
'Kepler Earth full horizons_results.txt',
'Kepler Kepler full horizons_results.txt')

bodies = []
for fname in fnames:

with open(fname, 'r') as infile:

iSOE = [i for i, line in enumerate(lines) if "$$SOE" in line] iEOE = [i for i, line in enumerate(lines) if "$$EOE" in line]

print(iSOE, iEOE, lines[iSOE], lines[iEOE])
lines = [line.split(',') for line in lines[iSOE+1:iEOE]]
JD  = np.array([float(line) for line in lines])
pos = np.array([[float(item) for item in line[2:5]] for line in lines])
vel = np.array([[float(item) for item in line[5:8]] for line in lines])

b = Body(fname.split())
b.JD = JD
b.pos = pos.T.copy()
b.vel = vel.T.copy()

bodies.append(b)

sun, earth, kepler = bodies

days = kepler.JD - kepler.JD

x, y, z = earth.pos - sun.pos
theta = np.arctan2(y, x)

for body in bodies:
body.posr = rotz(body.pos, -theta)

if True:
plt.figure()
plt.subplot(2, 2, 1)
x, y, z = kepler.pos - earth.pos
plt.plot(x, y, '-r', linewidth=1.0)
plt.plot(, , 'ob')
plt.gca().set_aspect('equal')
plt.title('Kepler minus Earth "inertial"')

plt.subplot(2, 2, 2)
x, y, z = kepler.posr - earth.posr
plt.plot(x, y, '-r', linewidth=1.0)
plt.plot(, , 'ob')
plt.gca().set_aspect('equal')
plt.title('Kepler minus Earth rotating')

plt.subplot(2, 2, 3)
x, y, z = earth.pos - sun.pos
plt.plot(x, y, '-b', linewidth=1.5)
x, y, z = kepler.pos - sun.pos
plt.plot(x, y, '-r', linewidth=1.0)
plt.plot(, , 'oy')
plt.gca().set_aspect('equal')
plt.title('Kepler & Earth  minus Sun "inertial"')

plt.subplot(2, 2, 4)
x, y, z = earth.posr - sun.posr
plt.plot(x, y, '-b', linewidth=2.5)
x, y, z = kepler.posr - sun.posr
plt.plot(x, y, '-r', linewidth=1.0)
plt.plot(, , 'oy')
plt.gca().set_aspect('equal')
plt.title('Kepler & Earth  minus Sun rotating')
plt.show()
• Thank you very much! I'm trying to reconstruct your python code in matlab. How did you retrieve the data from the sun, in what reference frame? Dec 6 '20 at 11:22
• @Veeke I've included a screen shot of the setup in Horizons, but I'll type that out in plaintext when I get to a real keyboard. I think it's the Horizon defaults; barycenter origin, ecliptic J2000.0 etc... You could also consider using this as an opportunity to try out Python a little bit; if you do a regular Anaconda installation (not mini-conda) you will have an incredible array of scientific and technical libraries ready to go, and of course everything is free forever! :-)
– uhoh
Dec 6 '20 at 14:00
• Sorry if I'm asking stupid things. But your screenshot setup only gives data from Kepler relative to the Sun, right? In your code you use sun.pos to calculate theta if I'm not mistaken. Dec 6 '20 at 14:00
• @Veeke no problem! The setup for coordinate origin shows Kepler's state vectors relative to to Solar System Barycenter, which spends about half its time inside the Sun and half just outside it. I could have specified coordinates relative to the Sun itself but I always use SSB to avoid getting them mixed up. For these plots it wouldn't make much difference.
– uhoh
Dec 6 '20 at 14:08
• Got it! big thanks for the help!! Dec 6 '20 at 15:52