{"id":22402830,"url":"https://github.com/open-space-collective/open-space-toolkit-astrodynamics","last_synced_at":"2026-05-21T01:08:26.160Z","repository":{"id":37271198,"uuid":"136835751","full_name":"open-space-collective/open-space-toolkit-astrodynamics","owner":"open-space-collective","description":"Flight profile, orbit, attitude, access.","archived":false,"fork":false,"pushed_at":"2026-01-28T18:37:00.000Z","size":453412,"stargazers_count":76,"open_issues_count":34,"forks_count":16,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-01-29T01:42:59.494Z","etag":null,"topics":["access","astrodynamics","attitude","cpp","engineering","flight","orbit","python","space","toolkit","trajectory"],"latest_commit_sha":null,"homepage":"https://open-space-collective.github.io/open-space-toolkit-astrodynamics/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/open-space-collective.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-06-10T18:47:24.000Z","updated_at":"2026-01-28T10:14:47.000Z","dependencies_parsed_at":"2023-12-19T12:05:32.958Z","dependency_job_id":"9b9677c6-378c-4d89-b5d9-2bb427834206","html_url":"https://github.com/open-space-collective/open-space-toolkit-astrodynamics","commit_stats":{"total_commits":450,"total_committers":18,"mean_commits":25.0,"dds":0.6977777777777778,"last_synced_commit":"133716b085a0fdd218c104636581dad9dce813bc"},"previous_names":[],"tags_count":187,"template":false,"template_full_name":null,"purl":"pkg:github/open-space-collective/open-space-toolkit-astrodynamics","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-space-collective%2Fopen-space-toolkit-astrodynamics","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-space-collective%2Fopen-space-toolkit-astrodynamics/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-space-collective%2Fopen-space-toolkit-astrodynamics/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-space-collective%2Fopen-space-toolkit-astrodynamics/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/open-space-collective","download_url":"https://codeload.github.com/open-space-collective/open-space-toolkit-astrodynamics/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-space-collective%2Fopen-space-toolkit-astrodynamics/sbom","scorecard":{"id":708552,"data":{"date":"2025-08-11","repo":{"name":"github.com/open-space-collective/open-space-toolkit-astrodynamics","commit":"4bb25ad40c5f3a84b3580282f19262053ebfa6fe"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.5,"checks":[{"name":"Maintained","score":10,"reason":"22 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":9,"reason":"Found 28/30 approved changesets -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build-test.yml:1","Warn: no topLevel permission defined: .github/workflows/release.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 16.7.1 not signed: https://api.github.com/repos/open-space-collective/open-space-toolkit-astrodynamics/releases/238537722","Warn: release artifact 16.7.0 not signed: https://api.github.com/repos/open-space-collective/open-space-toolkit-astrodynamics/releases/237613727","Warn: release artifact 16.6.2 not signed: https://api.github.com/repos/open-space-collective/open-space-toolkit-astrodynamics/releases/235897394","Warn: release artifact 16.6.1 not signed: https://api.github.com/repos/open-space-collective/open-space-toolkit-astrodynamics/releases/234714896","Warn: release artifact 16.6.0 not signed: https://api.github.com/repos/open-space-collective/open-space-toolkit-astrodynamics/releases/233997697","Warn: release artifact 16.7.1 does not have provenance: https://api.github.com/repos/open-space-collective/open-space-toolkit-astrodynamics/releases/238537722","Warn: release artifact 16.7.0 does not have provenance: https://api.github.com/repos/open-space-collective/open-space-toolkit-astrodynamics/releases/237613727","Warn: release artifact 16.6.2 does not have provenance: https://api.github.com/repos/open-space-collective/open-space-toolkit-astrodynamics/releases/235897394","Warn: release artifact 16.6.1 does not have provenance: https://api.github.com/repos/open-space-collective/open-space-toolkit-astrodynamics/releases/234714896","Warn: release artifact 16.6.0 does not have provenance: https://api.github.com/repos/open-space-collective/open-space-toolkit-astrodynamics/releases/233997697"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":8,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Warn: required approving review count is 1 on branch 'main'","Warn: codeowners review is not required on branch 'main'","Info: status check found to merge onto on branch 'main'","Info: PRs are required in order to make changes on branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-test.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/open-space-collective/open-space-toolkit-astrodynamics/build-test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build-test.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/open-space-collective/open-space-toolkit-astrodynamics/build-test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build-test.yml:58: update your workflow using https://app.stepsecurity.io/secureworkflow/open-space-collective/open-space-toolkit-astrodynamics/build-test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build-test.yml:71: update your workflow using https://app.stepsecurity.io/secureworkflow/open-space-collective/open-space-toolkit-astrodynamics/build-test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build-test.yml:83: update your workflow using https://app.stepsecurity.io/secureworkflow/open-space-collective/open-space-toolkit-astrodynamics/build-test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/open-space-collective/open-space-toolkit-astrodynamics/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:91: update your workflow using https://app.stepsecurity.io/secureworkflow/open-space-collective/open-space-toolkit-astrodynamics/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/open-space-collective/open-space-toolkit-astrodynamics/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/open-space-collective/open-space-toolkit-astrodynamics/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/open-space-collective/open-space-toolkit-astrodynamics/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/open-space-collective/open-space-toolkit-astrodynamics/release.yml/main?enable=pin","Warn: containerImage not pinned by hash: docker/development/Dockerfile:7","Warn: containerImage not pinned by hash: docker/development/Dockerfile:186","Warn: containerImage not pinned by hash: docker/jupyter/Dockerfile:5","Warn: containerImage not pinned by hash: docker/release/Dockerfile:8","Warn: containerImage not pinned by hash: docker/release/Dockerfile:31","Warn: containerImage not pinned by hash: docker/release/Dockerfile:50","Warn: containerImage not pinned by hash: docker/release/Dockerfile:56","Warn: containerImage not pinned by hash: tutorials/cpp/sensor-modeling/Dockerfile:3","Warn: pipCommand not pinned by hash: docker/jupyter/Dockerfile:21","Warn: pipCommand not pinned by hash: docker/jupyter/Dockerfile:53","Warn: pipCommand not pinned by hash: docker/release/Dockerfile:54","Warn: pipCommand not pinned by hash: docker/release/Dockerfile:64","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   9 third-party GitHubAction dependencies pinned","Info:   0 out of   8 containerImage dependencies pinned","Info:   0 out of   4 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-22T07:27:53.239Z","repository_id":37271198,"created_at":"2025-08-22T07:27:53.239Z","updated_at":"2025-08-22T07:27:53.239Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28880866,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-29T10:31:27.438Z","status":"ssl_error","status_checked_at":"2026-01-29T10:31:01.017Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["access","astrodynamics","attitude","cpp","engineering","flight","orbit","python","space","toolkit","trajectory"],"created_at":"2024-12-05T09:14:34.329Z","updated_at":"2026-01-29T16:04:41.595Z","avatar_url":"https://github.com/open-space-collective.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Open Space Toolkit ▸ Astrodynamics\n\n[![Build and Test](https://github.com/open-space-collective/open-space-toolkit-astrodynamics/actions/workflows/build-test.yml/badge.svg?branch=main)](https://github.com/open-space-collective/open-space-toolkit-astrodynamics/actions/workflows/build-test.yml)\n[![Release](https://github.com/open-space-collective/open-space-toolkit-astrodynamics/actions/workflows/release.yml/badge.svg)](https://github.com/open-space-collective/open-space-toolkit-astrodynamics/actions/workflows/release.yml)\n[![Code Coverage](https://codecov.io/gh/open-space-collective/open-space-toolkit-astrodynamics/branch/main/graph/badge.svg)](https://codecov.io/gh/open-space-collective/open-space-toolkit-astrodynamics)\n[![Documentation](https://img.shields.io/readthedocs/pip/stable.svg)](https://open-space-collective.github.io/open-space-toolkit-astrodynamics)\n[![GitHub version](https://badge.fury.io/gh/open-space-collective%2Fopen-space-toolkit-astrodynamics.svg)](https://badge.fury.io/gh/open-space-collective%2Fopen-space-toolkit-astrodynamics)\n[![PyPI version](https://badge.fury.io/py/open-space-toolkit-astrodynamics.svg)](https://badge.fury.io/py/open-space-toolkit-astrodynamics)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nOrbit, attitude, access, mission analysis.\n\n\u003cimg src=\"./docs/assets/example.svg\" height=\"500px\" width=\"auto\"\u003e\n\n## Getting Started\n\nWant to get started? This is the simplest and quickest way:\n\n[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/open-space-collective/open-space-toolkit/main?urlpath=lab/tree/notebooks)\n\n*Nothing to download or install! This will automatically start a [JupyterLab](https://jupyterlab.readthedocs.io/en/stable/) environment in your browser with Open Space Toolkit libraries and example notebooks ready to use.*\n\n### Alternatives\n\n#### Docker Images\n\n[Docker](https://www.docker.com/) must be installed on your system.\n\n##### iPython\n\nThe following command will start an [iPython](https://ipython.org/) shell within a container where the OSTk components are already installed:\n\n```shell\ndocker run -it openspacecollective/open-space-toolkit-astrodynamics-development ipython\n```\n\nOnce the shell is up and running, playing with it is easy:\n\n```py\nfrom ostk.physics import Environment\nfrom ostk.physics.time import Instant\nfrom ostk.astrodynamics.trajectory import Orbit\nfrom ostk.astrodynamics.trajectory.orbit.model import SGP4\nfrom ostk.astrodynamics.trajectory.orbit.model.sgp4 import TLE\n\ntle = TLE(\n    '1 25544U 98067A   18231.17878740  .00000187  00000-0  10196-4 0  9994',\n    '2 25544  51.6447  64.7824 0005971  73.1467  36.4366 15.53848234128316'\n)  # Construct Two-Line Element set\n\nearth = Environment.default().access_celestial_object_with_name('Earth')  # Access Earth model\n\norbit = Orbit(SGP4(tle), earth)  # Construct orbit using SGP4 model\n\norbit.get_state_at(Instant.now())  # Compute and display current satellite state (position, velocity)\n```\n\nBy default, OSTk fetches the ephemeris from JPL, Earth Orientation Parameters (EOP) and leap second count from IERS.\n\nAs a result, when running OSTk for the first time, it may take a minute to fetch all the necessary data.\n\n*Tip: Use tab for auto-completion!*\n\n##### JupyterLab\n\nThe following command will start a [JupyterLab](https://jupyterlab.readthedocs.io/en/stable/) server within a container where the OSTk components are already installed:\n\n```shell\ndocker run --publish=8888:8888 openspacecollective/open-space-toolkit-astrodynamics-jupyter\n```\n\nOnce the container is running, access [http://localhost:8888/lab](http://localhost:8888/lab) and create a Python 3 Notebook.\n\n## Installation\n\n### C++\n\nThe binary packages are hosted using [GitHub Releases](https://github.com/open-space-collective/open-space-toolkit-astrodynamics/releases):\n\n- Runtime libraries: `open-space-toolkit-astrodynamics-X.Y.Z-1.x86_64-runtime`\n- C++ headers: `open-space-toolkit-astrodynamics-X.Y.Z-1.x86_64-devel`\n- Python bindings: `open-space-toolkit-astrodynamics-X.Y.Z-1.x86_64-python`\n\n#### Debian / Ubuntu\n\nAfter downloading the relevant `.deb` binary packages, install:\n\n```shell\napt install open-space-toolkit-astrodynamics-*.deb\n```\n\n### Python\n\nInstall from [PyPI](https://pypi.org/project/open-space-toolkit-astrodynamics/):\n\n```shell\npip install open-space-toolkit-astrodynamics\n```\n\n## Documentation\n\nDocumentation is available [here](https://open-space-collective.github.io/open-space-toolkit-astrodynamics):\n\n\u003cdetails\u003e\n\u003csummary\u003eStructure\u003c/summary\u003e\n\u003cp\u003e\n\nThe library exhibits the following detailed and descriptive structure:\n\n```txt\n├── NumericalSolver\n├── Trajectory\n│   ├── State\n│   ├── Orbit\n│   │   ├── Model\n│   │   │   ├── Kepler\n│   │   │   │   └── Classical Orbital Elements (COE)\n│   │   │   ├── SGP4\n│   │   │   │   └── Two-Line Element set (TLE)\n│   │   │   ├── Tabulated (input csv)\n│   │   │   └── Propagated (numerical integration)\n│   │   ├── Pass\n│   │   └── Message\n│   │       └── SpaceX\n│   │           └── OPM\n│   ├── Model\n│   │   ├── Static\n│   │   └── Tabulated\n│   └── Propagator\n├── Flight\n│   ├── Profile\n│   │    ├── Model\n│   │    │   ├── Transform\n│   │    │   └── Tabulated\n│   │    └── State\n│   └── System\n│        ├── SatelliteSystem\n│        └── Dynamics\n│            └── PositionDerivative\n│            └── CentralBodyGravity\n│            └── ThirdBodyGravity\n│            └── AtmosphericDrag\n├── Access\n│   └── Generator\n└── Conjunction\n    └── Message\n        └── CCSDS\n            └── CDM\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n## Tutorials\n\nTutorials are available here:\n\n- C++ (in progress)\n- [Python](https://github.com/open-space-collective/open-space-toolkit/tree/main/notebooks)\n\n## Setup\n\n### Development Environment\n\nUsing [Docker](https://www.docker.com) for development is recommended, to simplify the installation of the necessary build tools and dependencies.\nInstructions on how to install Docker are available [here](https://docs.docker.com/install/).\n\nTo start the development environment:\n\n```shell\nmake start-development\n```\n\nThis will:\n\n1. Build the `openspacecollective/open-space-toolkit-astrodynamics-development` Docker image.\n2. Create a development environment container with local source files and helper scripts mounted.\n3. Start a `bash` shell from the `./build` working directory.\n\nIf installing Docker is not an option, you can manually install the development tools (GCC, CMake) and all required dependencies,\nby following a procedure similar to the one described in the [Development Dockerfile](./docker/development/Dockerfile).\n\n### Build\n\nFrom the `./build` directory:\n\n```shell\ncmake ..\nmake\n```\n\n*Tip: The `ostk-build` command simplifies building from within the development environment.*\n\n### Test\n\nTo start a container to build and run the tests:\n\n```shell\nmake test\n```\n\nOr to run them manually:\n\n```shell\n./bin/open-space-toolkit-astrodynamics.test\n```\n\n*Tip: The `ostk-test` command simplifies running tests from within the development environment.*\n\n\n### Script\n\nTo build an executable for a simple script:\n- create a .cxx file in the `scripts` directory.\n- Enable the CMake BUILD_SCRIPT flag using ccmake or equivalent.\n- run `ostk-build` to build the executable, which will be found in the in `/bin` folder under the name `open-space-toolkit-astrodynamics`\n\nExample:\n```\n#include \u003cOpenSpaceToolkit/Physics/Coordinate/Frame.hpp\u003e\n#include \u003cOpenSpaceToolkit/Physics/Coordinate/Position.hpp\u003e\n#include \u003cOpenSpaceToolkit/Physics/Coordinate/Velocity.hpp\u003e\n#include \u003cOpenSpaceToolkit/Physics/Time/Instant.hpp\u003e\n\n#include \u003cOpenSpaceToolkit/Astrodynamics/Trajectory/State.hpp\u003e\n\nusing ostk::mathematics::object::VectorXd;\n\nusing ostk::physics::coordinate::Frame;\nusing ostk::physics::coordinate::Position;\nusing ostk::physics::coordinate::Velocity;\nusing ostk::physics::time::Instant;\nusing ostk::physics::time::Scale;\n\nusing ostk::astrodynamics::trajectory::State;\n\nint main()\n{\n    const State state = {\n        Instant::Parse(\"2024-06-09 14:44:30.734.999\", Scale::UTC),\n        Position::Meters({3786681.30288918, -4897593.40751009, -2997836.66403268}, Frame::GCRF()),\n        Velocity::MetersPerSecond({1124.5962634611, -3265.39989654837, 6779.45043611605}, Frame::GCRF()),\n    };\n\n    std::cout \u003c\u003c state \u003c\u003c std::endl;\n}\n```\n\n### Benchmark\n\nTo run benchmarks:\n\n```shell\nmake benchmark\n```\n\nBenchmarks are pushed to the [GitHub pages](https://open-space-collective.github.io/open-space-toolkit-astrodynamics/dev/bench/).\n\n### Validation\n\nOSTk has a cross-validation framework built into it (inside the `/validation` folder), which allows us to compare its end-to-end propagation accuracy of a full \"mission sequence\" to other flight qualified tools like GMAT and Orekit.\n\n#### Scenario Definition\n\nA standardized input format (a yaml file) to define the particular mission sequence scenario is used, and is tooling agnostic. An example of it is shown below.\n\n- The spacecraft's parameters and initial state are defined under the `spacecraft` header\n- The sequence header contains the dynamic forces to be applied during propagation, the type of numerical propagator to use, and the segments (burning or coasting) to execute during the mission sequence\n- Finally, the output header contains the quantities that we want to output (in this case time elapsed, position, and velocity), and the interval at which to report them\n\n```yaml\ntype: MISSION_SEQUENCE\ndata:\n  spacecraft:\n    mass: 100.0\n    drag-cross-section: 1.0\n    drag-coefficient: 2.2\n    orbit:\n      type: CARTESIAN\n      data:\n        date:\n          time-scale: UTC\n          value: \"2023-01-01T00:00:00\"\n        frame: GCRF\n        body: EARTH\n        x: -4283387.412456233\n        y: -4451426.776125101\n        z: -2967617.850750065\n        vx: 4948.074939732174\n        vy: -957.3429532772124\n        vz: -5721.173027553034\n\n  sequence:\n    max-duration: 86400.1\n    forces:\n      - type: GRAVITY\n        data:\n          body: EARTH\n          model: EGM96\n          degree: 0\n          order: 0\n    propagator:\n      type: RUNGE_KUTTA_DORMAND_PRINCE_45\n      data:\n        initial-step: 30.0\n        min-step: 0.001\n        max-step: 2700.0\n        relative-tolerance: 1.0e-12\n        absolute-tolerance: 1.0e-12\n    segments:\n      - type: COAST\n        data:\n          stop-condition:\n            type: RELATIVE_TIME\n            data:\n              duration: 86400.0\n\n  output:\n    step: 120.0\n    include:\n      - ELAPSED_SECONDS\n      - CARTESIAN_POSITION_GCRF\n      - CARTESIAN_VELOCITY_GCRF\n```\n\n#### Cross Validation and Accuracy Tolerances\n\nThe validation framework takes this yaml scenario definition (from the `/validation/data/scenarios` folder) and runs the scenario using OSTk. Next, it compares the specified outputs (quantities like the position, velocity, mass, acceleration of the spacecraft) at the desired reporting step generated by OSTk with each external validation tool (whose outputs were generated via the same process and are in the `/validation/data/gmat_astrodynamics` or `/validation/data/orekit_astrodynamics` folder as `.csv`), to ensure they are within a certain tolerance of each other.\n\n**To add a scenario:**\n1. Write a scenario definition using the `.yaml` format above, and name it `scenarioX-mission-sequence.yaml`, and put it in wth the others. If the format isn't correct or there is another issue, OSTk will throw an error when validating.\n2. Generate the `.csv` outputs from the external tools you want to compare OSTk against (repos with an GMAT and Orekit wrapper that can ingest this `.yaml` format do exist and will be open sourced soon).\n3. Add another test case to the `Framework.validation.cpp` file, with the scenario name, the tool to compare against, and the output quantities and comparison tolerances for those. An exampe of this is provided below.\n\n```cpp\n{\n    \"scenario001-mission-sequence\",  // Spherical gravity only\n    {\n        {\n            Tool::GMAT,\n            {\n                {Quantity::CARTESIAN_POSITION_GCRF, 1.1e-0},\n                {Quantity::CARTESIAN_VELOCITY_GCRF, 1.2e-3},\n            },\n        },\n        {\n            Tool::OREKIT,\n            {\n                {Quantity::CARTESIAN_POSITION_GCRF, 1.1e-0},\n                {Quantity::CARTESIAN_VELOCITY_GCRF, 1.2e-3},\n            },\n        },\n    },\n},\n```\n\n#### Running the Validation Tests\n\nThe validation tests can be run with `ostk-validate` from within the dev container, or `make validation` as a standalone.\n\n## Dependencies\n\n| Name        | Version       | License            | Link                                                                                                                                       |\n| ----------- | ------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| Pybind11    | `2.10.1`  | BSD-3-Clause       | [github.com/pybind/pybind11](https://github.com/pybind/pybind11)                                                                           |\n| ordered-map | `0.6.0`   | MIT                | [github.com/Tessil/ordered-map](https://github.com/Tessil/ordered-map)                                                                     |\n| Eigen       | `3.3.7`   | MPL2               | [eigen.tuxfamily.org](http://eigen.tuxfamily.org/index.php)                                                                                |\n| SGP4        | `6a448b4` | Apache License 2.0 | [github.com/dnwrnr/sgp4](https://github.com/dnwrnr/sgp4)                                                                                   |\n| NLopt       | `2.5.0`   | LGPL               | [github.com/stevengj/nlopt](https://github.com/stevengj/nlopt)                                                                             |\n| benchmark   | `1.8.2`   | Apache License 2.0 | [github.com/google/benchmark](https://github.com/google/benchmark)                                                                         |\n| Core        | `main`    | Apache License 2.0 | [github.com/open-space-collective/open-space-toolkit-core](https://github.com/open-space-collective/open-space-toolkit-core)               |\n| I/O         | `main`    | Apache License 2.0 | [github.com/open-space-collective/open-space-toolkit-io](https://github.com/open-space-collective/open-space-toolkit-io)                   |\n| Mathematics | `main`    | Apache License 2.0 | [github.com/open-space-collective/open-space-toolkit-mathematics](https://github.com/open-space-collective/open-space-toolkit-mathematics) |\n| Physics     | `main`    | Apache License 2.0 | [github.com/open-space-collective/open-space-toolkit-physics](https://github.com/open-space-collective/open-space-toolkit-physics)         |\n\n## Contribution\n\nContributions are more than welcome!\n\nFor the contributing guide, please consult the CONTRIBUTING.md in the [open-space-toolkit](https://github.com/open-space-collective/open-space-toolkit) base repo [here](https://github.com/open-space-collective/open-space-toolkit/blob/main/CONTRIBUTING.md).\n\n## Special Thanks\n\n[![Loft Orbital](https://github.com/open-space-collective/open-space-toolkit/blob/main/assets/thanks/loft_orbital.png)](https://www.loftorbital.com/)\n\n## License\n\nApache License 2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopen-space-collective%2Fopen-space-toolkit-astrodynamics","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopen-space-collective%2Fopen-space-toolkit-astrodynamics","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopen-space-collective%2Fopen-space-toolkit-astrodynamics/lists"}