APOLLO GUIDANCE COMPUTER: El computador que llevó al ser humano a la Luna

Eduardo Cosín Piqueres

El 20 de julio de 1969, los astronautas Neil Armstrong, Buzz Aldrin y Michael Collins alunizaron en el Mar de la Tranquilidad a bordo del módulo lunar Eagle. Armstrong tuvo el honor de ser el primer ser humano en pisar la Luna, pronunciando la famosa frase “Es un pequeño paso para un hombre, pero un gran salto para la humanidad”. Detrás de esta hazaña, quedó el esfuerzo de miles de personas que participaron en el Programa Apolo, una inversión económica monstruosa realizada por el gobierno americano, y un gran número de avances tecnológicos logrados para poder alcanzar nuestro satélite. De entre todos ellos, hay que destacar el primer ordenador de la historia en incorporar circuitos integrados, un ordenador revolucionario: el Apollo Guidance Computer (AGC).

Introducción histórica

En plena guerra fría, Estados Unidos y la Unión Soviética luchaban por implantar en un mundo devastado por la guerra su modelo político, económico y social. El 4 de octubre de 1957 el conflicto alcanzaba otra dimensión. Los soviéticos enviaban al espacio el primer satélite artificial de la historia, el Sputnik (“compañero” en ruso). La carrera por la conquista del espacio acababa de empezar. Este hecho supuso un verdadero shock para la sociedad americana, que consideraba a la rusa más atrasada y eminentemente agraria. Como respuesta, los estadounidenses crearon la NASA. Durante los primeros años de carrera espacial continuaron los éxitos soviéticos, como la llegada del primer ser humano al espacio (Yuri Gagarin), hasta que en 1961 el presidente J.F. Kennedy solicitó al Congreso de Estados Unidos fondos suficientes para poder competir con la URSS, y se comprometió en un discurso pronunciado en mayo en la Universidad Rice de Houston a alcanzar la Luna antes de que finalizara la década.

Para completar la misión con éxito se desarrolló el Programa Apolo. Tras múltiples misiones en las que se fue perfeccionando la tecnología necesaria para llegar a la Luna, el 16 de julio de 1969, a las 9:32 de la mañana despegó en Cabo Cañaveral (Florida, EEUU) el cohete Saturn V con tres astronautas a bordo y un objetivo, pisar la superficie lunar y volver sanos y salvos. El resto es historia.

Programa Apolo

El Programa Apolo tuvo 22 misiones, siete de las cuales (Apolo 11 a Apolo 17) tenían como objetivo pisar la Luna. Todas las misiones tripuladas con destino a nuestro satélite tuvieron éxito, a excepción de la misión Apolo 13 que debido a la explosión de un tanque de oxígeno durante la trayectoria hacia la Luna tuvo que abortarse. A pesar de este hecho, se logró que los astronautas volvieran sanos y salvos a la Tierra. La única misión que ocasionó pérdidas humanas fue el Apolo 1, en la que se produjo un cortocircuito durante unas pruebas previas al lanzamiento perdiendo la vida los tres tripulantes que estaban a bordo. El modelo de cohete empleado en estas misiones fue el Saturn V. Constaba de varias fases que se iban desprendiendo de la nave una vez consumían su combustible. En la parte superior del cohete estaban los módulos de mando, servicio y lunar. El primero era el encargado de llevar a los astronautas hasta la luna, permanecer en órbita y retornar a la Tierra. El módulo de servicio se empleaba para almacenar combustible y otros elementos como baterías, radiadores, agua, etc. Por último, el módulo lunar se diseñó para descender de la órbita lunar a la Luna y regresar al módulo de mando una vez completada la misión. A continuación se muestran imágenes del Saturn V y de la trayectoria de la misión Apolo 11.

Cohete Saturn V Misión Apolo 11

El computador AGC

