¿Por dónde empiezo a aprender sobre programación de aviónica? [cerrado]

Soy un estudiante en su último semestre que va a obtener una licenciatura en Ciencias de la Computación. Me gustaría eventualmente hacer la transición a la industria de la exploración espacial (NASA, SpaceX, Boeing, Lockheed Martin, etc.). No sé nada de aviónica y me gustaría aprender más sobre el tema, específicamente el lado del software. He encontrado poca información en línea. Por favor, denme material de referencia (libros, sitios web, etc.) para aprender sobre esta área. Su punto de vista e información adicional son bienvenidos.

No tengo ningún libro/material o información más concreta, así que publicaré esto como un comentario, no como una respuesta, pero te sugiero encarecidamente que repase tu programación de bajo nivel si realmente quieres entrar en esto. zona.
@JonStory: definitivamente C y C++. Aunque cosas como las maletas de vuelo electrónicas probablemente se hagan con Java e incluso con HTML y JavaScript.
No estoy convencido de que Java se use mucho en una aerolínea: la JVM presenta demasiada incertidumbre para usarse en una aplicación en tiempo real: pero si eres lo suficientemente competente en C/C++ para conseguir este tipo de trabajo, puede hacer Java mientras duerme.
@JonStory: el tiempo real duro siempre es C o no alojado (subconjunto limitado de) C++. Pero electronic flightbag es una aplicación para mostrar gráficos, listas de verificación y hacer cálculos. No tiene requisitos de tiempo real y normalmente se ejecuta en una computadora portátil o tableta estándar, aunque se están incorporando en aviones nuevos como el A380. Entonces puede ser en Java o incluso HTML+JavaScript.
@JonStory: Por cierto, si menciona la línea aérea , la mayor parte de TI probablemente sea en Java y HTML. Porque las aerolíneas no hacen aviónica. Hacen sistemas de reserva de boletos y aplicaciones de planificación de vuelos y las bolsas de vuelo electrónicas y nada de eso necesita tiempo real. Por cierto, en mi antiguo empleador, un equipo creó un sistema para controlar las luces del aeropuerto (aproximación, pista, calle de rodaje, barras de parada, etc.) e incluso eso estaba en Java. Porque era principalmente GUI para que la torre cambiara las luces y eso tampoco necesitaba tiempo real.
Las aplicaciones EFB para tabletas que reciben datos de TIS-B y el clima pueden no ser difíciles en tiempo real, pero sería conveniente mostrar la información con bastante rapidez.
Lo siento, sí, me refería a la aviación en general, no específicamente a las aerolíneas. Los EFB son una cosa, pero no contaría uno como 'aviónica' de ninguna manera.
programmers.stackexchange.com/a/153267 es una buena lectura sobre el tema.
@rbp: "en tiempo real" tiene un significado muy específico completamente independiente de "bastante rápido". Java está bien para "bastante rápido". Por otro lado, los sistemas de "tiempo real" a menudo no son particularmente rápidos; solo tienen que estar absolutamente libres de retrasos impredecibles (lo que hace que GC esté fuera de discusión; por lo general, incluso cualquier asignación dinámica lo está).
gracias, he estado programando duro en tiempo real durante 35 años, y elegí mis palabras con cuidado
Embry Riddle tiene un programa de grado que es exactamente lo que quieres.
¿Cómo es que esta parte “Por favor, dame material de referencia (libros, sitios web, etc.) para aprender sobre esta área. ” fue marcado en conjunto como basado principalmente en opiniones? ¿Quizás fue editado más tarde...?

Respuestas (8)

Ok, estaba publicando esto como un comentario, pero se estaba volviendo ridículamente largo...

Trabajé durante la mayor parte de mi vida profesional en campos que de alguna manera están relacionados. Puedo ver que hay tres áreas de estudio que te ayudarán mucho aquí.

Primero: lenguajes de programación. Saber un idioma utilizado en la industria es una ventaja. Ahora estoy trabajando en la industria automotriz/transporte; No estoy trabajando en material crítico para la seguridad, así que solo usamos C/C++ estándar. Incluso en ese nivel, un buen conocimiento de software y programación de bajo nivel (cómo escribir un controlador simple, cómo interactuar con un dispositivo usando ioctl, etc.) es muy útil.

Antes de eso, trabajé en un campo relacionado con lenguajes de programación y compiladores, especialmente en simulación y análisis de código concurrente. Entre otros, interactué brevemente con personas que trabajan para Airbus (profesores que están en la academia, pero ayudan a construir software real). Todavía ven y usan mucho Ada, así que... saber eso es bueno :) También sé con certeza que también se usa Java, junto con herramientas especiales para verificar el código.

