PDS_VERSION_ID = PDS3 RECORD_TYPE = STREAM LABEL_REVISION_NOTE = "2013-02-14, Bob Deen (JPL), Initial" OBJECT = TEXT PUBLICATION_DATE = 2013-03-20 INTERCHANGE_FORMAT = ASCII NOTE = "MSL_POINTING_MODELS.TXT for the Mars Science Laboratory Engineering camera EDR and RDR Labels." END_OBJECT = TEXT END Introduction ------------ As described in the MSL camera SIS (section 5.2.1.13.2 "Pointing Correction"), images (typically but not always in the context of a mosaic) can have their pointing corrected. This means to relocate and/or reorient the camera model to a point of view that more closely matches the conditions under which the image was taken, that minimizes seams in a mosaic, or other criteria. Camera models for a specific image are created by taking a "calibration" camera model (stored in the calibration directory) and a pose for the articulating device upon which the camera is mounted, at the time the calibration model was created. In other words, the calibration model points in some certain direction. A new pose is computed using kinematics information (e.g. arm joints, azimuth/elevation joints on a mast) and kinematics calibration parameters (also in the calibration directory). The model is then transformed from the calibration pose to the pose for the image. The label keywords MODEL_TRANSFORM_QUATERNION and MODEL_TRANSFORM_VECTOR contain either the calibration or final pose, depending on the flight software version (see the SIS, appendix D). Pointing correction works by adjusting a set of "pointing parameters", such as azimuth and elevation of a mast, which typically mirror the original kinematics parameters (although not always). A new pose is computed, and the camera model is again transformed from its calibration pose to the new one. There are several different pointing models, identified by the pointing model name. Each has a set of parameters specific to that model, and an algorithm used to compute the new pose. These are described below. It should be noted that the information regarding model type and parameter names exists in two possible places. One is in the image labels, in the POINTING_MODEL* keywords (see the camera SIS). The other is in the "nav" file, which is associated with mosaics and contains all the pointing corrections for the mosaic. Transforming the Camera Model ----------------------------- Poses are represented by a location and a quaternion indicating rotation. Given P0 and Q0 (calibration position and quaternion) and P1 and Q1 (new pose), CAHV-style camera models are transformed as follows: C: Subtract P0 and add P1 to adjust the position. A: Compute the rotation between Q0 and Q1 and apply that rotation to A. Another way to look at this is to "unrotate" A by the inverse of Q0 and then rotate it by Q1. H: Same as A V: Same as A O: Same as A R: Unchanged E: Unchanged T: Unchanged P: Unchanged POINTING MODEL TYPES -------------------- MslBodyFixedCamera MSLmastCamera MSLmastCamera3dof MSLmastCameraScale MSLmahliCamera MSLmahliCamera6dof GenericCamera_0DOF GenericCamera_AzEl GenericCamera_7dof GenericCamera_6dof MslBodyFixedCamera ------------------ The simplest type, this has no pointing parameters and thus no pose to adjust. The camera model is not changeable via this mechanism. This is used for the hazcams as well as MARDI. Parameters: None MSLmastCamera ------------- This pointing model uses azimuth and elevation and runs the same forward mast kinematics model used on the flight rover. The kinematics model is described in the MSL PPPCS (Pointing, Positioning, Phasing, and Coordinate Systems document), excerpts of which should be in the PDS documentation directory. Parameters for this model are in MSL_mast.point, in the calibration directory. The basic idea is to compute two rotations, azimuth and elevation, around pivot points. These pivot points need not intersect (i.e. azimuth and elevation can be treated separately). An approximation can be obtained by using the az_point and el_point as rotation centers, and az_axis and el_axis as axes around which to rotate. See PPPCS for specifics. Parameters: Joint Azimuth: the azimuth of the camera head, measured in joint space, in degrees. Joint Elevation: the elevation of the camera head, measured in joint space, in degrees. MSLmastCamera3dof ----------------- This pointing model is an extension of MSLmastCamera, that adds a "twist", or a rotation of the image plane. Originally developed for MER (where a slight rotation of the image helped with many mosaics), it has proven to be quite useful. The pose is computed as for MSLmastCamera. Then the twist is applied. This is a rotation around the A vector of the CAHV-style camera model (after it has been adjusted for azimuth and elevation). The right-hand- rule is used for rotation (with thumb along the A vector, fingers indicate positive rotation). Parameters: Joint Azimuth: Same as MSLmastCamera Joint Elevation: Same as MSLmastCamera Twist: Rotation in degrees of the camera about its A vector. MSLmastCameraScale ------------------ This pointing model is an extension of MSLmastCamera3dof. It adds a scale factor to the image. This was developed for the Mastcam, specifically the Right side, to accommodate the image scale change at different focus settings. It is hoped that the need for this will go away once focus-based camera models are implemented. For CAHV-type camera models, the scale is implemented by shifting the model a half pixel (-0.5,-0.5) to compensate for the pixel address being the center of the pixel, scaling the model, and then shifting a half pixel back (+0.5, +0.5). A shift is accomplished by multiplying the amount of shift in the x direction by the A vector and subtracting that from the H vector. Similarly, y * A is subtracted from V. A scale is accomplished by multiplying the H vector by the horizontal scale factor, and the V vector by the vertical scale factor. The other vectors are unchanged. Parameters: Joint Azimuth: same as MSLmastCamera Joint Elevation: same as MSLmastCamera Twist: same as MSLmastCamera3dof Scale: Scale factor to be applied to the camera model. MSLmahliCamera -------------- Unlike on MER, where the arm-mounted camera was adjusted by changing joint angles and rerunning the kinematics, the MAHLI camera is adjusted by directly changing the final pose. Kinematics is used onboard to compute the initial pose from joint angles, but it is not re-run on the ground. This pointing model implements a generic 7 degree of freedom model, where 3 of the parameters are the X, Y, Z coordinates of the pose position, and the other 4 are the pose orientation in a quaternion representation. Parameters: S: Scalar component of pose quaternion V1: First vector component of pose quaternion V2: Second vector component of pose quaternion V3: Third vector component of pose quaternion X: X coordinate of pose position Y: Y coordinate of pose position Z: Z coordinate of pose position MSLmahliCamera6dof ------------------ This is like MSLmahliCamera except that there are only 6 parameters. Instead of quaternion components, the orientation is specified using 3 parameters representing Euler angles. These are in a standard roll, pitch, yaw configuration, so the roll (twist) rotation is applied first, followed by pitch (Elevation) and yaw (Azimuth). The parameter names were chosen to mimic the mast pointing models, since they act similarly. Parameters: Azimuth: Azimuth, or Yaw, angle of pose Elevation: Elevation, or Pitch, angle of pose Twist: Twist, or Roll, angle of pose X: X coordinate of pose position Y: Y coordinate of pose position Z: Z coordinate of pose position GenericCamera_0DOF ------------------ The four "Generic" pointing models are rarely used on MSL, because they know nothing about MSL specifically and instead simply model generic cameras in space. They are included here for completeness. The 0DOF model corresponds to the MSLBodyFixedCamera model. There are no pointing parameters. Parameters: None GenericCamera_AzEl ------------------ This generic pointing model is analagous to the MSLmastCamera model. However, because there are no known kinematics, the azimuth and elevation rotations are computed using the camera C point as an origin. Thus, the camera does not move as its pointing is changed, unlike any of the real mast-mounted cameras. Parameters: Azimuth: Azimuth of the final pose Elevation: Elevation of the final pose GenericCamera_7dof ------------------ This generic pointing model is exactly like MSLmahliCamera. Parameters: S: Scalar component of pose quaternion V1: First vector component of pose quaternion V2: Second vector component of pose quaternion V3: Third vector component of pose quaternion X: X coordinate of pose position Y: Y coordinate of pose position Z: Z coordinate of pose position GenericCamera_6dof ------------------ This generic pointing model is exactly like MSLmahliCamera6dof. Parameters: Azimuth: Azimuth, or Yaw, angle of pose Elevation: Elevation, or Pitch, angle of pose Twist: Twist, or Roll, angle of pose X: X coordinate of pose position Y: Y coordinate of pose position Z: Z coordinate of pose position