En las primeras misiones espaciales los cálculos de trayectoria se realizaban a mano. La NASA disponía de un departamento de “calculadoras humanas” que lo integraban un nutrido grupo de mujeres de raza negra. Dentro de este grupo cabe destacar a tres de ellas: Katherine Johnson, Dorothy Vaughan y Mary Jackson. Consideradas como verdaderas computadoras contribuyeron con sus conocimientos al éxito del programa espacial antes de la llegada de los ordenadores, de hecho, cuando se usaron los primeros modelos para realizar los cálculos de trayectoria, John Glenn, primer astronauta americano en orbitar alrededor de la tierra, requirió que estos fueran corroborados por Katherine Johnson. Con la llegada de los primeros ordenadores IBM a la NASA fueron las primeras en conocer su funcionamiento y trabajar con ellos.

Diseño

Los ingenieros de la NASA determinaron finalmente que era necesario un computador a bordo de las aeronaves para asistir a los astronautas y poder calcular las trayectorias orbitales en los módulos de mando y lunar. De esta forma, en caso de interferencia o retardo de las comunicaciones con la base terrestre, la tripulación podía realizar los cálculos necesarios in situ. Se decidió que el diseño del computador corriera a cargo del laboratorio Charles Stark Draper del Massachusetts Institute of Technology (MIT), liderado por el ingeniero que daba nombre al mismo. El equipo de diseño del hardware del computador fue liderado por Eldon Hall. Se tomó la decisión de diseñar un único computador que se incorporaría a los módulos de mando y lunar. Adicionalmente al diseño del ordenador, se debía diseñar el sistema inercial y todos los instrumentos ópticos para calibrarlo, además de otros periféricos.

En cuanto al desarrollo del software, recayó sobre el equipo liderado por la científica Margaret Hamilton. Por aquel entonces el concepto “software” no estaba muy extendido y no existían personas con mucha experiencia en su desarrollo que, además, no se consideraba una tarea compleja y se veía como algo secundario. En la mayoría de sistemas se interactuaba con los computadores desarrollando programas o comandos para resolver tareas concretas haciendo uso de tarjetas perforadas. Hamilton diseñó junto al resto de su equipo un sistema innovador e introdujo el concepto “Ingeniería del software”, lo que llevó a que se le considere como la primera ingeniera de software de la historia.

Hardware

Uno de los principales retos del desarrollo del AGC era crear un sistema lo suficientemente pequeño para que pudiera integrarse en las naves espaciales. En aquella época los ordenadores llegaban a ocupar habitaciones enteras por lo que el reto era mayúsculo. Finalmente se consiguió diseñar un computador de 55 cm de largo, 33 cm de ancho y 15 cm de alto, con un peso de apenas 32 kg, y que funcionaba con un suministro eléctrico de 55 voltios.

APOLLO GUIDANCE COMPUTER

El AGC fue el primer ordenador de la historia en incorporar circuitos integrados, conocidos vulgarmente como chips o microchips, que fueron fabricados por la compañía FAIRCHILD SEMICONDUCTOR, de la que formaba parte Gordon Moore, famoso por formular la Ley de Moore y ser uno de los fundadores de INTEL. Los chips se interconectaban mediante tecnología Wire-Wrap y presentaban un encapsulado Flatpack.

Gordon Moore Circuito integrado Encapsulado Flat-Pack

La versión inicial del computador, Block I, disponía de 4.100 circuitos con una puerta NOR de tres entradas, mientras que la versión Block II, empleada en las misiones lunares, integraba 2.800 circuitos con dos puertas NOR de 3 entradas. La frecuencia de reloj era de 2 Mhz, uno dedicado al procesador y el resto para sincronizar los distintos dispositivos de entrada y salida del sistema. El tamaño de palabra del procesador era de 16 bits, 14 para datos, uno para signo y un bit de paridad. El conjunto de instrucciones del mismo se incrementó de 11 a 34 de la primera versión a la segunda, presentando en ambos casos un formato de 3 bits para indicar la operación y 12 bits para señalar la dirección de memoria. El procesador disponía de múltiples registros internos, siendo cuatro de ellos los principales.

