Hello everyone！

Orbit estimated residuals (position and velocity) Is the smaller , the better? What is the normal value range?

Thanks！

Yes! The smaller, the better

In my opinion, the most important thing is to have a mean value of the residuals close to 0.0. Because having measurement residuals not centered around 0.0 means that they are indetermined biases or observability issues in the orbit determination process that must be investigated.

For the amplitude (i.e, min and max values), it completely depends on the accuracy of your data and how did you configured the dynamical model of your numerical orbit propagator. It also depends on the application. The requirements are not the same between routine operations and precise orbit determination applications.

Using a numerical model with the minimum set of force models (i.e., geopotential terms, luni-solar attraction, drag if LEO, solar radiation pressure), having an amplitude of about 10 meters is very interesting. It means that your orbit determination ran properly. If you have smaller values, the smaller, the better

For precise orbit determination applications, which includes more perturbations in the dynamic model (e g., solide tides, ocean tides, albedo, relativity, and even empirical accelerations), the amplitude must be around 10/20 centimeters.

Something also important is to look at the estimated covariance matrix. It will give you an indication of the accuracy estimated parameters.

Best regards,

Bryan

You are really fantastic. I’ll do my research on what you’re saying.Thanks!

Excuse me, can you tell me where to look at the estimated covariance matrix?

Let `estimator`

be your estimation algorithm. For a `BatchLSEstimator `

you can use `estimator.getPhysicalCovariances(1.0e-10)`

. For a `KalmanEstimator `

, you can use `estimator.getPhysicalEstimatedCovarianceMatrix()`

.

I really thank you so much

I found that by culling out data that wasn’t good enough, the residuals would get smaller and smaller. However, using the estimated orbit to do orbital propagator is not getting smaller and smaller with the actual observation data, and it may become larger and larger! What is the reason for this?

Hello, I have extracted the covariance matrix (8*8) as you said.Can you teach me how to judge the accuracy problem through this covariance matrix? You’re in trouble! Thank you!

That’s expected. Because you remove the aberrant values, the estimator only use “the best” measurements to fit the trajectory.

That is also expected. The goal of the least squares algorithm is to estimate the orbit that best fits the entire measurement arc. In contrast, orbit propagation does not optimize the trajectory from the measurement information. So the error increases with time.

Based on a Gaussian assumption, the diagonal elements of the covariance represent the square of the uncertainty of the estimated parameters. If you take the square root of these elements, you can have a representation of the uncertainty. For instance, if you estimate cartesian orbital elements, the square root of the element (0,0) give you a representation of the uncertainty of the X parameters, elements (1,1) of Y, etc.

The estimated covariance is directly related to the accuracy of your measurements (i.e, the `sigma`

parameter you provide when initializing measurements in Orekit). If you have very accurate measurements, your covariance must be small. At the opposite, if you have inaccurate measurements, you will have a lot of uncertainties on the estimated parameters and then big covariance elements.

For mission analysis purposes, it is interesting is to see the evolution of this uncertainty. For instance, this allows to know, from an uncertainty threshold set by the mission, when the uncertainty on the orbital data becomes too big and therefore when it will be necessary to acquire new measurements with a station to improve the knowledge of the orbit.

You can find interesting topics about covariance propagation on the Orekit forum:

- topic 1
- topic 2 (on this one I recommend you to have a look on the document shared by Romain on the last message)
- topic 3

Bryan

Thank you from the bottom of my heart for your kind help.I’ll take a good look at the information you provided.

Hello. The covariance I obtained through the method(estimator.getPhysicalCovariances(1.0e-10)), does it represent the uncertainty of the initial orbital element, or the uncertainty of the last estimated orbital element? Thank you!

Okay, I get it. Thank you!

Hi @bcazabonne,

Thanks for your explanation of the covariance matrix.

I tried to output the covariance matrix of the tutorial `LaserRangingOrbitDetermination`

, as the followings.

According to the doc, `estimator.getPhysicalCovariances(1.0e-10)`

will return the covariances matrix in space flight dynamics physical units. That is meter and meter/s for position and velocity.

Does it means that:

(1) the uncertainty of X is sqrt(86.5) = 9.3m;

(2) the uncertainty of Y is sqrt(70.7) = 8.4m;

(3) the uncertainty of Z is sqrt(181.2) = 13.5m;

(4) the uncertainty of rang bias of 7090 is sqrt(19.7) = 4.4m;

(5) the uncertainty of rang bias of 7941 is sqrt(90.3) = 9.5m;

I feel it is quite large.

