Usage of EstimationTestUtils, MeasurementCreator etc

Hello everybody,

My question here is simple, is it possible to use EstimationTestUtils of MeasurementCreator etc ?

I’d like to use them for my simulations but I cannot import them.

Thank you in advance,
AD

Hi,

Outside the src/test/java folder you can’t. If you want to create or generate measurements, I suggest you to use the org.orekit.estimation.measurements.generation package of Orekit to generate measurements. Here an Orekit tutorial showing how to use that package to generate measurements.

Best regards,
Bryan

Thank you Bryan !

That is exactly what I need. I’m working on Python and I have a NullPointerException when I’m trying to generate Range measurements, do you know if it’s because of the None in input ? :

unkownSat = ObservableSatellite(0)
rangeBuilder = RangeBuilder(None, radar.GROUNDSTATION, True, sigma_range, 1.0, unknownSat)
spacecraftState = SpacecraftState(orbitEstimate) # With orbitEstimate a KeplerianOrbit
rangeMes = rangeBuilder.build([spacecraftState])

I managed to reproduce the NullPointerException in Python, even with a noise source (btw, using None as a noise source is fine). It happens in RangeBuilder.java:78, which probably means that the AbsoluteDate objects start and end are null pointers. These two AbsoluteDates are initialized in the method AbstractMeasurementBuilder.java:init, which you didn’t call.

I don’t know if the measurement builders are actually supposed to be called manually without a Scheduler.

Here is an example how to use measurement builders with schedulers (and noise sources) in Python: https://github.com/GorgiAstro/orbit-determination-examples/blob/022bae63bef6263972ab85b6bc81eaa0b3e6b4ee/00-generate-measurements-and-tle.ipynb

I was planning to integrate the tutorials (measurement generation + IOD + OD, for all types of measurements) from this Github repo to the other Python examples by Petrus, but I haven’t found time to finish the tutorials yet.

Thanks @yzokras,

I’m gonna explore this tutorial, unfortunately I missed it before… I shoud take a look before !
I think generate properly Measurements objects is really a better idea than what I did before.

I’ll certainly give you my feedback when I would have explored this.

Thank you for your help guys !

Hi @yzokras,

I took the time to well explore the example you sent to me. It’s a really nice work !
I just have a few remarks and questions :

  • I totally skipped the part Propagation and ground track plot because I had some difficulties with the stepHandler you created. Instead of that, I’m using the previous part (In 13) to get all the values in a dataframe, and all the measurements in an other one. With this configuation, I’m able to use the values dataframe for plot and the measurements dataframe to feed my estimators. What do you find about this method ? I don’t understand the purpose of the stephandler given that we already have all the informations.

  • I’m working with my own KeplerianOrbit and for Noised Observations, at the beginning of the observations, I have first datetimes for which Range Observations are done but not RangeRates, AngularAzEl etc. A the end of the Observations, it’s the opposite, I have RangeRate, AngularAzEl etc but not Range Observations. Do you know how it’s possible ?

  • The input data file with noised measurements for the tutorial 01-keplerian-od-with-iod.ipynb is not available on the Git, I used with only true positions but the final plot is not really relevant.

  • Last thing, still in the OD tutorial, the values of the difference residuals_df['bls_minus_measurements_norm'] are constantly positives. The BLS is working very well and the result is really close to the initial keplerianOrbit. I just don’t understand how my residuals are all the time positives. I thought it should be centred in zero ?

Thank you in advance for your explainations. Your work helped me a lot !

This is relevant to me, I am trying to resample measurements after a succesful run of a measurement generator (constructed as in the tutorial you linked). My current approach has been to create a RangeBuilder and use the build method, but I get exactly the error you mention. So if you say that this method, despite being public, is not supposed to be called outside the measurement generation, how should I resample measurements? I am thinking in doing the run without noise, and then regerate the Range object on my own, but adding the noise.

I was worried doing it this way in case that this did not take into account the signal travel time, but I don’t see any other way at the moment…