Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding Support for OSIRIS-REx TagCams Instruments #5427

Merged
merged 37 commits into from
Apr 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
48e4de1
Add new IrregularBodyCameraGroundMap class
KrisBecker Jul 26, 2018
41e4141
Update documentation and app/unit tests
KrisBecker Sep 19, 2018
cc1ebcc
Merge branch 'ocams_support' of http://orgit:7990/scm/isis/enhancemen…
KrisBecker Dec 2, 2018
a93659d
Initial version of tagcams2isis
KrisBecker Jan 11, 2019
8e0c8c2
Initial version of OREX TAGCAMS Camera Model
KrisBecker Jan 23, 2019
e7c0400
Improved import of TAGCAMS image data
KrisBecker Jan 23, 2019
fd27ef1
Add complete version of OpenCV distortion model
KrisBecker Jan 23, 2019
b6c96f1
Modified OpenCV distortion model
KrisBecker Jan 23, 2019
161070d
Update TAGCAMS OpenCV distortion model parameters
KrisBecker Jan 24, 2019
67a2225
Removed unused variables to suppress warnings
KrisBecker Jan 24, 2019
39398a9
Typo in iTime.h include
KrisBecker Jan 24, 2019
1e0dacb
Removed apostrophe that causes problems on Linux
KrisBecker Jan 24, 2019
f84d6f9
Update tagcams2isis temperature computation
KrisBecker Jan 28, 2019
0fbbbb8
Update TAGCAMS camera model
KrisBecker Jan 28, 2019
dc67506
New version of TAGCAMS camera model parameters
KrisBecker Jan 28, 2019
7869994
Updates to TAGCAMS IAK
KrisBecker Feb 4, 2019
2ff7fe0
Added LT and target/observer swap parameters
KrisBecker Feb 4, 2019
de20570
Properly initialize distorted/undistorted parms
KrisBecker Feb 4, 2019
db79996
tagams2isis.xml fix already happened
KrisBecker Jan 24, 2019
791c59b
Fixed merge issue
KrisBecker Mar 7, 2019
97bdc17
Correct typo
KrisBecker Mar 29, 2019
d867bb4
Minor documentation change
KrisBecker Feb 10, 2020
79ae1bb
Merge UofA branch 'main' into USGS ISIS repo for 1) isis/src/osirisre…
kledmundson Feb 6, 2024
91e111e
Merge branch 'dev' of https://github.com/kledmundson/ISIS3 into dev
kledmundson Feb 19, 2024
233c2c6
Modified for easy development of derived classes
KrisBecker Jul 26, 2018
f6074cb
Added translations for OSIRIS-REx TagCams instruments NFTCam, NAVCam,…
kledmundson Feb 28, 2024
2626786
Committing test data for OsirisREx TagCams support. Addresses #5424.
kledmundson Mar 10, 2024
5e7751c
Initial commit of Osiris-REx Tagcams ingestion program tagcams2isis a…
kledmundson Mar 10, 2024
f5dd8c0
Adding support for intersections with irregular bodies, in particular…
kledmundson Mar 10, 2024
ec8ef50
Unit test and truth data for OsirisREx tagcams instruments. Addresses…
kledmundson Mar 10, 2024
9ec9fa0
Support for OsirisREx tagcams instruments. Addresses #5424.
kledmundson Mar 10, 2024
26f13c9
CHANGELOG entry for Osiris-REx tagcams instrument support. Addresses …
kledmundson Mar 10, 2024
acac69f
Merge branch 'DOI-USGS:dev' into enhancement/orexTagcamsSupport
kledmundson Mar 15, 2024
80fd22f
Merge branch 'DOI-USGS:dev' into enhancement/orexTagcamsSupport
kledmundson Mar 19, 2024
39a4ca0
Per review comments 2024-03-18: 1) fixed typo in IrregularBodyGroundM…
kledmundson Mar 19, 2024
ea82895
Per Adam's suggestion 2024-03-19, modified second tagcams2isis method…
kledmundson Mar 19, 2024
7d8e904
Merge branch 'dev' into enhancement/orexTagcamsSupport
Kelvinrr Apr 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ release.
- Changed the default spiceinit url to https://astrogeology.usgs.gov/apis/ale/v0.9.1/spiceserver/ and added deprecation warning for use of https://services.isis.astrogeology.usgs.gov/cgi-bin/spiceinit.cgi url. [#5327](https://github.com/USGS-Astrogeology/ISIS3/issues/5327)
- Skypt has been refactored to be callable; old Makefile tests have been removed and replaced by gtests. Issue: [#5443](https://github.com/USGS-Astrogeology/ISIS3/issues/5443)


### Fixed
- Fixed a bug in which the histogram tool used the entire image to calculate bin size, which caused an issue with high dynamic range images. [#5371](https://github.com/DOI-USGS/ISIS3/issues/5371)
- Fixed a bug in which 'version' file was compiled as source and prevented subsequent ISIS recompilation [#5374](https://github.com/DOI-USGS/ISIS3/issues/5374)
Expand All @@ -56,6 +55,7 @@ release.
- Added new option in `ctxcal` to use monthly computed flatfield files for "Frown" removal in CTX images. [#5338](https://github.com/DOI-USGS/ISIS3/pull/5338)
- CSMCamera can now read and use the body rotation from ALE produced ISDs [#5072](https://github.com/DOI-USGS/ISIS3/pull/5072)
- CSMSkyMap added to CSMCamera for use with local rover projections in ISIS [#5072](https://github.com/DOI-USGS/ISIS3/pull/5072)
- OSIRIS-REx Tagcams instrument support, tests, and test data added [#5424](https://github.com/DOI-USGS/ISIS3/issues/5424)


## [8.1.0] - 2024-01-08
Expand Down
30 changes: 30 additions & 0 deletions isis/appdata/serialnumbers/OsirisRexTagCamsSerialNumber.trn
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# history 2019-01-19 Kris Becker - Original version added to UofA codebase.

Group = Keyword1
Auto
InputKey = SpacecraftName
InputGroup = "IsisCube,Instrument"
InputPosition = (IsisCube, Instrument)
OutputName = Keyword1
OutputPosition = ("Group","SerialNumberKeywords")
Translation = ("OsirisRex", "OSIRIS-REx")
Translation = (*,*)
EndGroup
Group = Keyword2
Auto
InputKey = InstrumentId
InputGroup = "IsisCube,Instrument"
InputPosition = (IsisCube, Instrument)
OutputName = Keyword2
OutputPosition = ("Group","SerialNumberKeywords")
Translation = (*,*)
EndGroup
Group = Keyword3
Auto
InputKey = SpacecraftClockStartCount
InputGroup = "IsisCube,Instrument"
InputPosition = (IsisCube, Instrument)
OutputName = Keyword3
OutputPosition = ("Group","SerialNumberKeywords")
Translation = (*,*)
EndGroup
4 changes: 4 additions & 0 deletions isis/appdata/translations/Instruments.trn
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,10 @@ Group = InstrumentName
Translation = (OCams, SamCam)
Translation = (OCams, PolyCam)

Translation = (TagCams, NAVCam)
Translation = (TagCams, NFTCam)
Translation = (TagCams, StowCam)

# Rosetta
Translation = (Osiris, OSINAC)
Translation = (Osiris, OSIWAC)
Expand Down
5 changes: 4 additions & 1 deletion isis/src/base/objs/CameraGroundMap/CameraGroundMap.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#ifndef CameraGroundMap_h
#define CameraGroundMap_h

/** This is free and unencumbered software released into the public domain.
The authors of ISIS do not claim copyright on the contents of this file.
For more details about the LICENSE terms and the AUTHORS, you will
Expand Down Expand Up @@ -69,6 +70,9 @@ namespace Isis {
* allow the bundle adjustment to skip the back of planet test during iterations.
* Also changed the name of the angle variable to cosangle to be more
* descriptive. References #2591.
* @history 2018-07-26 Kris Becker - Move all local variables and methods to
* protected scope so derived objects can be developed
* properly
*/
class CameraGroundMap {
public:
Expand Down Expand Up @@ -135,7 +139,6 @@ namespace Isis {
double p_focalPlaneX; //!< Camera's x focal plane coordinate
double p_focalPlaneY; //!< Camera's y focal plane coordinate

private:
void LookCtoFocalPlaneXY(); //!< Calculate focalplane x/y from lookvector in camera
/** Surface point calculated from ground coordinates in GetXY and used for partials*/
std::vector<double> m_pB;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/** This is free and unencumbered software released into the public domain.
The authors of ISIS do not claim copyright on the contents of this file.
For more details about the LICENSE terms and the AUTHORS, you will
find files of those names at the top level of this repository. **/

/* SPDX-License-Identifier: CC0-1.0 */

#include "IrregularBodyCameraGroundMap.h"

#include "SurfacePoint.h"

using namespace std;

namespace Isis {

/**
* Constructor
*
* @param parent Pointer to camera to be used for mapping with ground
*/
IrregularBodyCameraGroundMap::IrregularBodyCameraGroundMap(Camera *parent,
const bool clip_emission_angles) : CameraGroundMap(parent),
m_clip_emission(clip_emission_angles) {
}

/**
* This method computes the undistorted focal plane coordinates for a ground
* position, using the current Spice settings (time and kernels) without
* resetting the current point values for lat/lon/radius/x/y. The class value
* value for m_pB and m_lookJ are set by this method.
*
* This method has been reimplemented from the CameraGroundMap class to never
* perform the emission angle check. This is because it uses the ellipsoid for
* the check which is in general not adequate for irregular bodies.
*
* @param point Surface point (ground position)
* @param cudx [out] Pointer to computed undistored x focal plane coordinate
* @param cudy [out] Pointer to computed undistored y focal plane coordinate
*
* @return @b bool If conversion was successful
*/
bool IrregularBodyCameraGroundMap::GetXY(const SurfacePoint &point,
double *cudx, double *cudy) {

return CameraGroundMap::GetXY(point, cudx, cudy, m_clip_emission);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#ifndef IrregularBodyCameraGroundMap_h
#define IrregularBodyCameraGroundMap_h

/** This is free and unencumbered software released into the public domain.
The authors of ISIS do not claim copyright on the contents of this file.
For more details about the LICENSE terms and the AUTHORS, you will
find files of those names at the top level of this repository. **/

/* SPDX-License-Identifier: CC0-1.0 */

#include "Camera.h"
#include "CameraGroundMap.h"
#include "SurfacePoint.h"

namespace Isis {
/**
* Convert between undistorted focal plane and ground coordinates
*
* This class is derived from CameraGroundMap to support the special case of
* irregular bodies. Particularly, only the GetXY() method is reimplemented
* here to never perform the "emission angle" (in places called "back-of-the-
* planet") test. This is because the test uses the ellipsoid to validate
* ground point visibility along the look vector to the surface. This is not
* adequate for most irregular bodies.
*
* @ingroup Camera
*
* @see CameraGroundMap
*
* @author 2018-07-26 UA/OSIRIS-REx IPWG Team
*
* @internal
* @history 2018-07-26 UA/OSIRIS-REx IPWG Team - Developed to support control
* of irregular bodies
* @history 2024-03-10 Ken Edmundson - Modified per Kris Becker such that the
* emission angle (or back-of-the-planet) test is never
* performed in the GetXY method (see class description
* above).
*/
class IrregularBodyCameraGroundMap : public CameraGroundMap {
public:
IrregularBodyCameraGroundMap(Camera *parent, const bool clip_emission_angles = false);

//! Destructor
virtual ~IrregularBodyCameraGroundMap() {};

virtual bool GetXY(const SurfacePoint &spoint, double *cudx, double *cudy);

protected:
bool m_clip_emission; /**! Test for emission angles? */

};
};
#endif
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This class will be tested by the applications and the individual Camera models.
7 changes: 7 additions & 0 deletions isis/src/base/objs/IrregularBodyCameraGroundMap/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
ifeq ($(ISISROOT), $(BLANK))
.SILENT:
error:
echo "Please set ISISROOT";
else
include $(ISISROOT)/make/isismake.objs
endif
7 changes: 7 additions & 0 deletions isis/src/osirisrex/apps/tagcams2isis/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
ifeq ($(ISISROOT), $(BLANK))
.SILENT:
error:
echo "Please set ISISROOT";
else
include $(ISISROOT)/make/isismake.apps
endif
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
#
# This translation file is used to produce the ISIS Archive label group
# for the Osiris-REx Tagcams cameras (NAVCam, StowCam, NFTCam).
#
# Translation = (left,right) convert the input "right" to "left"
#
# history 2019-01-10 Kris Becker - Original version added to UofA codebase.
#
Group = ProducerId
Auto
Optional
InputKey = ORIGIN
InputPosition = FITSLABELS
OutputName = ProducerId
OutputPosition = (Object, IsisCube, Group, Archive)
Translation = (*, *)
End_Group

Group = CheckSumStatus
Auto
Optional
InputKey = CKPASS
InputPosition = FITSLABELS
OutputName = CheckSumStatus
OutputPosition = (Object, IsisCube, Group, Archive)
Translation = (*, *)
End_Group

Group = MetaKernel
Auto
Optional
InputKey = META_KER
InputPosition = FITSLABELS
OutputName = MetaKernel
OutputPosition = (Object, IsisCube, Group, Archive)
Translation = (*, *)
End_Group

Group = TAGCAMSCommandedSequenceId
Auto
Optional
InputKey = TCSEQID
InputPosition = FITSLABELS
OutputName = TagcamsCommandedSequenceId
OutputPosition = (Object, IsisCube, Group, Archive)
Translation = (*, *)
End_Group

Group = TAGCAMSCommandedImageId
Auto
Optional
InputKey = TCIMGID
InputPosition = FITSLABELS
OutputName = TagcamsCommandedImageId
OutputPosition = (Object, IsisCube, Group, Archive)
Translation = (*, *)
End_Group

Group = RawCameraHeadTemperature
Auto
Optional
InputKey = TCCHTEMP
InputPosition = FITSLABELS
InputDefault = 0
OutputName = RawCameraHeadTemperature
OutputPosition = (Object, IsisCube, Group, Archive)
Translation = (*, *)
End_Group

Group = RAAtReferencePixel
Auto
Optional
InputKey = CRVAL1
InputPosition = FITSLABELS
InputDefault = 0
OutputName = RAAtReferencePixel
OutputPosition = (Object, IsisCube, Group, Archive)
Translation = (*, *)
End_Group

Group = DecAtReferencePixel
Auto
Optional
InputKey = CRVAL2
InputPosition = FITSLABELS
InputDefault = 0
OutputName = DecAtReferencePixel
OutputPosition = (Object, IsisCube, Group, Archive)
Translation = (*, *)
End_Group

End
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#
# This translation file is used to produce the ISIS BandBin label group
# for the OSIRIS-REx Tagcams cameras (NAVCam, StowCam, NFTCam).
# Translation = (left,right) convert the input "right" to "left"
#
# history 2019-01-19 Kris Becker - Original version added to UofA codebase.

Group = FilterName
Auto
InputKey = FILTNAME
InputPosition = FITSLABELS
InputDefault = Monochrome
OutputName = FilterName
OutputPosition = (Object, IsisCube, Group, BandBin)
InputDefault = Unknown
Translation = (*, *)
End_Group

Group = Name
Auto
InputKey = INSTRUME
InputPosition = FITSLABELS
InputDefault = TagCams
OutputName = Name
OutputPosition = (Object, IsisCube, Group, BandBin)
InputDefault = Unknown
Translation = (NAVCam, NCM)
Translation = (NFTCam, NFT)
Translation = (StowCam, STO)
Translation = (TagCams, *)
End_Group

Group = FilterNumber
Auto
InputKey = FILTNUMB
InputPosition = FITSLABELS
InputDefault = 1
OutputName = Number
OutputPosition = (Object, IsisCube, Group, BandBin)
InputDefault = Unknown
Translation = (*, *)
End_Group

Group = FilterCenter
Auto
InputKey = INSTRUME
InputPosition = FITSLABELS
OutputName = Center
OutputPosition = (Object, IsisCube, Group, BandBin)
Translation = (550 <nm>, N/A)
Translation = (550 <nm>, NCM)
Translation = (550 <nm>, NFT)
Translation = (550 <nm>, STO)
Translation = (*, *)
End_Group

End
Loading