Orekit issueshttps://gitlab.orekit.org/groups/orekit/-/issues2023-09-25T18:57:53Zhttps://gitlab.orekit.org/orekit/orekit/-/issues/876Multiple issues in multiple shooting2023-09-25T18:57:53ZLuc MaisonobeMultiple issues in multiple shootingThe `AbstractMultipleShooting` class and its derived classes `MultipleShooter` and `CR3BPMultipleShooter` have multiple issues.
- they rely on specific additional equations (`EpochDerivativesEquations` for `MultipleShooter` and `STMEqua...The `AbstractMultipleShooting` class and its derived classes `MultipleShooter` and `CR3BPMultipleShooter` have multiple issues.
- they rely on specific additional equations (`EpochDerivativesEquations` for `MultipleShooter` and `STMEquations`
for `CR3BPMultipleShooter`) and performs cast blindly instead of using proper typing in constructors
- the API use patch numbers counting from 1 and component index counting from 0 in the same methods,
which is not documented and confusing
- they switch patch points coordinates to free/fixed all components at a time, while allowing setting fixed value for each component thus leading to inconsistent settings (i.e. you can set patch point 2 as free, but fix its y component)
- due to the previous item, the linear algebra used in the resolution assumes some variables are free when they are not
- there are only few tests, and the only one for `CR3BPMultipleShooter` fails if maxIterations is greater than 1
(it succeeds in 1 iterations, but the results are dubious)
- it seems that equation 3.48 in [Pavlak's thesis](https://engineering.purdue.edu/people/kathleen.howell.1/Publications/Dissertations/2013_Pavlak.pdf)
has a sign error (-∂xᵀ₂/∂τ₁ should probably be +∂xᵀ₂/∂τ₁)
- `EpochDerivativesEquations` relies on a specific force model (`ThirdBodyAttractionEpoch`) to be present,
and in the tests this model seems to be ill-configured
- derivatives with respect to epoch should probably be computed using the same expression as in maneuvers with
current STM given by a `MatricesHarvester` and initial derivatives picked up at propagation start time: ∂y/∂t₀ = -∂y/∂y₀ f(t₀, y₀)
- setting closed orbit constraint generates index out of bound exceptions and does not seem to work
- the multiple shooting abstract class should probably be located in the `propagation.integration` package rather
than the `utils` package
The additional equations types issue has been partly addressed in 11.1 but needs incompatible signature changes for completion, so it should wait for version 12.0.
Anyway, this feature would probably need to be completely redesigned.https://gitlab.orekit.org/orekit/orekit/-/issues/877Add dedicated classes for normalized coordinates and time in CR3BP model2023-10-19T19:17:01ZLuc MaisonobeAdd dedicated classes for normalized coordinates and time in CR3BP modelThe Circular Restricted Three Body Problem uses normalized coordinates for everything (time, position, velocity, mass attraction coefficient).
There are provisions to change between standard `PVCoordinates` and frames using `CR3BPSystem....The Circular Restricted Three Body Problem uses normalized coordinates for everything (time, position, velocity, mass attraction coefficient).
There are provisions to change between standard `PVCoordinates` and frames using `CR3BPSystem.getRealPV()` and `CR3BPSystem.getRealAPV()` but the same classes are used to hold both the normalized and regular coordinates.
This is confusing. Specialized non-dimensional containers should be used to represent CR3BP coordinates and time to make it clear they are neither `AbsoluteDate` nor `PVCoordinates`.
As this would change public APIs, it should wait for version 12.0.https://gitlab.orekit.org/orekit/orekit/-/issues/879Add method to clean ephemeris generators from Propagator2022-01-13T15:28:39ZEvan WardAdd method to clean ephemeris generators from PropagatorSee https://forum.orekit.org/t/clear-ephemerisgenerators-from-propagator/1507/2
For numerical propagators there doesn't seem to be a way to clear the `generators` list. This can result in saving multiple copies of the ephemeris when it ...See https://forum.orekit.org/t/clear-ephemerisgenerators-from-propagator/1507/2
For numerical propagators there doesn't seem to be a way to clear the `generators` list. This can result in saving multiple copies of the ephemeris when it is not desired.
Add a `clearEphemerisGenerators()` method or perhaps update `clearStepHandlers()` to also clear the generators.https://gitlab.orekit.org/orekit/orekit/-/issues/890Add a method to convert satellite state vector to GNSS almanach2022-06-02T11:53:50ZBryan CazabonneAdd a method to convert satellite state vector to GNSS almanachIt could be a static method named `stateToAlmanach(final SpacecraftState state)` inside the `GnssPropagator` class. This method is very useful in order to perform orbit determination using a `GnssPropagator`.It could be a static method named `stateToAlmanach(final SpacecraftState state)` inside the `GnssPropagator` class. This method is very useful in order to perform orbit determination using a `GnssPropagator`.https://gitlab.orekit.org/orekit/orekit/-/issues/907RINEX writers for observation and navigation files2023-08-23T11:16:58ZLars Næsbye ChristensenRINEX writers for observation and navigation filesWould there be a general interest to add functionality to Orekit for writing out RINEX observation and navigation files? Since the data structure is already there, it should be possible to undertake.
Personally I do a lot of ETL work an...Would there be a general interest to add functionality to Orekit for writing out RINEX observation and navigation files? Since the data structure is already there, it should be possible to undertake.
Personally I do a lot of ETL work and in many cases going back to original RAW data from closed formats when we change to 3.x (and soon to 4.x?) is bothersome. So a function to write/rewrite a RINEX file could be useful - but does it belong in Orekit?
If so, I might want to volunteer the contribution under a bit of guidance.https://gitlab.orekit.org/orekit/orekit/-/issues/913Parse OEM without planetary ephemerides2024-01-16T12:54:27ZEvan WardParse OEM without planetary ephemeridesAs a user I would like to load an Earth centered OEM file when I don't have a planetary ephemerides file so I don't have to worry about that large auxiliary data file.
In Orekit 10 it was possible to parse and OEM file without loading a...As a user I would like to load an Earth centered OEM file when I don't have a planetary ephemerides file so I don't have to worry about that large auxiliary data file.
In Orekit 10 it was possible to parse and OEM file without loading any planetary ephemerides (e.g. lnxp files). In Orekit 11 it seems the planetary ephemerides are required for loading any OEM file, even one centered on Earth. After looking through the code it appears that the only value used from the 15 MB file is Earth's standard gravitational parameter. It would be a nice feature to be able to parse an OEM without needing planetary ephemerides. This would be user friendly in the sense that there would be less configuration required and less storage space required for the large planetary ephemerides file.
Based on the code structure it is unclear to me what the least intrusive way is to not require a planetary ephemeris file for Earth centered trajectories. Suggestions welcome.https://gitlab.orekit.org/orekit/website-2015/-/issues/11Do not use incomming release when looking for latest release2022-07-04T13:52:43ZGuilhem BonnefilleDo not use incomming release when looking for latest releaseGuilhem BonnefilleGuilhem Bonnefillehttps://gitlab.orekit.org/orekit/orekit/-/issues/946Ionospheric Modifier for `OneWayGNSSRange` and `OneWayGNSSPhase`2022-08-05T16:47:22ZGowtham SivaramanIonospheric Modifier for `OneWayGNSSRange` and `OneWayGNSSPhase`Feature request to add ionospheric delay modifier to `OneWayGNSSRange` and `OneWayGNSSPhase`.
Forum discussion: https://forum.orekit.org/t/leo-satellite-orbit-determination-using-gnss-range-measurements-with-iono-corrections/1864Feature request to add ionospheric delay modifier to `OneWayGNSSRange` and `OneWayGNSSPhase`.
Forum discussion: https://forum.orekit.org/t/leo-satellite-orbit-determination-using-gnss-range-measurements-with-iono-corrections/1864https://gitlab.orekit.org/orekit/orekit/-/issues/947From Osculating to Mean Elements with Brouwer-Lyddane Propagator, negative ec...2024-02-21T16:50:07ZAlberto FerreroFrom Osculating to Mean Elements with Brouwer-Lyddane Propagator, negative eccentricityHi team
as discussed in this thread
https://forum.orekit.org/t/from-osculating-to-mean-elements-with-brouwer-lyddane-propagator/1867
There is a potential issue of negative eccentricity on the BL propagator.
Here the code to reproduce the...Hi team
as discussed in this thread
https://forum.orekit.org/t/from-osculating-to-mean-elements-with-brouwer-lyddane-propagator/1867
There is a potential issue of negative eccentricity on the BL propagator.
Here the code to reproduce the error:
```
long start = 1613870730000L;
/* TLEs of the satellite */
TLE tleOrbit = new TLE
"1 43196U 18015E 21055.59816856 .00000894 00000-0 38966-4 0 9996",
"2 43196 97.4662 188.8169 0016935 299.6845 60.2706 15.24746686170319");
Propagator propagator = TLEPropagator.selectExtrapolator(tleOrbit);
//Get state at initial date and 3 days before
SpacecraftState tleState = propagator.getInitialState();
SpacecraftState tleStateAtDate = propagator.propagate(Time.getAbsoluteDateFromTimestamp(start));
//BL mean orbit
double epsilon = 1.0e-12;
int maxIter = 500;
UnnormalizedSphericalHarmonicsProvider provider = GravityFieldFactory.getUnnormalizedProvider(7, 7);
Orbit meanOrbitOK = BrouwerLyddanePropagator.computeMeanOrbit(tleState.getOrbit(), provider,
provider.onDate(tleState.getDate()), BrouwerLyddanePropagator.M2, epsilon, maxIter);
Orbit meanOrbitKO = BrouwerLyddanePropagator.computeMeanOrbit(tleStateAtDate.getOrbit(), provider,
provider.onDate(tleStateAtDate.getDate()), BrouwerLyddanePropagator.M2, epsilon, maxIter);
```
Thanks for your support!
Albertohttps://gitlab.orekit.org/orekit/orekit/-/issues/959Add finish(SpacecraftState) method to EventHandler2022-09-09T11:50:33ZEvan WardAdd finish(SpacecraftState) method to EventHandlerAs a user when computing passes with an event detector I would like to know when the propagation is finished so that I can determine if it ends in the middle of the pass.
Adding a `finish(SpacecraftState s)` method to the `EventDetecto...As a user when computing passes with an event detector I would like to know when the propagation is finished so that I can determine if it ends in the middle of the pass.
Adding a `finish(SpacecraftState s)` method to the `EventDetector` and `EventHandler` interfaces would work. It would be very similar to the `OrekitStepHandler.finish()`.
With existing interfaces the `EventHandler` could also implement `OrekitStepHandler` to get called at the end of propagation. User would have to add it to the propagator two different ways. Perhaps this is sufficient.https://gitlab.orekit.org/orekit/orekit-tutorials/-/issues/19Add tutorial for station clock bias estimation based on ephemeris2022-09-23T15:26:21ZMaxime JournotAdd tutorial for station clock bias estimation based on ephemerisEphemeris-based estimation is available since Orekit 11.3 (see [MR-300](https://gitlab.orekit.org/orekit/orekit/-/merge_requests/300) fixing [issue 726](https://gitlab.orekit.org/orekit/orekit/-/issues/726)).
It would be nice to add a n...Ephemeris-based estimation is available since Orekit 11.3 (see [MR-300](https://gitlab.orekit.org/orekit/orekit/-/merge_requests/300) fixing [issue 726](https://gitlab.orekit.org/orekit/orekit/-/issues/726)).
It would be nice to add a new tutorial on Ephemeris-based estimation.
I was thinking of estimating clock bias for telescopes since it is something that is frequently done on space surveillance trackers.
For example:
* Use SP3 of several Galileo satellites for ephemeris;
* Define one telescope doing RADEC measurements in GCRF;
* Simulate observations with given clock and RADEC biases;
* (Real observations would be better but, as usual, they are hard to come by;)
* Estimate the telescope clock and RADEC biases using the new feature.https://gitlab.orekit.org/orekit/orekit/-/issues/965OPM parser not allowing upper case characters for units in OPM files2024-01-16T12:54:06ZVilhelm DinevikOPM parser not allowing upper case characters for units in OPM filesIn ccsds opm version 1 upper case characters for the units is allowed in opm files, the opm parser in orekit does not allow upper case character for the units today.In ccsds opm version 1 upper case characters for the units is allowed in opm files, the opm parser in orekit does not allow upper case character for the units today.https://gitlab.orekit.org/orekit/orekit/-/issues/975Request an efficient handling of large ground zones visibility from an onboar...2022-11-11T15:02:40ZJoeRequest an efficient handling of large ground zones visibility from an onboard FoVCurrently, OreKit lacks a way to efficiently determine the visibility of an on-board FoV with a large ground area. The `FootprintOverlapDetector` provides some of this capability, but has limitations when dealing with large areas (e.g. c...Currently, OreKit lacks a way to efficiently determine the visibility of an on-board FoV with a large ground area. The `FootprintOverlapDetector` provides some of this capability, but has limitations when dealing with large areas (e.g. country-, continent- sized). The `GeographicRegionDetector` handles larger areas, but doesn't account for the onboard FieldOfView.
An example use case could be:
1. a landsat-sized, nadir-pointing FoV
2. Country borders loaded from https://www.naturalearthdata.com/ (e.g. https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/110m_cultural.zip)
3. From a LEO orbit (e.g. landsat), compute FoV intersections with various countries over a several day timespan.
Reference [this post](https://forum.orekit.org/t/footprintoverlapdetector-for-large-regions-countries/2020).https://gitlab.orekit.org/orekit/orekit/-/issues/976Upgrade to latest version of SpotBugs2022-11-17T10:06:44ZMaxime JournotUpgrade to latest version of SpotBugsWhile preparing release-11.3 I tried to upgrade our version of SpotBugs (`spotbugs-maven-plugin` in `pom.xml`) from 4.1.4 to 4.7.2.1 (latest at that date).
However it triggered 794 new bugs... Here is the report [spotbugs-errors-when-...While preparing release-11.3 I tried to upgrade our version of SpotBugs (`spotbugs-maven-plugin` in `pom.xml`) from 4.1.4 to 4.7.2.1 (latest at that date).
However it triggered 794 new bugs... Here is the report [spotbugs-errors-when-plugin-version-is-4.7.2.1.html](/uploads/1eb6a03a201f98af881de2558d202c68/spotbugs-errors-when-plugin-version-is-4.7.2.1.html).
Most of the new bugs are due to the fact that the Spotbug team extended the notion of `EI_EXPOSE_REP` to mutable objects in version 4.3.0.
See the [release notes](https://github.com/spotbugs/spotbugs/blob/4.4.1/CHANGELOG.md#430---2021-07-01) : " MS_EXPOSE_REP and EI_EXPOSE_REP are now reported for code returning a reference to a mutable object indirectly (e.g. via a local variable)"
I don't know if we should correct those or exclude them, it will probably end up being a case-by-case decision.
Anyway, this will be a painful work, I think this should be done bit by bit by developers until we are ready to move to a newer version of SpotBugs.https://gitlab.orekit.org/orekit/orekit-tutorials/-/issues/21Add tutorial for the computation of TLE uncertainty2022-11-06T13:54:51ZBryan CazabonneAdd tutorial for the computation of TLE uncertaintyBased on reference [[1]](https://conference.sdo.esoc.esa.int/proceedings/neosst1/paper/429/NEOSST1-paper429.pdf), it could be interesting to have a tutorial for the computation of the covariance of a TLE. The method is described in secti...Based on reference [[1]](https://conference.sdo.esoc.esa.int/proceedings/neosst1/paper/429/NEOSST1-paper429.pdf), it could be interesting to have a tutorial for the computation of the covariance of a TLE. The method is described in section 2.3.https://gitlab.orekit.org/orekit/orekit/-/issues/990Add possibility to get mean elements from TLE propagators2023-06-23T14:22:12ZMaxime JournotAdd possibility to get mean elements from TLE propagatorsFollowing this [forum discussion](https://forum.orekit.org/t/different-sma-from-sgp4-and-spacetrack-omm/2029), it would be useful to have a static method _computeMeanOrbit_ in TLE propagators (SGP4 and SDP4) that would allow the user to ...Following this [forum discussion](https://forum.orekit.org/t/different-sma-from-sgp4-and-spacetrack-omm/2029), it would be useful to have a static method _computeMeanOrbit_ in TLE propagators (SGP4 and SDP4) that would allow the user to get the mean elements from the osculating elements (as it is done in DSST, Eckstein-Hechler and Brouwer-Lyddane)https://gitlab.orekit.org/orekit/orekit/-/issues/1010Implement multi-satellites Extended Semi-analytical Kalman Filter2023-08-23T11:15:02ZBryan CazabonneImplement multi-satellites Extended Semi-analytical Kalman FilterIt would be great to have an Extended Semi-analytical Kalman Filter able to perform multi-satellites orbit determination.It would be great to have an Extended Semi-analytical Kalman Filter able to perform multi-satellites orbit determination.https://gitlab.orekit.org/orekit/orekit/-/issues/1011Implement multi-satellites Unscented Semi-analytical Kalman Filter2023-08-23T11:14:52ZBryan CazabonneImplement multi-satellites Unscented Semi-analytical Kalman FilterIt would be great to have an Unscented Semi-analytical Kalman Filter able to perform multi-satellites orbit determination.It would be great to have an Unscented Semi-analytical Kalman Filter able to perform multi-satellites orbit determination.https://gitlab.orekit.org/orekit/orekit/-/issues/1022Fix projectToEllipse method in Ellipse class2023-10-09T14:50:15ZVincent CUCCHIETTIvincent.cucchietti@csgroup.euFix projectToEllipse method in Ellipse classAfter doing some work involving projection on an ellipse, I noticed one case where the "projectToEllipse" method in the ```Ellipse``` class does not return the expected closest point on the ellipse.
You'll find attached below the test w...After doing some work involving projection on an ellipse, I noticed one case where the "projectToEllipse" method in the ```Ellipse``` class does not return the expected closest point on the ellipse.
You'll find attached below the test which reproduce this behaviour.
[EllipseProjectionTest.java](/uploads/34fc3aee4b4f4f5618d2466dcb810bb9/EllipseProjectionTest.java)
EDIT: This issue has been modified to represent the actual bug while the original issue was due to the inversion of the a and b coefficients in the ```Ellipse``` constructor.https://gitlab.orekit.org/orekit/orekit/-/issues/1024Add covariance matrices for propagation and measurement parameters in StateCo...2024-03-04T21:17:51ZBryan CazabonneAdd covariance matrices for propagation and measurement parameters in StateCovarianceThe tasks to performe are:
1. Add a new method `isCovarianceInLof()` in `StateCovariance`.
```
public boolean isCovarianceInLof() {
return lofType != null;
}
```
2. Add two new attributes in `StateCovariance` class:
```
private ...The tasks to performe are:
1. Add a new method `isCovarianceInLof()` in `StateCovariance`.
```
public boolean isCovarianceInLof() {
return lofType != null;
}
```
2. Add two new attributes in `StateCovariance` class:
```
private final RealMatrix propagationParametersCovariance;
private final RealMatrix measurementParametersCovariance;
```
3. Add new getters in `StateCovariance`: `getPropagationParametersCovariance()`, `getMeasurementParametersCovariance()`, and `getOrbitalParametersCovariance()`
4. Add a `getCovariance()` method that returns the full covariance.
5. Update the `StateCovarianceMatrixProvider` class to propagate the covariance parts corresponding to the propagation and measurements parameters. Note: propagate the covariance corresponding to the measurement parameters is done by multiplying by the identity matrix. For the measurement parameters, use the state transition matrix.
Maybe it could be important to note in the documentation of the `StateCovarianceMatrixProvider` how the matrix shall ordered according to Orekit's convention.