Cómo SpaceX escribe software



Douglas Hurley y Bob Behnken en la cápsula Endeavour



SpaceX está desarrollando rápidamente proyectos en varias direcciones. La primera etapa del cohete Falcon 9, después de lanzar la carga útil al espacio, regresa a la Tierra para su reutilización, similar a las pruebas de prototipos de Starship. Crew Dragon está entregando a la tripulación a la ISS, se está preparando la segunda generación de camiones Dragon. Un enjambre de satélites de comunicación Starlink está produciendo más de cien megabits por segundo para usuarios reales de la prueba beta abierta.



Todos estos proyectos requieren un alto grado de automatización, que es responsabilidad del equipo de desarrollo de software. Los expertos de SpaceX hablan de ello con mucho gusto: no solo es importante para atraer candidatos a puestos vacantes, sino que también es interesante para todos los demás.



Complejidad del espacio



El 14 de diciembre de 1966, en un lanzamiento de prueba no tripulado del Soyuz, el barco 7K-OK No. 1 aterrizó en la plataforma de lanzamiento: el "encendedor" de uno de los motores no funcionó. La automatización detuvo la secuencia de lanzamiento antes de que el cohete pudiera separarse de la superficie de la plataforma de lanzamiento. El personal se acercó al cohete para inspeccionarlo y evaluar la posibilidad de relanzamiento. El sistema de rescate de emergencia (SAS) de Soyuz se activó de repente. Sus motores de pólvora llevaron con cuidado el vehículo de descenso a una altitud de 700 metros y lo entregaron a la potencia de los paracaídas, pero también encendieron el líquido inflamable derramado del sistema de control térmico del compartimiento de instrumentos, que quedó en la Tierra. La parte superior del cohete se iluminó. Como recuerda Chertok, el recuerdo del desastre de Nedelinobligó a la gente a salir corriendo de la plataforma de lanzamiento. Murió una persona.



El esclarecimiento de las razones de la activación del SAS en un cohete estacionario comenzó incluso antes de apagar la plataforma de lanzamiento. Durante el vuelo, el cohete compara constantemente las desviaciones del sistema de referencia inercial de la trayectoria calculada. Si la diferencia es demasiado grande, se activa SAS. El cohete que se encuentra en la plataforma de lanzamiento todavía se mueve: gira con la Tierra y los giroscopios están "atados" a las estrellas. Al diseñar los sistemas de emergencia, se asumió que la Tierra estaba estacionaria. En 27 minutos , unos 8 grados " corrieron ", y la señal de encendido se recibió en 32 cargas pirotécnicas SAS.



Este "error" se pasó por alto incluso sin las complejidades de las computadoras modernas. Todos los sistemas críticos de cualquier nave espacial ahora están controlados por componentes electrónicos. Este ni siquiera es el " guión más caro de la historia " de la sonda Mariner 1 de 1962: en los sistemas modernos, el espacio para errores asciende a decenas, cientos de miles de líneas de código. Cualquier falla notable del software degrada la calidad del trabajo o incluso conduce a la pérdida del dispositivo.



Parece que la madurez de la dirección y la propia cultura del desarrollo aeroespacial han negado cualquier error "infantil". Pero este no es el caso. Hasta ahora, los cohetes explotan con error de conversión variable , los rovers cuelgan con inversión de prioridad y sondas orbitalescaen debido a un valor en el sistema de medición incorrecto . Incluso Starliner, un competidor directo de Crew Dragon, no llegó a la ISS debido a la calidad del software.





SpaceX ha publicado este video con amor por su cultura de prueba y error



. El ejemplo de SpaceX es curioso en este contexto. Esta empresa relativamente joven con logros notables no habría sucedido sin un software que los equipos pequeños desarrollan y prueban rápidamente.



Falcon en x86



Los problemas son causados ​​no solo por la confiabilidad del código, el espacio es hostil incluso para el hardware. En la Tierra, estamos protegidos de la radiación por el campo magnético y la atmósfera. En el espacio, una corriente de partículas de alta energía convertirá fácilmente uno en cero en una celda de memoria, o incluso desactivará los componentes por completo. La microelectrónica espacial requiere al menos una certificación especial y, a veces, recurre a microcircuitos especiales, por ejemplo, tecnologías de semiconductores de silicio sobre zafiro .



SpaceX está ignorando la actitud aprensiva establecida hacia los equipos espaciales. Desde sus inicios , la empresa se ha destacado por su amor por los componentes relativamente baratos. Por ejemplo, en 2005, los periodistas informaron que las computadoras del cohete Falcon 1 se comunicaban a través de un cable Ethernet normal.



