About how to determine the ISS orbit through the right ascension and declination data obtained from ground observations, and predict the subsequent right ascension and declination coordinates

Dear OREKIT authors, first of all my deep respect, your work is amazing.
I am a chasing ISS enthusiast from mainland China. I have completed the program of tracking the ISS without relying on TLE in one year. I use a guide camera and PID control, but it is not perfect. When the ISS elevation angle is greater than 40 degrees , the ISS will be beyond the camera’s field of view, so I think if the track data of the first minute is used to generate the track, it may be more stable as a basis for later tracking, because it has been proved by experiments that tracking the ISS with TLE is indeed very stable, but I still want to improve The accuracy of my guide star tracking does not depend on existing TLE data, so I want to use OREKIT to generate orbits in real time.
The working steps are:
First, according to my location, observation time, and several groups of RA and DEC measured by ISS under my observation angle to determine the orbit of an ISS;
Then, use this orbit to generate several sets of RA and DEC at my viewing angle for the ISS a few minutes later.
However, I can’t find complete examples in tutorials and forums, do you have complete examples for reference? Once again express my most sincere thanks!

Hi @zgsp2008

Welcome to the Orekit forum.

You have to do it in two steps:

  1. Perform the orbit determination using your observed RA/DEC measurements
  2. Perform a measurement generation based on the previously estimated orbit

Orbit Determination

You can look at the NumericalOrbitDetermination tutorial and its abstract class AbstractOrbitDetermination with the method run(). The main method used to build an orbit determination process are inside this class (i.e. propagator configuration, station configuration, etc.). You can even extend it to build your application.
The entry point of this tutorial is: orbit-determination-w3b.yaml. I recommend you to play a little bit with it in order to be familiar with the parametrization.
For your application, the main change will be the parsing of your measurement because I think you use your own format to store your RA/DEC measurements. Maybe you could convert it to our .aer format in order to use easily our abstract class (the parsing of .aer class is included in the abstract class). The NumericalOrbitDetermination uses a .aer file for storing the observed measurement.
As you use RA/DEC which are not supported by the tutorial, you will have to modify the readMeasurements() method of AbstractOrbitDetermination by adding the following key:

 case "RA_DEC" :
      final AngularRaDec angularRaDec = new RaDecParser().parseFields(fields, stations, pvData, satellite,
                                                                      satRangeBias, weights,
                                                                       line, lineNumber, source.getName(), false);
      addIfNonZeroWeight(angular, measurements);
      break;

Also you will need to implement the RaDecParser which is not available in the tutorials. For this, you can look at the AzElParser. Finally, inside the .aer file, your data will have the following shape (it is an example:

2010-11-02T03:00:50.5716   RA_DEC       MyStation           211.1446   43.4099
2010-11-02T03:02:39.3147   RA_DEC       MyStation           298.3727   30.5573
...

In summary, the additional work to extend our tutorial are:

  1. Convert you data to our .aer format following the example above
  2. Implement the RaDecParser following what we’ve done for the AzElParser.
  3. Modify the readMeasurement() method of AbstractOrbitDetermination by adding the "RA_DEC" key.

Measurement Generation

You can look at the MeasurementGenerator class in the tutorials. You can adapt it to use the previously estimated orbit instead of a parsed orbit inside an input file. Also this tutorial generates Range measurements. You can modify it to generate RA/DEC by changing the method getBuilder(...). These are, I think, the two only modifications.

Best regards,
Bryan

1 Like

Thank you very much for your warm reply, I will study and practice as soon as possible, thank you again! :heart_hands:

Dear bcazabonne, please forgive my stupidity, I’m not familiar with Java, but still tried, I want to run ‘NumericalOrbitDetermination.java’ program directly, using Eclipse IDE, these two files: orbit-determination-w3b.yaml, W3B.aer, I don’t know under which path to put them, although orbit-determination-w3b.yaml says internally it is stored in src/tutorial/resources/tutorial-orekit-data, I created this directory and put the files in but not It works, so I put them in the bin directory, and the program runs with the following error:

Exception in thread “main” java.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonView
at com.fasterxml.jackson.databind@2.9.9.3/com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector.(JacksonAnnotationIntrospector.java:37)
at com.fasterxml.jackson.databind@2.9.9.3/com.fasterxml.jackson.databind.ObjectMapper.(ObjectMapper.java:291)
at TTT/estimation.common.AbstractOrbitDetermination.run(AbstractOrbitDetermination.java:411)
at TTT/estimation.NumericalOrbitDetermination.main(NumericalOrbitDetermination.java:76)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.annotation.JsonView
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
… 4 more

Ultimately, if this program works, I don’t think it needs to be modified at all, because the AZ_EL data is also clear, and they are also returned directly by the equatorial mount, so the question now is how should I run this correctly Tutorial, once again express my deep thanks! ! !

Finally, I also show you the results of my current space station shots.
ISS_2022062801
ISS_2022073101

Hi!

I think the issue is due to the fact that you don’t have the dependencies for the jackson libraries. Two possibilities:

  1. Do a mvn clean on your orekit-tutorials project. You can do it directly on Eclipse:

    • Right click on the project
    • Go to Run As
    • Maven clean
  2. Import directly the dependencies:

Best regards,
Bryan

Thank you very much for the two pictures! I really like it :slight_smile: