Fiducial Slam Setup and Use

I’m experimenting with this package. My understanding is that at any moment the upward facing camera needs to be seeing two fiducials. I tell it where in my coordinate system the first one is…

  1. How do I tell it that?

… and then it needs to see another one in the same image. Based on that a second node of the map is created with the new one also localized…

  1. In practice, with a normal office ceiling height, how close do the fiducials have to be to each other?

  2. What kind of pi cameras are on the Ubiquity Robot? How wide angle are they?


First of all, Hello and welcome.

  1. The code at this time makes the assumption that the fiducial nearest being directly overhead is nearest to map 0,0 and I do not believe you can identify a specific fiducial as being at 0,0 in the X-Y plane.

  2. For a normal office height do your experiments with the fiducials about 1 meter apart.

  3. The camera at this time is a raspberry Pi version 2.
    It uses a Sony IMX216 chip with 3280 × 2464 pixels and a 62.2 x 48.8 degrees field of view.


  • As an FYI, know that we are working on a second way for the code to operate at this time and evaluating that method with so far very encouraging results. That code is not released so I will assume you are discussing the released code for fiducial navigation.

  • Note for users requiring extremely good navigation that is repeatable no matter what rotation the robot is at on the floor:
    Make note that the up-facing camera needs to be accurately aligned so that if you put the camera itself directly under a fiducial you need the center of the fiducial to be in the center of the image being taken. What I do is have camera directly under a fiducial and look at the image. Then rotate the robot in 90 degree increments about the camera itself, not the robot base_line (center of wheels). The same fiducial would appear in the center of the raspberry Pi image. I use shims to align camera. Even with under a 1 degree alignment error to lead to 5cm or more error if you do the math (trig).
    use a string with weight on it to best tell location.

1 Like

Thanks!! Can you explain your point 1 some more? What is the use case? Maybe you meant the fiducial nearest overhead when there are not fiducials on the map yet?

When there are no fiducials in the map, the system goes into an auto-init mode, where it uses the closest fiducial as the initial fiducial in the map. It places it so that the current robot pose is at 0,0,0.

This means that you shouldn’t be moving the robot for a few seconds when you start mapping, or you end up with a weird initial position for the first fiducial.

Thanks. And then once the first one is in, the others are recorded relative to that one.

1 Like

Correct, all fiducials are relative to the first one.