# How does a laser from Earth manage to hit the Moon with precision?

A question I've been asked is how a laser, fired from earth, would hit the moon without "leading it" (or hit it with precision). When firing a laser at the moon, it takes about 3 seconds to reach it. Given the combined effects of orbit, rotation, etc. of the earth, the moon itself, the solar system, the galaxy, etc.

Does the light of the laser act as if the moon and earth are basically standing still due to relativity and the speed of light being the same in all reference frames (earth and moon are in freefall so no acceleration?). Or does all the combined motion not amount to much since light is really fast?

What calculations have to be taken into account to hit the moon accurately with a laser?

• Is it just the shifting reference frames that you think are difficult? Scientists have figured out how to calculate some pretty amazing things, and computers are really good at crunching angles. Commented Feb 6 at 5:12
• I don't understand the question. It's not different from say throwing a ball at a moving teammate. If you know how fast they're moving and in which direction, you should be able to compute where to throw the ball. Commented Feb 6 at 5:22
• The beam takes about 1.3 seconds to the moon and 1.3 seconds back. Commented Feb 6 at 16:08
• The question might be asked under the misapprehension that a laser beam does not spread out on its way to the moon and must hit its target with millimetre precision. Of course, a laser beam does spread out. Although its angular spread is very small, the patch of moon it illuminates is many kilometres across, and the aim provided by a good telescope is plenty accurate. Commented Feb 7 at 10:01
• @nigel222 As discussed in an answer below, in the current generation of lunar laser ranging experiments, the divergence of the laser is slightly smaller than the correction needed to account for the relative motions of the Earth and Moon.
– rob
Commented Feb 7 at 14:16

Commenters on the first version of this answer (preserved in the edit history) did me the favor of finding the literature that I hadn't read for years, which contains a succinct answer to your question. Quoting from "The Apache Point Observatory Lunar Laser-ranging Operation: Instrument Description and First Detections", Murphy et al, 2008:

The relative alignment between the outgoing beam and the receiver may not be an obviously variable parameter. But one must intentionally point ahead of the lunar reflector — to where it will be in $$1.25\rm\ s$$ — while looking behind the "current" position of the reflector — to where it was $$1.25\rm\ s$$ ago. At the transverse velocity of the moon $$(\sim1,000\rm\ m\,s^{-1})$$, this translates to approximately $$1.4''$$ of intentional misalignment between transmitter and receiver. But because the telescope mount is driven on altitude and azimuth axes, the offset direction rotates relative to the instrument depending on where the moon is in the sky. Additionally, the earth rotation $$(\sim400\rm\ m\,s^{-1})$$ changes the magnitude of the necessary offset. Because these effects are comparable in magnitude to the divergence of the beam $$(\sim 1'')$$ and to the field of view of the receiver $$(1.4'')$$, they must be accommodated in an adjustable manner.

Note that a beam divergence of one arcsecond ≈ $$5\rm\,\mu rad$$ corresponds to a spot radius-or-diameter of about 2km at the surface of the Moon. (I've made enough silly math mistakes and half-misremembered facts in this answer, so I'm just giving up on that factor of two.) The apparent diameter of the Moon on the sky is about half a degree of arc or $$1800''$$, so imagine dividing the face of the moon into a grid with about 1800 horizontal and vertical divisions. You have to point your laser about 1.4 divisions ahead of the spot you want to hit, and then (or "also," in practice) point your telescope about 1.4 divisions behind the spot you wanted to hit in order to catch the reflection.

• A relevant reference arxiv.org/abs/1309.6294 Commented Feb 6 at 10:58
• The beam is about 4 miles (6,5km wide) when it reaches the moon (and presumably the reflection is about the same wide on its return). Link reached from the Wikipedia article Lunar_Laser_Ranging_experiments. eclipse.gsfc.nasa.gov/SEhelp/ApolloLaser.html
– CSM
Commented Feb 6 at 14:14
• What if we were to abstract out the laser and the moon, so that we do need to aim? Suppose it's some "spherical cow" idealized signal with "almost zero" cross sectional area that can move at lightspeed in exactly the direction we point it (with impossible precision), trying to hit a target of "almost zero" volume that has replaced the moon? Would we simply aim straight at it, or would we need to lead it? Commented Feb 6 at 14:38
– rob
Commented Feb 6 at 15:17
• "The authors are probably distinguishing between where the Moon is "now" as something distinct from its apparent location on the sky" -- exactly. But no extra measures have to be taken to aim at that past position, it is where the current position appears, by definition. That's different with the future position: You have to aim ahead, in fact twice as much as you'd naively think. Commented Feb 6 at 22:00