Lo que nos lleva a lo segundo: todo lo relacionado con la verificación de software , tanto desde un punto de vista teórico como práctico, te ayudará enormemente en esta industria. Estudie y practique con monitores de tiempo de ejecución y verificadores de modelos, al menos. Aprenda sobre varias técnicas de análisis estático, como la interpretación abstracta. Toma clases sobre eso, si puedes en tu escuela.

Y tercero: estudie y practique con sistemas integrados y con los (más raros) sistemas operativos en tiempo real y cómo funcionan (y cómo los programa). Consíguete un arduino o un netduino (no un raspberry PI - ¡nivel demasiado alto, demasiados recursos allí!) y practica con ellos. Más información sobre uboot.

Verificación, prueba, validación, las partes formales de la ingeniería de software son las más importantes. Si el código es crítico para la seguridad, que lo será, usted está en una liga completamente diferente, a la altura de los satélites. Necesita experiencia en ingeniería de requisitos realmente cuidadosa y terriblemente pedante. Los proyectos de aviónica en los que he trabajado se realizaron en grandes equipos internacionales, por lo que también necesitas experiencia en esto.
Y en tu CV deberías tener muchas herramientas de gestión de requisitos y control de versiones; Puertas, Serena, lo que sea. Subversión, CVS. Realmente no importa cuál, porque cada empresa tiene su propia variación, solo tienes que estar acostumbrado a la idea y dispuesto a someterte a la disciplina.

Sospecho que la única respuesta es "en el trabajo".

Aprenda tanto C como C++ y algo de programación integrada e intente postularse para cualquier puesto junior en las empresas que se dedican a la aviónica que encuentre.

Los teléfonos móviles ya no se pueden considerar integrados, pero debería poder encontrar un curso de robótica o cibernética (controladores industriales) o una pasantía que los involucre. Una pasantía en electrónica de consumo también podría ayudar.

Y no olvide que los fabricantes de aeronaves no hacen la aviónica ellos mismos, sino que compran módulos estándar de proveedores como Garmin o Honeywell o los subcontratan a muchas empresas de consultoría. Y esas empresas a menudo también hacen otros tipos de integrados (automotrices, industriales, etc.).


Notas: conozco remotamente a alguien que hizo aviónica y no creo que apuntara específicamente a eso; simplemente era un buen programador de C y solicitó un trabajo. Yo mismo hice algo de automoción, de nuevo acabo de solicitar (junior; fue justo después de la graduación) un trabajo de C/C++ en una empresa de consultoría que originalmente era móvil y se cambió a automoción porque el proyecto original realmente no se puso en marcha.

+1 por su nota: estoy trabajando en un campo relacionado (automoción/transporte) y acabo de solicitarlo. Tenía buenas habilidades de C/C++ y eso fue lo que se necesitó.

Para la aviónica, lo siguiente será esencial solo para que se considere su CV:

  • Buenas habilidades con C
  • Teoría de control, particularmente espacio de estado y más allá
  • Relacionado con la teoría de control, una base sólida en matemáticas
  • Experiencia con procesamiento duro en tiempo real
  • Experiencia trabajando con estándares de codificación.
  • Familiaridad con los procesos de revisión.

Lo siguiente también sería útil: -

  • Experiencia de Ada, y posiblemente C++
  • Algún conocimiento de los procedimientos relacionados con la seguridad (DO-178B, MISRA, etc.)
  • Conocimientos en desarrollo guiado por pruebas.
  • Experiencia de RTOS comunes como VxWorks
  • Experiencia en programación de bajo nivel en microcontroladores

Con un BS (no BEng) en Ciencias de la Computación (no ingeniería electrónica), entonces puede estar en desventaja en algo de esto. DEBE elegir sus proyectos para obtener la experiencia adecuada que desea llevar a los empleadores.

Por supuesto, solo estás al comienzo de tu vida laboral. Un título es solo el comienzo, y cualquier empleador que contrate graduados sabrá que necesita capacitación. Un buen empleador observará más en general qué tan brillante pareces ser y qué tan bien cree que puedes adquirir nuevas habilidades. Si juegas con la tecnología en tu tiempo libre, probablemente también sea algo bueno para llevar a las entrevistas.

Tengo un amigo que trabaja en software de aviónica. Incluyendo proyectos espaciales.

Se metió en esto solicitando un trabajo en empresas que trabajan en ese campo o similar, antes de eso no tenía ninguna formación o experiencia especial en aviónica.

