Bibliotecas de Python: propagadores numéricos y cálculos de acceso

He escrito algo de mi propio código en Matlab que realiza dos cuerpos sin perturbaciones, así como la propagación de la órbita perturbada J2. Estoy cambiando a un nuevo entorno que requiere el uso de Python, y parece que no puedo ver si hay bibliotecas que hagan propagación numérica y accedan a cálculos con elementos orbitales de Kepler.

Conozco bibliotecas como astropy, pero todas parecen estar limitadas a utilizar TLE y no hay forma de definir una órbita personalizada. No necesito súper alta fidelidad.

Consulte nuestras publicaciones etiquetadas para poliastro y pyephem (aunque este último está depreciado). Skyfield podría obtener un integrador algún día. También puede intentar enrollar su propio
¿Por qué no portar su código MATLAB?
No es extremadamente competente en la codificación de código python rápido/vectorizado
De hecho, investigué poliastro, y pensé que la facilidad de uso era fenomenal, pero la propagación era un poco más lenta de lo que esperaba. Necesito poder propagar a intervalos de 30 segundos durante 90 días en menos de 0,5 segundos.
@Smoran Abrí un problema en poliastro para considerar su solicitud github.com/poliastro/poliastro/issues/854 deje un comentario allí para que podamos tener la mayor cantidad de información posible

Respuestas (4)

Descargo de responsabilidad: soy el autor y desarrollador principal de poliastro. ¡Sin embargo, me alegra ver que muchos otros lo recomiendan! :) También trabajo para Satellogic, la compañía que predice la órbita de código abierto.

Tengo experiencia personal con dos bibliotecas: poliastro y orbit-predictor (ver descargos de responsabilidad arriba).

poliastro proporciona un marco genérico para la determinación de la órbita inicial y el análisis preliminar de la órbita, actualmente centrado en aplicaciones interplanetarias. En nuestra hoja de ruta, mencionamos explícitamente agregar más funciones específicas de la Tierra , que es algo que seguiremos haciendo este año (gracias a que OpenAstronomy fue seleccionado en Google Summer of Code ). Esto incluye agregar un propagador semianalítico que tenga en cuenta los efectos J2, entre otros . Por el momento, puede simular esto utilizando el método genérico de Cowell y agregando una fuerza de perturbación J2 , como se muestra en la Guía del usuario .

orbit-predictor es una especie de contenedor de alto nivel para python-sgp4 , la venerable implementación de SGP4 mantenida por Brandon Rhodes (recientemente con nuevos lanzamientos). Proporciona Predictorobjetos que sirven como propagadores, como TLEPredictor, KeplerianPredictor(imperturbable) y J2Predictor(contabilización de J2). Este último tiene métodos de fábrica para crear satélites sincrónicos con el sol y constelaciones completas, y métodos de conveniencia para calcular los pases sobre una ubicación con algunas restricciones geométricas, la duración del eclipse y los próximos eclipses (estamos agregando este último mientras hablamos ) . Sin embargo, la documentación no es tan buena, por lo que mi recomendación sería leer el código fuente.

Visión histórica adicional

En poliastro reescribimos la API usando Plyades como inspiración (¡gracias Helge!) pero Plyades ahora no se mantiene porque su autor pasó a escribir JuliaAstro. Otros paquetes como orbital sufren lo mismo. Consulte la actividad del proyecto antes de elegir :)

Hablando de que:

esfuerzo cohesivo para fusionar Plyades, PoliAstro y otro software Python de mecánica orbital (el Proyecto de Astrodinámica de Python)

El proyecto Python Astrodynamics fue un esfuerzo que Helge, Frazer y yo comenzamos a fusionar estos tres paquetes, pero al principio encontramos algunos desacuerdos, por lo que realmente nunca comenzó. Fue reemplazada por la Iniciativa OpenAstrodynamics , que establece que es mejor generar diversidad y colaboración a través de estándares y protocolos abiertos que tratar de fusionar proyectos en uno solo.

Gracias por aclarar Juan! :)

¡Mira PoliAstro de Juan! Tiene excelentes herramientas de visualización además de su propagación. Plyades también es una biblioteca para la propagación de órbitas con visualización. Escuché que hay un esfuerzo cohesivo para fusionar Plyades, PoliAstro y otro software Python de mecánica orbital (el Proyecto Python Astrodynamics).

También he oído hablar de Orekit, pero no lo he usado, que tiene un Python Wrapper. Tradicionalmente era una herramienta de propagación de órbitas escrita en Java, pero tiene un contenedor de Python aquí .

En cuanto a los accesos, por lo que he buscado, no hay una biblioteca de Python disponible. Sin embargo, puede probar STK , la licencia gratuita permite acceder a los cálculos y, si no me equivoco, también puede usar Python para automatizar tareas en STK .

+1Por cierto, ¿cómo se enteró de "...esfuerzo cohesivo para fusionar..."? ¿Dónde pueden otros también oír hablar de él?
Fue escrito dentro del trabajo de investigación (cerca de la conclusión) de "Plyades: A Python Library for Space Mission Design" por Helge Eichhorn∗, Reiner Anderl, declarando: "Al momento de escribir este artículo, Plyades ha sido reemplazado por el proyecto PythonAstrodynamics [PyA15] El proyecto tiene como objetivo fusionar las tres bibliotecas de astrodinámica basadas en Python con licencia del MIT, Plyades, Poliastro [JCR15] y Orbital [FML15], y proporcionar un conjunto completo de herramientas de astrodinámica basado en Python para uso productivo". Ver: arxiv.org/pdf/1607.00849.pdf
¡Súper gracias! Yo no sabía nada de eso.
Juan, el autor de PoliAstro, escribió algunos comentarios sobre los esfuerzos de fusión a continuación :)

Al igual que Sam Low, también puedo recomendar PoliAstro , es un gran proyecto con cada vez más colaboradores.

Estoy usando mucho el Orekit Python Wrapper. La curva de aprendizaje en Orekit puede ser empinada al principio, porque hay cientos de clases de Java. Sin embargo, cuando sabe cómo usarlo, es la biblioteca de astrodinámica (código abierto) más capaz que conozco. Además, es muy rápido, si propaga el satélite sin un bucle y luego recupera los estados intermedios a través de otro bucle más tarde o mediante un StepHandler, consulte https://gitlab.orekit.org/orekit-labs/python-wrapper/- /blob/master/examples/Example_EarthObservation_-_Attitude_Sequence.ipynb .

Como solo desea perturbaciones J2, debe considerar el uso de propagadores semianalíticos como DSST y Eckstein-Hechler , son mucho más rápidos que los propagadores numéricos.

Para agregar al punto de Sam sobre los accesos, también existe el software gratuito GMAT de la NASA que le permite informar los accesos.

Alternativamente, puede calcularlo usted mismo. No tenía necesidad de calcular eso antes, pero hice algunos cálculos relacionados que podrían transformarse fácilmente en cálculos de Windows de acceso. Mi forma propuesta es que primero definiría la estación terrestre de interés, luego propagaría el satélite de interés y obtendría los datos de trayectoria en ECI (junto con los pasos de tiempo). Además, transforme su posición LLA de GS a ECI (con los mismos pasos de tiempo) y realice el cálculo de ángulos de mirada de GS a Sat (transformación de ECI a Azimut-Elevation-Range). Lo único que quedaría sería definir algún tipo de filtrado o 'máscara de visibilidad satelital' (con un ángulo de elevación mínimo como parámetro definitivo), que aplica en su conjunto de datos AzElRange y obtiene los pases visibles de su satélite. Desde allí puede obtener sus marcas de tiempo y acceder a la duración de la ventana.