Supported Fiducials
Find examples for all of these fiducials in the MetriCal Sensor Calibration Utilities repository on GitLab.
A detector is a description of what feature(s) to identify in an observation to generate our object space.
Markerboard
A Markerboard is the preferred Detector type for camera data in MetriCal.
Markerboards are similar to checkerboards, but contain a series of coded markers in the empty spaces of the checkerboard. These codes are most often in the form of April or ArUco tags, which allow for better identification and isolation of features.
Field | Type | Description |
---|---|---|
checker_length | float | The length of the side of a checker (a solid square), in meters |
corner_height | float | The number of inner corners on the board, counted vertically. This is one less than the number of columns on the board |
corner_width | float | The number of inner corners on the board, counted horizontally. This is one less than the number of rows on the board |
marker_dictionary | string | The marker dictionary used on this target. See Supported Marker Dictionaries |
marker_length | float | The length of the side of a marker, in meters |
marker_id_offset | integer | (Optional) Lowest marker ID present in the board. This will offset all expected marker values. Default is 0 . |
Circular Markerboard
This circular markerboard is similar to a markerboard in almost every way, but cut into a circle. The target also uses a retroreflective border around the circle. This target type is required to perform a Camera ↔ LiDAR or LiDAR ↔ LiDAR calibration.
This target is represented in object space as two separate object spaces: one for the markerboard and one for the circle. The description below is only for the circle. See the documentation on using mutual construction groups for more information.
"Top Left"?
Notice that x_offset
and y_offset
are relative to the "top-left inner corner" of the markerboard
pattern. In MetriCal, the origin of a Markerboard is represented by the corner of the pattern that
has a tag ID matching the marker_id_offset
. Orient this tag so that it's in the top-left corner of
the plane, and voila! You have a properly oriented object space.
If you'd like to procure one of these boards (rather than make one yourself), please contact our support.
Field | Type | Description |
---|---|---|
radius | float | The radius of the circle, in meters |
x_offset | float | The horizontal distance between the top-left inner corner of the markerboard and the center of the circle, in meters |
y_offset | float | The vertical distance between the top-left inner corner of the markerboard and the center of the circle, in meters |
detect_interior_points | boolean | Whether to use the LiDAR points detected within the circle bounds as part of the optimization. Doing so will produce Interior Points to Plane Metrics |
Aprilgrid
Aprilgrids are patterned sets of Apriltags. They have contrasting squares in the corner of every tag; this provides feature detection algorithms more information to derive corner locations.
Field | Type | Description |
---|---|---|
marker_dictionary | string | The marker dictionary used on this target. See Supported Marker Dictionaries |
marker_grid_width | float | Number of AprilTags / markers horizontally on the board |
marker_grid_height | float | Number of AprilTags / markers vertically on the board |
marker_length | float | The length of one edge of the AprilTags in the board, in meters |
tag_spacing | boolean | The space between the tags in fraction of the edge size [0.0, 1.0] |
marker_id_offset | integer | (Optional) Lowest marker ID present in the board. This will offset all expected marker values. Default is 0 . |
Markers
"Markers" is a general catch-all for a collection of signalized markers, e.g. a calibration space made up of many unconnected ArUco or April tags.
Field | Type | Description |
---|---|---|
marker_dictionary | string | The marker dictionary used on this target. See Supported Marker Dictionaries |
marker_length | float | The length of one edge of the AprilTags in the board, in meters |
Checkerboard
Anyone who has ever tried their hand at calibration is familiar with the checkerboard. This is a flat, contrasting pattern of squares with known dimensionality. It's known for its ease of creation and flexibility in use.
Field | Type | Description |
---|---|---|
checker_length | float | The length of the side of a checker (a solid square), in meters |
corner_height | float | The number of inner corners on the board, counted vertically. This is one less than the number of columns on the board |
corner_width | float | The number of inner corners on the board, counted horizontally. This is one less than the number of rows on the board |
While MetriCal supports checkerboards, it is important to note some limitations:
- Points on the checkerboard are ambiguous. No calibration system can reliably tell the difference between a checkerboard rotated 180° and one that is not rotated at all. The same applies between rotations of 90° and 270°. This ambiguity means that MetriCal cannot reliably differentiate extrinsics, which causes projective compensations.
- The entire checkerboard needs to be visible in the field-of-view of the camera. With coded targets or asymmetric patterns, MetriCal can still identify key features without the full target in view.
We recommend using coded detectors like the Markerboard whenever possible. This allows MetriCal to be more flexible to different data collection practices, and reduces the burden on you to keep the entire object space in frame at all times.
Supported Marker Dictionaries
Value | Description |
---|---|
"Aruco4x4_50" | 4x4 bit Aruco containing 50 markers. |
"Aruco4x4_100" | 4x4 bit Aruco containing 100 markers. |
"Aruco4x4_250" | 4x4 bit Aruco containing 250 markers. |
"Aruco4x4_1000" | 4x4 bit Aruco containing 1000 markers. |
"Aruco5x5_50" | 5x5 bit Aruco containing 50 markers. |
"Aruco5x5_100" | 5x5 bit Aruco containing 100 markers. |
"Aruco5x5_250" | 5x5 bit Aruco containing 250 markers. |
"Aruco5x5_1000" | 5x5 bit Aruco containing 1000 markers. |
"Aruco6x6_50" | 6x6 bit Aruco containing 50 markers. |
"Aruco6x6_100" | 6x6 bit Aruco containing 100 markers. |
"Aruco6x6_250" | 6x6 bit Aruco containing 250 markers. |
"Aruco6x6_1000" | 6x6 bit Aruco containing 1000 markers. |
"Aruco7x7_50" | 7x7 bit Aruco containing 50 markers. |
"Aruco7x7_100" | 7x7 bit Aruco containing 100 markers. |
"Aruco7x7_250" | 7x7 bit Aruco containing 250 markers. |
"Aruco7x7_1000" | 7x7 bit Aruco containing 1000 markers. |
"ArucoOriginal" | 5x5 bit Aruco containing the original generated marker library. |
"Apriltag16h5" | 4x4 bit Apriltag containing 20 markers. Minimum hamming distance between any two codes is 5. |
"Apriltag25h9" | 5x5 bit Apriltag containing 35 markers. Minimum hamming distance between any two codes is 9. |
"Apriltag36h10" | 6x6 bit Apriltag containing 2320 markers. Minimum hamming distance between any two codes is 10. |
"Apriltag36h11" | 6x6 bit Apriltag containing 587 markers. Minimum hamming distance between any two codes is 11. |
"ApriltagKalibr" | 6x6 bit Apriltag containing 587 markers. Minimum hamming distance between any two codes is 11. Every marker has a border width of 2; this is the only main differentiator between Kalibr and other Apriltag types. |