Screenshots     Download     Pricing     Docs     Tutorials     Resources     Contact     Forum     Search  


The Fiducial module provides you with an easy way to identify a particular marker within the current image view. Fiducials are commonly known as "markers that are easy to identify" and are typically added to an environment where localization and navigation are needed for robots using machine vision.

Fiducial detection and recognition differs from that of generic object recognition as some assumptions are made on the type of object being detected. For example, a black and white fiducial can be detected without needing color, and can be easily separated from the background due to its high contrast nature. Fiducials are also typically 2D planar objects that have very distinct corners or shapes. Identifying these traits in the environment helps to reduce the "clutter" of other objects and ensures better identification reliability.

Thanks to the planar nature of fiducials they can be placed on the floor, ceiling or walls and still be detected correctly without any recalibration of the camera. By knowing the basic shape of a fiducial machine vision techniques can account for the perspective and affine distortion (i.e. a fiducial rotated in X and Y plane) to a considerable degree while still maintaining recognition. Is is for this reason, along with their barcode like nature, that fiducials are frequently used for navigation and localization.

There are 6 parameters that localize a fiducial in space. Luckily, due to the shape and planar nature of the fiducial these 6 parameters can be determined very quickly and allow the processing to run at very near camera speed. This has an advantage on moving robots that need to process their environment before it changes.

Once you know the identity of a fiducial you can know approximately where you are. Having the fiducial in sight helps the robot to know where it is with respect to the fiducial and can use the fiducial as a target for navigation based on scale, rotation and translation.

The Fiducial module provides a way to easily recognize fiducials in your environment. We have included 15 test fiducials in the Fiducials folder along with the RoboRealm download that you can print out to experiment with. If you don't have a printer just bring them up on your screen and point your camera towards it!

Note that these are graphical files that can be modified (or more created) as needed. Also note the one poster like fiducial. The only requirement for the fiducial is that it be surrounded by a white surface with an inner black square and contain inner elements that can distinguish it from other Fiducials. If you have posters that satisfy this requirement then you already have fiducials on your walls!



1. Train - Press the train button and enter the full path to the Fiducials folder that you downloaded from RoboRealm. This will typically be c:\Program Files\RoboRealm\Fiducials\. Press the START button to start training. After it is complete press the ok button. If you would like training to happen automatically whenever a file is added, updated or deleted from the specified folder select the 'Monitor Folder' checkbox.

2. Display - You should know notice the fiducials being recognized in the main RoboRealm window. Matches are displayed as green whilst candidate regions that do not match are in purple. Note that the 'name' of a fiducial is the name of the image filename without the extension. So you can change the names by changing the filenames and re-training.

3. Attributes - By default the Filename and Confidence are displayed. You can add or remove information from being displayed by changing the checkboxes in the Display area. Note if too much information is displayed you might want to change the Font size to a smaller size.

  • Filename - the name of the fiducial.
  • Confidence - how strongly the module believes this fiducial matches one in the database folder.
  • Coordinates - the location of the matched fiducial.
  • X Translation - the X location with respect to the center of the screen of the fiducial.
  • Y Translation - the Y location with respect to the center of the screen of the fiducial.
  • Size - the size of the fiducial relative to that in the database.
  • X Rotation - the rotation in the X axis of the fiducial (tilt)
  • Y Rotation - the rotation in the Y axis of the fiducial (pan)
  • Orientation - the Z rotation or angle of the fiducial (spin)
  • Contrast - range between lowest and highest intensity value within fiducial. The higher the better.

4. Box Color - You can change the match and test box color by changing the Matched Box Color and Test Box Color respectively.

5. Filter Confidence - Many candidate squares do pass the basic fiducial requirements but do not match with a known fiducial very well. You can remove those unwanted matches by increasing the Min Confidence. This removes bad matches from being made.

6. Filter Size - Each recognized fiducial has a scale associated with it that can be used to remove larger or smaller matches.

7. Filter Orientation/X/Y - by default fiducials are recognized in any orientation. You can use the Filter Orientation to remove those fiducials outside of your desired orientation. For example, 15, 345 would remove any fiducial +=15 degrees from that what is in the database. You can use the X and Y rotation filters to remove fiducials that are rotated into the image plan (i.e. slightly twisted or flipped).

8. Filter Threshold - you can decide on how many fiducials you want to work with. Specifying a number in the Filter Threshold will display the best X fiducials found in the image.

9. Stabilization - When moving the camera motion blurring can cause incorrect low confidence matches to appear. By increasing the Occurrence Threshold you are requiring a fiducial to appear and continue to appear for a set number of frames before being reported as a match. This essentially removes the "flickering" of low matched fiducials that can cause noise in the results. Note that if you are working with static images you will need to set this to zero!

10. Filter Contrast - As the module attempts to ignore lighting as much as possible it is capable of pulling in fiducial matches that have very little contrast. Using the contrast filter can help to remove those false recognitions by ensuring that enough contrasts exists in the fiducial before attempting recognition.

11. Field of View - In order to provide accurate distance information the module needs to know how large a field of view the camera can see. If you do not know this value, hold the fiducial at a known distance from the camera and adjust the field of view until the distance is correct. Note that this is the Vertical Field of View.

12. Focal Length - Due to the focal length of the camera perspective will be apparent in the fiducial square. You need to specify what this focal length is for your camera in order for the fiducial's angles to be extracted correctly. The manufacturer of your camera will normally know this value. If you do not have access to this value you can empirically determine this by placing a fiducial at a known out of plane angle to the camera (for example 45 deg X rotation) and adjusting the focal length FL value up or down until the X rotation correctly reads 45.

13. Physical Fiducial Width/Height - In order to determine the distance to the fiducial the actual size (in whatever units you want the distance to be) needs to be entered. For example, if you print out a fiducial such that it takes up most of a page, then the actual measurement would be around 7 inches. You can simply use a ruler to measure the actual size (width and height are normally the same) and enter those measurements. If you enter inches then the distance value will be in inches, if you enter meters, then the distance value will be in meters.

14. Variables - To use the results of the fiducial module in your own application or in other RoboRealm modules you can select that the fiducial array be created. This array has all the collected information about a detect fiducial. See below for the array format.

15. Display Results - By default No Change is selected which does not modify the current image in any way other than annotating the fiducials with the above colors. If you want to use the results in other modules you can select to see

  • Colored - displays only the fiducials with their original pixel colors
  • Inverted - displays everything else but the fiducial (which is blacked out).
  • White Mask - white where the fiducials are, black everywhere else
  • Black Mask - black where the fiducials are, white everywhere else


Why do you need to enter in both Camera Field of View and Focal Length? Are they not related to each other? Yes they are, the issue is that in order to relate them we'd need to know the actual sensor size in your camera (e.g. a 35mm camera has a film size of 35mm). As this is difficult to estimate having both parameters estimated using the actual camera and know angle/distance of the fiducial is an easier approach.




FIDUCIALS - contains an array of detected fiducials.

The array contains blocks of 17 values per detected fiducial. The
elements are as follows:

The FIDUCIALS array is composed of 17 numbers as follows:
Offset      Contents
0           Match Confidence 0-100
1           Point 1 X coordinate
2           Point 1 Y coordinate
3           Point 2 X coordinate
4           Point 2 Y coordinate
5           Point 3 X coordinate
6           Point 3 Y coordinate
7           Point 4 X coordinate
8           Point 4 Y coordinate
9           Translation in X
10          Translation in Y
11          Scale 0-100
12          Rotation in X (radians)
13          Rotation in Y (radians)
14          Orientation (Rotation in Z, radians)
15          Path start index
16          Length of path

For example, to print out all found fiducials use the VBScript module
and the following script.

fiducials = GetArrayVariable("FIDUCIALS")
names = GetStrVariable("FIDUCIALS_PATH")

if isArray(fiducials) then
  if ubound(fiducials) > 0 then
    for i=0 to ubound(fiducials)-1 step 17
      nstart = fiducials(i+15)
      nend = fiducials(i+16)
      write "Conf: " & fiducials(i) & "%  Path: " & _
        mid(names, nstart, nend) & vbCRLF
  end if