```
{86.5181602904,56.8998712667,-27.6387076367,-0.024356172,0.0205827414,-0.0058728831,0.0000000116,-18.8575106926,4.7630260189,12.6749717891,-5.3541740701},
{56.8998712666,70.7062432084,13.6712090896,-0.006112622,0.007623626,-0.0123941319,0.0000000495,-17.9207486528,21.4142685758,-13.0530534186,-30.4389026847},
{-27.638707637,13.6712090894,181.1858898028,0.0314379899,-0.0496310656,-0.0007420114,0.0000001475,9.4950733673,-2.2131485757,-24.2147653545,-37.5552788377},
{-0.024356172,-0.006112622,0.0314379899,0.0000465708,0.0000146994,0.0000332848,-0.0000000001,0.0028022606,0.0138946131,0.0103295078,-0.0420323255},
{0.0205827414,0.007623626,-0.0496310656,0.0000146994,0.0000395072,0.0000251604,-0.0000000001,-0.0044064614,0.0105909302,0.0304981023,-0.02003894},
{-0.0058728831,-0.0123941319,-0.0007420114,0.0000332848,0.0000251604,0.0000354747,-0.0000000001,0.0023622078,0.0050567053,0.0267502268,-0.0263780448},
{0.0000000116,0.0000000495,0.0000001475,-0.0000000001,-0.0000000001,-0.0000000001,0.0,-0.0000000419,-0.000000048,-0.0000002334,0.0000001197},
{-18.8575106926,-17.9207486528,9.4950733673,0.0028022606,-0.0044064614,0.0023622078,-0.0000000419,19.7446194414,-5.0469475472,10.930382106,2.741516994},
{4.7630260188,21.4142685757,-2.2131485757,0.0138946131,0.0105909302,0.0050567053,-0.000000048,-5.0469475472,32.0848815735,-2.959048174,-25.7535487866},
{12.6749717891,-13.0530534186,-24.2147653545,0.0103295078,0.0304981023,0.0267502268,-0.0000002334,10.930382106,-2.959048174,108.3366915718,-19.2499298571},
{-5.3541740699,-30.4389026845,-37.5552788378,-0.0420323255,-0.02003894,-0.0263780448,0.0000001197,2.7415169939,-25.7535487866,-19.2499298571,90.3272570568}}
```

Hi @bcazabonne,

The measurements are in the tutorial, ‘slr-od/lageos2_20160214.npt’.

The std is supposed to be less than 3cm, I think, especially for the station 7090.

The standard deviation is in the **slr-orbit-determination.yaml** file. It is the input file of the orbit determination.

I see the standard deviation for range measurements is 20 meters.

```
measurements:
measurementFiles: ["lageos2_20160214.npt"]
sinex:
stationPositions: "SLRF2014_POS+VEL_2030.0_200428.snx"
stationEccentricities: "ecc_une.snx"
range:
sigma: 20.0
weight: 1.0
```

Therefore, the uncertainty you obtain are consistent.

However, I agree that 20 meters is big for laser ranging measurements (probably a fast copy and past of existing orbit determination inputs). Could you try to update the `sigma`

value with `0.03`

?

Bryan

Hi @bcazabonne,

I tried to set sigma with 0.03, the POD is failed due to ‘matrix is singular’.

If the sigma is set with 0.1, the POD is successful. And YES, the values of covariance matrix are markedly smaller.

```
{0.0023431549,0.001480787,-0.0009243966,-0.0000005923,0.0000006849,-0.0000000555,-0.0,-0.0004749011,0.0001481574,0.0007005799,-0.0002671397},
{0.001480787,0.0017934856,0.0002659577,-0.0000001417,0.0000002524,-0.000000277,0.0,-0.000452551,0.0005480911,-0.0001753311,-0.0008108841},
{-0.0009243966,0.0002659577,0.0048320637,0.0000007643,-0.0000014616,-0.0000001369,0.0,0.0002420648,-0.0000931058,-0.0011033333,-0.0007660468},
{-0.0000005923,-0.0000001417,0.0000007643,0.0000000012,0.0000000004,0.0000000008,-0.0,0.0000000671,0.000000353,0.000000317,-0.0000010692},
{0.0000006849,0.0000002524,-0.0000014616,0.0000000004,0.0000000012,0.0000000007,-0.0,-0.0000001166,0.0000002956,0.0000011522,-0.000000634},
{-0.0000000555,-0.000000277,-0.0000001369,0.0000000008,0.0000000007,0.0000000009,-0.0,0.0000000559,0.0000001429,0.0000008771,-0.0000007307},
{-0.0,0.0,0.0,-0.0,-0.0,-0.0,0.0,-0.0,-0.0,-0.0,0.0},
{-0.0004749011,-0.000452551,0.0002420648,0.0000000671,-0.0000001166,0.0000000559,-0.0,0.0004954521,-0.000128266,0.0002533526,0.0000741587},
{0.0001481574,0.0005480911,-0.0000931058,0.000000353,0.0000002956,0.0000001429,-0.0,-0.000128266,0.0008084911,0.0000013476,-0.0006688412},
{0.0007005799,-0.0001753311,-0.0011033333,0.000000317,0.0000011522,0.0000008771,-0.0,0.0002533526,0.0000013476,0.003632799,-0.00079288},
{-0.0002671397,-0.0008108841,-0.0007660468,-0.0000010692,-0.000000634,-0.0000007307,0.0,0.0000741587,-0.0006688412,-0.00079288,0.0023640945}
```

