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

Conversation

kledmundson
Copy link
Contributor

Description

Adding support for the OSIRIS-REx TagCams instruments NFTCam, NAVCam, and StowCam currently in the University of Arizona code base. In addition to the associated camera model, this includes the tagcams2isis ingestion program, necessary tests, and test data.

Related Issue

https://github.com//issues/5424

How Has This Been Validated?

Tests have been added for the Tagcams NAVCam and NFTCam instruments in addition to a general unit test for Tagcams. Image data in the form of pvl and cub files are used in these tests and have been added in the isis/tests/osirisRexImages folder. Tests and data for the StowCam instrument will likely be added later after NAIF support files become available. Existing OsirisREx OCams tests have been confirmed as well.

Gtests for the tagcams2isis ingestion program for each sensor have also been added.

Results of ctest suite...

ctest -R OsirisRex --output-on-failure
Test project
Start 1115: osirisrex_unit_test_OsirisRexTagcamsCamera
1/7 Test #1115: osirisrex_unit_test_OsirisRexTagcamsCamera ............. Passed 0.72 sec
Start 2222: OsirisRexOcamsCube.PolyMath
2/7 Test #2222: OsirisRexOcamsCube.PolyMath ............................ Passed 1.53 sec
Start 2223: OsirisRexOcamsCube.MappingCam
3/7 Test #2223: OsirisRexOcamsCube.MappingCam .......................... Passed 1.53 sec
Start 2224: OsirisRexOcamsCube.SamplingCam
4/7 Test #2224: OsirisRexOcamsCube.SamplingCam ......................... Passed 1.54 sec
Start 2225: OsirisRexOcamsCube.PolyCamUpdatedIkCodes
5/7 Test #2225: OsirisRexOcamsCube.PolyCamUpdatedIkCodes ............... Passed 1.53 sec
Start 2226: OsirisRexTagcamsNAVCamCube.NavigationCam
6/7 Test #2226: OsirisRexTagcamsNAVCamCube.NavigationCam ............... Passed 3.54 sec
Start 2227: OsirisRexTagcamsNFTCamCube.NaturalFeatureTrackingCam
7/7 Test #2227: OsirisRexTagcamsNFTCamCube.NaturalFeatureTrackingCam ... Passed 4.04 sec

ctest -R FunctionalTestTagcams --output-on-failure
Test project
Start 1761: TempTestingFiles.FunctionalTestTagcams2IsisNavCam
1/4 Test #1761: TempTestingFiles.FunctionalTestTagcams2IsisNavCam ............... Passed 0.98 sec
Start 1762: TempTestingFiles.FunctionalTestTagcams2IsisNavCamRemCalPixOff
2/4 Test #1762: TempTestingFiles.FunctionalTestTagcams2IsisNavCamRemCalPixOff ... Passed 0.98 sec
Start 1763: TempTestingFiles.FunctionalTestTagcams2IsisNftCam
3/4 Test #1763: TempTestingFiles.FunctionalTestTagcams2IsisNftCam ............... Passed 0.97 sec
Start 1764: TempTestingFiles.FunctionalTestTagcams2IsisStowCam
4/4 Test #1764: TempTestingFiles.FunctionalTestTagcams2IsisStowCam .............. Passed 0.96 sec

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Documentation change (update to the documentation; no code change)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Infrastructure change (changes to things like CI or the build system that do not impact users)

Checklist:

  • I have read and agree to abide by the Code of Conduct
  • I have read the CONTRIBUTING document.
  • My change requires a change to the documentation and I have updated the documentation accordingly.
  • I have added tests to cover my changes.
  • I have added myself to the .zenodo.json document.
  • I have added my user impacting change to the CHANGELOG.md document.

Licensing

This project is mostly composed of free and unencumbered software released into the public domain, and we are unlikely to accept contributions that are not also released into the public domain. Somewhere near the top of each file should have these words:

This work is free and unencumbered software released into the public domain. In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain.

  • I dedicate any and all copyright interest in this software to the public domain. I make this dedication for the benefit of the public at large and to the detriment of my heirs and successors. I intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law.

KrisBecker and others added 30 commits July 26, 2018 16:28
…ts into orex/jigsawXYZ_staging

Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>

