KPL/IK
CIVA Instrument kernel
===========================================================================
This instrument kernel (Ikernel) contains Rosetta Comet Infrared
and Visible Analyser (CIVA) optics, detector, and fieldofview
parameters  only for the camera part (CIVAP).
Version and Date

Version 1.1  October 28, 2021  Ricardo Valles Blanco, ESA/ESAC
Corrected typos and prepared for PDS3 data set increment.
Version 1.0  June 12, 2013  Maud Barthelemy, ESA/ESAC
Boris Semenov, JPL
Initial release.
References

1. Rosetta Frames Definition Kernel (FK), latest version.
2. ''Kernel Pool Required Reading''
3. CIVA, Bibring, J.P. and Lamy, P. and Langevin, Y. and Soufflot,
A. and Berthe, M. and Borg, J. and Poulet, F. and Mottola, S.
(2007) CIVA. Space Science Reviews.
4. Summary of CIVAP Features, LCINT100001IAS, March 22nd, 2013
5. Rapport de mesure de distorsion geometrique des cameras CIVAP QM,
N. Charvin, LCIRP05203184IAS, December 12, 2001
6. Camera Calibration Toolbox for Matlab, by J.Y. Bouguet, Caltech,
http://www.vision.caltech.edu/bouguetj/calib_doc/index.html
7. CIVA, Bibring, J.P. and Lamy, P. and Langevin, Y. and Soufflot,
A. and Berthe, M. and Borg, J. and Poulet, F. and Mottola, S.
Space Science Reviews (2007). Springer.
DOI: 10.1007/s1121400691355. ISSN 15729672."
Contact Information

If you have any questions regarding this file contact the
ESA SPICE Service (ESS) at ESAC:
Alfredo Escalante Lopez
(+34) 918131429
spice@sciops.esa.int
or NAIF at JPL:
Marc Costa Sitja
(818) 3544852
Marc.Costa.Sitja@jpl.nasa.gov
Implementation Notes

Applications that need SPICE Ikernel data must load the Ikernel
file, normally during program initialization.
Loading the kernel using the SPICELIB routine FURNSH causes the data
items and their associated values present in the kernel to become
associated with a data structure called the kernel pool. The
application program may then obtain the value(s) for any IK data
item using the SPICELIB routines GDPOOL, GIPOOL, GCPOOL. Routine
GETFOV may be used if the file contains instrument fieldofview
(FOV) specification. See [2] for details.
This file was created with, and can be updated with a text editor or
word processor.
Conventions for Specifying Data