El trabajo de aviónica tiende a hacer más uso de lenguajes de programación que no son convencionales. Creo que hay mucho C incorporado (por lo que las habilidades generales de C pueden ser útiles), pero también lenguajes y ensamblajes específicos del procesador como Ada (quizás más para la aviónica de defensa).

Es muy probable que tenga como objetivo un sistema operativo en tiempo real (RTOS) o un microcontrolador. Así que el conocimiento de estos puede ser una ventaja. Es posible que necesite escribir controladores de dispositivos y migrarlos a nuevas plataformas (por ejemplo, de un microprocesador a otro). Es posible que deba programar microcontroladores (por ejemplo, 8051) en ensamblador o C.

Es probable que encuentre una rigurosidad mucho mayor en términos de escritura y/o uso de pruebas unitarias, arneses de prueba, herramientas de cobertura, pruebas de integración y documentación formal minuciosa y revisión de todo.

Ada probablemente tenga más tracción en el uso civil que en el militar hoy en día, tal vez los contratistas militares todavía tengan una reacción instintiva contra el mandato, 20 años después... Airbus y Boeing son grandes usuarios, al igual que los sistemas ferroviarios y el control del tráfico aéreo. SPARK también está ganando terreno.

Ya se ha sugerido aprender C y C++ , y también agregaría el lenguaje de programación Ada a esa lista. Gran parte del software de aviónica está escrito en esos tres lenguajes de programación.

Mientras aprende C/C++, aprender a codificar correctamente de acuerdo con los estándares de codificación para software de aviación también puede ser útil.

Recomiendo leer:

Si desea jugar con la programación de aviónica real, puede estar interesado en obtener un cuadricóptero de código abierto (como el de AeroQuad ) como juguete y experimentar con su software.

Este. Juega con aviónica de código abierto, sistemas de control terrestre, estabilizadores, rastreadores, ese tipo de cosas. Ardupilot, Planificador de misiones, UDB/MatrixPilot, etc.

No trabajo con aviónica, pero he trabajado con teledetección en el contexto de las Ciencias de la Tierra.

Creo que estos materiales podrían ser de alguna ayuda además de lo que otros han sugerido, especialmente. si está interesado en los aspectos científicos (lo siento, la respuesta puede estar algo fuera de tema si no lo está).

  • Programación

    Además de C, Fortran todavía se usa mucho para implementar varios algoritmos y modelos. Para tareas y visualizaciones más pequeñas, las personas a menudo usan Python ( numpy , scipy , pandas , matplotlib ) y R (R es un excelente lenguaje de programación estadística, algo que usaría en lugar de Excel para cosas serias).

    Con respecto a C, nadie parece mencionar que la codificación segura es realmente necesaria para aplicaciones tan importantes. Seacord, 2013 es un gran libro para este propósito.

    • Chapman, Stephen J. Fortran 95/2003 para científicos e ingenieros. McGraw-Hill, 2008.

    • Seacord, Roberto. Codificación segura en C y C++ (2ª edición) (Serie SEI en ingeniería de software). Addison-Wesley Professional, 2013.

    • Matloff, Norman. El arte de la programación en R. Prensa sin almidón, 2011.

  • Física

    Los buenos fundamentos de la física son sin duda vitales en la exploración espacial.

    Muchas de las medidas que se hacen en el espacio tienen que ver con la radiación, así que agrego una referencia a eso.

  • Matemáticas

    El cálculo es probablemente lo más importante, luego el álgebra lineal.

    Muchos problemas de diseño y física tienen que ver con la estadística y la optimización.

  • Unix/Linux

    Los sistemas operativos Unix se usan mucho en ciencias aplicadas, sistemas integrados y supercomputadoras.

    • Kerrisk, M. La interfaz de programación de Linux: un manual de programación de sistemas Linux y UNIX. Prensa sin almidón, 2010.

    • Lucas, MW. Absolute FreeBSD: La guía completa de FreeBSD. Prensa sin almidón, 2007.

    • muchos otros libros, por ejemplo, los publicados por O'Reilly

Algunas lecturas diarias: phys.org/space-news/ (-;

Sugiero buscar un curso de análisis de software y aprender un sistema de prueba como PVS. Regresé a la escuela de posgrado después de 14 años en varias industrias de software, y el curso de análisis de software que tomé ha sido fácilmente el más revelador. No habría tenido mucho sentido cuando estaba en la escuela, pero después de trabajar durante muchos años, el material hizo clic. Nunca fue un tema que sentí que disfrutaría, y puede ser un poco seco, pero una vez que lo aprendes, nunca verás la programación de la misma manera.