# Conflicts:
#	isis/make/config.darwin-MacOSX10_12
#	isis/src/base/apps/caminfo/caminfo.cpp
#	isis/src/base/apps/caminfo/caminfo.xml
#	isis/src/base/apps/isisminer/StrategyFactory.cpp
#	isis/src/base/apps/isisminer/isisminer.xml
#	isis/src/base/apps/phocube/phocube.cpp
#	isis/src/base/apps/phocube/phocube.xml
#	isis/src/base/objs/BulletDskShape/BulletDskShape.cpp
#	isis/src/base/objs/BulletDskShape/BulletDskShape.h
#	isis/src/base/objs/BulletDskShape/BulletDskShape.truth
#	isis/src/base/objs/BulletDskShape/unitTest.cpp
#	isis/src/base/objs/BulletWorldManager/BulletWorldManager.cpp
#	isis/src/base/objs/BulletWorldManager/BulletWorldManager.h
#	isis/src/base/objs/BulletWorldManager/BulletWorldManager.truth
#	isis/src/base/objs/BulletWorldManager/unitTest.cpp
#	isis/src/base/objs/CameraGroundMap/CameraGroundMap.h
#	isis/src/base/objs/GisGeometry/GisGeometry.cpp
#	isis/src/base/objs/GisGeometry/GisGeometry.h
#	isis/src/base/objs/GisGeometry/unitTest.cpp
#	isis/src/base/objs/ShapeModelFactory/ShapeModelFactory.cpp
#	isis/src/base/objs/ShapeModelFactory/ShapeModelFactory.h
#	isis/src/base/objs/Strategy/Strategy.cpp
#	isis/src/base/objs/Strategy/Strategy.h
#	isis/src/osirisrex/objs/OsirisRexOcamsCamera/OsirisRexOcamsCamera.cpp
#	isis/src/osirisrex/objs/OsirisRexOcamsCamera/OsirisRexOcamsCamera.h
Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>
Provides initial version of OREX TAGCAMS camera model for NAVCam (Navcam 1), NFTCam (Navcam 2) and STOWCam instruments

Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>
tagcams2isis
* Added more keywords to import/translate
* Added option REMOVECALPIXELS to allow user to control how the boundary pixels are treated
* Implemented summing and scaling based upon expected conditions
* Add SourceProductId
* Compute CameraHeadTemperature (Celsius) from TCCHTEMP FITS label keyword for camera distortion model
* Compute and add YearDoy keyword

Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>
* Added full implementation of the OpenCV 10 parameter distortion model for the TAGCAMS camera
* Allow selection of several models including OpenCV, OCAMS or none
* Added TOLERANCE parameter to determine convergence tolerance
* Added DEBUG_MODEL parameter to turn on print statements to debug the camera distortion model
* Added modified kernel DB file to support TAGCAMS along with OCAMS
* Updated TAGCAMS camera addendum file

Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>
OsirisRexTagcamsDistortionMap
* Renamed OpenCV parameters in the IAK kernel to better conform and associate with the OpenCV parameter names
* Added k4-k6 parameters to fully implement the OpenCV model

Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>
orx_tagcams_addendum_v04.ti
* Version 4 of the TAGCAMS IAK kernel was created for new OpenCV distortion model parameters for Navcam 1 & 2

Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>
Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>
tagcams2isis
* Mistyped iTime.h with capital I - works on Macs, not Linux systems

Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>
Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>
tagcams2isis
* Update b parameter used to convert raw DNs of camera head temperature to Celsius as provided by the NAV team in update to camera model

Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>
TAGCAMS Camera Model
* Now use the CCD center as specified in the IK as the focal plane detector map system origin
* Update camera model parameters provided by the NAV team
* Renamed conversion methods to more meaningful names
* Fixes pointing issues

Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>
orex_tagcams_addendum_v05.ti
* Updated with all new TAGCAMS parameters as provided by the NAV/Kinetx team
* Added distortion model reference

Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>
orex_tagcams_addendum_v06.ti
* Added light time/stellar, abberation correction and target/observer swap parameters for each instrument
* Updated documentation

Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>
Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>
OsirisRexTagcamsDistortionMap
* Properly initialize distorted/undistorted parameters

Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>
Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>
Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>
Signed-off-by: Kris J. Becker <kbecker@orex.lpl.arizona.edu>
…x/apps/tagcams2isis; 2) isis/src/osirisrex/objs/OsirisRexTagcamsCamera; and 3) isis/src/base/objs/IrregularBodyCameraGroundMap. Maintaining git file histories.
Moved all private variables and methods to protected scope
… and StowCam into Instruments.trn file. Originally added to University of Arizona codebase by Kris Becker on January 10, 2019. Addresses DOI-USGS#5424.
* 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 ellipsoidd to validate
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ellipsoidd -> ellipsoid

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed.

Comment on lines 4 to 8
using namespace std;
int main() {
Isis::Preference::Preferences(true);
cout << "This class will be tested by the applications and the individual Camera models." << endl;
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why even include it then? We really rather have more Makefile based tests.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed.

Comment on lines 1 to 21
/** 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 <iomanip>
#include <iostream>

#include "Camera.h"
#include "CameraFactory.h"
#include "IException.h"
#include "iTime.h"
#include "OsirisRexTagcamsCamera.h"
#include "Preference.h"
#include "Pvl.h"
#include "PvlGroup.h"

using namespace std;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Im guessing this was written a while ago, is it possible to change this to a GTEST instead? Especially since some GTESTs were already written as part of the PR.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed and replaced with gtests.

kledmundson and others added 3 commits March 19, 2024 07:43
…ap.h; 2) removed IrregularBodyGroundMap unit test; 3) replaced OsirisRexTagcamsCamera unit test with gtest version. Addresses DOI-USGS#5424.
… to take FileName object as an argument instead of a ProcessImportFits object. Addresses DOI-USGS#5424.
@kledmundson
Copy link
Contributor Author

Note that I also modified the tagcams2isis methods based on Adams's email of 2024-03-19.

Successfully ran all tests including the Tagcams camera unitTest now in gtest format.

Kelvinrr
Kelvinrr previously approved these changes Apr 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants