[Documentation] [TitleIndex] [WordIndex


This Package implements fiducial markers for camera pose estimation or object detection. Right now we implemented the PiTag marker, a variation of it the Fast PiTag and the Aruco marker.


The cob_fiducial package is part of cob_object_perception. It is available on Github an can be cloned with

git clone https://github.com/ipa320/cob_object_perception.git

There are also dependencies to the package cob_perception_common. This can be cloned from Github with

git clone https://github.com/ipa320/cob_perception_common.git

Calibration Requirements

The used camera needs to be calibrated. Ros provides a calibration method based on a chekkerboard detection ROS_Calibration.

How To Use

The package can be used via a launch file which loads all parameters from a .yaml file and starts the cob_fiducial node. For each Marker System a individual .yaml file is defined.

Getting Started

At first modify your prefered launch file from ros/launch/ to remap your camera image topic e.g. /camera/rgb to the rgb_topic, which is expected by the software. Then start the cob_fiducial node

roslaunch cob_fiducials fiducials.launch

to start the marker detection using the topic interface

rostopic hz /fiducials/detect_fiducials

to start the marker detection using the service call interface e.g. for detecting tag_0. The name is a composite of the string 'tag_' and the ID specied in the xml parameter file (see below).

rosservice call /fiducials/get_fiducials tag_0

For visualization you can use image_view

rosrun image_view image_view image:=/fiducials/image

Marker Selection

As seen the cob_fiducials node is initialized using a launch file. In the launch file the different marker detections algortihms for PiTag and Aruco can be choosen.

For PiTag the following row must be in the launch file

  <rosparam command="load" ns="fiducials" file="$(find cob_fiducials)/ros/launch/fiducials_0.yaml"/>

For Fast PiTag another .yaml file is provided

  <rosparam command="load" ns="fiducials" file="$(find cob_fiducials)/ros/launch/fiducials_fpitag.yaml"/>

For Aruco(WARNING: Aruco is working. But fiducials_1.yaml does't load the Aruco detection in the latest release!)

  <rosparam command="load" ns="fiducials" file="$(find cob_fiducials)/ros/launch/fiducials_1.yaml"/>


Marker Specifications

The Size of a Marker and other spezific parameters can be adjusted individually for both Marker Systems. The files are located in


.The blueprints to use with the parameter files are located in


.They should be printed on white paper to guarantee a high contrast.

Parameter Files

Exemplary parameterfile for PiTag


<FPITAG value="1"/> //optional parameter [0 = PiTag, 1 = FPiTag]

<ID value="0" />
<LineWidthHeight value="0.1" />

<CrossRatioLine0 AB="0.40" AC="0.60" />
<CrossRatioLine1 AB="0.20" AC="0.80" />

<Offset x="-0.125" y="0.175" />

<SharpnessArea x="-0.01" y="-0.01" width="0.12" height="0.12"/>


Exemplary parameterfile for Aruco


<ID value="341" />
<LineWidthHeight value="0.1"/>

<Offset x="0" y="0" />


Notice: PiTag's are distinguished from each other through the cross ratio. Aruco's only by ID. Miultiple discriminable Tag's can be defined in each parameterfile.

Overview of the Markers


PiTag stands for Projective Invariant Tag, due to the detection algorithm which is based on projective invariants. The Paper with all information about the marker can be viewed here PiTag. There is a PiTag generator in https://github.com/raultron/PiTag-generator. The Picture below displays 5 different encoded markers.

Exemplary PiTag detection

Creation of PiTag

The Dimensions of a PiTag marker is displayed in the following picture. Each marker constists out of four lines with two different cross ratios. The lines with the highest cross ratio are attached to the top left corner. The lines with the lowest cross ratios are attached to the bottom right corner.

Creating a PiTag Marker

Fast PiTag

The name Fast PiTag (FPiTag) is based on the reduced execution time of the detection algorithm compared to the original approach. Based on the additionally added concentrics rings a smaller region of interest can be determined to apply the PiTag detection algorithm. Especially in highly structured areas or when using high resolution cameras it enables a fast marker detection and a lower false positive rate.

Creating a PiTag Marker


Aruco was made for educational purpose, the belongig webpage can be found here Aruco. A Marker with the coding 341 is displayed below.

Exemplary Aruco Marker

Creation of Aruco

The marker consists of a 7 × 7 square array with outer squares in black. The 5 × 5 center part of the marker is used to add information to the marker and distinguish between different markers. Each row is interpreted as a word with five bits. To increase the robustness each row has only two data bits, the other bits are used for failure detection with Hemming Code. Thus, 2^10 different marker configurations are possible.

2024-06-15 12:54