Orekit issueshttps://gitlab.orekit.org/orekit/orekit/-/issues2024-01-30T16:55:56Zhttps://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/1138Add contructor in AbsoluteDate using Instant2023-07-21T19:25:03ZBryan CazabonneAdd contructor in AbsoluteDate using InstantSince Orekit is able to create an AbsoluteDate using Date object, it could be greate to also have a contructor using [Instant](https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html) (introduced in Java 8)Since Orekit is able to create an AbsoluteDate using Date object, it could be greate to also have a contructor using [Instant](https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html) (introduced in Java 8)12.0Bryan CazabonneBryan Cazabonnehttps://gitlab.orekit.org/orekit/orekit/-/issues/1132Impossible to modify mass rate with additional state derivatives2023-09-08T10:27:12ZRomain SerraImpossible to modify mass rate with additional state derivativesWhen using `AdditionalStateDerivatives` in propagation, it is possible via `combinedDerivatives` to update the rates for the dependent variables of integration e.g. equinoctial elements. However there is no way to change the one for mass...When using `AdditionalStateDerivatives` in propagation, it is possible via `combinedDerivatives` to update the rates for the dependent variables of integration e.g. equinoctial elements. However there is no way to change the one for mass. This is really a drawback for optimal control which is an application mentioned in the doc.https://gitlab.orekit.org/orekit/orekit/-/issues/1122Negative eccentricity computed while propagating with Brouwer-Lyddane algorithm2023-09-08T10:27:32ZJean-Charles BrunelleNegative eccentricity computed while propagating with Brouwer-Lyddane algorithmHello/Bonjour,
I'm trying to use a Brouwer-Lyddane propagator with a step handler in it, but it fails as it calculates a negative eccentricity during the computation.
If I remove the StepHandler, it works.
Here is the code :
`
@Tes...Hello/Bonjour,
I'm trying to use a Brouwer-Lyddane propagator with a step handler in it, but it fails as it calculates a negative eccentricity during the computation.
If I remove the StepHandler, it works.
Here is the code :
`
@Test
public void testBL() {
final double x1 = -1772.619869591273 * 1000;
final double y1 = -3908.6521138424428 * 1000;
final double z1 = 5266.68093513367 * 1000;
final double dx1 = 6.35969327821623 * 1000;
final double dy1 = -4.165238186695803 * 1000;
final double dz1 = -0.9458311825913897 * 1000;
Vector3D position1 = new Vector3D(x1, y1, z1);
Vector3D velocity1 = new Vector3D(dx1, dy1, dz1);
TimeScale tai = TimeScalesFactory.getTAI();
AbsoluteDate date = new AbsoluteDate(2023, 3, 1, 14, 6, 29.639584, tai);
CircularOrbit orbit1 = new CircularOrbit(new PVCoordinates(position1, velocity1), FramesFactory.getGCRF(),
date, Constants.EGM96_EARTH_MU);
System.out.println(orbit1);
BrouwerLyddanePropagator blPropagator = new BrouwerLyddanePropagator(orbit1, 1000.,
Constants.IERS2010_EARTH_EQUATORIAL_RADIUS, Constants.IERS2010_EARTH_MU, Constants.EIGEN5C_EARTH_C20,
Constants.EIGEN5C_EARTH_C30, Constants.EIGEN5C_EARTH_C40, Constants.EIGEN5C_EARTH_C50,
BrouwerLyddanePropagator.M2);
List<SpacecraftState> listSpState = new ArrayList<>();
blPropagator.setStepHandler(10, listSpState::add);
AbsoluteDate startDate = new AbsoluteDate(2023, 3, 1, 14, 6, 29.639584, tai);
AbsoluteDate endDate = new AbsoluteDate(2023, 3, 1, 15, 6, 29.639584, tai);
blPropagator.propagate(startDate, endDate);
}
`
Do you have an idea of how I could bypass this error? I tried using all the different orbit types (Cartesian, Keplerian, Circular & Equinoctial), but no one works.https://gitlab.orekit.org/orekit/orekit/-/issues/1112Error related to the interaction between Orekit and the PyCharm debugger. Pro...2023-07-25T15:12:08ZEshwar Bhargav BhupanamError related to the interaction between Orekit and the PyCharm debugger. Process finished with exit code -1073741819 (0xC0000005)I am new to the Orekit community, not sure if this is more relevant to Orekit or PyCharm. Anyways, here is my problem. While I try to run the simple code as added below, in the latest version of PyCharm IDE.
```
import orekit
vm = oreki...I am new to the Orekit community, not sure if this is more relevant to Orekit or PyCharm. Anyways, here is my problem. While I try to run the simple code as added below, in the latest version of PyCharm IDE.
```
import orekit
vm = orekit.initVM()
from orekit.pyhelpers import setup_orekit_curdir
# from orekit.pyhelpers import absolutedate_to_datetime
setup_orekit_curdir()
from org.orekit.orbits import KeplerianOrbit, PositionAngle, OrbitType
from org.orekit.frames import FramesFactory
from org.orekit.utils import Constants
from org.orekit.propagation.analytical import KeplerianPropagator
from org.orekit.time import AbsoluteDate, TimeScalesFactory
# Define epoch times
utc = TimeScalesFactory.getUTC()
initialDate = AbsoluteDate(2020, 1, 1, 0, 0, 00.000, utc)
# Define the Kepler elements for the orbit
k_orbit = KeplerianOrbit(24464560.0, # Semimajor Axis (m)
0.7311, # Eccentricity
0.122138, # Inclination (radians)
3.10686, # Perigee argument (radians)
1.00681, # Right ascension of ascending node (radians)
0.048363, # Anomaly
PositionAngle.MEAN, # Sets which type of anomaly we use
FramesFactory.getEME2000(),
# The frame in which the parameters are defined (must be a pseudo-inertial frame)
initialDate, # Sets the epoch of the orbital parameters
Constants.WGS84_EARTH_MU) # Sets the central attraction coefficient (m³/s²)
# Propagate 48 hours
propagator = KeplerianPropagator(k_orbit)
proporb = propagator.propagate(initialDate, initialDate.shiftedBy(3600.0 * 48))
# Initial Cartesian state in meters, meters/second
pvt1 = OrbitType.CARTESIAN.convertType(k_orbit).pVCoordinates
# Final Cartesian state in meters, meters/second
pvt2 = OrbitType.CARTESIAN.convertType(proporb.orbit).pVCoordinates
```
The code works great if I run it as a single `.py` file, but when I run it in the PyCharm debugger mode, at this specific line `utc = TimeScalesFactory.getUTC()`, the debugger exits with the error **Process finished with exit code -1073741819 (0xC0000005)**. Can anyone help with the valid reason for this exit error?https://gitlab.orekit.org/orekit/orekit/-/issues/1095Fix CDM writer : Add missing output fields2023-07-25T15:05:08ZVincent CUCCHIETTIvincent.cucchietti@csgroup.euFix CDM writer : Add missing output fieldsHey everyone,
Although the current implementation of the Conjunction Data Message is compliant with the [CCSDS blue book of 2013](https://public.ccsds.org/Pubs/508x0b1e2s.pdf), we are also able to parse fields that are defined in the [C...Hey everyone,
Although the current implementation of the Conjunction Data Message is compliant with the [CCSDS blue book of 2013](https://public.ccsds.org/Pubs/508x0b1e2s.pdf), we are also able to parse fields that are defined in the [CCSDS 508.0-P-1.0.3 pink book](https://cwe.ccsds.org/moims/docs/MOIMS-NAV/Draft%20Documents/Conjunction%20Data%20Message%20(CDM)/508x0p1.0.3_CDM_Changes_Accepted.pdf) such as SCREEN_TYPE or SCREEN_VOLUME__RADIUS.
However, we are not able to write them which seems kind of weird, so that's why I'm opening this issue.
I'll fix this ASAP but I'll wait for someone to review the changes, as I'm unfamiliar with changes to CCSDS files parsing/writing.
Cheers,
VincentVincent CUCCHIETTIvincent.cucchietti@csgroup.euVincent CUCCHIETTIvincent.cucchietti@csgroup.euhttps://gitlab.orekit.org/orekit/orekit/-/issues/1094Add support for NEODIS navigation messages2023-07-07T07:57:09ZLuc MaisonobeAdd support for NEODIS navigation messagesThe Thales Alenia Space ODTS program, NEODIS, generates navigation messages that are an extension of the Rinex 2.x format.
These files should be parsed by adding a few features to the existing Rinex navigation parser.The Thales Alenia Space ODTS program, NEODIS, generates navigation messages that are an extension of the Rinex 2.x format.
These files should be parsed by adding a few features to the existing Rinex navigation parser.12.0Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1090Transformation from Doodson to Delaunay arguments in tides calculation2023-07-14T14:14:42ZAbrackadabrrTransformation from Doodson to Delaunay arguments in tides calculationIt seems, that Delaunay arguments, that computes in constructor of the OceanTidesWave class diverge from ones described in, e.g IERS Conventions 2010 table6.5a. Last five values have other sign, but modules are same. Is it a mistake in c...It seems, that Delaunay arguments, that computes in constructor of the OceanTidesWave class diverge from ones described in, e.g IERS Conventions 2010 table6.5a. Last five values have other sign, but modules are same. Is it a mistake in code or it was made intentionally?https://gitlab.orekit.org/orekit/orekit/-/issues/1071Fix Java heap space error when loading potential from EGMFormatReader2023-07-25T15:11:28ZVincent CUCCHIETTIvincent.cucchietti@csgroup.euFix Java heap space error when loading potential from EGMFormatReaderHey everyone,
I encountered a problem while loading a custom truncated EGM file for the potential. You'll find below a unit test reproducing the error as well as the truncated EGM file.
Cheers,
Vincent
[JavaHeapSpaceEGMFormatReaderTes...Hey everyone,
I encountered a problem while loading a custom truncated EGM file for the potential. You'll find below a unit test reproducing the error as well as the truncated EGM file.
Cheers,
Vincent
[JavaHeapSpaceEGMFormatReaderTest.java](/uploads/804120187ad0037074259f27f2499a82/JavaHeapSpaceEGMFormatReaderTest.java)
[EGM96-truncated-21x21](/uploads/5183b383433d157992224869de7316f2/EGM96-truncated-21x21)https://gitlab.orekit.org/orekit/orekit/-/issues/1065conda install creates wrong env entry2023-07-25T15:08:10ZRalph Ewigconda install creates wrong env entryI recently upgraded from Orekit 10 to 11, and noticed that when I export the environment to a yml file, conda places Orekit under the "pip" section (rather than as a conda package). As a result, when trying to recreate the environment fr...I recently upgraded from Orekit 10 to 11, and noticed that when I export the environment to a yml file, conda places Orekit under the "pip" section (rather than as a conda package). As a result, when trying to recreate the environment from the yml, conda fails. To reproduce:
```
$ conda create --name orekit
$ conda activate orekit
$ conda install -c conda-forge orekit
$ conda env export > orekit_env.yml
```
When examining the yml, "orekit==11.3.2" is listed under "pip"
```
$ conda activate base
$ conda env remove --name orekit
$ conda env create -f orekit_env.yml
=> Pip subprocess error:
ERROR: Could not find a version that satisfies the requirement orekit==11.3.2
ERROR: No matching distribution found for orekit==11.3.2
```
Editing the yml to move "orekit==11.3.2" from "pip" to the "conda" section fixes the problem, and the setup completes successfully. Is this a problem with how orekit is packaged/distributed on conda-forge?https://gitlab.orekit.org/orekit/orekit/-/issues/1062Wrong acceleration when converting angular coordinates2023-03-23T20:41:48ZLuc MaisonobeWrong acceleration when converting angular coordinatesThe following snippet shows accelerations are not converted properly.
The coordinates given as a quaternion with second order derivatives are converted to quaternion, rotation rate and rotation acceleration,
however the acceleration is n...The following snippet shows accelerations are not converted properly.
The coordinates given as a quaternion with second order derivatives are converted to quaternion, rotation rate and rotation acceleration,
however the acceleration is not consistent with the derivative of the rotation rate. It should be 1°/s² along Z, but is almost 0.
```java
@Test
public void testAccelerationIssue() {
final FieldRotation<UnivariateDerivative2> r =
new FieldRotation<>(new UnivariateDerivative2( 0.3812272063696537,
-0.00803169011561382,
-2.9032111989204744E-5),
new UnivariateDerivative2( 0.08052140686538142,
2.9106034570476104E-4,
-6.132055799232064E-6),
new UnivariateDerivative2( 0.03335305878500302,
-7.026818340694362E-4,
-2.5399806772705075E-6),
new UnivariateDerivative2( 0.9203638919632241,
0.003326834974665178,
-7.008971850867259E-5),
false);
final Vector3D acceleration = new AngularCoordinates(r).getRotationAcceleration();
System.out.println(acceleration.getX() + " " + acceleration.getY() + " " + acceleration.getZ());
double dt = 0.1;
final Vector3D rM4H = new AngularCoordinates(shift(r, -4 * dt)).getRotationRate();
final Vector3D rM3H = new AngularCoordinates(shift(r, -3 * dt)).getRotationRate();
final Vector3D rM2H = new AngularCoordinates(shift(r, -2 * dt)).getRotationRate();
final Vector3D rM1H = new AngularCoordinates(shift(r, -1 * dt)).getRotationRate();
final Vector3D rP1H = new AngularCoordinates(shift(r, +1 * dt)).getRotationRate();
final Vector3D rP2H = new AngularCoordinates(shift(r, +2 * dt)).getRotationRate();
final Vector3D rP3H = new AngularCoordinates(shift(r, +3 * dt)).getRotationRate();
final Vector3D rP4H = new AngularCoordinates(shift(r, +4 * dt)).getRotationRate();
final double c = 1.0 / (840 * dt);
final Vector3D finiteDifferencesAcceleration =
new Vector3D( -3 * c, rP4H.subtract(rM4H),
32 * c, rP3H.subtract(rM3H),
-168 * c, rP2H.subtract(rM2H),
673 * c, rP1H.subtract(rM1H));
System.out.println(finiteDifferencesAcceleration.getX() + " " +
finiteDifferencesAcceleration.getY() + " " +
finiteDifferencesAcceleration.getZ());
}
private FieldRotation<UnivariateDerivative2> shift(final FieldRotation<UnivariateDerivative2> r, final double dt) {
return new FieldRotation<>(shift(r.getQ0(), dt),
shift(r.getQ1(), dt),
shift(r.getQ2(), dt),
shift(r.getQ3(), dt),
false);
}
private UnivariateDerivative2 shift(final UnivariateDerivative2 ud, final double dt) {
return new UnivariateDerivative2(ud.taylor(dt),
ud.getFirstDerivative() + dt * ud.getFirstDerivative(),
ud.getSecondDerivative());
}
```
Output:
```
7.446913854026183E-22 1.5286356600290326E-21 -5.2983159964800145E-21
-3.90922985423032E-18 7.938201917924147E-19 0.017494847962500955
```Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1030DSSTPropagator.tolerances supposes the input orbit is Equinoctial2023-02-05T10:09:04ZBryan CazabonneDSSTPropagator.tolerances supposes the input orbit is EquinoctialThe method `DSSTPropagator.tolerances(...)` supposes the input Orbit is equinoctial. However, nothing supposes the user will provide an `EquinoctialOrbit `since the method requires an `Orbit`.
An `OrbitType `parameter shall be added.The method `DSSTPropagator.tolerances(...)` supposes the input Orbit is equinoctial. However, nothing supposes the user will provide an `EquinoctialOrbit `since the method requires an `Orbit`.
An `OrbitType `parameter shall be added.12.0https://gitlab.orekit.org/orekit/orekit/-/issues/962Allow computation of state transition matrix using Ephemeris2022-10-03T20:37:20ZBryan CazabonneAllow computation of state transition matrix using EphemerisIt would be useful to compute state transition matrices using the `Ephemeris`. This new feature need:
* Implementation of the `FieldEphemeris`
* Implementation of the `EphemerisHarvester`
* Validation of the two previous classes and a n...It would be useful to compute state transition matrices using the `Ephemeris`. This new feature need:
* Implementation of the `FieldEphemeris`
* Implementation of the `EphemerisHarvester`
* Validation of the two previous classes and a new test in `StateCovarianceMatrixProvider` showing that covariance propagation can be performed.https://gitlab.orekit.org/orekit/orekit/-/issues/787Eckstein-Hechler can work with CircularOrbit2022-02-03T14:46:32ZGhost UserEckstein-Hechler can work with CircularOrbitEckstein-Hechler propagator can work with CircularOrbit instead of CartesianOrbit because since 2017 we can get the circular coordinates derivatives and not only the cartesian coordinate derivatives.
This development could solve some iss...Eckstein-Hechler propagator can work with CircularOrbit instead of CartesianOrbit because since 2017 we can get the circular coordinates derivatives and not only the cartesian coordinate derivatives.
This development could solve some issue in EcksteinHechlerBatchLSEstimatorTest and EcksteinHechlerKalmanEstimatorTest currently in progress and could improve the understanding of the model as the original paper only use the Circular coordinates.https://gitlab.orekit.org/orekit/orekit/-/issues/673No call to init method of triggering event in ImpulseManeuver class2020-04-15T06:11:25ZChristophe Le BrisNo call to init method of triggering event in ImpulseManeuver classIn `ImpulseManeuver` class, the `init` method does not call the `init` method of the underlying triggering event.
Depending on the underlying event, this could lead to an exception (for example, with the `PositionAngleDetector` used as a...In `ImpulseManeuver` class, the `init` method does not call the `init` method of the underlying triggering event.
Depending on the underlying event, this could lead to an exception (for example, with the `PositionAngleDetector` used as a trigger).
By adding the call to the triggering event, everything goes fine.
```
/** {@inheritDoc} */
public void init(final SpacecraftState s0, final AbsoluteDate t) {
forward = t.durationFrom(s0.getDate()) >= 0;
trigger.init(s0, t);
}
```https://gitlab.orekit.org/orekit/orekit/-/issues/606Wrong position of the "PRN / # OF OBS" header part in RINEX file2019-11-13T15:58:28ZDavid SoulardWrong position of the "PRN / # OF OBS" header part in RINEX fileIn some RINEX files, such as: ftp://igs.ensg.ign.fr/pub/igs/data/2016/044/HKSL00HKG_R_20160440000_01D_30S_MO.crx.gz and
ftp://igs.ensg.ign.fr/pub/igs/data/2016/044/HKWS00HKG_R_20160440000_01D_30S_MO.crx.gz the header part with "PRN / # ...In some RINEX files, such as: ftp://igs.ensg.ign.fr/pub/igs/data/2016/044/HKSL00HKG_R_20160440000_01D_30S_MO.crx.gz and
ftp://igs.ensg.ign.fr/pub/igs/data/2016/044/HKWS00HKG_R_20160440000_01D_30S_MO.crx.gz the header part with "PRN / # OF OBS"
is placed at the end of the file. Hence reading these files leads to the following error:
"org.orekit.errors.OrekitException: fin inattendue du fichier HKWS00HKG_R_20160440000_01D_30S_MO.crx".https://gitlab.orekit.org/orekit/orekit/-/issues/582RinexHeader exception with RINEX 3 file2021-01-12T10:22:09ZDavid SoulardRinexHeader exception with RINEX 3 fileParser does not accept header with the RINEX 3 file : ftp://igs.ensg.ign.fr/pub/igs/data/2016/044/MCHL00AUS_R_20160440000_01D_30S_MO.crx.gzParser does not accept header with the RINEX 3 file : ftp://igs.ensg.ign.fr/pub/igs/data/2016/044/MCHL00AUS_R_20160440000_01D_30S_MO.crx.gzhttps://gitlab.orekit.org/orekit/orekit/-/issues/577rename IRNSS into NAVIC2021-03-02T14:02:20ZLuc Maisonoberename IRNSS into NAVICThe Indian Regional Navigation Satellite System was renamed [NAVIC](https://gssc.esa.int/navipedia/index.php/NAVIC) (NAVigation with Indian Constellation) in 2016.
The enumerates for `Satellitesystem` should be updated and `IRNSSScale` ...The Indian Regional Navigation Satellite System was renamed [NAVIC](https://gssc.esa.int/navipedia/index.php/NAVIC) (NAVigation with Indian Constellation) in 2016.
The enumerates for `Satellitesystem` should be updated and `IRNSSScale` time scale should be renamed.
Such renaming are incompatible change, so they have to wait for next major version: 11.0.11.0https://gitlab.orekit.org/orekit/orekit/-/issues/567Strange midnight turn for GPS block IIA2019-07-09T15:47:59ZLuc MaisonobeStrange midnight turn for GPS block IIAA strange behavior has been observed in a specific case of midnight turn in yaw for GPS block IIA.
The test case was built in a similar way as the original tests cases, using `FindBaseSamples` and `GenerateBaseSamples` from the referen...A strange behavior has been observed in a specific case of midnight turn in yaw for GPS block IIA.
The test case was built in a similar way as the original tests cases, using `FindBaseSamples` and `GenerateBaseSamples` from the reference attitude generator utilities folder. It was however set at a much earlier data than the existing tests and was found on GPS week 1218 (May 2003), for satellite G07 (satCode G37, a Block-IIA satellite), using SP3 file `ngs12183.sp3.Z`. On May 14th, between 07:58 and 09:28, a midnight turn occurs and the Sun crosses the orbital plane (β increasing from negative to positive values). This case should already be handled by Orekit since version 9.3, and there are already test cases for it, but only in the noon turn case as no midnight turn with simultaneous Sun crossing was found until now.
The current output is that the spacecraft starts its linear turn at about 0.1272°/s and the Sun changes side. Then, the satellite keeps turning for about 70 minutes, completing one turn and an half instead of only one half of a turn. One turn and an half seems unrealistic and the reference eclips, even the patched version, does not do that.10.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/524Endless propagation when detector is equal to 02019-11-13T16:01:13ZMikael FillastreEndless propagation when detector is equal to 0Following this discussion : https://forum.orekit.org/t/cross-dependence-between-model-detector-and-handler/385
With the code attached [DetectorClosedLoopControlTest.java](/uploads/d3242bf3a3f6532d28c6982b261e001e/DetectorClosedLoopContro...Following this discussion : https://forum.orekit.org/t/cross-dependence-between-model-detector-and-handler/385
With the code attached [DetectorClosedLoopControlTest.java](/uploads/d3242bf3a3f6532d28c6982b261e001e/DetectorClosedLoopControlTest.java)
I use a detector to reach a value, once reached (eventoccured called on handler) the source of evolution is removed and the detector stays at 0 which causes the propagator to loop infinitely.
Here is the code which loops infinitely : ![infinite_loop](/uploads/9d4ee30bd6792eedb9f1f99487f6a672/infinite_loop.PNG)