I have been propagating two satellites launched simultaneously with the same starting orbital parameters and physical parameters, the only difference between the two being their drag areas, one being High Drag (HD) and the other Low Drag (LD).
I would like to toggle the drag configuration on the fly during each propagation step based on their relative distance (e.g if distance more than 500km, Satellite A toggles drag configuration to attempt and close the distance). However, the closest I have gotten is by the following code:
propagator.resetInitialState(pv_state)
propagator.removeForceModels()
propagator = add_dsst_force_models(propagator, earth, max_drag=False) #add all force models back.
Here I try to set a new initialState to the previous propagator, remove the force models and then add them all back.
The current drag model I am using is a simple Isotropic Drag Model.
cswl = CssiSpaceWeatherData("SpaceWeather-All-v1.2.txt")
atmosphere = NRLMSISE00(cswl, CelestialBodyFactory.getSun(), earth)
cd = 2.2
isotropic_drag = IsotropicDrag(cross_section, cd)
drag_force = DragForce(atmosphere, isotropic_drag)
propagator.addForceModel(drag_force)
Is this the right way to do it? I took a look at EventDetectors but I didn’t see much else that helped, maybe I might have missed it. I know that TimeSpanDragForce does not help me, as the condition is distance-based instead of time-based.
I’m currently trying to emulate a few research papers I’ve found online, namely this one:
Autonomous Control of Small Satellite Formations using Differential Drag which was done in MATLAB. Hoping to find a solution within Orekit.