Data items are specified using ``keyword=value'' assignments [1].
All keywords referencing values in this Ikernel start with the
characters `INS' followed by the NAIF Rosetta instrument ID code,
constructed using the spacecraft ID number (226) followed by the
NAIF three digit ID number for CIVA P (1 to 7).
These IDs are defined in [1] as follows:
Instrument name ID
 
ROS_LANDER_CIVA_P_1 226801
ROS_LANDER_CIVA_P_2 226802
ROS_LANDER_CIVA_P_3 226803
ROS_LANDER_CIVA_P_4 226804
ROS_LANDER_CIVA_P_5 226805
ROS_LANDER_CIVA_P_6 226806
ROS_LANDER_CIVA_P_7 226807
The remainder of the keyword is an underscore character followed by the
unique name of the data item. For example, the focal length of the
first CIVA P camera is specified by
INS226801_FOCAL_LENGTH
The upper bound on the length of all keywords is 32 characters.
If a keyword is included in more than one file, or if the same
keyword appears more than once within a single file, the last
assignment supersedes any earlier assignments.
Overview

From [3]:
CIVA is an integrated set of imaging instruments designed to
characterize the landing and sampling site, take 360 degrees
panoramas as seen from the lander, and image collected samples.
It consists of a set of panoramic and stereo cameras, designated
CIVAP, and a microscope camera coupled to an IR spectrometer
(CIVAM) for visible and infrared imaging. The imagers all share
a common command and data processing unit. CIVAP has an angular
sampling (IFOV) of 1.1 mrad. Each pixel images a 1mm size feature
at the distance of the landing legs and a few metres at the local
horizon. The panorama is mapped by 6 identical cameras covering
contiguous FOV, with their optical axis 60 deg apart.
Stereoscopic capability is provided by an additional camera
identical and coaligned with one of the panoramic cameras, with
its optical axis, displaced by 10cm. CIVAM combines two
ultracompact and miniaturised microscopes, one operating in the
visible and one constituting an IR hyperspectral imaging
spectrometer: they will characterize, by nondestructive
analyses, the texture, the albedo, the molecular and the
mineralogical composition of each of the samples provided by the
Sample Drill and Distribution (SD2) system. CIVAM is not
described in this Kernel.
From [4]:
The detector used for CIVAP camera is a full frame transfer CCD,
with 1024x1024 pixels. The CCD is a Thomson CSF TH7888A. The size
of each pixel is 14um x 14um. All CIVAP cameras are equipped
with the same optics designed and manufacturers with the same
characteristics.
Summary of CIVAP Characteristics
Wavelength range (nm):
480940
Field of view radius(degrees):
+/35 (along diagonal of the CCD)
+/30 (along X and Y axis of the CCD)
Number of pixels:
1024 x 1024
Pixel Size (micrometer):
14 x 14
Pixel Angular Size (mrad):
1.02
IFOV (mrad)
1.1
Relative aperture (F/Number):
F/10
Effective Focal length (mm):
12.385
Mass (g):
Single Total Mass  140
Stereo Total Mass  490
Total Mass (without harness)  1190
Power consumption (W)  heater not included:
Per camera head  1.5
Mounting Alignment

Refer to the latest version of the Rosetta Frames Definition Kernel
(FK) [1] for the CIVA reference frame definitions and mounting
alignment information.
Optical Parameters

The following CIVAP optical parameters are included in the data
section below, from [3,4]:

parameter value

Focal Length, mm 12.385
Spectral Band, nm 480940
f/ratio f/10

The F/RATIO and WAVELENGTH_RANGE keywords below provide nominal
data.
The FOCAL_LENGTH and FL_UNCERTAINTY keywords below provide actual
calibrated values are from [5].
The focal length is provided in mm. The wavelength values are given
in nm. The angular size values are given in radians.
\begindata
INS226801_FOCAL_LENGTH = ( 12.473, 12.477 )
INS226801_FL_UNCERTAINTY = ( 0.039, 0.039 )
INS226801_F/RATIO = ( 10 )
INS226801_WAVELENGTH_RANGE = ( 480, 940 )
INS226802_FOCAL_LENGTH = ( 12.362, 12.371 )
INS226802_FL_UNCERTAINTY = ( 0.032, 0.030 )
INS226802_F/RATIO = ( 10 )
INS226802_WAVELENGTH_RANGE = ( 480, 940 )
INS226803_FOCAL_LENGTH = ( 12.454, 12.467 )
INS226803_FL_UNCERTAINTY = ( 0.028, 0.027 )
INS226803_F/RATIO = ( 10 )
INS226803_WAVELENGTH_RANGE = ( 480, 940 )
INS226804_FOCAL_LENGTH = ( 12.427, 12.431 )
INS226804_FL_UNCERTAINTY = ( 0.044, 0.043 )
INS226804_F/RATIO = ( 10 )
INS226804_WAVELENGTH_RANGE = ( 480, 940 )
INS226805_FOCAL_LENGTH = ( 12.407, 12.412 )
INS226805_FL_UNCERTAINTY = ( 0.024, 0.022 )
INS226805_F/RATIO = ( 10 )
INS226805_WAVELENGTH_RANGE = ( 480, 940 )
INS226806_FOCAL_LENGTH = ( 12.458, 12.454 )
INS226806_FL_UNCERTAINTY = ( 0.023, 0.024 )
INS226806_F/RATIO = ( 10 )
INS226806_WAVELENGTH_RANGE = ( 480, 940 )
INS226807_FOCAL_LENGTH = ( 12.410, 12.404 )
INS226807_FL_UNCERTAINTY = ( 0.022, 0.023 )
INS226807_F/RATIO = ( 10 )
INS226807_WAVELENGTH_RANGE = ( 480, 940 )
\begintext
Field of View and Detector Parameters

This section provides a diagram illustrating the CIVAP FOVs in the
corresponding reference frames. The circle represents the actual
image with respect to the optical area of the CCD (the diagonal
angular size is smaller that the square diagonal).
1024 pixels
60 deg
..
.. <diagonal 70 deg
.' `.
. ' ` .
  +Z  
