Combining Modalities
MetriCal's real power comes from its ability to calibrate multiple sensor modalities at once. This is made possible by combining different target types for different sensor types, all within the same calibration session.
The target combination most commonly used is a Camera-LiDAR MultiTarget, which combines a markerboard for camera detection with a retroreflective circle for LiDAR detection. This target type allows simultaneous calibration of cameras and LiDAR sensors. Just like individual camera and LiDAR targets, multiple Camera-LiDAR MultiTargets can be used together in a single calibration session to improve coverage and accuracy. See the documentation on using multiple targets for more information.
Camera-LiDAR MultiTarget
This target is a markerboard or aprilgrid with a retroreflective ring on its surface. This target type is required to perform a Camera ↔ LiDAR calibration with MetriCal.
This hybrid target is represented in object space as two separate object spaces: one for the camera target and one for the circle. The description below is only for the circle. See the documentation on using mutual construction groups for more information.
When using multiple circle targets, MetriCal requires that the radii of the circles be at least 10cm different from each other. If the radii are too similar, the calibration may fail or produce incorrect results.

Measuring the Circle Offsets
There's no requirement for the circle to be perfectly centered on the camera target. However, you will need to measure the offsets of the circle center relative to the camera target origin in order to use this target type.
We'll put this information into the mutual construction group definition for the two object spaces. Here's an example of how that looks in JSON:
"mutual_construction_groups":
[
{
"24e6df7b-b756-4b9c-a719-660d45d796bf": "parent", // Markerboard object space
"d66d5ad4-b0e9-11f0-91a9-2b83bda4ed9c": // Circle object space
{
"parent_from_object": {
"rotation": [ // No rotation
0,
0,
0,
1
],
"translation": [
0.375, // X offset in meters
0.375, // Y offset in meters
0 // Z offset in meters
]
}
}
}
],
...
Notice that the offsets are relative to the "origin" of the camera target. The way that this is defined differs across board types, and can be a bit confusing.
If you are following our target construction guidelines and are using a Tangram premade target, we have already calculated offsets from the proper origin and constructed the JSON for you. If you are constructing your own custom circle target, though, you will need to find the origin of your board in order to measure circle offsets yourself.
AprilGrid + Circle Target Origin
To find the origin of an AprilGrid style target, first find the tag matching the
marker_id_offset of the board. Orient this tag so that it's in the bottom-left corner of your
frame of reference. The origin of the board is the top left corner of the top left marker
of your board (see diagram).

Markerboard + Circle Target Origin
To find the origin of a Markerboard style target, first find the tag matching the
marker_id_offset of the board. Orient this tag so that it's in the top-left corner of your frame
of reference. The origin of the board is the bottom right corner of the top left checker
of your board (see diagram). Note that the top left checker of your board may be either a black
square or a white checker with a tag inside of it. If it's the latter, the origin is the corner of
the checker rather than the tag itself.
