I’m not sure what you mean by “WPILib AprilTag system”, but the WPILib team hasn’t done any AprilTag library benchmarking itself.
That apriltag detection codebase in the wpi suite
The benchmarks I posted earlier used that since PhotonVision uses our fork of the apriltag library. There’s a lot of context missing though like what compiler flags were used and what images were fed to the detector.
I think we’re just going to stick with Photonvision after my research.
oh. Gotcha. Thanks
By the way, we are close to re-enabling the Aruco pipeline thanks to @amquake!
If someone has the time, testing the accuracy between the AprilTag and Aruco detectors would be very useful. This would involve collecting a wide array of ground truth images and running each detector on them (there is a way to feed images into PV but this may be easier if you bypass PV all together so you can automate testing. There are some papers in this, but the most comprehensive one I found comes right from the creators of aruco (and goes and claims that aruco is better in almost every case). They also are missing a lot of key details necessary for comparison.
What is aruco? On Opencv’s website is says they are a type of fiducial tag. Are they basically the same as april tags?
Yep! It’s another type of fiducial marker. There are many types: Fiducial marker - Wikipedia
To clarify, “ArUco” and “AprilTag” each are both a type of fiducial marker as well as a library for detecting fiducial markers. The tags seen on the field in 2023 are a specific family (16h5) of AprilTag markers-- these marker types were introduced by their original papers (ArUco, AprilTag).
There are actually multiple implementations of the papers (and followup papers) for detecting markers. To name those mentioned, WPILib uses AprilTag3 which is the latest official implementation of the AprilTag papers, and the OpenCV ArUco module is based on the official ArUco library. Both detectors can recognize many different types of markers (AprilTag detector can recognize ArUco markers, and ArUco detector can recognize AprilTag markers).
I was looking into using the NVIDIA solution but was having trouble figuring out how to separate it from their ROS solution. Any suggestions would be welcome.
We have a simplified implementation here : https://github.com/FRC900/2023RobotCode/tree/main/zebROS_ws/src/cuda_apriltag_ros
It’s still ROS based, but it should cut out the steps of having to install a bunch of issac docker containers and hunt down the location of the nvidia libraries.
The NV libraries and associated include file is in cuapriltags, while the implementation is in src/cuda_continuous_detector.cpp
I think the AprilTagsImpl code in the .cpp file is ROS-free so could be reused as needed in other code
Starting at line 207 of the .cpp file, the code operates on the opencv Mat named img. So that would be the starting point for getting the rest of the actual detection code hooked up.
Thanks! I’ll take a look. As an exercise to learn CUDA, I had started converting the one from the April Robotics Lab to use the GPU, but its been slow going due to inexperience in making the algorithms parallel and figuring out what to do with their graph based approach. Hopefully this will give me what I need without the extra effort!