Cuando la gente piensa en la exploración espacial, tienden a pensar en cohetes espaciales. Pero a decir verdad hay mucho más que eso.
Cuando pensamos en la exploración espacial, pensamos en astronautas, cohetes o la Estación Espacial Internacional. Quizá también pensemos en un equipo de expertos sentados en una oficina de una agencia espacial china, estadounidense o soviética, brincando de jubilo cuando aterrizan con éxito un nuevo vehículo espacial.
Lo que realmente casi no pasa por nuestra cabeza es a todo el personal que dedicó su tiempo en el diseño del software que mantiene los satélites en órbita y los cohetes en marcha. Un gran número de personas revisan los datos de los sensores satelitales o simulan lanzamientos de cohetes antes de que se lleven a cabo. Ellos también están haciendo ciencia espacial. Pero es menos intuitivo pensar en ellos como tales.
Muchas imágenes que vemos en los medios muestran equipos de expertos felicitándose a sí mismos o geniales rovers y cohetes navegando en el espacio exterior. Satisfacen nuestra curiosidad humana y nuestra sed eterna de cruzar nuevas fronteras y expandir nuestros horizontes. Al mismo tiempo, este tipo de historias mantienen las cosas bastante simples. Cualquiera puede apreciar el hecho de que la humanidad ha aterrizado algunos rovers en Marte. Por otro lado, se necesita mucha experiencia para comprender cómo se construye ese rover, qué se necesita para dirigirlo y qué tecnologías lo hacen apto para la vida en Marte.
Mucha gente quiere saber sobre el espacio. Quieren saber cómo es y qué está haciendo la humanidad para explorarlo. Pero sin un conocimiento detallado, es difícil entender cómo funciona realmente la tecnología espacial.
Ahí es donde ayuda ser un ingeniero de software. Incluso si no sabe mucho sobre física o sobre materiales de cohetes, los codificadores pueden comprender qué tipos de tecnologías de software se utilizan en el espacio y por qué.
Aunque la NASA hace público gran parte de su código, es difícil encontrar detalles sobre las actividades diarias de un ingeniero de software para tecnología espacial. Sin embargo, hay algunas historias disponibles de los proyectos de Elon Musk. Teniendo en cuenta que trabajar en SpaceX o Starlink es el sueño de muchos ingenieros.
Starlink, donde los satélites calculan sus propias rutas
En 1945, cuando el escritor de ciencia ficción Arthur C. Clarke propuso por primera vez la televisión por satélite , sonaba como una quimera, tres décadas después esta tecnología finalmente se hizo realidad. Hoy en día, muchas personas tienen receptores de satélite en sus techos y no piensan en ello. La principal ventaja de los satélites sobre el cable es que pueden llegar a áreas rurales, lo que no sería rentable con cables muy largos.
Del mismo modo, Internet por satélite todavía suena como un sueño imposible para muchas personas. Pero la demanda está ahí: uno de cada cuatro estadounidenses piensa que su falta de acceso a Internet de alta velocidad es un problema importante. El acceso irregular a Internet también es un problema para objetos en movimiento como trenes, aviones y barcos. Cualquiera que haya intentado usar WiFi mientras viajaba puede dar fe de ello.
Sin embargo, estos problemas podrían resolverse pronto. Starlink, una escisión del pionero de los cohetes del sector privado SpaceX, está sentando las bases para un acceso a Internet más expansivo. Anunciado por primera vez en 2015, Starlink Internet ya está disponible en muchas partes de los EE. UU. en la actualidad.
Para garantizar que Internet no sea demasiado lento, los satélites deben estar bastante cerca de la Tierra. Por eso, solo permanecen en la parte superior durante unos minutos a la vez. Por lo tanto, las antenas terrestres con las que se comunican necesitan cambiar el satélite con el que hablan muy a menudo. Y la red satelital debe ser lo suficientemente densa para proporcionar una señal a las antenas en cualquier momento dado.
La red consta de cientos de satélites; constantemente se agregan nuevos y se reemplazan los antiguos. Como resultado, el líder de software de Starlink, Andy Bohn , dice que el equipo no tiene tiempo para poner cada satélite en su propia órbita designada. En cambio, cada satélite Starlink se navega solo. Para gestionar las condiciones de mucho tráfico, la red del lado de la Tierra le da a cada satélite un lugar para estar, y el satélite se dirige solo a su lugar.
Este proceso requiere un gran esfuerzo computacional. Primero, los satélites no solo corren el riesgo de chocar entre sí. También pueden chocar con aviones y otros satélites en órbita baja. Los satélites Starlink ya están involucrados en la mitad de las casi colisiones en el espacio , donde dos objetos se acercan más de un kilómetro (0,6 millas) entre sí, por lo que este riesgo es real.
En segundo lugar, la posibilidad de interferencia contribuye a los requisitos computacionales masivos. Cuando las señales de dos satélites se superponen, pueden distorsionarse o incluso cancelarse entre sí. Evitar la interferencia requiere poner las señales en bandas de frecuencia ligeramente diferentes. Pero esto no es tan fácil como parece, y hay un número finito de posibles bandas de frecuencia. Por lo tanto, dos satélites con bandas demasiado similares no pueden acercarse demasiado. Este requisito complica aún más la navegación de los satélites.
Quizás se pregunte por qué las posiciones de los satélites deben calcularse en la Tierra y no directamente a bordo de los satélites. Por un lado, si algo sale mal dentro de un satélite, es mucho más difícil ir allí y arreglarlo. Además, las cosas salen mal con mucha más frecuencia en el espacio exterior que en la Tierra. Debido a que la radiación del sol es mucho más fuerte fuera de la atmósfera de la Tierra, los bits pueden voltearse más fácilmente. Los bits, las unidades de codificación cero o uno de todas las computadoras, pueden corromper programas de software completos cuando cambian su valor. Para evitar que esto arruine la trayectoria de un satélite, diferentes máquinas comparten software y se puede recargar una copia correcta en caso de corrupción.
El software de Starlink está escrito en lenguajes de programación conocidos. Debido a su confiabilidad y capacidad para la programación completa, Starlink usa C++ para la mayoría del código en sus satélites, también usa Python para algunos prototipos porque generalmente es más rápido de construir. Esto refleja lo que los desarrolladores usan en la tecnología de vehículos autónomos .
Internet satelital es un proyecto muy ambicioso y viene con muchos desafíos difíciles. Starlink es, sin duda, el pionero en este campo, pero otras compañías y agencias espaciales se apresuran a seguirlo. En una década o dos, podría ser tan estándar como lo es hoy la televisión por satélite.
SpaceX, tratando de no fallar
Igualmente ambicioso es SpaceX, del cual Starlink es una rama. Lanzar cohetes al espacio exterior, acoplarse a la ISS o apuntar a Marte requiere casi la perfección tanto en la ingeniería de hardware como de software. Las pruebas pueden fallar , por supuesto. Pero en la misión final, nada puede salir mal. Y si una parte del sistema del cohete no funciona correctamente, todas las demás partes deben compensar esa falla.
Todo el software de vuelo para los cohetes SpaceX se basa en ciclos de control. Primero, se leen todas las entradas, como datos de sensores o comandos desde el suelo. Luego, estos datos se procesan y se calculan cosas importantes, como la posición del cohete o el estado del sistema de soporte vital . Luego, el programa entra en suspensión durante una fracción de segundo, para ahorrar potencia de cálculo, después de lo cual todo el ciclo comienza de nuevo.
Diferentes subsistemas controlan diferentes partes del cohete. Para evitar grandes desastres, estos deben estar aislados unos de otros. Si, por ejemplo, algo sale mal en el sistema de guía que dirige la aeronave, el sistema de soporte vital no necesita fallar también. Si algo sale mal, el espectáculo aún debe continuar.
Esta configuración difiere de la cantidad de otras empresas tecnológicas que operan. Tomemos a Google, por ejemplo. Registran todos los fallos , seleccionan los que parecen más importantes y tratan de extraer de ellos lecciones para el futuro. En otras palabras, Google permite que ocurran fallas y trata de aprender de ellas después.
Para Google, este enfoque funciona perfectamente bien. Pero una máquina de búsqueda (y traductor, editor de documentos, proveedor de servicios en la nube y más) funciona de manera un poco diferente a un cohete. Si un proceso en Google falla, tal vez una consulta de búsqueda arroje resultados espeluznantes. Sin embargo, si un cohete tripulado se dirige en la dirección equivocada, las vidas humanas están en peligro.
Debido a la naturaleza de alto riesgo de los problemas que aborda, SpaceX hace todo lo posible para nunca fallar. Aunque los ingenieros de la compañía aceptan el fracaso de las pruebas de cohetes, en esos casos, casi a propósito permiten que el proyecto fracase para aprender para el futuro. Sin embargo, cuando el cohete arranca para una misión real, todo debe funcionar. Eso significa que el cohete debe permanecer intacto incluso si falla una parte.
Código de prueba, prueba y prueba
El software de Rocket debe ser lo más confiable posible. Por lo tanto, no sorprende que los requisitos de calidad sean altos en la NASA y SpaceX , especialmente en comparación con las aplicaciones comerciales regulares. Existen sistemas elaborados para garantizar que nadie rompa el código fusionando algo defectuoso con la rama principal. Dicho esto, ninguna de las herramientas de SpaceX relacionadas con las pruebas es desconocida en otras partes del desarrollo de software.
Antes de que un desarrollador pueda realizar una solicitud de extracción, debe cumplir con un conjunto de criterios elaborados. Antes de la fusión, el código se prueba dos veces y se vuelve a probar después de la fusión real.
El entorno de integración continua de SpaceX se basa en gran medida en HTCondor y sus metadatos se gestionan con PostgreSQL. Además, la empresa utiliza Python para la ejecución de pruebas de back-end, orquestación de compilación y servicios web. Para el front-end de estos servicios web, utiliza Angular, JavaScript y algo de TypeScript. En términos de contenedorización, SpaceX usa Dockers, junto con un poco de Kubernetes.
La elección de herramientas e idiomas es, por lo tanto, muy similar a lo que esperaría en una empresa terrestre. Sin embargo, cumplir con los requisitos de calidad y fusionarse es mucho más riguroso.
Creación de software que ayuda a construir cohetes y satélites
Además del software que se implementa dentro y alrededor de cohetes y satélites, los proyectos espaciales también se ocupan del software de aplicación. Este tipo ayuda a llevar un cohete a la plataforma y prepararlo para el lanzamiento e involucra áreas como la cadena de suministro, fabricación, finanzas, inventario y más.
Siguiendo la tendencia de muchas industrias, el software de aplicación de SpaceX ha pasado de una arquitectura monolítica a microservicios, específicamente de AngularJS, C# y MySQL a Angular, PostgreSQL y contenedorización. La ventaja es en gran medida la misma que para todos los demás sistemas de SpaceX: si una pieza se rompe o espera reparación, esa demora no afecta tanto a las otras piezas.
Lo que distingue a la división de software de aplicaciones de SpaceX de sus equivalentes en otras compañías es que tienen cuatro proyectos muy diferentes para respaldar: Falcon, que entrega carga al espacio exterior, Dragon, que se enfoca en vuelos espaciales tripulados, Starship, que se enfocará en el transporte interplanetario, y Starlink, para internet satelital. Este alcance de proyectos lo distingue incluso de la NASA.
Como en otras áreas, la tecnología espacial utiliza en gran medida las mismas herramientas y sigue las mismas tendencias que otras, pero el alcance y la variedad de los proyectos es mucho mayor que en la mayoría de las empresas terrestres.
En otras palabras, si es un desarrollador de software experimentado y está considerando trabajar en la NASA, SpaceX o Starlink, no necesitará aprender sobre muchas más herramientas y marcos. Pero debe prepararse para tareas más variadas, requisitos de mayor calidad y un día de trabajo más intenso por delante.
Más en ingeniería de software
Entonces, ¿quieres ser un desarrollador de pila completa? Aquí están las habilidades que necesita.
El software espacial también beneficia a los terrícolas
Es bastante legítimo preguntarse por qué deberíamos molestarnos en explorar el espacio exterior cuando ni siquiera podemos manejar nuestros problemas en la Tierra adecuadamente. En medio de una pandemia en curso, desigualdades raciales y sociales, inundaciones e incendios forestales, además de todos los problemas más pequeños de la vida, ¿no deberíamos apartar la mirada del cielo por un minuto?
El software de código abierto de la NASA , por ejemplo, está disponible para ayudar a minimizar las emisiones de los aviones, calcular el tamaño y los requisitos de energía de un sistema de energía solar o optimizar la eficiencia de las turbinas eólicas. Por lo tanto, al escribir código para el espacio exterior, algunos desarrolladores podrían estar contribuyendo a hacer que otros sectores sean más ecológicos.
Al desarrollar regulaciones inteligentes, debemos asegurarnos de que estas personas no colonicen el espacio y repitan la historia. Estas regulaciones existen y aseguran que ningún país llame al espacio su propio territorio, que cada nación sea libre de explorarlo, que ninguna entidad pueda causar daño al espacio o al medio ambiente, y así sucesivamente. Mientras nos aseguremos de que se respeten estas reglas, no estamos arriesgando el futuro de los humanos menos ricos, no estamos desperdiciando el dinero de los impuestos, podemos cosechar los beneficios del código fuente abierto y podemos satisfacer nuestra curiosidad humana por nuevas fronteras.