Como dijeron los ingenieros de SpaceX ( 1 , 2 ) en la conferencia GDC 2015, en el cohete Falcon 9, tres computadoras de doble núcleo de arquitectura x86 están instaladas en cada etapa. En cada computadora, en cada uno de los dos núcleos, un sistema operativo con software de vuelo se ejecuta de forma independiente entre sí. El cohete también contiene microcontroladores PowerPC. Controlan varios actuadores: motores, timones de celosía, etc.



Todo este equipo está integrado en el sistema actor-juez.



  • Casi todo se expresa en forma de bucle de control, que es tradicional para TAU: muchas veces se recibe un segundo dato de los sensores, se toma una decisión sobre ellos y los estados pasados ​​del sistema, la computadora emite señales a los dispositivos.
  • . . , .
  • . , , . , .
  • Falcon 9 .


Esta arquitectura simplifica las pruebas en la Tierra y proporciona el nivel requerido de resistencia a la radiación. No hay necesidad de microcircuitos costosos especiales, que, además, pueden tener una arquitectura que solo es familiar para un pequeño número de desarrolladores en el mercado laboral.



Las computadoras de control se prueban en el llamado banco de cohetes de mesa, "un cohete sobre una mesa". Los "cerebros" de Falcon 9 se colocan sobre una superficie plana y se conectan mientras funcionan en un cohete real. Luego, los especialistas lanzan un vuelo simulado completo, monitorean el comportamiento del sistema, su desempeño y posibles fallas. Durante la simulación, una de las computadoras de vuelo se puede apagar para comprender cómo responderá el cohete a esto.



Además, todo el sistema de control puede virtualizar una estación de trabajo, lo que permite realizar pruebas automatizadas masivas y verificación de códigos para vuelos en solo un día.



Un sistema similar de triple redundancia está instalado en la nave espacial Dragon, se dijo en GDC 2015. En las respuestas de 2020, los empleados insinuaron vagamente que la nave espacial Crew Dragon está controlada por un procesador de cuatro núcleos separado, comparable en potencia de procesamiento a un teléfono inteligente hace cinco años.



En general, SpaceX no informa modelos de procesadores exactos. Posiblemente los controladores PowerPC sean RAD750 resistentes a la radiaciónbien probados en rovers y sondas, y los procesadores x86 son soluciones industriales integradas con baja generación de calor y rendimiento modesto.



Pero no se necesita mucho espacio. La propia ISS está controlada por un procesador Intel 80386SX-20 con un coprocesador matemático 80387. Incluso en el momento del lanzamiento de la estación, era un producto de hace diez años.



Al espacio en un navegador



El 30 de mayo, SpaceX lanzó humanos a la órbita por primera vez. Finalmente, apareció una segunda opción para llevar a la tripulación a la Estación Espacial Internacional. Desde 2011, la única solución para esto ha sido la Soyuz rusa.



La audiencia de la transmisión en línea notó cuánto la nave Crew Dragon se veía más grande que la cápsula Soyuz de tres asientos. Con un volumen interno similar, la nave espacial SpaceX tiene 4 metros de diámetro frente a los 2,2 metros de la Unión. SpaceX inicialmente anunció que la nave espacial era de siete plazas, pero la NASA lanzará cuatro astronautas en los Dragones tripulados.



Además de las diferencias físicas, la más notable fue la forma en que las personas navegaban por el barco. "Soyuz" no se aparta de las tradiciones de la ingeniería aeroespacial: la tripulación presiona los interruptores de palanca y las teclas, y los paneles de señales muestran información. Cru Dragon hace todo a su manera. Para una nave espacial SpaceX futurista, el elemento principal es la pantalla táctil.



Las pantallas de Crew Dragon funcionan con el motor del navegador Chromium, es decir, las interfaces están construidas en HTML utilizando componentes web, JavaScript y CSS. Escribimos nuestra propia biblioteca reactiva internamente. El desarrollo de interfaces sigue la metodología Agile con un listón alto de cobertura con pruebas unitarias.





Captura de pantalla del simulador de acoplamiento del navegador.



Antes del primer lanzamiento tripulado, SpaceX publicósimulador basado en navegador del acoplamiento de Crew Dragon a la ISS. El simulador comenzó como un pasatiempo para dos de los desarrolladores de la empresa. Luego decidieron terminarlo y publicarlo para el público en general.



El simulador sigue siendo un simulador: no tiene nada que ver con el código real. Aunque ambos productos fueron escritos por el mismo equipo, son dos proyectos completamente diferentes.



Todo esto no significa que la nave espacial vuele en JavaScript. Chromium en el barco solo se usa como herramienta de renderizado para elementos de la interfaz de usuario. La interfaz del software de vuelo tiene toda la redundancia necesaria y se encuentra fuera de las pantallas, dicen los funcionarios de SpaceX. El backend está escrito en C / C ++.