But the difference of the determined pos and vel are not remarkable. The estimated range bias are quite different.

```
Estimated orbital parameters changes (sigma=0.1):
1 Px +3.697105094790 (final value: 7526993.697105095000)
2 Py -0.058985097334 (final value: -9646310.058985097000)
3 Pz +0.343389705522 (final value: 1464110.343389705500)
4 Vx +0.794574955370 (final value: 3033.794574955370)
5 Vy +0.265181889373 (final value: 1715.265181889373)
6 Vz -0.658685607933 (final value: -4447.658685607933)
Estimated propagation parameters changes:
1 Z-bias[0] +0.000000001573 (final value: 0.000000001573)
Estimated measurements parameters changes:
1 7090/range bias -0.098312886169 (final value: -0.098312886169)
2 7119/range bias +0.092512133787 (final value: 0.092512133787)
3 7825/range bias +1.048151978633 (final value: 1.048151978633)
4 7941/range bias -0.175284194098 (final value: -0.175284194098)
```

```
Estimated orbital parameters changes (sigma=20):
1 Px +3.581894537434 (final value: 7526993.581894537000)
2 Py -0.100269053131 (final value: -9646310.100269053000)
3 Pz +0.492808922427 (final value: 1464110.492808922400)
4 Vx +0.794561009069 (final value: 3033.794561009069)
5 Vy +0.265069110667 (final value: 1715.265069110667)
6 Vz -0.658745910279 (final value: -4447.658745910279)
Estimated propagation parameters changes:
1 Z-bias[0] +0.000000002209 (final value: 0.000000002209)
Estimated measurements parameters changes:
1 7090/range bias -0.094140779710 (final value: -0.094140779710)
2 7119/range bias +0.071996038720 (final value: 0.071996038720)
3 7825/range bias +0.787309196090 (final value: 0.787309196090)
4 7941/range bias -0.086135185197 (final value: -0.086135185197)
```

And now how can I know the std of measurements? The std only could be determined from measurements?

Thanks.

That’s a strange behaviour. Could you try to increase the threshold used for estimator.getPhysicalCovariances(threshold)?

I’m not surprised of that observation. If I remember well, in this tutorial range station biases are estimated to absorb uncertainties in the measurement model. In fact, International Laser Ranging Service (ILRS) provides the known station biases and specifies when station biases must be estimated. In this tutorial, because the measurement model is not perfect, we estimate the biases to absorb the unmodelled effects.

It depends on the station. For that you can refer to ILRS website. Maybe CRD files provide the standard deviation. However, I’m not sure about this information.

Best regards,

Bryan

Hi @bcazabonne,

Thank you very much.

I will try to find out the std of station and use more accurate model.

It is failed in the pod process if the sigma is 0.03, that is all mesurements are rejected in the third iteration. So as the covariance matrix is singular.

```
iteration evaluations ΔP(m) ΔV(m/s) RMS nb Range nb Range-rate nb Angular nb PV Px Py Pz Vx Vy Vz Z-bias[0] 7090/range bias 7119/range bias 7825/range bias 7941/range bias
0 1 1564434.511517319600 95/95 0/0 0/0 0/0 7526990.000000000 -9646310.000000000 1464110.000000000 3033.000000000 1715.000000000 -4447.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
1 2 404.102161 0.097469199 1314557.204332471000 95/95 0/0 0/0 0/0 7527080.921300317 -9646379.192080291 1464497.613634650 3033.048652956 1715.078145623 -4447.032037419 0.000002187 -27.616314113 60.185102131 -1000.000000000 366.878600767
2 3 807.831752 0.195601489 841403.525025109100 95/95 0/0 0/0 0/0 7527263.689240832 -9646518.150928510 1465272.131844492 3033.146577317 1715.234745683 -4447.096436046 0.000006873 -64.927692379 123.827922386 -1000.000000000 1000.000000000
3 4 577.655781 0.401314987 0.000000000000 0/95 0/0 0/0 0/0 7527700.900655132 -9646812.073082061 1465035.188500583 3033.444472635 1715.446858903 -4447.261723917 0.000005535 225.783815064 -976.903416354 1000.000000000 900.092997887
Comparison with reference orbit:
ΔP(m) = 1267.8266564691787
ΔV(m/s) = 0.5595268765658629
matrix is singular
```