Orekit issueshttps://gitlab.orekit.org/orekit/orekit/-/issues2024-02-02T17:23:57Zhttps://gitlab.orekit.org/orekit/orekit/-/issues/1319CDM XML Parser should ignore empty not mandatory fields2024-02-02T17:23:57ZSabrina SarraCDM XML Parser should ignore empty not mandatory fieldsThe CDM Parser should ignore empty not mandatory fields by parsing CDM in XML format.
At the moment, empty tags like
<START_SCREEN_PERIOD nil=“true”/>
or
<START_SCREEN_PERIOD />
or
<START_SCREEN_PERIOD/></START_SCREEN_PERIOD>
raise exc...The CDM Parser should ignore empty not mandatory fields by parsing CDM in XML format.
At the moment, empty tags like
<START_SCREEN_PERIOD nil=“true”/>
or
<START_SCREEN_PERIOD />
or
<START_SCREEN_PERIOD/></START_SCREEN_PERIOD>
raise exception reading CDM file from JSPOC.
The issue does not occurr if the optional fields are not present at all.
https://forum.orekit.org/t/cdm-xml-parsing-error/3206https://gitlab.orekit.org/orekit/orekit/-/issues/1318Add default implementation of getPosition in (Field)Propagator2024-02-01T17:31:46ZRomain SerraAdd default implementation of getPosition in (Field)PropagatorIt shall use static transforms to speed things up.
Default implementation must be overwritten in EphemerisSegmentPropagator and AggregatedPropagatorIt shall use static transforms to speed things up.
Default implementation must be overwritten in EphemerisSegmentPropagator and AggregatedPropagator12.1Romain SerraRomain Serrahttps://gitlab.orekit.org/orekit/orekit/-/issues/1317Wrong units in SP3 base for pos/vel and clock/rate2024-01-30T16:55:56ZLuc MaisonobeWrong units in SP3 base for pos/vel and clock/rateThe SP3 header uses mm (and 10⁻⁴ mm/s) for pos/vel base accuracy, and ps (and 10⁻⁴ ps/s) for clock/rate base accuracy.
As of Orekit 12.X, these values are parsed and returned as is by the API, they should be in SI units.
It should be po...The SP3 header uses mm (and 10⁻⁴ mm/s) for pos/vel base accuracy, and ps (and 10⁻⁴ ps/s) for clock/rate base accuracy.
As of Orekit 12.X, these values are parsed and returned as is by the API, they should be in SI units.
It should be possible to add new getters/setters with an additional `Unit` parameter and deprecate the default ones without units, making sure that they still return values with the raw non-SI units for compatibility. Then the deprecated methods should be removed in 13.0.Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1316Regression in EphemerisPropagatorBuilder API2024-02-01T10:39:58ZVincent CUCCHIETTIvincent.cucchietti@csgroup.euRegression in EphemerisPropagatorBuilder APIHi all,
@MaximeJ noticed that the previously available constructor :
```EphemerisPropagatorBuilder(List<SpacecraftState> states, int interpolationPoints, double extrapolationThreshold, AttitudeProvider attitudeProvider)```
Is not avai...Hi all,
@MaximeJ noticed that the previously available constructor :
```EphemerisPropagatorBuilder(List<SpacecraftState> states, int interpolationPoints, double extrapolationThreshold, AttitudeProvider attitudeProvider)```
Is not available anymore after the interpolation refactoring (my bad again).
Should we include a fix for this in a patch or a minor release @bryan ?
Cheers,
Vincent12.1Vincent CUCCHIETTIvincent.cucchietti@csgroup.euVincent CUCCHIETTIvincent.cucchietti@csgroup.euhttps://gitlab.orekit.org/orekit/orekit/-/issues/1315Add support for Walker constellations2024-01-29T15:07:02ZLuc MaisonobeAdd support for Walker constellationsOne should add some builder to create all the orbits in a Walker constellation.
The builder should by default generate the regular orbits with integer indices, but it should be possible to also add in-orbit spare satellites at intermedia...One should add some builder to create all the orbits in a Walker constellation.
The builder should by default generate the regular orbits with integer indices, but it should be possible to also add in-orbit spare satellites at intermediate indices within some planes.12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1314Wrong parsing of GAL timesystem in SP3 files2024-03-15T13:26:43ZLuc MaisonobeWrong parsing of GAL timesystem in SP3 filesSP3 files can use GAL as the time system. This however does not work because we use `TimeSystem.valueOf` instead of `TimeSystem.parseTimeSystem`.
So it works only for the time systems enumerates that have 3 letters (GPS, UTC, and probabl...SP3 files can use GAL as the time system. This however does not work because we use `TimeSystem.valueOf` instead of `TimeSystem.parseTimeSystem`.
So it works only for the time systems enumerates that have 3 letters (GPS, UTC, and probably TAI), but not for GALILEO, GLONASS and the likes.12.0.2Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1313Discrepancy between ephemeride readings in Orekit and JPL Horizons2024-01-24T16:28:18ZSimonas StaseviciusDiscrepancy between ephemeride readings in Orekit and JPL HorizonsPosition and velocity of the Earth retrieved in Orekit from DE441 ephemerides does not match that of JPL Horizons exactly.
As reference, I am using the following reading of Earth's ICRF position from JPL Horizons:
> $$SOE
2460157.500...Position and velocity of the Earth retrieved in Orekit from DE441 ephemerides does not match that of JPL Horizons exactly.
As reference, I am using the following reading of Earth's ICRF position from JPL Horizons:
> $$SOE
2460157.500000000 = A.D. 2023-Aug-01 00:00:00.0000 TDB [del_T= 69.183312 s]
XYZ : 9.262412495155303E+07 -1.097336742893849E+08 -4.753366571502377E+07
2.291818900912849E+01 1.678010135905066E+01 7.273858345769444E+00
sigmas: n.a. n.a. n.a. n.a. n.a. n.a.
$$EOE
To match this, I create the Earth `CelestialBody` like so:
`JPLEphemeridesLoader earthLoader = new JPLEphemeridesLoader("lnxp1990.441", JPLEphemeridesLoader.EphemerisType.EARTH);`
`CelestialBody earth = earthLoader.loadCelestialBody("Earth");`
Then, I create an `AbsoluteDate`:
`TDBScale TDBscale = TimeScalesFactory.getTDB();`
`AbsoluteDate date = new AbsoluteDate("2023-08-01T00:00:00.000", TDBscale)`
I get the ICRF frame like this:
`CelestialBody centralBody = CelestialBodyFactory.getSolarSystemBarycenter();`
`Frame inertialFrame = centralBody.getInertiallyOrientedFrame();`
Finally, if I retrieve Earth's position at my date in the ICRF frame:
`earth.getPVCoordinates(date,inertialFrame)`
The result is this:
> {2023-07-31T23:58:50.81671611069787, P(9.262412495154932E10, -1.0973367428938684E11, -4.753366571502458E10), V(22918.189009133923, 16780.1013590413, 7273.858345764225), A(-0.0035420733727027968, 0.004120276885531439, 0.0017824598561580007)}
If you compare the positions, they differ by about 5 mm, while the velocities differ by a few nm/s. A discussion with @MaximeJ about this is [here](https://forum.orekit.org/t/earth-position-does-not-match-that-of-jpl-horizons/3211).https://gitlab.orekit.org/orekit/orekit/-/issues/1312Add more overrides of getStaticTransform in TransformProvider2024-03-19T16:07:33ZRomain SerraAdd more overrides of getStaticTransform in TransformProviderFor example in TODproviderFor example in TODproviderhttps://gitlab.orekit.org/orekit/orekit/-/issues/1311Account for EOP libration correction2024-03-19T16:14:54ZGaëtan PierreAccount for EOP libration correctionAdd the variations in pole coordinates corresponding to motions with periods less than two days in space that are not part of the IAU 2000 nutation model.
In IERS Convention 2010, see equation 5.11, Table 5.1a (which is already present i...Add the variations in pole coordinates corresponding to motions with periods less than two days in space that are not part of the IAU 2000 nutation model.
In IERS Convention 2010, see equation 5.11, Table 5.1a (which is already present in the resources) for pole corrections and Table 5.1b for UT1 and LOD corrections.
In the current implementation, only corrections due to ocean tide effects are taken into account.https://gitlab.orekit.org/orekit/orekit/-/issues/1310Creating an AbsoluteDate with createJDDate() at TDBscale introduces error2024-03-25T14:46:29ZSimonas StaseviciusCreating an AbsoluteDate with createJDDate() at TDBscale introduces errorI tried to create an `AbsoluteDate` corresponding to 2460157.5 JDTDB like so:
`TDBScale TDBscale = TimeScalesFactory.getTDB();`
`AbsoluteDate date = AbsoluteDate.createJDDate(2460157, Constants.JULIAN_DAY/2.0d, TDBscale);`
The expe...I tried to create an `AbsoluteDate` corresponding to 2460157.5 JDTDB like so:
`TDBScale TDBscale = TimeScalesFactory.getTDB();`
`AbsoluteDate date = AbsoluteDate.createJDDate(2460157, Constants.JULIAN_DAY/2.0d, TDBscale);`
The expected date is 2023-08-01T00:00:00.000, however `date.toString(TDBscale)` gives 2023-07-31T23:59:59.99998730725312 instead.
As observed by @MaximeJ in the forum [post](https://forum.orekit.org/t/earth-position-does-not-match-that-of-jpl-horizons/3211/2), the discrepancy comes from the way `createJDDate()` is written. It applies the offset of TDB from TAI at noon and then shifts the date by the fractional Julian day part. However, the offset from TAI is different at the final date than that at noon.https://gitlab.orekit.org/orekit/orekit/-/issues/1309Incorrect transmitter location in BistaticRange measurement2024-03-16T14:20:08ZMark RuttenIncorrect transmitter location in BistaticRange measurementThe transmit date is incorrectly calculated by shifting the receive date in the wrong direction. For example
```java
final FieldAbsoluteDate<Gradient> transmitDateDS = downlinkDateDS.shiftedBy(tauTotal);
```
should be
```java
final Fiel...The transmit date is incorrectly calculated by shifting the receive date in the wrong direction. For example
```java
final FieldAbsoluteDate<Gradient> transmitDateDS = downlinkDateDS.shiftedBy(tauTotal);
```
should be
```java
final FieldAbsoluteDate<Gradient> transmitDateDS = downlinkDateDS.shiftedBy(tauTotal.negate());
```
This doesn't affect the calculation of the theoretical measurement but does affect the list of participants in the estimated measurement.12.0.2Mark RuttenMark Ruttenhttps://gitlab.orekit.org/orekit/orekit/-/issues/1308Overload getPosition in (Field) TlePropagator2024-02-28T07:17:11ZRomain SerraOverload getPosition in (Field) TlePropagatorThe part computing velocity could be ignored for speedThe part computing velocity could be ignored for speedhttps://gitlab.orekit.org/orekit/orekit/-/issues/1307Unnecessary calls to transformPVCoordinates in (Field)ShortTermEncounter2DDef...2024-02-24T08:39:12ZRomain SerraUnnecessary calls to transformPVCoordinates in (Field)ShortTermEncounter2DDefinitionCan be replaced by `transformPosition` as only `getPosition` is called afterwardsCan be replaced by `transformPosition` as only `getPosition` is called afterwards12.1Romain SerraRomain Serrahttps://gitlab.orekit.org/orekit/orekit/-/issues/1306Enable intermediate state reset for (Field)TlePropagator2024-02-03T15:45:29ZRomain SerraEnable intermediate state reset for (Field)TlePropagatorThis would allow using (Field)ImpulseManeuver for instanceThis would allow using (Field)ImpulseManeuver for instance12.1Romain SerraRomain Serrahttps://gitlab.orekit.org/orekit/orekit/-/issues/1305Estimate Measurement Parameters in the Unscented Kalman Model2024-01-19T17:35:19ZDiego Iván Tirado HernándezEstimate Measurement Parameters in the Unscented Kalman ModelProblem in the UKF estimation without orbital and propagation parameters.
Description of the problem in: https://forum.orekit.org/t/estimate-measurement-parameters-in-the-unscented-kalman-model/3196/4Problem in the UKF estimation without orbital and propagation parameters.
Description of the problem in: https://forum.orekit.org/t/estimate-measurement-parameters-in-the-unscented-kalman-model/3196/4https://gitlab.orekit.org/orekit/orekit/-/issues/1304Add get methods to KnockeRediffusedForceModel class2024-01-23T23:26:57ZElisabet CidAdd get methods to KnockeRediffusedForceModel classIt is not possible to obtain the albedo and solar flux IR parameters of the class KnockeRediffusedForceModel via "get" methods. These parameters are not available for an user.It is not possible to obtain the albedo and solar flux IR parameters of the class KnockeRediffusedForceModel via "get" methods. These parameters are not available for an user.12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1303Feature request: implement STKEphemerisFile writer2024-01-16T09:42:31ZqmorFeature request: implement STKEphemerisFile writerPlease see https://forum.orekit.org/t/stkephemerisfile-writer/3192/1Please see https://forum.orekit.org/t/stkephemerisfile-writer/3192/1https://gitlab.orekit.org/orekit/orekit/-/issues/1302Add getStaticInverse to StaticTransform (plus Field)2024-01-24T08:01:37ZRomain SerraAdd getStaticInverse to StaticTransform (plus Field)Since `Transform` implement `StaticTransform`, they already have a `getInverse` method returning a full `Transform`. If for example the inverse is only needed to operate on position (and not `PVCoordinates`), then there is superfluous co...Since `Transform` implement `StaticTransform`, they already have a `getInverse` method returning a full `Transform`. If for example the inverse is only needed to operate on position (and not `PVCoordinates`), then there is superfluous computations performed in the inversion. A new getStaticInverse allows to get a purely-static, light-weight version12.1Romain SerraRomain Serrahttps://gitlab.orekit.org/orekit/orekit/-/issues/1301Increase visibility of private methods in Maneuver2024-01-16T15:44:46ZMaxime JournotIncrease visibility of private methods in ManeuverIn `forces.Maneuver` class, methods:
- getPropulsionModelParameters (double and field version)
- getManeuverTriggersParameters (double and field version)
are private. However, it's nice to be able to get these parameters when subclassin...In `forces.Maneuver` class, methods:
- getPropulsionModelParameters (double and field version)
- getManeuverTriggersParameters (double and field version)
are private. However, it's nice to be able to get these parameters when subclassing or wrapping `Maneuver`.
I suggest to make them `public`.12.1Christopher SchankChristopher Schankhttps://gitlab.orekit.org/orekit/orekit/-/issues/1300Regression: Ephemeris with interpolationPoints=12024-03-15T13:26:43ZEvan WardRegression: Ephemeris with interpolationPoints=1As a user I would like to use an `Ephemeris` with interpolationOrder=1, i.e. step-wise interpolation. This was possible in Orekit 11.x, but no longer possible in Orekit 12.0.
Failing test case (Credit Sander Cochran):
```java
/* Ep...As a user I would like to use an `Ephemeris` with interpolationOrder=1, i.e. step-wise interpolation. This was possible in Orekit 11.x, but no longer possible in Orekit 12.0.
Failing test case (Credit Sander Cochran):
```java
/* Ephemeris propagate fails for interpolation point value of 1 */
@Test
void testMinInterpolationPoints() {
// GIVEN
final AbsoluteDate initialDate = new AbsoluteDate();
final Orbit initialOrbit = TestUtils.getDefaultOrbit(initialDate);
// Setup propagator
final Orbit finalOrbit = initialOrbit.shiftedBy(1);
final List<SpacecraftState> states = new ArrayList<>();
states.add(new SpacecraftState(initialOrbit));
states.add(new SpacecraftState(finalOrbit));
final Ephemeris ephemeris = new Ephemeris(states, 1);
// WHEN & THEN
// Error thrown when there is more than one state in ephemeris and interpolation points is 1
ephemeris.propagate(ephemeris.getMaxDate());
}
```12.0.2Evan WardEvan Ward