¿Se perdió el Mars Climate Orbiter de la NASA porque los equipos de ingeniería usaron diferentes unidades de medida?

Leí en un libro que el Mars Climate Orbiter de la NASA se perdió el 23 de septiembre de 1999, a un costo de $125 millones, porque un equipo de ingeniería usó unidades métricas, mientras que otro usó pulgadas para una operación clave de la nave espacial.

¿Fue realmente un problema de conversión en el software o se simplificaron demasiado los informes?

Respuestas (2)

El MIB de MCO ha determinado que la causa raíz de la pérdida de la nave espacial MCO fue la falta de uso de unidades métricas en la codificación de un archivo de software terrestre, "Fuerzas pequeñas", utilizado en modelos de trayectoria. Específicamente, los datos de rendimiento del propulsor en unidades inglesas en lugar de unidades métricas se utilizaron en el código de la aplicación de software titulado SM_FORCES (pequeñas fuerzas). Un archivo llamado Desaturación de momento angular (AMD) contenía los datos de salida del software SM_FORCES. Se requería que los datos en el archivo AMD estuvieran en unidades métricas según la documentación de la interfaz de software existente, y los modeladores de trayectoria asumieron que los datos se proporcionaron en unidades métricas según los requisitos.

(énfasis mío)

Fuente: Informe de la Fase I de la Junta de Investigación de Accidentes del Orbitador Climático de Marte

Costo del proyecto:

$ 327,6 millones en total tanto para el orbitador como para el módulo de aterrizaje (sin incluir Deep Space 2). $ 193,1 millones para el desarrollo de naves espaciales, $ 91,7 millones para lanzamiento y $ 42,8 millones para operaciones de misión.

Fuente

Logotipo de la misión:

Logotipo de la misión

por eso pruebas tu código
Lo siento, pero ¿qué tiene que ver el logo con la respuesta?
-1 para que no haya círculos dibujados a mano en el logotipo o en cualquier parte de la respuesta

Le pregunté a Peter Norvig , que estaba en la junta de revisión, y me dio la siguiente respuesta más matizada (la pregunta se hizo en el contexto de la seguridad de tipos en la elección del lenguaje de programación):

El problema involucraba la lectura de datos de un archivo y una falta de comunicación sobre cuáles eran los números en el archivo. No conozco ningún idioma, sin importar cuán estricto sea el tipo, que te obligue a etiquetar la cadena "123.45" en un archivo con las unidades de fuerza (newtons vs pie-libra), ni conozco ningún idioma, no importa qué tipo de letra suelta, en la que no podrías imponer tal convención si quisieras.

Más allá del error inicial, las razones por las que el error resultó fatal se relacionaron más con la estructura organizacional que con la elección del idioma:

(1) Se detectó una anomalía desde el principio, pero no se ingresó en una base de datos oficial de seguimiento de problemas. Las mejores prácticas obligarían a rastrear todas esas cosas.

(2) El equipo estaba separado entre JPL en California y Lockheed-Martin en Colorado, por lo que no hubo discusiones a la hora del almuerzo sobre "oye, ¿resolviste esa anomalía? ¿No? Bueno, analicémoslo con más cuidado. ."

(3) El código defectuoso no se revisó detenidamente debido a la reutilización incorrecta del código. En la misión anterior, este archivo era solo un archivo de registro, no se usaba durante las operaciones de vuelo y, por lo tanto, no estaba sujeto a un escrutinio cuidadoso. En MCO, el archivo y el código circundante se reutilizaron, pero luego, en algún momento, lo promovieron para que fuera parte de la navegación real y, lamentablemente, nadie volvió atrás y sometió el código relevante a una revisión cuidadosa.

(4) Mal proceso de incorporación de nuevos ingenieros: el código defectuoso fue escrito por un nuevo ingeniero, la primera semana (o tal vez el primer mes más o menos) en el trabajo. Esto se consideró correcto porque originalmente era "solo un archivo de registro". , no de misión crítica.

(Comunicación personal 2011-06-14)

Esta es la razón por la cual las personas usan archivos de texto semántico para datos, por ejemplo, XML<force value="123.45' units="N" />
@Sklivvz Sí, puede mover unidades a su especificación de tipo, pero como dice Norvig, siempre habrá alguna forma de evitarlo (convertir a cadena). De manera similar, siempre puede probar tales cosas, incluso en un lenguaje con tipos arbitrariamente sueltos.
@Sklivvz en sistemas donde el volumen de datos es crítico (como un ancho de banda bajo, como probablemente lo fue), elimina tanto como sea posible y probablemente opte por registros de longitud fija sin delimitadores ni unidades, describiéndolos en un documento de diseño (que aparentemente faltaba ). He trabajado en este tipo de sistemas en el pasado, torres de transmisión de telefonía celular y ahora en sistemas de gestión de tráfico en carreteras, donde los canales de comunicación están severamente limitados.
@jwenting Lo sé. A veces, la gente piensa que es bueno ganar un poco de ancho de banda para correr algún riesgo. Generalmente están equivocados :-)
Me gusta más esta respuesta que la oficial porque explora los factores humanos matizados. Los resultados oficiales, para estar en terreno firme, a menudo dicen menos. Al igual que los accidentes de aviación, a menudo concluyen "fallo en mantener la velocidad aerodinámica" o "vuelo controlado hacia el terreno", cuando la verdadera razón estaba más atrás en la cadena de toma de decisiones (o falta de ella), y hay que leer entre líneas.
@jwenting, sklivvz: la última vez que algunos idiotas intentaron quitar dos bytes de una fecha eliminando los dos primeros dígitos de un año para tener menos datos, la civilización entera casi fue destruida. :) [ buen punto sin embargo. NO utiliza formatos de datos semánticos para resolver los problemas de conversión de formato, por regla general]. Y sí, haber tenido que pasar 48 horas de 2000 años nuevos en el sitio, con 40 grados de fiebre, me hace llamarlos idiotas :)
@jwenting Pero lo interesante aquí es que el archivo original no estaba optimizado para el tamaño (aunque creo que todo en una misión espacial tendría esa consideración). Como archivo de registro, el caso de uso "legible por humanos" triunfa sobre el marcado semántico (aunque he llegado a pensar que eso está mal, pero eso es otra cosa...).
@PeterNorvig - ¡Se llama XML! Y es el estándar de transmisión de datos.
@Chad No en 1998 no lo fue. Y todavía no es el estándar para los archivos de registro.
bien dicho Larry. El sistema en el que trabajo ahora depende de empaquetar la mayor cantidad de datos posible en un canal de comunicaciones en serie. Sin xml, manipulación de bits, por lo que podemos controlar varias piezas de hardware utilizando un solo byte de datos. La única forma de obtener el rendimiento necesario para controlar miles de señales de tráfico electrónicas con no más de unos segundos de retraso.
@LarryOBrien: en realidad, el estándar XML se adoptó en 1998 del estándar SGML. No dije nada sobre archivos de registro, dije transmisión de datos.
@jwenting Sí, yo también trabajo en un sistema (telescopio) donde la idea de usar XML para los elementos RT es ridícula. Pero en un nivel más alto, el punto que tomo de la historia es que no previeron que esto iba a ser un archivo de control, por lo que no se esforzaron en controlarlo/validarlo. Una vez en su lugar (como un archivo de registro), no pusieron el mismo pensamiento y esfuerzo en evolucionarlo que habrían hecho si fuera un nuevo requisito.