end if

For ease of access the largest fiducial's information is
also available in the following variables

FIDUCIAL_CONFIDENCE - the confidence of the best matched fiducial
FIDUCIAL_NAME - the name of the matched fiducial
FIDUCIAL_FILENAME - the filename of the fiducial
FIDUCIAL_FOLDER_X - the folder sequence that the fiducial is in
  (replace X with 1, 2, etc.)
FIDUCIAL_SIZE - the size of the best matched fiducial
FIDUCIAL_X_COORD - the x location relative to center screen of
  the best matched fiducial
FIDUCIAL_Y_COORD - the y location relative to center screen of
  the best matched fiducial
FIDUCIAL_ORIENTATION - the orientation (spin) of the best fiducial
FIDUCIAL_X_ROTATION - the x rotation (tilt) of the best fiducial
FIDUCIAL_Y_ROTATION - the y rotation (pan) of the best fiducial
FIDUCIAL_X_TRANS - x axis translation of the fiducial
FIDUCIAL_Y_TRANS - y axis translation of the fiducial
FIDUCIAL_CONTRAST - the amount of contrast in the fiducial
FIDUCIAL_DISTANCE - the distance to the fiducial given the specified
	camera properties
FIDUCIAL_X1_COORD - x coordinate of first fiducial box corner
FIDUCIAL_Y1_COORD - y coordinate of first fiducial box corner
FIDUCIAL_X2_COORD - x coordinate of second fiducial box corner
FIDUCIAL_Y2_COORD - y coordinate of second fiducial box corner
FIDUCIAL_X3_COORD - x coordinate of third fiducial box corner
FIDUCIAL_Y3_COORD - y coordinate of third fiducial box corner
FIDUCIAL_X4_COORD - x coordinate of fourth fiducial box corner
FIDUCIAL_Y4_COORD - y coordinate of fourth fiducial box corner

See Also

Shape Matching
Blob Filter

For more information

ARToolkit (also uses fiducials!)
ARToolkit Patternmaker (compatible with RoboRealm!)

 New Post 
Fiducial Related Forum PostsLast postPostsViews
Get distance of multiple Fiducials
Hello, I am currently working on a robot which uses cameras and fiducials on the wall to localize i...
1 year 2 517
Challenges with fiducial recognition when on the ground
We are having trouble getting the Fiducial marker module to recognize markers that are on the ground.  We have been ab...
2 years 3 558
the magic behind Fiducial
I am curious about the algorithm behind the recognition of Fiducials. What visual features have been extracted, and can we use n...
2 years 2 505
Fiducial Orientation.
Hi, We are testing RR (v 2.50.31) for fiducial recognition and we have a problem with the Orientati...
2 years 5 631
Fiducial Questions
Hi STeven, Wrestling with the understanding the details of the outputs from the fiducial module. I...
2 years 9 841
when robofile is reopened...
I saved my work as a robofile. When I reopen it, it loads the wrong files. I have renamed the orig...
2 years 2 549
decimal mark changed?
hello ! i just installed roborealm (2.47.15) on a brandnew desktop pc, now i ve got the problem th...
3 years 3 732
Help with fiducials
Hello, I am trying to detect fiducials but the only thing that shows are purple squares.
3 years 3 677
fiducials dont work at all
hey there! short summary of my project ( or at least what i need from roborealm :) )
3 years 3 732
Hi STeven   I'm not having any luck with the Fiducial recognition module...
3 years 3 807
Bug in API - FIDUCIALS Variable
At some point after version 2.44.4, API access to the FIDUCIALS variable results in RoboRealm crashing and exitin...
3 years 2 869
Vision based commands
Is there a way to use the shape matching feature to command a robot (in my case a Vex Protobot) to do something based on the inp...
3 years 5 1201

© 2005 - 2015 RoboRealm. All Rights Reserved. | Contact | Glossary | Privacy | Disclaimer | Link to Us | Resources