Drag and propagation issue

Hi all,

I’ve implemented an orbit determination script with a Kalman filter and a given propogator used for this KF containing different forces. When running the whole script it runs just fine, except when I add atmospheric drag (I tried only with a simple exponential model).

Somehow it seems to be computing and then, after a given number of seconds (I tried different time step and the number of time steps changes but the propagation date is roughly the same), it completely freezes on the line used to propagate:

SpacecraftState nextStepState = propagator.propagate(date);

I have no idea where the error might come from.

During the KF process I have to constantly reset the initial state to then propagate to the next time step. I would have expected it to be slower due to air drag but it really switches from a “steady pace” propagation to no propagation at all. Maybe there is sthg I should be resetting?

Has anyone faced similar issues or does anyone know where the error might come from?

Thank you very much for your help.

Kind regards,

B.

Hi @benoist,

Is it possible to have a sample of code in order to see how do you initialized the different parameters (especially the drag force) ?

Regards,
Bryan

Hi Bryan,

Yes of course, here is how I add the drag force model:

frame = FramesFactory.getEME2000();
double crossSection = 10;
double dragCoef = 2.2;
IsotropicDrag drag = new IsotropicDrag(crossSection, dragCoef);
OneAxisEllipsoid earthShape = new OneAxisEllipsoid(Constants.WGS84_EARTH_EQUATORIAL_RADIUS, Constants.WGS84_EARTH_EQUATORIAL_RADIUS, frame);
SimpleExponentialAtmosphere earthAtmosphere = new SimpleExponentialAtmosphere(earthShape,0.0004, 42000.0, 7500.0);		
DragForce dragAtmo = new DragForce(earthAtmosphere,drag);
propagator.addForceModel(dragAtmo);

And the propagator associated is defined as follow:

orbitType = OrbitType.CARTESIAN;
angleType = PositionAngle.TRUE
final double step = 30;

NumericalPropagator propagator = new NumericalPropagator(new ClassicalRungeKuttaIntegrator(step));
propagator.setOrbitType(orbitType);
propagator.setPositionAngleType(angleType);

for (ForceModel model : models) {
	propagator.addForceModel(model);
}

return propagator;

Hi @benoist,
You use the EME2000 frame, which is an ECI frame, to define the Earth shape but it should be defined using an ECEF frame, such as any ITRF frame. This may be the reason for your problem ?
Regards,
Pascal

In addition to Pascal’s remark, you have to set a correct value for the earth flattening. Indeed, you initialized the earth flattening with the value of the earth radius.
So, you shall initialize your OneAxisEllipsoid like this:

OneAxisEllipsoid earthShape = new OneAxisEllipsoid(Constants.WGS84_EARTH_EQUATORIAL_RADIUS, Constants.WGS84_EARTH_FLATTENING, FramesFactory.getITRF(IERSConventions.IERS2010, true));

I tested and now the computation time is correct.
Bryan

1 Like

Hi both,

Yes indeed it now works perfectly fine. The flattening was a silly mistake on my side… And thanks also for the frame, I wasn’t aware it had to be defined this way.

Thank you very much to both of you!

B.

Old thread but wanted to add that I just had this exact same mistake with the frame inside my earth object - used an ECI (EME2000) frame instead of an ECEF frame given in bc’s example!
This thread helped me find the issue after a long hunt.

1 Like