Skip to main content
Version: 12.1

Supported Fiducials

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

success

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.

Target: Markerboard

FieldTypeDescription
checker_lengthfloatThe length of the side of a checker (a solid square), in meters
corner_heightfloatThe number of inner corners on the board, counted vertically. This is one less than the number of columns on the board
corner_widthfloatThe number of inner corners on the board, counted horizontally. This is one less than the number of rows on the board
marker_dictionarystringThe marker dictionary used on this target. See Supported Marker Dictionaries
marker_lengthfloatThe length of the side of a marker, in meters
marker_id_offsetinteger(Optional) Lowest marker ID present in the board. This will offset all expected marker values. Default is 0.
initial_cornerstring(Optional) Valid values are "square" and "marker". Default is "marker". Used to counteract a breaking change to markerboards generated by newer versions of OpenCV. This option specifies if the top left corner of your board is populated with a solid black square or a marker. In boards generated by OpenCV versions before 4.6.0, the top left will always be a marker. In newer versions, the top left can sometimes be a black square.

Circular Markerboard

Target: 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.

Target: Circular Markerboard Description

FieldTypeDescription
radiusfloatThe radius of the circle, in meters
x_offsetfloatThe horizontal distance between the top-left inner corner of the markerboard and the center of the circle, in meters
y_offsetfloatThe vertical distance between the top-left inner corner of the markerboard and the center of the circle, in meters
detect_interior_pointsbooleanWhether 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

Target: 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.

FieldTypeDescription
marker_dictionarystringThe marker dictionary used on this target. See Supported Marker Dictionaries
marker_grid_widthfloatNumber of AprilTags / markers horizontally on the board
marker_grid_heightfloatNumber of AprilTags / markers vertically on the board
marker_lengthfloatThe length of one edge of the AprilTags in the board, in meters
tag_spacingbooleanThe space between the tags in fraction of the edge size [0.0, 1.0]
marker_id_offsetinteger(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.

Target: Markers

FieldTypeDescription
marker_dictionarystringThe marker dictionary used on this target. See Supported Marker Dictionaries
marker_lengthfloatThe 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.

Target: Checkerboard

FieldTypeDescription
checker_lengthfloatThe length of the side of a checker (a solid square), in meters
corner_heightfloatThe number of inner corners on the board, counted vertically. This is one less than the number of columns on the board
corner_widthfloatThe number of inner corners on the board, counted horizontally. This is one less than the number of rows on the board
danger

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

ValueDescription
"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.