Un motor de navegador normal en una nave espacial es una decisión atrevida. En las respuestas, los empleados de SpaceX aseguraronque independientemente de la pila tecnológica, los estándares de desarrollo son los mismos, los principios para escribir software confiable y eficiente no cambian, y para comprender los posibles errores, las pruebas se realizan bajo varias condiciones. En caso de rechazo, existen notificaciones y procedimientos adecuados. Finalmente, se suman a las pruebas cientos de horas de entrenamiento de astronautas en simuladores de vuelo en la Tierra.



Para estar seguro, las teclas físicas se encuentran debajo de las pantallas táctiles. Están diseñados para situaciones críticas como un incendio en la cabina de un barco. También hay botones físicos de "inicio" y "aborto" para la mayoría de las operaciones que se pueden llamar desde las pantallas. La NASA ha desarrollado requisitos específicos para las propias pantallas, y la solución de SpaceX partidos ellos .



Los empleados de SpaceX también explicaroncómo llegaron a una solución aparentemente poco convencional para la industria aeroespacial. El proyecto comenzó como un prototipo para mostrar un diseño de muestra para la NASA. Luego, el prototipo se lanzó con éxito en un hardware de vuelo real. A los desarrolladores les gustaron las funciones modernas que estaban presentes en el motor del navegador, y hay suficientes desarrolladores para ello en el mercado.





El diagrama muestra cómo el código JavaScript está aislado de los principales sistemas de control del telescopio James Webb



Aparte de la experiencia SpaceX, no hay nada escandaloso en elegir JavaScript para el campo espacial. En el caso del telescopio espacial James Webb, el código JS se ejecutará directamente en el vehículo. No controlará directamente, por ejemplo, motores, solo llamará a otros programas.



¿Por qué no hay sonido en el espacio?



Porque el cohete vuela en Linux.



El software Falcon 9 se actualiza periódicamente. Casi todos los lanzamientos de cohetes vuelan con un código ligeramente actualizado. Aunque las actualizaciones son tan frecuentes, la "base" para cada lanzamiento específico no se adapta específicamente. Esto lo hacen otros departamentos de SpaceX, que realizan sus propios ajustes en las configuraciones de vuelo: establecen las variables de viento el día del lanzamiento, cambian los límites de tolerancia a fallas, etc.



Crew Dragon está controlado por el sistema operativo Linux con el parche PREEMPT_RT para operación en tiempo real. SpaceX no usaalguna distribución estándar de terceros. La compañía ha construido su propio kernel y utilidades relacionadas. Durante los años de desarrollo, el kernel apenas se ha modificado. Solo hubo cambios menores y algunos controladores especializados para trabajar con el hardware.



Entre los proyectos de código abierto usados son el Das U-Boot cargador del sistema operativo , el Buildroot sistema de distribución de acumulación , la biblioteca C ++ estándar, y el MUSL C biblioteca . Pero, en general, SpaceX no utiliza tanto software escrito fuera de la empresa y elige proyectos de código abierto solo con la mayor calidad posible.



En SpaceX, las pruebas se escriben en Python, se prueban en LabVIEW y vuelanen C ++. Al escribir en C ++, utilizan las técnicas orientadas a objetos del lenguaje, aunque prefieren que todo sea lo más sencillo posible.



SpaceX a nivel de código brinda la posibilidad de un funcionamiento normal con la pérdida de motores sustentadores o de derivación con algoritmo de compensación. Las máquinas de estado contienen todo tipo de emergencias. Por ejemplo, la máquina de estado de la nave "Dragón" estableció la transición autónoma de más cerca a la estación para cuidar si hay algunas fallas.



Los funcionarios de SpaceX dicen que no hay "IA" en Dragon (probablemente algoritmos de red neuronal implícitos), aunque se utiliza algún tipo de visión artificial para la navegación. Desarrolladores explicadoseso no descarta el uso de programas de aprendizaje automático en el futuro.



Starlink



El proyecto de Internet satelital de Starlink incluye incluso más computadoras. En cada lanzamiento, el cohete Falcon 9 pone en órbita 60 satélites, que contienen más de 4.000 computadoras Linux. SpaceX ha puesto decenas de miles de nodos Linux y más de mil microcontroladores en órbita terrestre baja.





La animación muestra cómo se está



desplegando el panel solar del satélite Hace seis meses, Starlink generó aproximadamente 5 TB de telemetría por día, y la constelación solo se ha vuelto más grande. El número de satélites está creciendo y se está trabajando para reducir la cantidad de datos enviados. Para reducir la cantidad de datos que se almacenan a bordo y se envían a la Tierra, algunos de los problemas se diagnostican en el propio dispositivo.



Cada uno de los satélites Starlink está impulsado por un motor de efecto Hall. Debido a esto, el satélite toma la posición deseada en el enjambre y evita la colisión con los desechos espaciales. Pero estas maniobras aún deben realizarse correctamente, y el departamento de comando de la constelación de satélites más grande es pequeño.



