Skip to main content

Calibration Boards

A series of calibration boards are provided:

For each board, various files are provided:

  • the JSON file which can be used in the code
  • the PDF file that can be used to print the board
  • In some cases, the SVG file with the board in vectorial format is also provided.

See below for characteristics of each board and some specific instructions for printing.

The name of the boards corresponds to [<name>_]<page_format>_<n_arucos>_<aruco_dict> where the aruco_dict is the number of bits and the number of markers in the dictionary.

Origin of Coordinates

In the given PDF files, the X=0 and Y=0 are marked as a small red (x) and green (y) rectangle. The Z axis is

The axis of the given boards:

  • X
    • Direction: parallel to the direction of the writing
    • Origin: center of the page
  • Y
    • Direction: perpendicular to X in the same sheet of paper
    • Origin: bottom of the bottom row or arucos
  • Z
    • Direction: parallel to the width of the board
    • Origin: front face of the board

The Y coordinate origin can be changed to compensate for the actual height the calibrator is on.

  • When running calibration, passing the flag --height | -he <height_m>
  • Modify the JSON file by adding "default_height": <height_m>

In both cases, the height is the distance between the floor and the origin of the Y axis explained above.

Coordinate system of the calibration boards

Figure 1 for a graphical representation

Adding a new board

To add a new board, the code only needs the JSON file, but other files such as the printing files or other instructions are useful to recreate the calibration board.

Flat Boards with width

When creating a new board, printing has to be done at scale 100%, the width can be changed using a simple script.

Building the Calibration Board

(e.g. A3_12_4x4_50 and A4_4_4x4_50)

Print each page of the document on the two faces of a rigid board or to opposite sides of a box. The really important part is to make sure the four corners of the board (i.e. the corner arucos) are aligned between the front and the back. See the images below for an example on how to do it using a random box.

Top of the calibrator Front of calibration board

  • The given files assume a width of 8cm.

Changing the reference files

# repo
python update_calibration_board.py <path/to/input_board.json> <new_width> [-o path/to/output_board.json]
python update_calibration_board.py calibration_boards/A3_12_4x4_50.json 10

# compiled
update_calibration_board.exe <path/to/input_board.json> <new_width> [-o path/to/output_board.json]
update_calibration_board.exe calibration_boards/A3_12_4x4_50.json 10

The second command will generate the JSON file for a new calibration board using a 10cm box and will be saved in the same folder with the name A3_12_4x4_50_10.json

Important notes for this script to work:

  • -o path/to/output_board.json
    • None it will be stored in the same location as the input adding the _<new_width> to the name.
    • path/to/board.json, that will be used.
    • path/to/folder/ will save with the same name as the None option but in the specified version.
  • the input_board has to contain the necessary information to change the dimension:
    • width_axis is the index in the corner points that represents the width coordinate (x, y or z), usually it will be 2 (z)
    • width_ids is a list with the arucos ids that are in the "back" face of the calibrator.
  • new_width has to be in the same scale as the points in the board.