Respecto a la memoria del computador, se pasó de 25 Kilopalabras (1 Kp RAM y 24 Kp ROM) de Block I a 38 Kilopalabras (2 Kp RAM y 36 Kp ROM) de Block II con una longitud de palabra de 16 bits (15 bits datos y un bit de paridad). Durante el diseño de la memoria del computador se presentaron problemas de direccionamiento de memoria que fueron solventados con la técnica de Memory Banking.


El tamaño de los buses de lectura y escritura del computador era de 16 bits. Los datos de los registros se colocaban en el bus de lectura con una señal de control. Un buffer conectaba los buses de lectura y escritura, lo que propiciaba que cualquier dato que apareciera en el bus de lectura también lo hacía en el de escritura. Los datos del bus de escritura se copiaban a otros registros con otras señales de control.

La misión principal del Apollo Guidance Computer era ayudar en la navegación de los Módulos de Mando y Lunar durante la misma. Por esta razón, el computador necesitaba comunicarse constantemente con todos los dispositivos de navegación en cada módulo (los dispositivos de ambos módulos eran básicamente los mismos). De entre todos los sistemas de navegación y ópticos conectados al computador, y necesarios para calcular trayectorias orbitales, ángulos de entrada o ubicar a la nave en el espacio, la IMU (Inertial Measurement Unit) jugaba un papel fundamental. La IMU era una unidad de medición inercial que consistía en un dispositivo electrónico que se encargaba de realizar mediciones de la posición, aceleración, velocidad y orientación de la nave y fuerzas gravitacionales que le afectaban, haciendo uso de una combinación de acelerómetros y giróscopos. Es un componente principal en los sistemas de navegación inercial de aviones, buques, misiles y, por supuesto, naves espaciales.

Software

Con el objetivo de facilitar el trabajo de los programadores, el lenguaje de programación empleado para el desarrollo del software consistía en lenguaje ensamblador AGC almacenado en memoria de núcleos cableados. Este lenguaje representa mediante texto los códigos numéricos con los que funciona el ordenador. Cada una de las instrucciones del procesador tiene asociado un nombre mnemónico de pocas letras que la identifica. Una de las ventajas del uso de este lenguaje consiste en asignar nombres a direcciones de memoria, siendo el ensamblador el encargado de resolver en qué dirección está cada variable, lo que da como resultado un programa más sencillo tanto de escribir como de leer. El programar en lenguaje ensamblador ofrece muchas otras ventajas en comparación con escribir directamente en lenguaje de máquina, ya que el programador no tiene que estar pendiente de muchos aspectos técnicos como la ubicación exacta de cada elemento o el código numérico de las instrucciones. Lógicamente, si comparamos este lenguaje con lenguajes de alto nivel, no se obtienen muchas ventajas.

Cabe destacar que la mayor parte del software era accesible únicamente en modo lectura, por lo que no podía ser modificado durante su ejecución, sin embargo, algunas partes del software estaban almacenadas en núcleos magnéticos editables y podían ser modificadas por la tripulación mediante la interfaz gráfica.

El software del computador incluía un intérprete de lenguaje de alto nivel que implementaba una máquina virtual de pseudo-instrucciones mucho más compleja y con mayor capacidad que el AGC nativo. El código interpretado podía combinarse con el AGC nativo. Para ejecutar una tarea en este lenguaje bastaba con invocar al intérprete, almacenado en la memoria ROM como cualquier otro programa, indicando la dirección del programa a interpretar. El intérprete ofrecía muchas más instrucciones de las que el AGC podía soportar de forma nativa, añadiendo una mayor eficiencia al disminuir el tiempo de ejecución de las instrucciones que interpretaba ya que requería una menor utilización de memoria. El encargado de asegurar una transacción correcta entre el código interpretado y el nativo era el compilador, bautizado como YUL.

