Rugged Changes

Release History

Version Date Description
2.2 2020-07-31 This is a minor release. It adds access to algorithm identifier, corrects an Earth constant for model IERS96, improves documentation and fixes a few bugs. Automatic building, release and code analysis are available with Gitlab CI. This version depends on Orekit 10.2 and Hipparchus 1.7.
2.1 2019-03-14 This is a minor release. It adds refraction in inverse location and fixes a few bugs. This version depends on Orekit 9.3.1 and Hipparchus 1.4.
2.0 2017-12-19 This is a major release. It mainly provides a refinement feature (i.e. adjusting the viewing model parameters to match ground control points.
1.0 2016-02-10 This is the first official release of Rugged. It includes direct and inverse location for push-broom sensors.

Release 2.2 – 2020-07-31

Type Changes By
Update Updated dependencies to Orekit 10.2 (and Hipparchus 1.7). Fixes 383. guylaine
Fix Add connection with Gitlab CI to allow automatic building and release, as well as automatic code analysis (https://sonar.orekit.org/dashboard?id=org.orekit%3Arugged). Fixes 384. guylaine
Fix Fix a unit test due to CI specificity. Fixes 386. luc
Update Give access to algorithm identifier (DUVENHAGE, CONSTANT_ELEVATION_OVER_ELLIPSOID, ...) with the new method getAlgorithmId(). Fixes 381. guylaine
Update Use the new Derivative<T> interface from Hipparchus. Fixes 385. guylaine
Fix Correct erroneous Earth flattening for model IERS96 in RuggedBuilder. Fixes 379. guylaine
Update Replace in RuggedBuilder hard-coded constants by Orekit Earth constants. Fixes 378. guylaine
Update Update building explanations in static site and remove redundant BUILDING.txt. guylaine
Add Create a release guide in static site. guylaine
Update Update deprecated method of Orekit DataProvidersManager class. guylaine
Update Remove explicit dependency to Hipparchus library. Fixes 382. guylaine
Add Add package-info documentation. guylaine

Release 2.1 – 2019-03-14

Type Changes By
Update Updated dependencies to Orekit 9.3.1 and Hipparchus 1.4. guylaine
Fix Direct location may result to a null result in some very rugged region. In Duvenhage algorithm, in the refineIntersection method for the DEM, some rare cases led to no intersection (as a result from SimpleTile.cellIntersection) with the closeGuess given as input of refineIntersection.By shifting the solution along the LOS direction, with an iterative process, we are able to find the intersection. Fixes 376. luc
Fix Add the possibility to suspend and resume the dump. When performing a dump, in some cases, some extra informations are dumped but are not relevant. For instance when updating a tile for a SRTM tile, we need to add the geoid value of the current point. In the dump file, the geoid tile is also dumped and it leads to bad results when performing the DumpReplayer, as the geoid elevations are read instead of the real elevations. Fixes 377. guylaine
Update Enable null in dump of direct or inverse location results. If direct or inverse location gave "null" as a result, it was not dumped. guylaine
Update Improve test coverage of classes related to dump (org.orekit.rugged.errors). guylaine
Fix Changed RuggedException from checked to unchecked exception. Most functions do throw such exceptions. As they are unchecked, they are not advertised in either `throws` statements in the function signature or in the javadoc. So users must consider that as soon as they use any Rugged feature, an unchecked `RuggedException` may be thrown. In most cases, users will not attempt to recover for this but will only use them to display or log a meaningful error message. Fixes 373. guylaine
Fix Add (optional) atmospheric refraction for inverse location. In Rugged 2.0, only the direct location can take into account the atmospheric refraction. Fixes 372. guylaine
Add Changed terms for refining tutorials. The "fulcrum points" term is changed into "Ground Control Points (GCP)" and the "liaison points" term into "tie points". Thanks to Issam Boukerch. guylaine
Fix For refining computation, correct the constructor of the class adjustment.measurements.SensorToGroundMapping due to a parameters reversal error. Fixes 371. luc
Fix Bad check of maxDate validity in utils.SpacecraftToObservedBody.SpacecraftToObservedBody method. Fixes 256. guylaine
Add Updated Danish translations of error messages. Thanks to Lars Næsbye Christensen. luc
Add Updated Italian translations of error messages. Thanks to Roberto Alacevich. luc
Add Updated Norwegian translations of error messages. Thanks to Espen Bjørntvedt. guylaine
Add Updated Spanish translations of error messages. Thanks to Beatriz Salazar García. luc

Release 2.0 – 2017-12-19

Type Changes By
Update Updated dependencies to Orekit 9.1 and Hipparchus 1.2. guylaine
Add Added refinement feature, to adjust viewing model parameters Thanks to Jonathan Guinet, Lucie Labat-Allée. guylaine
Add Added Danish translations. Fixes 343. Thanks to Lars Næsbye Christensen. luc
Update Updated dependency to Hipparchus 1.1, released on 2017, March 16th. luc
Add Added atmospheric refraction. This work was done under the frame of ESA SOCIS 2016 program. Implements feature #185. Thanks to Sergio Esteves. luc
Update Replaced the ad-hoc parameters with Orekit ParameterDriver that are used in Orekit orbit determination feature. luc
Update Updated dependencies to Orekit 8.0 and Hipparchus 1.0. luc
Update Converted Rugged to use the Hipparchus library. guylaine

Release 1.0 – 2016-02-10

Type Changes By
Add Added a getAlgorithm method at Rugged level. This allows for example to retrieve the DEM elevation for a latitude/longitude pair. luc
Add Added a utility to help estimate visibility and set up min/max search lines. luc
Fix Improved latitude crossing robustness. luc
Add Added a protection against infinite loops in Duvenhage algorithm. luc
Add Added a CONSTANT_ELEVATION_OVER_ELLIPSOID algorithm, similar in spirit to the IGNORE_DEM_USE_ELLIPSOID, but with a user-specified elevation instead of always using 0.0 elevation. Implements feature #187. luc
Add Added Norwegian translation of error messages. Thanks to Espen Bjørntvedt. luc
Update Updated Apache Commons Version as 3.4 has now been released. luc
Add Added partial derivatives for line-of-sights with respect to transforms parameters. This is the first step towards los calibration. luc
Add Added sequences of transforms for lines-of-sight. luc
Add Added a builder for line-of-sight lists. luc
Update Reorganized packages. luc
Add Added getters to the RuggedBuilder. luc
Fix Force reset of builder interpolator when time span is changed. luc
Add Added Romanian translation of error messages. Thanks to Lucian Barbulescu. luc
Update Use builder pattern and fluent interface to create the top level Rugged instance. luc
Fix Force geodetic points to remain in the same longitude range as the tile of the Digital Elevation Model they belong to. luc
Fix Added a protection agains some extremely rare numerical problems in Duvenhage algorithm. luc
Add Added Spanish and Galician translations of error messages. Thanks to Silvia Ríos Bergantiños and Beatriz Salazar. luc
Add Added German translation of error messages. Thanks to Marina Ludwig. luc
Add Added Italian translation of error messages. Thanks to Francesco Coccoluto. luc
Fix Added detection of wrong position/line-of-sight that misses the ground. luc
Add Added a way to reuse transform interpolator from one run to another by dumping its state into a file, thus avoiding costly initialization. luc
Add Time step for internal transform caching is now user-configurable. luc
Update Switched maven configuration to multi-modules. luc
Update Updated UML diagrams. luc
Update Moved TileUpdate to raster package. luc
Update Finalized direct location diagrams. luc
Update renamed core package into intersection. luc
Update Created a utils package. luc
Update Moved raster package one level up. luc
Fix Fixed top package name. luc
Update Updated maven plugins versions. luc
Update Updated Apache Commons Version as 3.3 has now been released. luc
Update Updated Orekit version. luc
Update Improved performance. luc
Update Disabled timing test for inverse location. luc
Update Improved inverse location speed again! luc
Update Added inverse location from latitude and longitude only. When only latitude and longitude are specified, the elevation is automatically computed from the Digital Elevation Model. luc
Update Simplified direct location. luc
Update Improved inverse location performances. luc
Update Added rate to the LineDatation interface. luc
Update Disable timing test by default. luc
Update Renamed setLineSensor into addLineSensor. The new name explains more clearly that several sensors can be set up at once. luc
Fix First working version of inverse location. luc
Update Streamlined line sensor model. We now use a single position for all pixels (but of course still different line-of-sight vectors), as it doesn't really make sense to consider different positions as pixels are only a few microns away from each other. luc
Update Ensure sensor mean plane normal has a deterministic orientation. luc
Update Slightly changed the intersection refinement in flat-body. luc
Update Added a flat-body implementation of refineIntersection. The former implementation ignored the flat-body flag and in fact corrected the flat-body ... luc
Fix Fixed mean reference point position. luc
Update Improved light time correction. The current altitude must be considered when computing light time correction. Previous computation was slightly wrong as it only computed light time from the ellipsoid. This induced problems when computing inverse correction. luc
Fix Fixed computation of latitude crossings for line of sight. In some cases, the line of sight has two intersections with a given iso-latitude cone, and the selecting the closes one to spacecraft was not always the appropriate choice. An hint from the caller was needed, as a point close to the desired intersection. luc
Fix Fixed non-bracketing error near start of sensor line. luc
Update Moved reference date from Rugged top class to LineDatation model. luc
Update Remove check for context, which is ensured since construction. luc
Update Improved speed of inverse location test. luc
Fix First working version of inverse location. It works in simple cases (no light time correction and no aberration of light correction), and is still really slow. luc
Add Started implementation of inverse location (not working yet). luc
Update Removed a check that is not needed anymore. The indices are now checked at caller level. luc
Update Added an option to use Duvenhage algorithm with flat-Earth hypothesis. This option is mainly intended for comparison with existing systems. It should not be used for operational systems and the full Duvenhage algorithm with line-of-sight bending in geodetic coordinates should be used instead. luc
Fix Avoid array bounds error when interpolating exactly at tile edges. luc
Update Added automatic mean plane computation for line sensors. This will allow implementing inverse location. luc
Update Allow direct use of Orekit inertial frames and ellipsoids. luc
Update Added optional aberration of light correction. luc
Update Renamed ligth travel time compensation into light time correction. This better matches physics naming conventions. luc
Update Moved light travel compensation setting out of construction. This setting is not intended to be used often (in fact it should be used only for validation against other systems), so forcing user to set it in all cases was a bad idea. Now the default configuration is to compensate and if user does not want to compensate, he can inhibate it by calling a separate method after construction. luc
Update Fixing light travel time or not is now a user setting. luc
Update Configure tiles updater at construction time. luc
Update Replaced setGeneralContext with constructors. luc
Update Replaced Rugged interface with a class. luc
Update Moved enumerates out of Rugged top level interface. luc
Update Removed SatellitePV and SatelliteQ classes. We now use directly Orekit PVCoordinates and Apache Commons Math Rotation classes. luc
Update Remove GroundPoint class. We use directly the Orekit NormalizedGeodeticPoint now. luc
Add Added ITRF equinox, for applications that rely on it... luc
Fix Fixed virtual "wall" appearing at tiles boundaries. luc
Fix Avoid an infinite loop near tiles boundaries. luc
Fix Fixed error loading elevation from Aster files. luc
Update Improved accuracy by taking speed of light into account in transforms. luc
Update Slight speed-up with a dedicated pointOnGround method. luc
Update Added writing of grid file to full test. luc
Update Don't use a numerical propagator within direct location. As the time between each line is really small (milliseconds), it is better to propagate first and use an ephemeris later. luc
Add New global test (temporary, much too computing intensive). luc
Add Added a default linear model for line datation. luc
Update Avoid line-of-sight splitting before its start. luc
Fix Fixed a numerical issue at tile exit. The low point at tile minimum elevation was computed with a tiny positive error, meaning the point really was above min elevation (at micrometer level). The line segment between entry and exit stopped just before traversing the Digital Elevation Model, and an error was triggered. The solution was to take some margin when computing the segment endpoints at entry and exit: we now start above max elevation and end below min elevation so the intersection should be really on the line. luc
Update Greatly improved accuracy of direct location. There were some small errors (at centimeter level) as result points may be slightly out of line of sight. These errors seemed to be due to the final linear line-of-sight model that is used at pixel level. An iterative correction step is performed to ensure the point is really on the line-of-sight. The residual error is now at nanometer level. luc
Add Allow tolerance for intersections close to pixel edges. luc
Update Use the four corners of each pixel to initialize min/max kd-tree. luc
Update Use point and direction rather than two points for pixel intersection. luc
Update Added a los conversion between Cartesian and geodetic coordinates. The conversion is of course accurate only in the neighborhood of the reference point, as a straight line in Cartesian is not a straight line in geodetic coordinates. What is converted is the initial direction so the two curves are tangent at the reference point. Near Earth surface, the two curves remain within one millimeter of each other after about 100 m travel. luc
Fix First working version of Duvenhage algorithm! luc
Fix Handle degenerate intersection cases. The cases handled include linear cases (when Digital Elevation Model has zero curvature) and constant cases (no curvature and line-of-sight parallel to tile, both in or out-of-tile). luc
Fix First working version of BasicScanAlgorithm. The case where the line-of-sight enters the Digital Elevation Model in one tile on top and exit it in another tile on bottom is not tested yet. luc
Add Added tests for BasicScanAlgorithm. luc
Update Don't exclude endpoints when un-merging tiles. luc
Update Changed private method arguments order for easier understanding. luc
Fix Fixed computation of sub-tiles crossings. luc
Update Added library setup test, with and without Orekit. luc
Add Prepared framework for more complete flight dynamics tests. luc
Update Implemented intersection at pixel level. luc
Update Delegate final pixel intersection to Tile. luc
Fix Added a basic scan algorithm, for testing and validation purposes. luc
Update Added line-of-sight splitting at sub-tiles boundaries. luc
Update Added test for level 0 merging row and tall tile. luc
Update Added methods getLatitudeAtIndex and getLongitudeAtIndex in Tile. luc
Update Changed semantics of merge methods so they refer to current level. luc
Update Renamed package dem into raster. luc
Update Work In Progress on duvenhage algorithm. luc
Update Added getMergingRow and getMergingColumn methods. These methods are essential to identify where to split the line-of-sight in the Duvenhage algorithm, when going from one level in the min/max kd-tree to the next level. luc
Update Added isColumnMerging predicate. luc
Update Added a tolerance around tile for elevation interpolation. Elevation is going to be interpolated at tiles entry and exit points, which are computed from geodetic conversions. The result points may be very slightly out of tiles, at numerical accuracy level. These points should nevertheless be allowed to be interpolated using the closest pixel data, so a tolerance was needed. The SimpleTile class uses a fixed tolerance, arbitrarily set to 1/8 pixel. luc
Fix Fixed interpolation error. luc
Add started implementation of the Duvenhage algorithm. luc
Update Added getLatitudeIndex and getLongitudeIndex in Tile. luc
Fix Handle properly tiles boundaries. Tiles are expected to have no inter-tile gap, i.e. the boundary row/columns are repeated in neighboring tiles. luc
Update Improved identification of point location with respect to tile. luc
Update Sensor directly uses points and vectors, and no more Line. luc
Update Intersection algorithms can use the new ExtendedEllipsoid. This allows them to chop off line-of-sight at DEM cells boundaries. luc
Fix Fixed wrong package in tests. luc
Add Added ExtendedEllipsoid to chop off line-of-sight according to DEM. luc
Update Split top level class from DEM intersection algorithm. luc
Update Line numbers are double. luc
Add Started implementation of direct location ... luc
Update Added a protection against unknown sensors. luc
Add Added configuration for sensor lines of sight. luc
Update Use an offset from a reference date for all computation. luc
Update Added a getMergeLevel method to identify when pixels share min/max. This is a first step towards duvenhage's algorithm. luc
Fix Working version of min/max kd-tree tile. luc
Add Started implementation of min/max KD-tree tile. This is work in progress, the min/max computation seems wrong for now. luc
Update pixels are double. luc
Update Added protection against empty tiles. luc
Update Removed AbastractTile. Specialized tiles should directly extend SimpleTile. luc
Add Added global min/max handling for any tile. luc
Add Prepared first implementation for Duvenhage algorithm. For now, only the (incomplete) API and classes hierarchy has been set up. The tile is still a simple tile and does not yet creates the min/max kd-tree. The algorithm doesn't do anything. luc
Update Boilerplate part for Rugged interface implementation. luc
Update Added API for global context initialization. luc
Update Added containers for parsed position/velocity and attitude. luc
Update Added a hook called after tile update completion. luc
Update Force use of factory to create simple tiles. luc
Update Extract an AbstractTile from SimpleTile luc
Update Added a simple container for inverse location result. luc
Update Expanded API. luc
Update Use new specialized exceptions. luc
Update Added error messages handling, with translation. luc
Update Added design document and diagrams. luc
Update Implemented TilesCache. luc
Update Added factory for tiles. The factory is to be implemented by the DEM intersection algorithm, at very low level (typically tiles based on min/max kd-tree for Duvenhage algorithm). The tile updater on the other hand is the responsibility of the mission specific interface. luc
Update Added method to check ground point coverage. luc
Update Reference latitude/longitude must be the minimum. This ensures simple search for tiles given a ground point. luc