{"id":22914927,"url":"https://github.com/esa/dsgp4","last_synced_at":"2025-04-06T21:14:50.032Z","repository":{"id":200747811,"uuid":"485800082","full_name":"esa/dSGP4","owner":"esa","description":"dSGP4: differentiable SGP4. Supports differentiability, ML integration \u0026 embarassingly parallel computations","archived":false,"fork":false,"pushed_at":"2025-02-21T12:38:21.000Z","size":4291,"stargazers_count":45,"open_issues_count":1,"forks_count":10,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-30T20:11:13.038Z","etag":null,"topics":["astrodynamics","differentiable-programming","embarassingly-parallel","machine-learning","orbital-dynamics","orbital-mechanics","orbital-propagation","sgp4","space-debris"],"latest_commit_sha":null,"homepage":"https://esa.github.io/dSGP4/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/esa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-26T13:33:22.000Z","updated_at":"2025-03-28T15:58:31.000Z","dependencies_parsed_at":"2023-12-11T00:27:17.512Z","dependency_job_id":"9240effc-3596-43f6-9b97-80d78abc10a6","html_url":"https://github.com/esa/dSGP4","commit_stats":{"total_commits":165,"total_committers":4,"mean_commits":41.25,"dds":0.06060606060606055,"last_synced_commit":"2b9f977b77a11645898079584d4554c83f81f990"},"previous_names":["esa/dsgp4"],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esa%2FdSGP4","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esa%2FdSGP4/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esa%2FdSGP4/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esa%2FdSGP4/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/esa","download_url":"https://codeload.github.com/esa/dSGP4/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247550690,"owners_count":20956987,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["astrodynamics","differentiable-programming","embarassingly-parallel","machine-learning","orbital-dynamics","orbital-mechanics","orbital-propagation","sgp4","space-debris"],"created_at":"2024-12-14T05:17:53.632Z","updated_at":"2025-04-06T21:14:50.012Z","avatar_url":"https://github.com/esa.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# $\\partial\\textrm{SGP4}$\n[![build](https://github.com/esa/dSGP4/actions/workflows/build.yml/badge.svg)](https://github.com/esa/dSGP4/actions/workflows/build.yml)\n[![codecov](https://codecov.io/gh/esa/dSGP4/graph/badge.svg?token=K3py7YT8UR)](https://codecov.io/gh/esa/dSGP4)\n[![Anaconda-Server Badge](https://anaconda.org/conda-forge/dsgp4/badges/latest_release_relative_date.svg)](https://anaconda.org/conda-forge/dsgp4)\n[![Anaconda-Server Badge](https://anaconda.org/conda-forge/dsgp4/badges/downloads.svg)](https://anaconda.org/conda-forge/dsgp4)\n\nDifferentiable SGP4.\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/esa/dSGP4\"\u003e\n    \u003cimg src=\"doc/_static/logo_dsgp4.png\" alt=\"Logo\" width=\"280\"\u003e\n  \u003c/a\u003e\n  \u003cp align=\"center\"\u003e\n    Differentiable SGP4\n    \u003cbr /\u003e\n    \u003ca href=\"https://esa.github.io/dSGP4\"\u003e\u003cstrong\u003eExplore the docs »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/esa/dSGP4/issues/new/choose\"\u003eReport bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/esa/dSGP4/issues/new/choose\"\u003eRequest feature\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/p\u003e\n\n## Info\n\n![orbits](https://github.com/esa/dSGP4/assets/33602846/2f42992d-0838-4c11-ae4b-68ad76e2bf33)\n\nThis repository contains the code discussed in [this paper](https://doi.org/10.1016/j.actaastro.2024.10.063). \n\n$\\partial \\textrm{SGP4}$ is a differentiable version of SGP4 implemented using PyTorch. By making SGP4 differentiable, $\\partial \\textrm{SGP4}$ facilitates various space-related applications, including spacecraft orbit determination, covariance transformation, state transition matrix computation, and covariance propagation. \nAdditionally, $\\partial \\textrm{SGP4}$'s PyTorch implementation allows for parallel orbital propagation across batches of Two-Line Element Sets (TLEs), leveraging the computational power of CPUs, GPUs, and advanced hardware for distributed prediction of satellite positions at future times. Furthermore, $\\partial \\textrm{SGP4}$'s differentiability enables integration with modern machine learning techniques. \nThus, we propose a novel orbital propagation paradigm, $\\textrm{ML}-\\partial \\textrm{SGP4}$, where neural networks are integrated into the orbital propagator. \nThrough stochastic gradient descent, this combined model's inputs, outputs, and parameters can be iteratively refined, surpassing SGP4's precision while maintaining computational speed. This empowers satellite operators and researchers to train the model using high-precision simulated or observed data, advancing orbital prediction capabilities compared to the standard SGP4.\n\n## Goals\n\n* Differentiable version of SGP4 (implemented in PyTorch)\n* Hybrid SGP4 and machine learning propagation: input/output/parameters corrections of SGP4 from accurate simulated or observed data are learned\n* Parallel TLE propagation\n* Use of differentiable SGP4 on several spaceflight mechanics problems (state transition matrix computation, covariance transformation, and propagation, orbit determination, ML hybrid orbit propagation, etc.)\n\n## How to cite\n\nIf you use `dsgp4`, we would be grateful if you could star the repository and/or cite our work.\n$\\partial \\textrm{SGP4}$ and its applications for ML hybrid propagation and more, can be found in our [publication](https://doi.org/10.1016/j.actaastro.2024.10.063):\n\n```bibtex\n@article{acciarini2024closing,\ntitle = {Closing the gap between SGP4 and high-precision propagation via differentiable programming},\njournal = {Acta Astronautica},\nvolume = {226},\npages = {694-701},\nyear = {2025},\nissn = {0094-5765},\ndoi = {https://doi.org/10.1016/j.actaastro.2024.10.063},\nurl = {https://www.sciencedirect.com/science/article/pii/S0094576524006374},\nauthor = {Giacomo Acciarini and Atılım Güneş Baydin and Dario Izzo},\nkeywords = {SGP4, Orbital propagation, Differentiable programming, Machine learning, Spacecraft collision avoidance, Kessler, Kessler syndrome, AI for space, Applied machine learning for space},\n}\n```\n\n## Installation\n\nVia [pip](https://pypi.org/project/dsgp4/):\n```\npip install dsgp4\n```\n\nVia [conda](https://anaconda.org/conda-forge/dsgp4):\n```\nconda install conda-forge::dsgp4\n```\n\nor mamba:\n```\nmamba install dsgp4\n```\n\nLocal installation:\n```\ngit clone https://github.com/esa/dSGP4.git\ncd dSGP4\npip install -e .\n```\n\n## Documentation and examples\n\nTo get started, follow the examples in the [documentation](https://esa.github.io/dSGP4/). You will find tutorials with basic and more advanced functionalities and applications. \n\n## Authors:\n* [Giacomo Acciarini](https://www.esa.int/gsp/ACT/team/giacomo_acciarini/)\n* [Atılım Güneş Baydin](http://gbaydin.github.io/)\n* [Dario Izzo](https://www.esa.int/gsp/ACT/team/dario_izzo/)\n\nThe project originated after the work of the authors at the [University of Oxford AI4Science Lab](https://oxai4science.github.io/).\n\n## Acknowledgements:\n\nWe would like to thank Dr. T.S. Kelso for his support and useful pointers on how to correctly validate the code with respect to the [official release](https://www.space-track.org/documentation#/sgp4) by Space-Track.\n\n## License:\n\n$\\partial\\textrm{SGP4}$ is distributed under the GNU General Public License version 3. Get in touch with the authors for other licensing options.\n\n## Contact:\n* `giacomo.acciarini@gmail.com`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fesa%2Fdsgp4","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fesa%2Fdsgp4","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fesa%2Fdsgp4/lists"}