## Input file for OrbitDetermination ## The input file syntax is a set of key=value lines. ## Blank lines and lines starting with '#' (after whitespace trimming) are ## silently ignored. ## The equal sign may be surrounded by space characters. ## Keys must correspond to the ParameterKey enumerate constants, given that ## matching is not case sensitive and that '_' characters may appear as '.' ## characters in the file. ## This file must contain one orbit defined as keplerian, equinoctial, circular ## or cartesian. ## Some parameters are optional, default values are shown below between []. ## All dates are treated in UTC timescale. ## The inertial frame for orbit definition and propagation is EME2000. ## Physical data are read from the src/tutorial/resources/tutorial-orekit-data ## directory. ### Orbit definition ## date of the orbital parameters (UTC) 2012-01-05 orbit.date = 2012-07-02T00:00:00.0000 ### Keplerian elements ## Semi-major axis (m) # orbit.keplerian.a = 0.0 ## Eccentricity # orbit.keplerian.e = 0.0 ## Inclination (degrees) # orbit.keplerian.i = 0.0 ## Right Ascension of Ascending Node (degrees) # orbit.keplerian.raan = 0.0 ## Perigee Argument (degrees) # orbit.keplerian.pa = 0.0 ## Anomaly (degrees) # orbit.keplerian.anomaly = 0.0 ### Equinoctial elements ## Semi-major axis (m) # orbit.equinoctial.a = 0.0 ## ex/k component of eccentricity vector # orbit.equinoctial.ex = 0.0 ## ey/h component of eccentricity vector # orbit.equinoctial.ey = 0.0 ## hx/q component of inclination vector # orbit.equinoctial.hx = 0.0 ## hy/p component of inclination vector # orbit.equinoctial.hy = 0.0 ## Longitude Argument (degrees) # orbit.equinoctial.lambda = 0.0 ### Circular elements ## Semi-major axis (m) # orbit.circular.a = 0.0 ## ex component of eccentricity vector # orbit.circular.ex = 0.0 ## ey component of eccentricity vector # orbit.circular.ey = 0.0 ## Inclination (degrees) # orbit.circular.i = 0.0 ## Right Ascension of Ascending Node (degrees) # orbit.circular.raan = 0.0 ## Latitude Argument (degrees) # orbit.circular.alpha = 0.0 ### Angle type for anomaly, alpha or lambda (ECCENTRIC/MEAN/TRUE) [MEAN] # orbit.angle.type = MEAN ### Cartesian elements ## Position along X in inertial frame (m) -1.32805470534586e+006 orbit.cartesian.px = 153076.0 ## Position along Y in inertial frame (m) -1.34129762510388e+006 orbit.cartesian.py = -2215507.0 ## Position along Z in inertial frame (m) -6.89962788205978e+006 orbit.cartesian.pz = -6831284.0 ## Velocity along X in inertial frame (m/s) -7.06561367960244e+003 orbit.cartesian.vx = -4044.0 ## Velocity along Y in inertial frame (m/s) -1.36684250469208e+003 orbit.cartesian.vy = 5915.0 ## Velocity along Z in inertial frame (m/s) 1.62604401426476e+003 orbit.cartesian.vz = -2006.0 ## Spacecraft mass (kg) [1000.] mass = 48.0 # IERS conventions [2010] iers.conventions = 2010 # Inertial frame [EME2000] inertial.frame = EME2000 # Propagator min step (s), max step (s) and position error (m) [0.001, 300, 10.0] propagator.min.step = 0.001 propagator.max.step = 1500 propagator.position.error = 10.0 # body (default is a WGS-84 ellipsoid with IERS-2010 conventions and simple EOP frame) body.frame = CIO/2010-based ITRF simple EOP body.equatorial.radius = 6378137.0 body.inverse.flattening = 298.257223563 ### Force models ## Central body gravity potential degree central.body.degree = 90 ## Central body gravity potential order central.body.order = 90 ## 3rd body Sun (true/false) [false] third.body.sun = true ## 3rd body Moon (true/false) [false] third.body.moon = true ## ocean tides (negative degree and order by default to disable ocean tides) ocean.tides.degree = 20 ocean.tides.order = 20 ## solid tides (true/false) [false] solid.tides.sun = true; solid.tides.moon = true ## Atmospheric drag (true/false) [false] drag = true ## Drag coefficient drag.cd = 2.2 ## Estimation flag for drag coefficient (true/false) [false] drag.cd.estimated = true ## Drag area (m^2) drag.area = 0.167 ## Solar Radiation Pressure (true/false) [false] solar.radiation.pressure = true ## SRP coefficient2 solar.radiation.pressure.cr = 1 ## Estimation flag for SRP coefficient (true/false) [false] solar.radiation.pressure.cr.estimated = true ## SRP area (m^2) solar.radiation.pressure.area = 0.167 # Post-Newtonian correction force due to general relativity (true/false) [false] general.relativity = true # extra accelerations (leaks, thermal radiation, ...) polynomial.acceleration.name [0] = leak-X polynomial.acceleration.direction.X [0] = 1.0 polynomial.acceleration.direction.Y [0] = 0.0 polynomial.acceleration.direction.Z [0] = 0.0 polynomial.acceleration.coefficients [0] = 0.0, 0.0 polynomial.acceleration.estimated [0] = false polynomial.acceleration.name [1] = leak-Y polynomial.acceleration.direction.X [1] = 0.0 polynomial.acceleration.direction.Y [1] = 1.0 polynomial.acceleration.direction.Z [1] = 0.0 polynomial.acceleration.coefficients [1] = 0.0, 0.0 polynomial.acceleration.estimated [1] = false polynomial.acceleration.name [2] = leak-Z polynomial.acceleration.direction.X [2] = 0.0 polynomial.acceleration.direction.Y [2] = 0.0 polynomial.acceleration.direction.Z [2] = 1.0 polynomial.acceleration.coefficients [2] = 0.0, 0.0 polynomial.acceleration.estimated [2] = false ## On-board range bias (m) [0.0] onboard.range.bias = 0.0 onboard.range.bias.min = -50000.0 onboard.range.bias.max = +50000.0 ### Estimation flag for on-board range (true/false) [false] onboard.range.bias.estimated = false ## On-board antenna phase center in spacecraft frame (m) [0.0, 0.0, 0.0] on.board.antenna.phase.center.x = 0.0 on.board.antenna.phase.center.y = 0.0 on.board.antenna.phase.center.z = 0.0 ## On-board clock offset (s) [0.0] on.board.clock.offset = 0.0 on.board.clock.offset.min = -0.01 on.board.clock.offset.max = +0.01 on.board.clock.offset.estimated = false ## correction of ground stations displacements (true/false) [false, false, false] ## if remove.permanent.deformation if true, the station coordinates are ## considered *mean tide* and already include the permanent deformation, hence ## it should be removed from the displacement to avoid considering it twice; ## if false, the station coordinates are considered *conventional tide free* ## so the permanent deformation must be included in the displacement solid.tides.displacement.correction = true solid.tides.displacement.remove.permanent.deformation = true ocean.loading.correction = false ## Ground stations (angles in degrees, altitude and range bias in meters) ground.station.name [0] = Ground ground.station.latitude [0] = 0 ground.station.longitude [0] = 145 ground.station.altitude [0] = 0 ground.station.clock.offset [0] = 0.0 ground.station.clock.offset.min [0] = -0.001 ground.station.clock.offset.max [0] = +0.001 ground.station.clock.offset.estimated [0] = false ground.station.position.estimated [0] = false ground.station.range.sigma [0] = 30.0 ground.station.range.bias [0] = 0 ground.station.range.bias.min [0] = -50000.0 ground.station.range.bias.max [0] = +50000.0 ground.station.range.bias.estimated [0] = false ground.station.range.rate.sigma [0] = 0.001 ground.station.range.rate.bias [0] = 0.0 ground.station.range.rate.bias.min [0] = -50.0 ground.station.range.rate.bias.max [0] = +50.0 ground.station.range.rate.bias.estimated [0] = false ground.station.azimuth.sigma [0] = 0.1 ground.station.azimuth.bias [0] = 0 ground.station.azimuth.bias.min [0] = -0.50 ground.station.azimuth.bias.max [0] = +0.50 ground.station.elevation.sigma [0] = 0.1 ground.station.elevation.bias [0] = 0 ground.station.elevation.bias.min [0] = -0.50 ground.station.elevation.bias.max [0] = +0.50 ground.station.az.el.biases.estimated [0] = false ground.station.elevation.refraction.correction [0] = false ground.station.tropospheric.model.estimated [0] = false ground.station.tropospheric.zenith.delay [0] = 0.0 ground.station.tropospheric.delay.estimated [0] = false ground.station.global.mapping.function [0] = false ground.station.niell.mapping.function [0] = false ground.station.range.tropospheric.correction [0] = false ground.station.name [1] = Jumsan ground.station.latitude [1] = 45 ground.station.longitude [1] = 73 ground.station.altitude [1] = 0 ground.station.clock.offset [1] = 0.0 ground.station.clock.offset.min [1] = -0.001 ground.station.clock.offset.max [1] = +0.001 ground.station.clock.offset.estimated [1] = false ground.station.position.estimated [1] = false ground.station.range.sigma [1] = 20.0 ground.station.range.bias [1] = 13527.381 ground.station.range.bias.min [1] = -50000.0 ground.station.range.bias.max [1] = +50000.0 ground.station.range.bias.estimated [1] = true ground.station.range.rate.sigma [1] = 0.001 ground.station.range.rate.bias [1] = 0.0 ground.station.range.rate.bias.min [1] = -50.0 ground.station.range.rate.bias.max [1] = +50.0 ground.station.range.rate.bias.estimated [1] = true ground.station.azimuth.sigma [1] = 0.02 ground.station.azimuth.bias [1] = 0.01 ground.station.azimuth.bias.min [1] = -0.50 ground.station.azimuth.bias.max [1] = +0.50 ground.station.elevation.sigma [1] = 0.02 ground.station.elevation.bias [1] = 0.01 ground.station.elevation.bias.min [1] = -0.50 ground.station.elevation.bias.max [1] = +0.50 ground.station.az.el.biases.estimated [1] = true ground.station.elevation.refraction.correction [1] = true ground.station.tropospheric.model.estimated [1] = false ground.station.tropospheric.zenith.delay [1] = 2.0 ground.station.tropospheric.delay.estimated [1] = false ground.station.global.mapping.function [1] = false ground.station.niell.mapping.function [1] = false ground.station.range.tropospheric.correction [1] = true ground.station.name [3] = Pretoria ground.station.latitude [3] = -25.8854896226 ground.station.longitude [3] = 27.7074493158 ground.station.altitude [3] = 1566.6334663324 ground.station.clock.offset [3] = 0.0 ground.station.clock.offset.min [3] = -0.001 ground.station.clock.offset.max [3] = +0.001 ground.station.clock.offset.estimated [3] = false ground.station.position.estimated [3] = false ground.station.range.sigma [3] = 20.0 ground.station.range.bias [3] = 13370.193 ground.station.range.bias.min [3] = -50000.0 ground.station.range.bias.max [3] = +50000.0 ground.station.range.bias.estimated [3] = true ground.station.range.rate.sigma [3] = 0.001 ground.station.range.rate.bias [3] = 0.0 ground.station.range.rate.bias.min [3] = -50.0 ground.station.range.rate.bias.max [3] = +50.0 ground.station.range.rate.bias.estimated [3] = true ground.station.azimuth.sigma [3] = 0.02 ground.station.azimuth.bias [3] = 0.01 ground.station.azimuth.bias.min [3] = -0.50 ground.station.azimuth.bias.max [3] = +0.50 ground.station.elevation.sigma [3] = 0.02 ground.station.elevation.bias [3] = 0.01 ground.station.elevation.bias.min [3] = -0.50 ground.station.elevation.bias.max [3] = +0.50 ground.station.az.el.biases.estimated [3] = true ground.station.elevation.refraction.correction [3] = true ground.station.tropospheric.model.estimated [3] = false ground.station.tropospheric.zenith.delay [3] = 2.0 ground.station.tropospheric.delay.estimated [3] = false ground.station.global.mapping.function [3] = false ground.station.niell.mapping.function [3] = false ground.station.range.tropospheric.correction [3] = true ground.station.name [4] = CastleRock ground.station.latitude [4] = 39.2764477379 ground.station.longitude [4] = -104.8063531025 ground.station.altitude [4] = 2095.3769797949 ground.station.clock.offset [4] = 0.0 ground.station.clock.offset.min [4] = -0.001 ground.station.clock.offset.max [4] = +0.001 ground.station.clock.offset.estimated [4] = false ground.station.position.estimated [4] = false ground.station.range.sigma [4] = 20.0 ground.station.range.bias [4] = 11473.623 ground.station.range.bias.min [4] = -50000.0 ground.station.range.bias.max [4] = +50000.0 ground.station.range.bias.estimated [4] = true ground.station.range.rate.sigma [4] = 0.001 ground.station.range.rate.bias [4] = 0.0 ground.station.range.rate.bias.min [4] = -50.0 ground.station.range.rate.bias.max [4] = +50.0 ground.station.range.rate.bias.estimated [4] = true ground.station.azimuth.sigma [4] = 0.02 ground.station.azimuth.bias [4] = 0.01 ground.station.azimuth.bias.min [4] = -0.50 ground.station.azimuth.bias.max [4] = +0.50 ground.station.elevation.sigma [4] = 0.02 ground.station.elevation.bias [4] = 0.01 ground.station.elevation.bias.min [4] = -0.50 ground.station.elevation.bias.max [4] = +0.50 ground.station.az.el.biases.estimated [4] = true ground.station.elevation.refraction.correction [4] = true ground.station.tropospheric.model.estimated [4] = false ground.station.tropospheric.zenith.delay [4] = 2.0 ground.station.tropospheric.delay.estimated [4] = false ground.station.global.mapping.function [4] = false ground.station.niell.mapping.function [4] = false ground.station.range.tropospheric.correction [4] = true ### Measurements parameters range.outlier.rejection.multiplier = 6000 range.outlier.rejection.starting.iteration = 2 range.rate.outlier.rejection.multiplier = 6 range.rate.outlier.rejection.starting.iteration = 2 az.el.outlier.rejection.multiplier = 6000 az.el.outlier.rejection.starting.iteration = 2 PV.outlier.rejection.multiplier = 6 PV.outlier.rejection.starting.iteration = 2 range.measurements.base.weight = 1.0 range.rate.measurements.base.weight = 1.0 azimuth.measurements.base.weight = 1.0 elevation.measurements.base.weight = 1.0 PV.measurements.base.weight = 1.0 PV.measurements.position.sigma = 10.0 PV.measurements.velocity.sigma = 0.01 ## Estimator # normalized parameters p are computed from physical parameters x # as p = (x - x0) / sx where x0 is the reference value for physical # parameter x and sx is the associated scale factor # scaling factor for orbital parameters normalization (m) # if not specified, the value set for propagator.position.error will be copied estimator.orbital.parameters.position.scale = 10.0 # we can use either a Levenberg-Marquardt or a Gauss-Newton # optimization engine. Default is Levenberg-Marquardt estimator.optimization.engine = Levenberg-Marquardt # the default initial step bound factor is 100 for Levenberg-Marquardt # this is too small for normalized parameters when initial guess is very # far. An order of magnitude is 100 times the distance error of the initial guess # divided by estimator.orbital.parameters.position.scale. So if the initial guess # is about 100km wrong and estimator.orbital.parameters.position.scale is set to 10.0, # the initial step bound factor should be of the order of magnitude of 1.0e6 estimator.Levenberg.Marquardt.initial.step.bound.factor = 1.0e6 # convergence is reached when max|p(k+1) - p(k)| < ε for each # normalized estimated parameters p and iterations k and k+1 # so the ε threshold (which corresponds to the key # estimator.normalized.parameters.convergence.threshold) # Normalized values are computed as (x - x0) / sx, # so convergence is reached when the following condition holds for # all estimated parameters: |x[i+1] - x[i]| <= ε * sx # So the convergence threshold specified here can be considered as # a multiplication factor applied to scale. Since for all parameters # the scale is often small (typically about 1 m for orbital positions # for example), then the threshold should not be too small. A value # of 10⁻?is often quite accurate. estimator.normalized.parameters.convergence.threshold = 1.0e-3 estimator.max.iterations = 200 estimator.max.evaluations = 250 # comma-separated list of measurements files (in the same directory as this file) measurements.files = W3B.aer # base name of the output files (log and residuals), no files created if empty output.base.name = orbit-determination