1024 pixels  x>
60 deg      +X
.    '
\  /
`'
`._________.'

 +Z is into the page.
V
+Y
The FOV of each CIVAP camera has the following angular size, in
degrees:
Horizontal Vertical Diagonal
60 60 70
All the CIVAP cameras use the CCD detector of the same type with
the following nominal geometry parameters, from [3,4]:

parameter Value

Pixel Size (microns) 14 x 14
Detector Array Size 1024 x 1024
Field of view (deg) 60 x 60
Pixel Angular Size  IFOV (mrad) 1.02 x 1.02

The IFOV value has been given by doing the following computation:
IFOV = FOV/PIXEL_NUMBER = 60/1024 degrees = 1.02 mrad
However, it has been found in [7] that IFOV = 1.1, which could be
the result of the following computation:
IFOV = PIXEL_SIZE/FOCAL_LENGTH = 0.014/12.385 = 1.13 mrad
Angular size values in the keywords are given in radians. The values
are given in microns for PIXEL_SIZE keywords and in counts for
PIXEL_SAMPLES, PIXEL_LINES, and CENTER keywords. The convention for
the Principal point and CCD center coordinates is that the first
pixel center is (1,1) and the last (1024,1024).
The Principal Point (PP) is the intersection of the Principle Axis
with the CCD. It does not necessarily match with the CCD center.
\> refracted ray 
\ \  \
 \  \ X:PP
X> Principal Axis
/ /  x  x:CCD center
/ >/ \ 
lenses \ 
\begindata
INS226801_PIXEL_SIZE = ( 14, 14 )
INS226801_PIXEL_SAMPLES = ( 1024 )
INS226801_PIXEL_LINES = ( 1024 )
INS226801_CCD_CENTER = ( 512.5, 512.5 )
INS226801_PRINCIPAL_POINT = ( 517.897, 514.966 )
INS226801_PP_UNCERTAINTY = ( 1.332, 1.491 )
INS226801_FOV_ANGULAR_SIZE = ( 1.05, 1.05 )
INS226801_IFOV = ( 1.02, 1.02 )
INS226802_PIXEL_SIZE = ( 14, 14 )
INS226802_PIXEL_SAMPLES = ( 1024 )
INS226802_PIXEL_LINES = ( 1024 )
INS226802_CCD_CENTER = ( 512.5, 512.5 )
INS226802_PRINCIPAL_POINT = ( 509.329, 520.471 )
INS226802_PP_UNCERTAINTY = ( 0.964, 1.307 )
INS226802_FOV_ANGULAR_SIZE = ( 1.05, 1.05 )
INS226802_IFOV = ( 1.02, 1.02 )
INS226803_PIXEL_SIZE = ( 14, 14 )
INS226803_PIXEL_SAMPLES = ( 1024 )
INS226803_PIXEL_LINES = ( 1024 )
INS226803_CCD_CENTER = ( 512.5, 512.5 )
INS226803_PRINCIPAL_POINT = ( 525.605, 517.995 )
INS226803_PP_UNCERTAINTY = ( 1.164, 1.145 )
INS226803_FOV_ANGULAR_SIZE = ( 1.05, 1.05 )
INS226803_IFOV = ( 1.02, 1.02 )
INS226804_PIXEL_SIZE = ( 14, 14 )
INS226804_PIXEL_SAMPLES = ( 1024 )
INS226804_PIXEL_LINES = ( 1024 )
INS226804_CCD_CENTER = ( 512.5, 512.5 )
INS226804_PRINCIPAL_POINT = ( 518.676, 516.986 )
INS226804_PP_UNCERTAINTY = ( 1.188, 1.307 )
INS226804_FOV_ANGULAR_SIZE = ( 1.05, 1.05 )
INS226804_IFOV = ( 1.02, 1.02 )
INS226805_PIXEL_SIZE = ( 14, 14 )
INS226805_PIXEL_SAMPLES = ( 1024 )
INS226805_PIXEL_LINES = ( 1024 )
INS226805_CCD_CENTER = ( 512.5, 512.5 )
INS226805_PRINCIPAL_POINT = ( 511.522, 514.158 )
INS226805_PP_UNCERTAINTY = ( 1.008, 1.278)
INS226805_FOV_ANGULAR_SIZE = ( 1.05, 1.05 )
INS226805_IFOV = ( 1.02, 1.02 )
INS226806_PIXEL_SIZE = ( 14, 14 )
INS226806_PIXEL_SAMPLES = ( 1024 )
INS226806_PIXEL_LINES = ( 1024 )
INS226806_CCD_CENTER = ( 512.5, 512.5 )
INS226806_PRINCIPAL_POINT = ( 513.877, 525.522 )
INS226806_PP_UNCERTAINTY = ( 1.433, 1.112 )
INS226806_FOV_ANGULAR_SIZE = ( 1.05, 1.05 )
INS226806_IFOV = ( 1.02, 1.02 )
INS226807_PIXEL_SIZE = ( 14, 14 )
INS226807_PIXEL_SAMPLES = ( 1024 )
INS226807_PIXEL_LINES = ( 1024 )
INS226807_CCD_CENTER = ( 512.5, 512.5 )
INS226807_PRINCIPAL_POINT = ( 497.432, 513.432 )
INS226807_PP_UNCERTAINTY = ( 1.188, 1.307 )
INS226807_FOV_ANGULAR_SIZE = ( 1.05, 1.05 )
INS226807_IFOV = ( 1.02, 1.02 )
\begintext
FOV Definitions