Por lo tanto, los programadores estaban desconcertadoscómo evitar colisiones y controlar la posición de los satélites automáticamente. En el sistema desarrollado, se pregunta a los satélites en qué ventana ingresar, y ellos van allí de forma independiente. Además, varias veces al día, los satélites reciben datos de la Tierra sobre las aproximaciones a otros objetos en órbita. Luego, los satélites calculan de forma independiente las maniobras necesarias y se alejan de los desechos espaciales.



La duplicación de sistemas internos en el caso del satélite Starlink solo se realiza hasta cierto límite. Debido al número total de compañeros, el escuadrón no notará la pérdida de un soldado. Si un nodo falla, el usuario en la Tierra se conectará a otro satélite visible en el cielo.



Durante el desarrollo y las pruebas, cada uno de los satélites de la flotilla Starlink no se considera un satélite separado, sino un servidor en el centro de datos. Algunas de las tareas son críticas: administración, actualizaciones de software, energía y seguridad. Se escriben pruebas separadas para estas aplicaciones. Muchas otras características permiten un enfoque más flexible, similar al desarrollo de servicios web. Por lo tanto, el equipo está implementando una construcción de prueba en una pequeña cantidad de satélites y comparando cómo se comportan en comparación con el resto de la constelación. Además, si surgen problemas, el software se mejora o se revierte a la versión anterior.



Este proceso de prueba es necesario para mejorar rápidamente el sistema. Los desarrolladores de SpaceX afirman que muchas veces fue posible encontrar y corregir fallas que eran imposibles de predecir en la Tierra.



El satélite Starlink filtra datos del usuario a través de él y un ataque informático amenaza con ser intervenido. SpaceX ha proporcionado esto y ha añadido cifrado de extremo a extremo. Además, cada uno de los componentes (satélites, puertas de enlace y terminales de usuario) ejecuta solo el código firmado, por lo que un atacante no se registra en el sistema durante mucho tiempo.



Cultura de desarrollo



La mayoría de los ingenieros de software de SpaceX trabajan en Seattle, Washington y Hawthorne, California, y algunos desde oficinas en Texas.





Equipo de desarrollo de software de SpaceX, 2013 La



industria aeroespacial tradicional se ve abrumada tanto por la velocidad de desarrollo como por el tamaño de las divisiones de SpaceX. Al igual que en 2019 ( podcast , marca 44:00), el director de software de la Fuerza Aérea de EE. UU., Nicholas Chillan, dijo que donde las agencias gubernamentales necesitarían al menos 2.500 programadores, SpaceX está contratando a 50. Al mismo tiempo, el equipo de desarrollo escribe software para nueve máquinas diferentes y comprueba el código en 24 horas.



SpaceX está tratando de atraer a desarrolladores de la industria del juego. En GDC 2015, los representantes de la empresa dijeron que aquellos con un título en ciencias de la computación no tenían habilidades de administración de memoria. Inesperadamente, el ritmo de trabajo y los métodos de optimización de los desarrolladores de juegos son adecuados para el espacio. Como dice Elon Musk, en comparación con un MMO, atracar dos barcos es elemental.



Como parte de la AMA en Reddit en 2013, los empleados hablaron sobre la estructura de los departamentos de desarrollo de software.



  • 7 35 . : Falcon 9, Grasshopper Dragon. , , . .
  • SpaceX.  — - . , , , . , SpaceX .  — - : C#, MVC4, EF, SQL; Javascript, Knockout, Handlebars, LESS; REST API, «super sexy».
  • 2013 9 , . , . .
  • . .  — .


La empresa contrata constantemente desarrolladores e ingenieros, y no todos los puestos requieren educación especial. No son muchos acentos diferentes en las oficinas de SpaceX , incluyendo desde el espacio de la antigua URSS. La empresa puede contratar no solo al titular de un pasaporte estadounidense, aunque existen restricciones al régimen de control de exportaciones de tecnologías militares . Para ser contratado, un extranjero necesitará un permiso de residencia, una tarjeta verde de EE. UU. Llevará varios años conseguirlo desde cero. Si ya hay un "verde", entonces la pregunta está solo en la capacidad de mostrar el nivel de calificaciones en la entrevista.



El CEO y CTO de SpaceX, Elon Musk, es conocido por su disgusto por las semanas laborales de 40 horas. Él ha declarado repetidamenteque trabaja de 80 a 120 horas a la semana. Qué es el pop, también lo es la parroquia. Una queja común sobre Glassdoor sobre SpaceX  es el mal equilibrio entre la vida y el trabajo. En testimonios anónimos, los empleados y aprendices hablan sobre el agotamiento frecuente y el turno ahora común de 12 horas .



All Articles