# Components

A ** component** is an atomic sensing unit (for instance, a camera) that can output zero or more
streams of observations. The observations that it produces inform its type.

## Common Features

Every component contains some common fields. These are primarily used for identification within the Plex.

Field | Type | Description |
---|---|---|

UUID | `Uuid` | A universally unique identifier for the component. |

Name | `String` | A name to reference the component. These must be unique, and MetriCal will treat them as the "topic" name to match within the provided dataset. |

## Component Kinds

### Camera

Cameras are a fundamental visual component. In addition to the common fields that every component contains, they are defined by the following types:

Field | Type | Description |
---|---|---|

Intrinsics | A camera intrinsics object | Intrinsic parameters that describe the camera model. |

Covariance | Matrix of floats | An n×n covariance matrix describing the variance-covariance of intrinsic parameters. |

Pixel pitch | float | The metric size of a pixel in real space. If unknown, should be equal to 1.0. |

It is common practice to leave most observations and arithmetic in units of pixels when dealing with image data. However, this practice can get confusing when trying to compare two different camera types, as "1 pixel" may not equate to the same metric error between cameras. Pixel pitch allows us to compare cameras using a common unit, i.e. units-per-pixel.

Note that we leave the unit ambiguous here, as this field is primarily for making analysis easier on human eyes. Common units include microns-per-pixel (μm / pixel) and meters-per-pixel (m / pixel).

#### Intrinsic Modeling

"Intrinsics" can refer to different models depending on the lens type. MetriCal provides the following intrinsics models for cameras:

Model Name | Description |
---|---|

`"no_distortion"` | No distortion model applied, i.e. an ideal pinhole model |

`"opencv_radtan"` | OpenCV RadTan |

`"opencv_fisheye"` | OpenCV Fisheye |

`"opencv_rational"` | OpenCV Rational, an extension of OpenCV RadTan with radial terms in the denominator |

`"pinhole_with_brown_conrady"` | Inverse Brown-Conrady, with correction in image space |

`"pinhole_with_kannala_brandt"` | Inverse Kannala-Brandt, with correction in image space |

`"eucm"` | Enhanced Unified Camera Model, i.e. EUCM |

`"double_sphere"` | Double Sphere |

`"omni"` | Omnidirectional |

One might choose each of these models based on their application, or dependent upon what software they wish to be compatible with. In many cases, the choice of model may not matter as much as the data capture process.

If you're having trouble deciding which model will fit your system best, contact us and we can help you understand the differences that will matter to you!

### LiDAR

MetriCal's categorization of LiDAR comprises a variety of similar yet slightly-different sensors. Some examples could be:

- A Velodyne VLP-16 scanner
- An Ouster OS2 scanner
- A Livox HAP scanner
- etc.

All of the above LiDAR can be represented as LiDAR components within MetriCal. In addition to the common fields that every component contains, they are defined by the following types:

Field | Type | Description |
---|---|---|

Intrinsics | A LiDAR intrinsics object | Intrinsic parameters that describe the LiDAR model. |

Covariance | Matrix of floats | An n×n covariance matrix describing the variance-covariance of intrinsic parameters. |

While we can certainly take in fixed offsets for LiDAR intrinsics (especially related to beam-type LiDAR like the VLP-16), MetriCal currently does not optimize for LiDAR intrinsics.

We plan to handle LiDAR intrinsics in a future release of MetriCal.

#### Intrinsic Modeling

"Intrinsics" can refer to different models depending on the LiDAR type. MetriCal provides the following models for LiDAR:

Model Name | Description |
---|---|

`"no_offset"` | No altitude model applied. |

`"per_beam_offset_[integer]"` | The LiDAR consists of a fixed number of beams (e.g. Velodyne VLP-16 has 16 beams, so `per_beam_offset_16` ). Each of these beams has an correction factor for its range, azimuth and altitude. NOTE: These offsets are not currently adjusted as part of calibration in metrical, but will be calibrated in a future release. |

### IMU

Inertial Measurement Units (IMU) measure specific-force (akin to acceleration) and rotational velocity. This is done through a combination of accelerometer and gyroscopic sensors. IMUs in MetriCal are a combined form of component as MEMS IMUs are rarely able to atomically and physically separate the accelerometer and gyroscope measurements.

Like other component types, aside from the common fields that every component contains, IMUs are defined by the following types:

Field | Type | Description |
---|---|---|

Bias | An IMU bias | IMU bias parameters |

Intrinsics | An IMU intrinsics object | IMU intrinsics model |

Noise Parameters | An IMU noise parameters object | Noise parameters |

Bias Covariance | A matrix of floats | A 6×6 covariance matrix describing the variance-covariance of the IMU bias parameters. |

Intrinsic Covariance | A matrix of floats | A n×n covariance matrix describing the variance-covariance of the IMU intrinsic parameters, with the value of n dependent on the intrinsics model used. |

#### Intrinsic Modeling

The following models are provided as part of MetriCal:

Model Name | Description |
---|---|

`"no_intrinsics"` | No intrinsic model applied |

`"scale"` | Scale model |

`"scale_shear"` | Scale and shear model |

`"scale_shear_rotation"` | Scale, shear and rotation model |

`"scale_shear_rotation_g_sensitivity"` | Scale, shear, rotation and g-sensitivity model |