As Rob mentions, when reflecting a laser off the Moon you do need to compensate by ~1.4 arc-seconds for the light-time delay. But the whole point of the Lunar Laser Ranging experiments (LLR) is to improve our model of the Moon's orbit. So if the people shooting the laser beams can't get it right there's something terribly wrong. ;)

We've been doing LLR for over 50 years, since Buzz Aldrin placed the first reflector on the Moon. There are currently 6 functional LLR reflectors and it's expected that additional reflectors will be placed as part of NASA's Artemis program. The latest reflector design is more efficient, and having reflectors at more locations improves the data. It's difficult to do LLR with reflectors that are in sunlight, since the reflectors only return a tiny number of laser photons. Also, the reflectors that are mounted on landers are unusable near Full Moon due to thermal problems.

The Jet Propulsion Laboratory (owned and sponsored by NASA) have been calculating the motions of the Solar System bodies for decades. By the mid 1980s, the Jet Propulsion Laboratory Development Ephemeris (JPL DE) was so good that it became the basis of the Astronomical Almanac.

The JPL DE is computed by integrating the equations of motion of the major Solar System bodies (including several hundred asteroids), relative to the barycentre of the Solar System, using a post-Newtonian approximation of the laws of General Relativity. This model is fitted to a huge amount of observational data, both ground-based and space-based. The LLR data is a vital component of that observational data. For some details on the ephemeris computation, please see The JPL Planetary and Lunar Ephemerides DE440 and DE441, Park et al (2021).

The output of these ephemeris computations is stored in the form of 14th degree Chebyshev polynomials, which permits very accurate interpolation of the position and velocity values.

Scientists and engineers can access all of this data via NASA's SPICE system. And anyone can access (much of) SPICE via the Horizons system provided by JPL's Solar System Dynamics group. Horizons can be accessed via telnet, email, a Web app, and by query- and file-based APIs. It has a few quirks because it's so ancient (the core system predates the World Wide Web), but it's fast, and easy to work with, once you become familiar with it. Horizons data spans from 9999 BC to 9999 AD.

Horizons has location data for many places on Earth, Mars, and the Moon, including all the Apollo landing sites and the LLR reflectors. This query URL retrieves the Moon locations data (in cylindrical coordinates).

Here's a minimal Python program using the file API to retrieve some data relevant to LLR. It prints the azimuth & elevation of the Moon (in degrees), and the light-time distance (in minutes), as seen by the Apache Point observatory (which has observatory code 705). The selected time is ~12 hours after the recent Last Quarter phase of the Moon. I've selected the Apollo 11 reflector as the target location. At that time, the reflector is not in sunlight.

""" Retrieve data from Horizons using a batch-file
Written by PM 2Ring 2021.12.27
"""
import requests
url = "https://ssd.jpl.nasa.gov/api/horizons_file.api"

cmd = """\
!SOF
OBJ_DATA=NO
COMMAND='c:23.47307,1735.35247,20.39813 @301'
CENTER=705@399
QUANTITIES='4,21'
APPARENT=REFRACTED
CAL_TYPE=G
START_TIME='2024-Feb-3 4:00 UT-7'
STOP_TIME='2024-Feb-3 4:01'
STEP_SIZE='12'
"""

req = requests.post(url, data={"format": "text"}, files={"input": ("cmd", cmd)})
print(req.text)


Here's a live version of that script, running on the SageMathCell server. And here's the same request, in a query URL.

Here's an excerpt from the output. Please use one of the previous links to see the full output.

 Date_(ZONE)_HR:MN:SC.fff         Azi____(r-app)___Elev  1-way_down_LT
