Complete OD using ITRF

Hi @jlipinski,

Welcome to the Orekit community !

Currently I don’t think there is a way to use IODGibbs with a non inertial frame.
So converting your PV in ITRF to an inertial frame like GCRF is the proper way to do it.
I think it would be hard to write the IOD method so they can use non inertial frames. I’m not sure the time required to develop it would be worth it, since a simple frame conversion can do the trick.

Yes, or maybe circular orbit. What does your orbit look like, is it a circular orbit ?

Do you have any force model added to your propagatorBuilder. It doesn’t seem so from your code.
If so you are doing the propagation and the fitting of the orbit with a pure Keplerian model (only the point mass gravity of the Earth is taken into account).
Maybe you should add some force models if you want to have a better estimation of the orbit, like:

  • A gravity model with sufficiently high degree/order
  • The influence of the Sun and Moon as third bodies
  • The atmospheric drag (if your satellite is low enough)
  • The solar radiation pressure
    etc.

I think you need to cast the resulting orbit to KeplerianOrbit since the generic type Orbit doesn’t have the methods getPerigeeArgument and getRightAscensionOfAscendingNode.
See this recent answer from @bcazabonne for help on casting objects in Orekit Python.

setEphemerisMode doesn’t exist anymore in Orekit since 11.0.
The proper way to do it now is to do like in the Ephemeris Mode tutorial, that is (in Java):

// Before propagation: prepare the ephemeris generator
EphemerisGenerator generator = propagator.getEphemerisGenerator();

// Propagate
propagator.propagate(startDate, endDate)

// Get the generated ephemeris
BoundedPropagator ephemeris = generator.getGeneratedEphemeris()

I think you are going in the right direction.
Doing the OD in non-inertial frame is quite more complex and prone to error (in my opinion).
What you could do is design your own measurement class that would handle the conversion from ITRF to GCRF at construction, so you wouldn’t have to explicitly do it in your main code anymore .
But it would just be moving around some part of code from a place to another, so I don’t think that it is what you’re looking for.

Hope this helps,
Maxime

1 Like