This section contains definitions for the CIVAP FOVs. These
definitions are provided in the format required by the SPICE
(CSPICE) function GETFOV (getfov_c).
The CIVAP FOVs are defined with respect to the corresponding
ROS_LANDER_CIVA_P_ frames to be square pyramids with the corners
defined by the first and last pixels of the first and last lines of
the CCD and the boresight along the +Z axis of the
ROS_LANDER_CIVA_P_ frame. This FOV definitions use angular extent
style specification with the angular size taken from the 'Field of
View Parameters' section above.
\begindata
INS226801_FOV_FRAME = 'ROS_LANDER_CIVA_P_1'
INS226801_FOV_SHAPE = 'RECTANGLE'
INS226801_BORESIGHT = ( 0.0, 0.0, 1.0 )
INS226801_FOV_CLASS_SPEC = 'ANGLES'
INS226801_FOV_REF_VECTOR = ( 1.0, 0.0, 0.0 )
INS226801_FOV_REF_ANGLE = 30
INS226801_FOV_CROSS_ANGLE = 30
INS226801_FOV_ANGLE_UNITS = 'DEGREES'
INS226802_FOV_FRAME = 'ROS_LANDER_CIVA_P_2'
INS226802_FOV_SHAPE = 'RECTANGLE'
INS226802_BORESIGHT = ( 0.0, 0.0, 1.0 )
INS226802_FOV_CLASS_SPEC = 'ANGLES'
INS226802_FOV_REF_VECTOR = ( 1.0, 0.0, 0.0 )
INS226802_FOV_REF_ANGLE = 30
INS226802_FOV_CROSS_ANGLE = 30
INS226802_FOV_ANGLE_UNITS = 'DEGREES'
INS226803_FOV_FRAME = 'ROS_LANDER_CIVA_P_3'
INS226803_FOV_SHAPE = 'RECTANGLE'
INS226803_BORESIGHT = ( 0.0, 0.0, 1.0 )
INS226803_FOV_CLASS_SPEC = 'ANGLES'
INS226803_FOV_REF_VECTOR = ( 1.0, 0.0, 0.0 )
INS226803_FOV_REF_ANGLE = 30
INS226803_FOV_CROSS_ANGLE = 30
INS226803_FOV_ANGLE_UNITS = 'DEGREES'
INS226804_FOV_FRAME = 'ROS_LANDER_CIVA_P_4'
INS226804_FOV_SHAPE = 'RECTANGLE'
INS226804_BORESIGHT = ( 0.0, 0.0, 1.0 )
INS226804_FOV_CLASS_SPEC = 'ANGLES'
INS226804_FOV_REF_VECTOR = ( 1.0, 0.0, 0.0 )
INS226804_FOV_REF_ANGLE = 30
INS226804_FOV_CROSS_ANGLE = 30
INS226804_FOV_ANGLE_UNITS = 'DEGREES'
INS226805_FOV_FRAME = 'ROS_LANDER_CIVA_P_5'
INS226805_FOV_SHAPE = 'RECTANGLE'
INS226805_BORESIGHT = ( 0.0, 0.0, 1.0 )
INS226805_FOV_CLASS_SPEC = 'ANGLES'
INS226805_FOV_REF_VECTOR = ( 1.0, 0.0, 0.0 )
INS226805_FOV_REF_ANGLE = 30
INS226805_FOV_CROSS_ANGLE = 30
INS226805_FOV_ANGLE_UNITS = 'DEGREES'
INS226806_FOV_FRAME = 'ROS_LANDER_CIVA_P_6'
INS226806_FOV_SHAPE = 'RECTANGLE'
INS226806_BORESIGHT = ( 0.0, 0.0, 1.0 )
INS226806_FOV_CLASS_SPEC = 'ANGLES'
INS226806_FOV_REF_VECTOR = ( 1.0, 0.0, 0.0 )
INS226806_FOV_REF_ANGLE = 30
INS226806_FOV_CROSS_ANGLE = 30
INS226806_FOV_ANGLE_UNITS = 'DEGREES'
INS226807_FOV_FRAME = 'ROS_LANDER_CIVA_P_7'
INS226807_FOV_SHAPE = 'RECTANGLE'
INS226807_BORESIGHT = ( 0.0, 0.0, 1.0 )
INS226807_FOV_CLASS_SPEC = 'ANGLES'
INS226807_FOV_REF_VECTOR = ( 1.0, 0.0, 0.0 )
INS226807_FOV_REF_ANGLE = 30
INS226807_FOV_CROSS_ANGLE = 30
INS226807_FOV_ANGLE_UNITS = 'DEGREES'
\begintext
Optical Distortion