El sistema operativo del AGC consistía en un sistema EXEC ( ) en tiempo real encargado de coordinar la ejecución de todos los programas y asignar la memoria RAM que le correspondía a cada uno de ellos. A pesar de ser un programa muy simple de ordenamiento de procesos, mostraba características muy avanzadas en comparación con otros computadores coetáneos. El sistema operativo estaba almacenado en la memoria ROM, al igual que todos los programas, ejecutándose desde ahí. El Exec ( ) del AGC implementaba un sistema de multitareas simple o cooperativa, ya que se necesitaba un sistema capaz de poder ejecutar varias tareas de forma simultánea como, por ejemplo, controlar los motores durante las distintas fases de la misión, actualizar la velocidad y situación de la nave según el campo gravitatorio le fuera afectando o quedar a la espera de leer comandos introducidos a través de la interfaz por alguno de los miembros de la tripulación. El sistema podía ejecutar simultáneamente hasta ocho tareas, asignándose a cada cada una las tareas un nivel de prioridad en función de su importancia, siendo las tareas con mayor prioridad el control de los motores de la nave o la ejecución de cambios en la trayectoria de navegación.

Otra de las características innovadoras del AGC era su tolerancia a errores al ser un sistema a prueba de fallos con control de excepciones. Inicialmente, la NASA consideraba que no era necesario implementar un sistema de detección de errores porque los astronautas no se iban a equivocar, sin embargo, el criterio de la Agencia Espacial cambió cuando un astronauta borró accidentalmente todos los datos del computador durante una prueba, al introducir un comando equivocado. Además del control de excepciones, el sistema implementaba un reinicio tipo soft reset que consiste en reiniciar el procesador pero sin perder la información guardada en la RAM. Los ingenieros estimaron que era necesario proteger las tareas críticas de un posible reinicio debido a que sus consecuencias podrían revestir seria gravedad.

Por último, el sistema incorporaba unas rutinas para la interfaz denominadas Pinball que ofrecían los servicios de teclado y display necesarios que los miembros de la tripulación pudieran interactuar con el computador. Con las rutinas Pinball también existía la posibilidad de iniciar programas y se asemejaban al núcleo de UNIX. El software del Apollo Guidance Computer está disponible para el público en general en la plataforma web GitHub.

Funcionamiento del Apollo Guidance Computer

La tripulación de la misión Apolo 11 interactuaba con el AGC a través de su interfaz gráfica DSKY (Display and Keyboard, de sus siglas en inglés). El DSKY estaba físicamente separado del AGC y se ubicó en el panel central de instrumentos de los módulos para una fácil visibilidad y acceso de los astronautas. En el módulo lunar se disponía de una única DSKY, mientras que el módulo de mando incorporaba dos interfaces. El tamaño era de 21,6 cm de alto por 17,8 de ancho.

DSKY

En la parte superior izquierda del DSKY se disponía de un vector de doce luces (diez luces en el caso del módulo de mando) que se encendían, apagaban o parpadeaban en función del evento o situación que se deseara comunicar a la tripulación como, por ejemplo, que se estaban recibiendo datos desde la Tierra (UPLINK ACTY), se había producido un error en el computador (PROG) o no se disponía de datos de posición válidos de la nave porque la IMU no era capaz de facilitarlos.

A la derecha del vector de luces se disponía de un monitor que mostraba el programa que estaba en ejecución (PROG), la orden que se estaba ejecutando (VERB y NOUN) y tres registros que mostraban datos de altitud, velocidad, tiempo o de otro tipo, en función de la orden en funcionamiento. Si la luz COMP ACTY, ubicada en la parte superior derecha, estaba iluminada, indicaba que el computador estaba procesando una tarea, quedando apagada en caso contrario.

Debajo del panel de luces del monitor, se encontraba el teclado. Pulsando estas 19 teclas los astronautas indicaban al AGC las tareas a llevar a cabo o los datos que deseaban conocer. Mediante los botones VERB y NOUN, la tripulación comunicaba al computador que orden ejecutar siguiendo la secuencia:

