Issues with ICRF reference frame? Or something I'm missing?

I have built a tool using Orekit to generate Draper mean states and size manoeuvres to achieve keplerian element targets. Its meant to be used beside a pre-existing tool based on STK that generates ephemeris files. I have recently built EphemerisFile and EphemerisFileParser classes to read in the STK ephemerides and use the resulting BoundedPropagator as basis for the fit to the Draper model.

I have found that when the input ephemeris is in the Fixed frame, I can convert each vector to J2000 using the Frame.getTransformTo() method, create the BoundedPropagator, and then when I run it through my Draper fit process I get a valid output state. However, if I use an ephemeris in the ICRF reference frame, the fit process simply runs in a seeming infinite loop. If I try to use Frame.getTransformTo() to transform the vectors from ICRF to J2000, when I put it through the fit process Orekit complains about hyperbolic orbits.

If I simply tell the code that the ICRF ephemeris is actually in the J2000 frame (not exact but close) the fitting process works just fine and the outputs look reasonable.

So I know its not my implementations of EphemerisFile or EphemerisFileParser, and I know that the problem is not the Draper fitting process. The problem seems to be limited to the ICRF reference frame, or at the least the difference between what STK thinks ICRF is and what Orekit thinks ICRF is.

Does anyone have any experience with this? Is there something special I need to do to the ICRF vectors coming out of STK to make them compatible with Orekit? Or is there an issue with Orekit concerning the ICRF reference frame?


Are you sure you mean ICRF? ICRF is centered on solar system barycenter, so it may
explain the difference. The inertial frame aligned with ICRF and centered about Earth center
is GCRF. GCRF is indeed close to EME2000 (a few tens of arcseconds constant angular bias).

Hi Luc,

That was initially my confusion as well. I had looked up ICRF in the STK help and found that it was located at the barycenter of the solar system so I figured that there was a problem in their definition. But when I looked up ICRF in the Orekit docs, I found the same definition so, being unfamiliar with that frame, I tried it in Orekit. The STK ephemerides are definitely listed as “ICRF” both in the STK ephemeris files and and in the specification of the output coordinate frame.

Based on what you’ve posted, my only guess at this point is that when the central body is Earth STK means “GCRF” but still calls it ICRF.