RIVeR-Lab / apriltags_ros

AprilTags for ROS
http://wiki.ros.org/apriltags_ros
83 stars 101 forks source link

Error quantification #5

Open marcelinomalmeidan opened 8 years ago

marcelinomalmeidan commented 8 years ago

Hi, I was wondering if you have any means of estimating the error of some pose estimation.

What I mean is: given that aprilTags gave me a full pose for a tag, how much should I trust this estimation? In the aprilTags paper (Olson, E., 2011), there is a result obtained in simulation that shows that the error varies with the 'off-axis angle'. This is cool, but I would need to collect my own data to get a covariance matrix that depends on the off-axis angle, perspective and distance. I think this is somewhat impractical.

Alternatively, it is said in section 3-C that, for the rotation matrix, it is calculated such that it minimizes the Frobenius matrix norm of the error. Therefore, if we calculate this norm after estimating, we should get something that would translate into some confidence measure, right?

I was wondering what do you guys think about this. Would you suggest anything different? What do you think about adding this norm as an output topic of the algorithm?

davelkan-zz commented 8 years ago

I would also find some confidence measure that allows me to form co-variances extremely useful.

marcelinomalmeidan commented 8 years ago

I just uploaded some changes to the apriltags code to include the homography estimation error. You can download it from my repo. In practice, it only adds one more float64 in the detections topic: float64 errorEst

Note that this is good for calculating the error for the homography estimation. The homography estimator tries to find the transformation that makes the points in the corners before transformation (points in a square) match the corner points in the image. Something I notice that might also be a source of error (and is not detected in this error that I provide) is that sometimes Apriltags doesn't detect the corner points really well. This kind of error would not be detected in what I added to the code.