En el diseño de la interfaz, los ingenieros buscaban un lenguaje sencillo e intuitivo. Determinaron que extrayendo de una frase el verbo y el nombre se obtenía prácticamente toda la información de la acción que se deseaba realizar y daba suficiente información para entenderla. Por esta razón, en la interfaz gráfica se implementó el método “verb-noun” (verbo-nombre en castellano), donde “verb” describe la acción u operación a realizar sobre un objeto, y “noun” es el sujeto del verbo sobre el que se aplica la acción. Este método se ha implementado desde entonces en múltiples sistemas.

El AGC ofrecía a la tripulación un grupo funcional de programas (conocidos como Major Modes), rutinas y programas de servicio que tenían asignadas unas tareas a realizar cuando se ejecutaban. A pesar de que el hardware y software eran prácticamente idénticos, el Módulo de Mando y el Módulo Lunar disponían de un conjunto de programas diferentes ya que cada módulo tenía funciones distintas dependiendo en qué fase de la misión se encontrara. Cada programa se identificaba por un número decimal de dos dígitos y un título, como por ejemplo: P64 “Aproching Phase”, que era el programa que debía ejecutarse en la fase de aproximación a la Luna durante el descenso del Módulo Lunar. En el caso de las rutinas, la codificación de las mismas era idéntica a la de los programas, y consistía en un número decimal de dos dígitos y un título que las identificaba. Las rutinas se invocaban desde los programas y ejecutaban tareas muy concretas. Un programa podía invocar a otro y ejecutarse varios programas de forma secuencial (como en el despegue desde la Tierra o en la aproximación a la superficie lunar). Para ejecutar programas, mostrar datos de navegación o cargar datos en la interfaz, los astronautas debían introducir los comandos VERB/NOUN comentados, disponiendo de un panel cerca de la interfaz del AGC que mostraba una lista con los más significativos.

Es importante resaltar, que no todas las combinaciones de VERB+NOUN eran válidas. En caso de que se introdujera una combinación no válida se mostraba un error en el DSKY. Veamos unas cuantas combinaciones de secuencias:

Miscelánea

Simulación AGC en la fase de descenso a la Luna

En el siguiente vídeo se muestra una simulación de parte del descenso del Apolo 11 a la superficie lunar desde el interior del Módulo Eagle. Durante el mismo, saltaron hasta un total de cinco alarmas (códigos 1201 y 1202) que añadieron mayor tensión si cabe a un momento crítico de la misión. Estas alarmas se reprodujeron por una saturación del computador AGC debido a que la tripulación dejó operativo un radar de la nave que apuntaba al módulo de mando mientras este orbitaba alrededor de la Luna, y enviaba constantemente datos al computador sobre la posición del módulo tripulado por Michael Collins. En cada ocasión en la que saltaba la alarma, el computador se saturaba y se reiniciaba (sistema de protección de reinicio), situación que no era percibida por la tripulación de la nave. Gracias a haber diseñado un sistema con nivel de prioridades en la ejecución de tareas, un control de excepciones y al reinicio «soft reset» diseñado por Margaret Hamilton y su equipo, junto con los conocimientos adquiridos en simulaciones previas realizadas, Steve Bales, responsable de control de los sistemas de navegación y guiado de los módulos de mando y lunar contestó al Director de vuelo, Gene Kranz, “GO” que era la forma de aprobación establecida para continuar con la misión. En la parte final del descenso Neil Armstrong tomó los mandos de la nave, ya que el computador había elegido un cráter lleno de rocas como zona de aterrizaje y con apenas combustible, logró alunizar y se puso en contacto con la base terrestre: «Houston, eh…Desde la Base de la Tranquilidad, el Águila ha aterrizado”.

Don Eyles, el primer hacker espacial de la historia

Las alarmas que saltaron durante el descenso del Apolo 11 a la Luna no fueron el único incidente relacionado con el AGC durante el programa espacial. Un problema de software previo al descenso del Apolo 14 a la Luna casi lleva al traste la misión, lo que, tras el fracaso de su predecesora, la misión Apolo 13, hubiera supuesto dos fracasos consecutivos y adelantar el fin del programa.

