Organization¶
GIANT is split into a number of submodules and subpackages. Understanding this layout will be key to quickly grasping how GIANT works so we’ll explain a few things here. The top level outline of GIANT is shown below (submodules are shown in blue and subpackages are shown in yellow).
GIANT makes extensive use of object oriented programing. This means most things are stored in classes, which allows data and the functions that operate on that data to be closely intertwined. It also means that many of the user interface classes behave very similarly to each other and simply add new functionality.
The first submodule in GIANT is the image
module, which defines the OpNavImage
class that is
the primary way that image data and metadata is communicated to the various GIANT routines.
The next submodule is the camera
module, which defines the Camera
class that conveys
both the images and details about the camera to the GIANT routines.
Then we have the camera_models
modules, which defines a number of classes that represent 3D-2D mappings of
points from a world location to a location in an image and vice-versa.
Next is the opnav_class
module, which provides an abstract base class (OpNav
) that provides an outline
and basic functionality for most of the high-level OpNav techniques that are cooked into GIANT.
The rotations
module follows which provides an Rotation
class to represent rotations and attitude data
as well as a number of functions to manipulate and convert this data.
The image_processing
module provides the majority of the functions and classes that operate directly on the
image data in GIANT.
Finally, we have the utilities
module which defines a number of helper functions for interfacing GIANT
with the NAIF Spice toolbox and SPC, among other things.
Now we can discuss the packages in GIANT. First up is the stellar_opnav
package, which provides the required
tools and a nice user interface (StellarOpNav
) to estimate the attitude of an image based off of the observed
stars in the image.
Then there is the calibration
package which adds the ability to do geometric camera calibration based off of
images of stars to the stellar_opnav
package (Calibration
).
Next is the catalogues
package which provides interfaces to star catalogues for the stellar_opnav
and
calibration
packages.
The relative_opnav
package follows which provides the ability to perform a number of center finding and surface
feature OpNav techniques.
Finally, the ray_tracer
package provides the relative_opnav
package the ability to track the a priori
scene knowledge and render templates of the observed bodies for cross-correlation among other uses.
Having this basic knowledge of how GIANT is designed should help you to figure out where to look for things when you need them.