Fiducial Slam vs. "regular" Slam

Can you explain the use case of “Fiducial Slam”? Here are some questions and proposed answers that you could maybe elaborate on?

Is it a fair statement to answer that Fiducial Slam needs a camera and does not require a Lidar. Also Fiducial Slam does not create a map of the “real world”. Instead it creates a coordinate system in the real world that can be used.

How does FS interact with move_base? What has to be configured? My best guess is that move_base needs to be told to pay attention to TF made by FS. Or r is it that FS publishes a map? Or both?

How does FS interact with AMCL? Again what has to be configured? AMCL is estimating position based on lidar echos and the map it has. So I am confused how the two interact.

Thanks!

Is it a fair statement to answer that Fiducial Slam needs a camera and does not require a Lidar. Also Fiducial Slam does not create a map of the “real world”. Instead it creates a coordinate system in the real world that can be used.

Yes that is a accurate assessment.

How does FS interact with move_base? What has to be configured? My best guess is that move_base needs to be told to pay attention to TF made by FS. Or r is it that FS publishes a map? Or both?

If you want to use move_base with fiducial slam, you need to have something publishing a global costmap (based on something like a floorplan or a lidar map) that is aligned to the fiducial map. Then the fiducials will provide a localization that can be used by move_base.

How does FS interact with AMCL? Again what has to be configured? AMCL is estimating position based on lidar echos and the map it has. So I am confused how the two interact.

This integration is something we need to work on more. Generally we use fiducials instead of AMCL, but ideally we do some smarter fusion of the 2 localization systems.

Thanks. That definitely helps. Is there a worked example that you can point me to, in particular about how to get the fiducial map to align with a floor plan. I guess it’s a set of tf dependencies but I am not quite clear how I would set it up. A bit of working documented code would really help.

1 Like

hi @pitosalas, did you have any luck with your data fusion challenges?

@rohbotics Following on from the idea of fusing both laser and fiducial slam. I got both simple_navigation and gmapping running at the same time, however, gmapping keeps posting pose estimates that conflict with the fiducial slam. Since by default gmapping posts a tf from base_link -> odom and so does fiducial slam I need a way to merge the two tf’s nicely.
Is there anything out there that does this already?
Ultimately I could have both the fiducial slam map and the gmapping (or AMCL map) and I just need to align them. Are there any ros nodes that do this kind of map alignment?

Sorry, but no. I didn’t really pursue it after the last post.

thats ok, thanks @pitosalas
@rohbotics, do you think that if I had a map made with gmapping, then ran amcl and built a new map with fiducial_slams “external_pose” property = true that the fiducial map and amcl map would be aligned?
Since when it first sees a fiducial it will have no pose reference, so it will reference the amcl map? I wonder though if the maps would drift due to odometry? Is there a way to get amcl to choose particles based on the scan matching and the fiducial slam estimate?

Hmmm… sorry I got confused by the repo: https://github.com/jrlandau/fiducials-1 which has a lot more options that the ubiquity fiducial slam has

That repo has an old version of fiducials that we don’t support any more.

If you are trying to combine both fiducial slam and lidar slam, you will need to align the 2 maps so that they have the same origin. The easiest way to do this is by starting both in the same position. To align existing maps, you will have to find a manual method that works for your use case, we haven’t built any tooling for that.

If the maps are aligned, you can disable the tf publishing of map->odom in both, and use a kalman filter package like robot_localization to fuse the 2 pose estimations together.

Hope that helps.
Rohan

1 Like

I am going to elaborate on something that Rohan said in his last post here but in different words.
Hopefully Rohan will validate this in case I get it wrong.

For making a map using Fiducial Slam start the robot with it pointing a known direction and as close to having robot base_link directly under a given fiducial. Mark each robot wheel center with tape on the floor for later reference.
Then when you are making the map for lidar start making that map with Magni pointing in the same way and wheels right where they were for Fiducial map making.
Note that when all done you have two maps. For added sanity you can have robot before each map making be started from power off state in this ‘origin’ position although we ‘may’ reset ODOM for these cases you assure an ODOM zeroing by full power on in the origin pose.

1 Like

Thanks guys, @rohbotics, I’ve tried to setup an EKF but I am getting an issue where my ekf is fusing map → odom, but my TF is messed up. I’m not sure if its the robot description not working or maybe the motor node not properly sending tf messages.
Here is my tf graph:


And here is a screenshot of the weird behaviour in rviz
Screenshot from 2020-07-21 07-35-15
Its weird because some of the robot parts are oddly missing… any ideas where I should look to fix this?