For context, AprilTags are a fiducial system that can be used both for IDs (similar to a QR code) and determining relative positions (i.e., they were specifically designed to maintain accuracy with this task).
Ideal specifications:
something close to a one-click order
adhesive backing, which is removable (OK if it takes a bit of effort)
three sizes (i.e., “small, medium, large”) (can also base it loosely off of Hiwonder’s defaults)
rigid
chemical compatibility becomes a consideration. I think I had looked into this a fair bit, but I’m having trouble finding where I put those notes. Maybe better if this is done through a lamination rather than trying to get it printed directly on
For the vast majority of applications, the tagStandard41h12 family will be the correct choice. You can find the images for the tags in the apriltag-imgs repo. Scale up the images in your favorite editor and print them out.
Some heuristics for when to choose other tag families:
If you need more tags, use tagStandard52h13
If you need to maximize the use of space on a small circular object, use tagCircle49h12 (or tagCircle21h7).
If you want to make a recursive tag use tagCustom48h12.
If you want compatibility with the ArUcO detector use tag36h11
If none of these fit your needs, generate your own custom tag family here.
It would probably help to compile a list of some adhesive label printing services that have decent chemical compatibility. As an aside, I bought a label printer that comes with a Python API with the intention of setting up an inventory system that auto-prints AprilTags as new items are added
I’m using the apriltag package at PyPI – free and easy install with pip. I use these as the underlying tags for our lab’s RPLtags:
apriltags are the base component, lets us leverage optimized detection of individual stamps
tag ID identification and inferred distance are robustly computed by the apriltag package
unfortunately, pose estimation with four corner detections has ambiguity in orientation that sometimes rears its ugly head due to noise
many applications get around this by taking multiple frames in mobile video streams and ignoring ambiguous results
however, we want single frame pose estimation that is robust, hence RPLtags
layout of multiple apriltags into single RPLtag gives that robustness due to more than 4 points and known relative (in most of our templates: co-planar) constraints
RPLtags are registered in local database with layout info and multi-tag IDs
net benifit: robust pose estimation and huge ID space (great for future factory fun)
Regarding tag family choice, I tend toward tag36h11 because it is well-suited to a wide range of use cases with different cameras. It is less demanding of higher resolution detection than the denser families, and so can be seen more robustly at greater distance for a given resolution, or made smaller in physical size for use in constrained laboratory instrumentation labeling. It has a large enough code space for most applications of RPLtags, where our typical RPLtag template would include three apriltags in a fixed layout. By themselves, the tag36h11 family provides many hundreds of codes. In combinations of three the code space becomes hundreds of millions.
Hard at work now packaging RPLtags for general use and distribution to anybody who might find it useful!
Hi Mark, thanks for providing your perspective from ANL side! Quick Q: is the PyPI package you’re using apriltag, pupil-apriltags, or something else? @viprorok has also been exploring AprilTag implementations within the AC as part of some larger efforts.