This section provides optical distortion and geometric calibration
data for the CIVAP, from [5].
CIVA team did some test measurements in 2001 at IAS. They took
images of a checkerboard with different angular orientation. The
method used was of the corner extraction of the CALIBRATION TOOLBOX,
([6]).
After treatment, the following parameters can be determined for each
camera:
 focal distance fc in pixels
 Principal point cc
 distortion coefficients in a 5 field vector kc
 skew factor, alpha_c, left to its default 0 value.
The focal distance fc in pixels is given by multiplying the
FOCAL_LENGTH  in 'Optical Parameters' section  by 1000 and
dividing it by the pixel dimension (14 um).
fc = FOCAL_LENGTH*1000/14
Let be P a point in space of coordinate vector XXc (Xc,Yc,Zc) in the
camera reference frame. Let us project that point on the image plane
according to the intrinsic parameters (fc, cc, alpha_c, kc). xn is
the normalized (pinhole) image projection:
xn = (Xc/Zc,Yc/Zc) = (x,y)
let
r*r=x*x+y*y
After distortion, the new normalized point coordinate xd is
xd=(xd(1), xd(2)) =
{1 + kc(1).r^2 + kc(2).r^4 + kc(5).r^6}* xn + dx
where dx is the tangential distortion vector
dx = [ 2.kc(3)*x*y + kc(4)*(r^2+2.x^2) ]
[ kc(3)*(r^2+2.y^2) + 2.kc(4)*x*y ]
The final pixel coordinate x_pixel (xp,yp) is given by
xp = fc(1)*(xd(1)+alpha_c*xd(2)) + cc(1)
yp= fc(2)*xd(2) + cc(2)
Therefore, x_pixel are related to xd by
[xp] [xd(1)]
[yp] = KK . [xd(2)]
[1 ] [ 1 ]
Where KK is the camera matrix
[ fc(1) alpha_c*fc(1) cc(1) ]
KK = [ 0 fc(2) cc(2) ]
[ 0 0 1 ]
The kc(n) coefficients are given in the DISTORTION keywords.
DISC_UNC keywords are the errors in the estimation of
the distortion coefficients.
\begindata
INS226801_DISTORSION = ( 0.00565,
0.05355,
0.00004,
0.00049,
0.00000 )
INS226801_DIST_UNC = ( 0.00539,
0.01864,
0.00047,
0.00048,
0.00000 )
INS226802_DISTORSION = ( 0.00325,
0.02591,
0.00045,
0.00122,
0.00000 )
INS226802_DIST_UNC = ( 0.00323,
0.00854,
0.00037,
0.00037,
0.00000 )
INS226803_DISTORSION = ( 0.01002,
0.01210,
0.00042,
0.00185,
0.00000 )
INS226803_DIST_UNC = ( 0.00343,
0.00911,
0.00035,
0.00035,
0.00000 )
INS226804_DISTORSION = ( 0.01369,
0.00744,
0.00029,
0.00018,
0.00000 )
INS226804_DIST_UNC = ( 0.00412,
0.01281,
0.00039,
0.00040,
0.00000 )
INS226805_DISTORSION = ( 0.00829,
0.01519,
0.00054,
0.00039,
0.00000 )
INS226805_DIST_UNC = ( 0.00384,
0.01195,
0.00039,
0.00039,
0.00000 )
INS226806_DISTORSION = ( 0.01179,
0.00226,
0.00074,
0.00172,
0.00000 )
INS226806_DIST_UNC = ( 0.00304,
0.00765,
0.00043,
0.00039,
0.00000 )
INS226807_DISTORSION = ( 0.01152,
0.00237,
0.00018,
0.00146,
0.00000 )
INS226807_DIST_UNC = ( 0.00324,
0.01010,
0.00040,
0.00039,
0.00000 )
\begintext
Extrinsic Parameters

The team used the same toolbox to calibrate the stereo cameras.
The following parameters are estimated:
 the Rotation vector om
 the Translation vector T
The extrinsic parameters are used to estimate the position of the
right camera related to the left one.
If we consider a point P in space, its two coordinate vectors Xl and
Xr in the left and right camera frames respectively are related to
each other through the rigid motion transformation
Xr = R*Xl + T
where R is the 3*3 rotation matrix corresponding to the vector om.
The relation between om and R is given by the rodrigues formula
R = rodrigues(om)
R = I.cos(theta) + K.sin(theta)+(1cos(theta)). KKt
where:
I is the identity matrix
K is the cross product matrix
Kt is the matrix transpose
K = [ 0 k3 k2 ]
[ k3 0 k1 ]
[k2 k1 0 ]
The parameters are given in mm. (position of CH7 right camera wrt
CH6 left camera)
The OM keywords give the OM vector. The uncertainties in the
vector estimation is given in OM_UNC keywords.
The T vector is given in the T keyword. The uncertainties in the
vector estimation is given in T_UNC vectors.
\begindata
INS226807_OM = ( 0.00109,
0.00305,
0.00550 )
INS226807_OM_UNC = ( 0.00188,
0.00176,
0.00015 )
INS226807_T = ( 2.10740,
100.21617,
0.03749 )
INS226807_T_UNC = ( 0.61401,
0.62258,
2.01152 )
\begintext
Platform ID

This number is the NAIF instrument ID of the platform on which the
cameras are mounted. For all cameras this platform is the lander.
\begindata
INS226801_PLATFORM_ID = ( 226800 )
INS226802_PLATFORM_ID = ( 226800 )
INS226803_PLATFORM_ID = ( 226800 )
INS226804_PLATFORM_ID = ( 226800 )
INS226805_PLATFORM_ID = ( 226800 )
INS226806_PLATFORM_ID = ( 226800 )
INS226807_PLATFORM_ID = ( 226800 )
\begintext
End of IK file.