Precision orbit determination using LEO's pseudorange and carrier phase data

Recently, I am learning to use GRACE-FO data for kinematic orbit determination.orekit supports pseudorange and carrier phase observation data, as well as combined observations, empirical models, and phase center corrections. I think it should be sufficient for precise orbit determination of GNSS. However, using GRACE1B data for testing, the results are quite different from GNV1B. , can you provide a tutorial on LEO carrier phase orbit determination? I also tried to use GROOPS for orbit determination, but I could not get the processing flow from the GROOPS software.


Hi @linggen138

Welcome to the Orekit forum.

We don’t have tutorial for precise LEO orbit determination based on GNSS measurements. But we have many orbit determination tutorials. You can for instance look at the GNSSOrbitDetermination tutorial which is based on GNSS received by ground stations.

For the spacecraft dynamic, Orekit models all the main perturbations (drag, tesseral and zonal harmonics, SRP, Solid and Ocean tides, 3rd body point mass, empirical accelerations, etc.). You can find example on the tutorial.
My first recommendation for you need is to use OneWayGNSSRange and OneWayGNSSPhase classes for your measurement model.


thank you for your reply, I’m trying to use OneWayGNSSRange and OneWayGNSSPhase classes for LEO orbit determination based on GNSS measurement, I think the receiver clock offset estimation part can be modified a little. Since the clock offset of the satellite is different at each time, in precise orbit determination, it is generally necessary to estimate a clock offset at each observation time.
This can be solved by building new measurement model contained specific time clock offset, but I also hope to add it to Orekit.
English is not my native language, my English is not very good, I hope you can understand

We are aware clock offset is a stochastic variable. This is best handled by Kalman filters and more tricky with batch least squares that apply a deterministic model (typically a linear or quadratic polynomial). Having one offset for each clock (emitter and receiver) at each epoch would imply having a gigantic state vector in least squares, so in this case some tricks must be applied, to manage the stochastic part at each epoch and remove it so the state vector seen by the least squares engine remains reasonable. Unfortunately, none of these tricks are available in Orekit by now.

This means that if you are using batch least squares, you can only estimate the coefficients of the clock model polynomial and that the stochastic errors will remain in the residuals.

Thank you for your suggestion. I will try to use the Kalman filter for LEO satellite POD. In addition, I think Orekit is a very comprehensive satellite orbit tool that helps us save a lot of time and solve a lot of problems. Your work has been very helpful to me.