**********************************************************************
$$SOE 2024-Feb-03 04:00:00.000 m N- 143.588295 27.029606 0.02153966 2024-Feb-03 04:00:05.000 m N- 143.606569 27.039511 0.02153959 2024-Feb-03 04:00:10.000 m N- 143.624847 27.049412 0.02153951 2024-Feb-03 04:00:15.000 m N- 143.643129 27.059309 0.02153944 2024-Feb-03 04:00:20.000 m N- 143.661417 27.069201 0.02153937 2024-Feb-03 04:00:25.000 m N- 143.679708 27.079088 0.02153930 2024-Feb-03 04:00:30.000 m N- 143.698005 27.088972 0.02153923 2024-Feb-03 04:00:35.000 m N- 143.716306 27.098851 0.02153916 2024-Feb-03 04:00:40.000 m N- 143.734612 27.108725 0.02153909 2024-Feb-03 04:00:45.000 m N- 143.752922 27.118595 0.02153901 2024-Feb-03 04:00:50.000 m N- 143.771237 27.128461 0.02153894 2024-Feb-03 04:00:55.000 m N- 143.789557 27.138323 0.02153887 2024-Feb-03 04:01:00.000 m N- 143.807881 27.148180 0.02153880$$EOE

'Azi____(r-app)___Elev' =
Refracted apparent azimuth and elevation of SURFACE TARGET POINT. Compensated
for light-time, the gravitational deflection of light, stellar aberration,
approximate atmospheric yellow-light refraction, precession and nutation.
Azimuth is measured clockwise from north:

North(0) -> East(90) -> South(180) -> West(270) -> North (360)

Elevation angle is with respect to a plane perpendicular to the reference
surface local zenith direction. TOPOCENTRIC ONLY.  Units: DEGREES

'1-way_down_LT' =
1-way down-leg light-time from SURFACE POINT target to observer. The elapsed
time since light (observed at print-time) would have left or reflected off the
specified target surface location. Units: MINUTES


We can see that during that minute, in 5 seconds the azimuth increases by ~0.02 degrees, the elevation increases by ~0.01 degrees, and the one-way light travel time decreases by ~4.2 microseconds.

I have simple Sage / Python code on Github which lets you play with Horizons batch file data. The Horizons Web app provides a link for the batch data for any request you make through it.

Accurate lunar orbit data is essential for our Solar System model. We want to know where various Solar System bodies are relative to Earth. But the Earth's motion is intimately tied to the Moon. The JPL DE doesn't directly model the motion of the Earth. It computes the motion of the Earth-Moon barycentre (EMB), and it computes the motion of the Moon relative to that barycentre. Whenever SPICE needs to know the position & velocity of the Earth it computes it from the EMB and the Moon.

The precise rotation of the Earth is monitored by the International Earth Rotation and Reference Systems Service, who publish the latest precise rotation data daily. SPICE / Horizons stays up-to-date with that data, and estimates Earth's rotation if you request ephemeris data for future dates.

• There is something wonderful with the cmd code you provided - it really seems that one is typing commands to some kind of mainframe like in the movies. Much nicer than if it was a JSON in and JSON out (less practical, but way nicer)).
– WoJ
Commented Feb 8 at 16:48
• @WoJ You'd probably enjoy accessing Horizons via Telnet. ;) The Web APIs do have a JSON output mode, but it just wraps the text output into a JSON string. Eg, ssd.jpl.nasa.gov/api/… Commented Feb 8 at 17:39
• My first contact with "networked" computers was around 1992 during an internship at CERN. I had access to a VAX and to an IBM mainframe and having just had contact with standalone computers before the sensation was exhilarating. I still remember to this day the incredible feeling of sending a message/mail to someone away or sending an order to the mainframe and seeing the result coming back. This really shaped my future (after doing a PhD in Physics I moved to IT and started there since).
– WoJ
Commented Feb 9 at 7:04
• (cont'd) I seriously look with fondness at these times (at the same time being an overexcited geek trying all kinds of new tech daily and driving my family mad with home automation)
– WoJ
Commented Feb 9 at 7:05