Newer
Older
## 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)
orbit.date = 2019-06-11T19:53:41.539
## orbit.keplerian.a = 0.0
## orbit.keplerian.e = 0.0
## orbit.keplerian.i = 0.0
## orbit.keplerian.raan = 0.0
## orbit.keplerian.pa = 0.0
## orbit.keplerian.anomaly = 0.0
## orbit.equinoctial.a = 0.0
## orbit.equinoctial.ex = 0.0
## orbit.equinoctial.ey = 0.0
## orbit.equinoctial.hx = 0.0
## orbit.equinoctial.hy = 0.0
## orbit.equinoctial.lambda = 0.0
## orbit.circular.a = 0.0
## orbit.circular.ex = 0.0
## orbit.circular.ey = 0.0
## orbit.circular.i = 0.0
## orbit.circular.raan = 0.0
## 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)
## orbit.cartesian.px = -40517522.9
## orbit.cartesian.py = -10003079.9
## orbit.cartesian.pz = 166792.8
## orbit.cartesian.vx = 762.559
## orbit.cartesian.vy = -1474.468
## orbit.cartesian.vz = 55.430
orbit_tle_line_1 = 1 42778U 17036P 19162.69113096 .00000749 00000-0 35781-4 0 9997
orbit_tle_line_2 = 2 42778 97.3549 220.5119 0010756 245.3704 114.6412 15.21997549109170
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# 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 = 300
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 = 12
## Central body gravity potential order
central.body.order = 12
## 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 = -1
ocean.tides.order = -1
## solid tides (true/false) [false]
solid.tides.sun = false;
solid.tides.moon = false
## Atmospheric drag (true/false) [false]
drag = true
## Drag coefficient
drag.cd = 2.0
## Estimation flag for drag coefficient (true/false) [false]
drag.cd.estimated = true
## Drag area (m^2)
drag.area = 0.25
## Solar Radiation Pressure (true/false) [false]
solar.radiation.pressure = false
## SRP coefficient
solar.radiation.pressure.cr = 2
## Estimation flag for SRP coefficient (true/false) [false]
solar.radiation.pressure.cr.estimated = false
## SRP area (m^2)
solar.radiation.pressure.area = 13.12
# Post-Newtonian correction force due to general relativity (true/false) [false]
general.relativity = false
# 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] = true
#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] = true
#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] = true
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
## On-board range bias (m) [0.0]
onboard.range.bias = 5969.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 = false
solid.tides.displacement.remove.permanent.deformation = false
ocean.loading.correction = false
## Ground stations (angles in degrees, altitude and range bias in meters)
ground.station.name [0] = 39-CGBSAT-VHF
ground.station.latitude [0] = 52.834
ground.station.longitude [0] = 6.379
ground.station.altitude [0] = 10
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] = 20.0
ground.station.range.bias.min [0] = -50000.0
ground.station.range.bias.max [0] = +50000.0
ground.station.range.bias.estimated [0] = true
ground.station.range.rate.sigma [0] = 15
ground.station.range.rate.bias [0] = 375.0
ground.station.range.rate.bias.min [0] = -0.0
ground.station.range.rate.bias.max [0] = +500.0
ground.station.range.rate.bias.estimated [0] = true
ground.station.azimuth.sigma [0] = 0.02
ground.station.azimuth.bias [0] = 0.01
ground.station.azimuth.bias.min [0] = -0.50
ground.station.azimuth.bias.max [0] = +0.50
ground.station.elevation.sigma [0] = 0.02
ground.station.elevation.bias [0] = 0.01
ground.station.elevation.bias.min [0] = -0.50
ground.station.elevation.bias.max [0] = +0.50
ground.station.az.el.biases.estimated [0] = true
ground.station.elevation.refraction.correction [0] = true
ground.station.tropospheric.model.estimated [0] = false
ground.station.tropospheric.zenith.delay [0] = 2.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] = true
### Measurements parameters
range.outlier.rejection.multiplier = 6
range.outlier.rejection.starting.iteration = 2
range.rate.outlier.rejection.multiplier = 10
range.rate.outlier.rejection.starting.iteration = 15
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
az.el.outlier.rejection.multiplier = 6
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 = 600
estimator.max.evaluations = 600
# comma-separated list of measurements files (in the same directory as this file)
measurements.files = 2019-06-11T19_58_49_145.961_4171_42778.dat , 2019-06-11T21_32_55_145.961_4171_42778.dat
#, 2019-06-12T07_20_42_145.961_4171_42778.dat
# base name of the output files (log and residuals), no files created if empty
output.base.name = orbit-determination