Skip to main content
postmortem

The Mars Climate Orbiter: A Unit Conversion, Two Teams, and the Interface Contract Nobody Wrote Down

5 min read Chapter 11 of 38

The Mars Climate Orbiter: A Unit Conversion, Two Teams, and the Interface Contract Nobody Wrote Down

The System as Its Engineers Understood It

The Mars Climate Orbiter (MCO) is a NASA spacecraft launched on December 11, 1998, designed to study Martian climate, atmosphere, and surface changes from orbit. The spacecraft costs approximately $125 million. Its navigation involves two independent systems working in concert: an onboard attitude control system and a ground-based navigation team at the Jet Propulsion Laboratory (JPL) in Pasadena, California.

The spacecraft’s attitude is maintained by small thrusters. When the spacecraft adjusts its orientation (to point its solar arrays at the sun, its antenna at Earth, or its instruments at Mars), these thrusters fire in short pulses. Each pulse imparts a small change in velocity, called a delta-v. These delta-v values are tiny individually but they accumulate over the nine-month cruise to Mars. They must be accounted for in the trajectory calculations that determine when and how to fire the main engine for Mars orbital insertion.

The ground navigation process works as follows. The spacecraft sends telemetry data to JPL, including thruster firing data. A software component called SM_FORCES (Small Forces), developed by Lockheed Martin Astronautics in Denver, computes the thrust imparted by each angular momentum desaturation (AMD) event and writes the results to a file. This file is transmitted to JPL, where the navigation team’s trajectory software reads it and incorporates the thrust data into the trajectory model. The trajectory model is used to plan trajectory correction maneuvers (TCMs) and, ultimately, the Mars orbit insertion (MOI) burn.

The interface between SM_FORCES and the JPL navigation software is a file. The file contains numeric values representing impulse, the product of force and time. The specification for this interface is the Software Interface Specification (SIS), which states that the impulse values must be expressed in newton-seconds (N-s), the SI unit.

SM_FORCES produces impulse values in pound-force-seconds (lbf-s), the English unit.

The conversion factor between the two is 1 lbf-s = 4.44822 N-s. Every value in every file produced by SM_FORCES is too small by a factor of 4.45. The JPL navigation software reads these values, interprets them as newton-seconds, and underestimates the cumulative effect of AMD events on the spacecraft’s trajectory by a factor of 4.45.

Nobody catches this.

The SIS document specifies SI units. Lockheed Martin’s engineering culture, rooted in decades of aerospace work with English units, produces software that outputs English units. The file format is plain numeric values with no unit labels. Nothing in the file says “lbf-s” or “N-s.” The numbers are just numbers. The interface contract exists in a document. It is not enforced in the software. It is not validated at integration. It is not tested end-to-end with known inputs and expected outputs.

The Chain

December 1998 to September 1999. The Mars Climate Orbiter cruises toward Mars for approximately nine months. During this time, the ground navigation team at JPL performs regular trajectory updates. Each update incorporates new AMD data from SM_FORCES. Each update underestimates the cumulative delta-v from AMD events by a factor of 4.45. The trajectory error accumulates gradually.

Throughout the cruise. The navigation team notices that trajectory correction maneuvers are consistently larger than predicted. After each TCM, the spacecraft’s trajectory deviates from the expected path faster than the navigation model predicts. The team attributes this to modeling uncertainties. Solar pressure, outgassing, and other small forces are difficult to model precisely. The discrepancies are within the range that the team considers explainable by these uncertainties. They are noted in navigation reports but do not trigger an investigation.

September 15, 1999. The navigation team performs TCM-4, the final trajectory correction maneuver before Mars orbit insertion. The maneuver is designed to place the spacecraft on a trajectory that will bring it to an orbital insertion altitude of 226 km above the Martian surface. The team knows that the actual trajectory has been deviating from predictions, and TCM-4 is designed to correct the accumulated error.

September 23, 1999, 09:01 UTC. Mars orbit insertion begins. The spacecraft fires its main engine to slow down and enter Mars orbit. The planned closest approach altitude is 226 km. The minimum survivable altitude, below which atmospheric drag and heating will destroy the spacecraft, is approximately 80 km.

September 23, 1999, 09:04 UTC. The spacecraft passes behind Mars as seen from Earth. Communication is lost, as expected. The spacecraft is expected to emerge from behind Mars and re-establish contact.

September 23, 1999, 09:27 UTC. The spacecraft does not re-establish contact at the predicted time. Subsequent analysis determines that the actual closest approach altitude was approximately 57 km, well below the minimum survivable altitude. At 57 km, the Martian atmosphere is dense enough to generate forces that either destroyed the spacecraft or placed it on a trajectory from which it could not recover.

The spacecraft is lost. $327 million in spacecraft and mission costs. Years of scientific planning.

Mars Climate Orbiter trajectory showing the planned orbit insertion path at 226 km altitude versus the actual trajectory at 57 km, with the accumulated navigation error from the units mismatch

The diagram shows the cumulative effect of the units mismatch over nine months. Each AMD event contributes a small error. The errors are consistently in the same direction because the conversion factor is constant: every impulse value is understated by the same ratio. The trajectory diverges gradually and predictably from the planned path. The final error, 169 km lower than planned, is the integral of thousands of small errors, each individually within the noise floor of navigation uncertainty.