-
-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CCSDS OEM conversion #34
Comments
I'm happy to take a look at this issue, and have been playing around and have some code to parse/write OEM files. I located a version 1.0 OEM file (from the Herschel mission) and a version 2.0 OEM file (from the ISS) to use as test data and have both of those parsing. Still need to find an example of a version 3.0 file to test with. Also wrote some code to write those structs back into an OEM file and an able to round-trip those files (save for some blank lines which didn't seem important to preserve). I'm finding it a little trickier to convert the data to an SPK. I've implemented a function to convert the OEM into an SPK (excerpt below):
however this produces the error It appears that Any suggestions for proper values to put in that record for a fresh/empty file (which |
Hi there! Thanks for your help on this feature. Although ANISE does not have an OEM parser/write, Nyx currently provides both: https://github.com/nyx-space/nyx/blob/343a2424f167ac4ffa3b61574b86212e20e3f972/src/md/trajectory/sc_traj.rs#L159 ; https://github.com/nyx-space/nyx/blob/343a2424f167ac4ffa3b61574b86212e20e3f972/src/md/trajectory/sc_traj.rs#L277 . You can also find some example public OEM files here: https://github.com/nyx-space/nyx/tree/343a2424f167ac4ffa3b61574b86212e20e3f972/data/tests/ccsds/oem. I'd be interested in comparing your implementation with that in Nyx. Both functions could be in theory copied here directly nearly as-is for parsing and writing CCSDS OEM files in version 1. To my knowledge, the only additional feature from version 2 compared to version 1 is the support for covariance information: Nyx does not support reading that covariance information. ANISE does not currently support any covariance on any type (and I think that feature should be reserved for Nyx as it's pertinent to orbit determination, one of the hallmarks of Nyx). Since I wrote this issue over two years ago, I think the better approach to support CCSDS OEM in ANISE is to provide two helper functions:
Diving into the details ... writing DAF files is not trivial and the current support is super limited. I tried to implement some version of it in the anise/anise/src/naif/daf/daf.rs Line 351 in 4f56a4a
persist function and the parse function (anise/anise/src/naif/daf/mut_daf.rs Lines 40 to 41 in 4f56a4a
anise/anise/src/naif/daf/file_record.rs Line 47 in 4f56a4a
anise/anise/src/naif/daf/name_record.rs Line 21 in 4f56a4a
You've found the best and only resource of the DAF format. For the SPK format, you'll also want to read through this section of the SPK specific paragraph: https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/spk.html#SPK%20File%20Structure . To address the specific error you're seeing when calling anise/anise/src/naif/daf/mut_daf.rs Lines 90 to 93 in 4f56a4a
anise/anise/src/naif/daf/mut_daf.rs Line 78 in 4f56a4a
ANISE has really good support for reading SPK files. So the best way to test if you're making progress is what I think you've done: write a test file and load it in ANISE. I hope this helps, I'm happy to work on a solution together directly in this issue. |
High level description
CCSDS OEM is a standard for transferring orbital element data. As such, ANISE shall support reading these files and producing them from an ephemeris.
The API should also allow for converting an ephemeris into another frame prior to the serialization of the data in OEM format.
Requirements
Test plans
Design
Algorithm demonstration
N/A
API definition
ccsds
will be added along with anoem
submodule. All of the OEM parsing logic will be there.ccsds
module will only be available with theccsds
crate feature, enabled by default, but not supported inno_std
environments.High level architecture
The text version of the OEMs will likely be parsed using an abstract syntax tree. Although, it is to be see whether that is an overkill since the text file is relatively simple. The XML version, if it is to be supported at all, will use an standard XML parser.
Ref. 1: https://createlang.rs/01_calculator/ast.html
Ref. 2: https://doc.rust-lang.org/stable/nightly-rustc/rustc_ast/ast/index.html
Detailed design
The detailed design *will be used in the documentation of how ANISE works.
Feel free to fill out additional QA sections here, but these will typically be determined during the development, including the release in which this issue will be tackled.
The text was updated successfully, but these errors were encountered: