preview for SPK support
Preview for implementation of support for SPK kernels.
This includes readers and evaluators for all types of SPK.
I'm still in the process of adding proper documentation, additional checks, Orekit exceptions and a few other checks, but thought it would be a good idea to provide this draft/preview in case the team wants to have a look already!
Merge request reports
Activity
added 1 commit
- a5f3bd66 - docs, comments, exceptions improvements in generic DAF package
added 1 commit
- 9d39e5fa - fix typo in expected value in DAF parser test
While working on improvements, I had a few questions. Hope this is the right place to ask! There is many SPK types, and some of them provide data that should be used with some specific analytical propagators to evaluate a state vector at a target date. These are:
- Type 5: requires two-body propagation
- Type 10: requires SGP4/SDP4
- Type 15: requires precessing conic propagation
- Type 17: requires propagation of orbit from equinoctial elements
I would like to ask for team's thoughts on some questions regarding each of these types:
- Type 5: I saw that Orekit provides KeplerianPropagator, which should do the job. However, as far as I understand, in order to define a KeplerianPropagator, we have to provide the reference frame in which the orbit is defined. However, the central body and frame used by a specific SPK segment can vary wildly (e.g., the central body is specified through the NAIF integer body ID code, with an additional code specifying the frame, e.g., inertial or non-inertial, NAIF frame specification). For these reasons, currently I chose to implement a two-body propagator within the class for SPK segments of type 5, matching exactly the one used in CSPICE. However, I can see that it would be preferable to have it implemented using Orekit's propagators. Any tips on how this could be done?
- Type 10: I have currently implemented this using Orekit's TLE and SGP4/SDP4 related classes. A small thing to note is that SPK segments of type 10 bring, in addition to the elements typically found in a TLE, constant values to use in SGP4/SDP4, such as J2, J3, J4 and others. For example, interestingly, they provide also low and high altitude boundaries for the atmospheric model. I have not been able to find a type 10 SPK segment where any of these deviate from those used in standard SGP4/SDP4, but the possibility is there. As I currently implemented these segments, the values for these constants coming with the SPK segment itself are basically ignored. Might it be worth to consider the possibility of bypassing the standard constant values when constructing TLE objects though?
- Type 15: the precessing conic model required by these segments first performs two-body propagation and then adds some corrections. So it would be nice to use Orekit's KeplerianPropagator and then just add the corrections, but basically, we are in the same situation as for type 10, where the reference frame and central body can vary wildly.
- Type 17: I have seen that Orekit provides support for specifying orbits through equinoctial elements. However, as far as I understand, this also requires specifying the frame, which puts us in the same situation as for types 5 and 15. At the moment, I use the same custom two-body propagator implementation as for type 5 and add corrections on these, but any thoughts would be appreciated
Thanks!
Edited by Rafael Ayalaadded 1 commit
- ae50e52a - improved docs, comments and exceptions in part of SPK package
added 1 commit
- d3072faf - improved documentation and comments, fixed acceleration evaluation with MDA arrays