Problem with finite maneuver

Dear everyone,

The calculation result of constant thrust maneuver using the normal direction force is inconsistent with the calculation result in stk11.2. This is my code

    	
	Frame eme2000 = FramesFactory.getEME2000();
    final AbsoluteDate date = new AbsoluteDate(new DateComponents(2023, 12, 02),
                                                       new TimeComponents(02, 00, 00.000),
                                                       TimeScalesFactory.getUTC());
	final Orbit orbit = new KeplerianOrbit(7478140, 0.000540432, FastMath.toRadians(28.5),
                                               FastMath.toRadians(0), FastMath.toRadians(0),
                                               FastMath.toRadians(0), PositionAngle.MEAN,
                                               eme2000, date,
                                               Constants.EIGEN5C_EARTH_MU);
	SpacecraftState initState = new SpacecraftState(initialOrbit, spacecraftObj.getMass());
	OrbitType orbitType = OrbitType.CARTESIAN;
	double[][] tolerance = NumericalPropagator.tolerances(1.0, initialOrbit, orbitType);
	AdaptiveStepsizeIntegrator integrator = new DormandPrince853Integrator(0.001, 500, tolerance[0], tolerance[1]);
	integrator.setInitialStepSize(60);
	NumericalPropagator propagator = new NumericalPropagator(integrator);
	propagator.setOrbitType(orbitType);
	propagator.setInitialState(initState);
	propagator.setAttitudeProvider(new LofOffset(eme2000, LOFType.VNC));
	AbsoluteDate startDate = date.shiftedBy(600);
	ManeuverTriggers triggers = new DateBasedManeuverTriggers(startDate, 600);

	PropulsionModel propulsionModel = new BasicConstantThrustPropulsionModel(0.35,1400 ,
		new Vector3D(0,1, 0), "propulsionModel");
	propagator.addForceModel(gravityField);
	propagator.addForceModel(newtonianAttraction);
	propagator.addForceModel(dragForce);
	propagator.addForceModel(srp);
	propagator.addForceModel(geoMag);
	propagator.addForceModel(sunAttraction);
	propagator.addForceModel(moonAttraction);
	propagator.addForceModel(solidTides);
	propagator.addForceModel(oceanTides);
	propagator.addForceModel(new Maneuver(null, triggers, propulsionModel));
	PVCoordinates controlledState = propagator.getPVCoordinates(startDate.shiftedBy(600), FramesFactory.getEME2000());

This is my comparison result

data epoch a e i raan pi mean
me 2023-12-02 02:20:00.000 7481379.756009488 0.00031268 28.502879 359.945028 204.692 311.488
stk 2023-12-02 02:20:00.000 7481380.952 0.00031273 28.513028 359.926813 204.684 311.512

It seems that there is a significant difference between the inclination angle and the right ascension of the ascending node. What is the reason for this

Best regards,
dreamdongx

Hi there,

Just to double check: you’re coasting for 600 seconds and then manoeuvring with constant thrust in a local orbital frame for 600 more, correct?

Three remarks I have on the code.

  • you shouldn’t have to add the Newtonian attraction from the central body, it normally comes automatically if you define the initial state with an Orbit object. I actually don’t understand why you’re not getting crazy results as if Mu was doubled. There must be a check in the library that I forgot about.
  • you pass 1 meter for your expected error in your tolerances, I would make that smaller, by a factor 100 or 1000. Since you’re in LEO I would also decrease the maximum stepsize to 100 seconds. You might be getting too much integration noise as is.
  • you could use ConstantManeuver to define your burn. It wrapps the DateBasedManeuverTrigger already

Cheers,
Romain.

Hi @dreamdongx,

I don’t understand, you’re saying you have to halve the thrust in Orekit to have the same result as with your reference program?
If yes, there must be a configuration problem somewhere in your code…

Cheers,
Maxime