Todo sucedió cuando la tripulación detecto que el botón diseñado para cancelar la misión (“Abort”) parecía que estaba estropeado. Por momentos cundió el pánico en tierra ya que el interruptor, que aparentemente estaba bloqueado, impediría aterrizar la nave al pensar el software del AGC que el botón estaba pulsado, y hubiera procedido a abortar el aterrizaje, no pudiendo dar la vuelta e intentarlo de nuevo.

Rápidamente se empezó a estudiar cómo solucionar esta situación, y entonces apareció Don Eyles, científico del MIT. Eyles pensó en una ingeniosa forma de engañar al AGC evitando que el computador no viera el estado del botón “Abort” durante la maniobra de descenso. Escribió un parche para solucionar el problema, que fue probado en un simulador y aparentemente funcionaba. Los astronautas debían de introducir una combinación de 65 pulsaciones en la interfaz gráfica del AGC. Automáticamente, se pusieron en contacto con Houston y les comunicaron la solución tan sólo diez minutos antes de que la tripulación del módulo lunar del Apolo 14 iniciara las maniobras de descenso a la superficie lunar. Desde la ciudad tejana se pusieron en contacto con los astronautas y les transmitieron el código. El alunizaje se completó con éxito, convirtiendo de esta forma a Don Eyles como el primer “hacker espacial” de la historia.

El Apollo Guidance Computer en el cine

La llegada del hombre a la Luna ha sido llevada a la gran pantalla en múltiples ocasiones. Podemos destacar de entre todas ellas Apollo 13 (Universal Pictures, 1995), Figuras Ocultas (20th Century Fox, 2017) y First Man (Universal Studios, 2018).

APOLLO 13: Narra la historia de la misión Apolo 13 a la Luna, durante la cual se produjo la explosión de un tanque de oxígeno a los dos días del despegue que inhabilitó el módulo de servicio del cual dependía el módulo de mando, por lo que los astronautas tuvieron que utilizar el módulo lunar para volver a la Tierra. En varias secuencias de la película se puede observar a los astronautas interactuando con el AGC.

FIGURAS OCULTAS: Relata la historia de Katherine Johnson, Dorothy Vaughan y Mary Jackson, las conocidas como «computadoras humanas» que formaron parte del Programa Apolo encargándose del cálculo de las trayectorias de las naves antes de la llegada de los computadores, y cómo supieron predecir que estos serían esenciales en el futuro y fueron las primeras en conocer su funcionamiento.

FIRST MAN: Neil Armstrong fue el primer ser humano en pisar la Luna. En este Biopic podemos conocer el camino que llevó a Armstrong desde ser un piloto civil de pruebas a convertirse en leyenda. En los minutos finales se recrea el descenso de Armstrong y su compañero Aldrin a bordo del módulo Eagle, y los problemas del computador durante el descenso.

Simuladores del Apollo Guidance Computer

En internet disponemos de múltiples simuladores del Apollo Guidance Computer para poder ponernos en la piel de los astronautas de las misiones Apolo. Por ejemplo, podemos recrear el despegue desde la tierra de la misión Apolo nueve. También están disponibles simuladores de la interfaz gráfica DSKY en las plataformas Google Play y Apple Store donde nos podemos descargar e instalar en nuestro smartphone o tablet la interfaz del AGC.

Construye tu propio AGC

Para los más atrevidos, existe la posibilidad de construir tu propio Apollo Guidance Computer con componentes actuales gracias a que un ingeniero americano, John Pultorak, elaboró un manual de nueve fascículos (disponible en la red) en los que se describe detalladamente los pasos a seguir para construir una réplica del computador.

¡Espero que hayáis disfrutado de este paseo por las estrellas!

Créditos

Este proyecto de investigación ha sido desarrollado por Eduardo Cosín Piqueres, alumno de la Escuela Técnica Superior de Ingeniería Informática de la Universidad Politécnica de Valencia, para su Trabajo Final de Grado bajo la tutorización del profesor Xavier Molero Prieto.