Hello everyone!!
Here is my first guess for the orbit:
estimated_orbit
Out: <KeplerianOrbit: Keplerian parameters: {a: 7109685.579058452; e: 0.05165954081218935; i: 82.87954617400177; pa: 164.5859763636075; raan: -19.65158612026566; v: -112.00811071522848;}>
Propagator builder using only SRP with reflection parameter driver
def InitiatePropagator(sat_orbit, sat_cs, sat_cr, sat_cd, sat_mass):
minStep = 0.0001
maxStep = 100.0
pos_error = 10.0
estimator_position_scale = 200.0
ECI = FramesFactory.getGCRF()
ECEF = FramesFactory.getITRF(IERSConventions.IERS_2010, True)
integratorBuilder = DormandPrince853IntegratorBuilder(minStep, maxStep, pos_error)
propagatorBuilder = NumericalPropagatorBuilder(sat_orbit, integratorBuilder, PositionAngle.TRUE,
estimator_position_scale)
wgs84Ellipsoid = ReferenceEllipsoid.getWgs84(ECEF)
nadirPointing = NadirPointing(ECI, wgs84Ellipsoid)
propagatorBuilder.setMass(sat_mass)
propagatorBuilder.setAttitudeProvider(nadirPointing)
sun = CelestialBodyFactory.getSun()
initial_value = 1.5
scale_factor = 0.1
lower_bound = 1.0
upper_bound = 2.0
isotropicRadiationSingleCoeff = IsotropicRadiationSingleCoefficient(float(sat_cs), initial_value)
solarRadiationPressure = SolarRadiationPressure(sun, wgs84Ellipsoid.getEquatorialRadius(), isotropicRadiationSingleCoeff)
reflection_param = solarRadiationPressure.getParametersDrivers().get(0)
reflection_param.setMinValue(lower_bound)
reflection_param.setMaxValue(upper_bound)
reflection_param.setReferenceValue(initial_value)
reflection_param.setScale(scale_factor)
#solarRadiationPressure.getParametersDrivers().get(0).setValue(reflection_param_driver.getValue())
reflection_param.setSelected(True)
propagatorBuilder.addForceModel(solarRadiationPressure)
return propagatorBuilder
The result:
Keplerian parameters: {a: 7110719.016969134; e: 0.051659540569060816; i: 82.88066809996866; pa: 164.5920515366339; raan: -19.642713172640807; v: -112.00554767652018;}
If we will comment the line reflection_param.setSelected(True), assuming constant reflection parameter, we will get:
Keplerian parameters: {a: 7110205.793738257; e: 0.0516595405681234; i: 82.88049050274775; pa: 164.66870483608807; raan: -19.643310027146203; v: -112.08254398956986;}
That can only mean that reflection parameter was esteemed by BatchLS method (everything else stayed unchanged in the script). But trying to get esteemed value, I only get empty List:
estimated_params = estimator.getPropagatorParametersDrivers(True)
estimated_params.getDrivers()
Out: <List: []>
Meanwhile
estimated_params = estimator.getPropagatorParametersDrivers(False)
estimated_params.getDrivers()
Out[61]: <List: [Moon attraction coefficient = 4.902800118457551E12, Sun attraction coefficient = 1.3271244004127946E20, central attraction coefficient = 3.986004415E14, drag coefficient = 1.0, reflection coefficient = 1.5]>
BatchLS thinks that reflection parameter wasn’t estimating. Any thoughts??
Is there only one estimation has to be for the whole measurements list or one for every measurement??
P.S. using the same script but with Kalman filter does not show differences between reflection_param.setSelected(True) and reflection_param.setSelected(False) cases. What may be the reason for that??