Comments (12)
Some information I have gathered about the planar pose ambiguity:
- this (quite old) paper presents a method to return I think the two plausible solutions: Iterative Pose Estimation Using Coplanar Feature Points, Denis Oberkampf, Daniel F.DeMenthon, Larry S.Davis, 1995:
- Infinitesimal Plane-based Pose Estimation, Toby Collins, Adrien Bartoli, 2014 that computes also the two possible solutions and suitable for tag pose estimation
- Sensor Fusion for Fiducial Tags: Highly Robust Pose Estimation from Single Frame RGBD, Pengju Jin, Pyry Matikainen, Siddhartha S. Srinivasa, 2017, the following image from the paper shows the ambiguity problem in certain viewpoint and with imprecise corners coordinates extraction
- also documented in the ArUco FAQ where they recommend to use
MarkerPoseTracker
to use temporal consistency - this paper I just found: Resolving Marker Pose Ambiguity by Robust Rotation Averaging with Clique Constraints, Shin-Fang Ch'ng, Naoya Sogi, Pulak Purkait, Tat-Jun Chin, Kazuhiro Fukui, 2019
from apriltag.
Yes, it is a fundamentally ambiguous problem, if the tag's apparent size in the image is small enough. As you can see, the apriltag pose estimation code attempts to calculate both solutions and then return whichever solution is better. The pose estimation code is an implementation of Lu et. al. (2000) and the ambiguity code uses the method of Schweighofer and Pinz (2006). I chose this combination of methods because the Infinitesimal Plane-based Pose Estimation paper you linked states that this combination has the best performance when you have only 4 matched feature points, which is the case for fiducial detection (FYI, that paper refers to this combination of methods as RPP-SP).
from apriltag.
This issue is related to using the tagStandard41h12 dictionary.
Switching to the 36h11 markers has improved my results across the board. They are faster, more robust and less prone to the flipping.
Thanks!
from apriltag.
Hey @antithing, I faced the same issue with 36h11 today. Turns out if the tags are parellel to the the image plane, this issue occurs. Can you please try this out and let me know if you are having the same issue.
Also, do you think decimate will affect this flipping issue?
Thank you!
from apriltag.
Hey @antithing, I faced the same issue with 36h11 today. Turns out if the tags are parellel to the the image plane, this issue occurs. Can you please try this out and let me know if you are having the same issue.
Also, do you think decimate will affect this flipping issue?
Thank you!
same issues happened in gazebo enviroment. I'm testing apriltag alongside with others.
However, whenever the tags are parellel to the the image plane, estimated pose keep fliping
heres are the error compared with ground turth provided by gazebo get_model_state_srv.
with a 2mx2m tag, x-axis indicate distance in meter, y-axis indicate error in degree of three axis of estimate pose with ground turth.
error grows to 30 degree above when flipping
from apriltag.
This sounds like it might be a bug, there shouldn't be any noticeable difference in pose accuracy between 36h11 and Standard41h12 families. I will take a look at this.Can anyone on this thread provide images where this bug happens?
Also, is the problem that the detected corner locations are moving around or that the pose that is inferred from the corner locations is unreliable?
from apriltag.
Thanks for your reply!
Actullay I'm not sure it is a bug or not. It's more like an ambiguity problem. I place the model with those flipping pose by set_model_state srv in gazebo;
here is what I got,
It's seems It's really hard to tell which pose is correct from camera view(left).
gazebo client(right)
from apriltag.
Any updates on this? Facing the same issue with the Standard41h12 family.
from apriltag.
There are some conditions in which ambiguity is expected, basically if the object is far enough away from the camera and the resolution of the camera is low enough. It looks like the example posted on Jun 22 is low enough resolution that it will be fundamentally ambiguous and there is nothing our algorithm can do about it.
@lzyplayer Are the examples you gave rendered at the same resolution your camera is seeing them at? If so, these should not be ambiguous and I will investigate.
@Harsharma2308 Please post examples of your issue for me to investigate.
from apriltag.
Hi @mkrogius ,
Thanks for the reply!
Both examples provided are within gazebo simulation enviroment, in which a 2m x 2m tag is wanding around about 70 meters to camera. Camera has exactly the same parameter as Azure kinect RGB camera, that is
- resolution: 1280x720
- FOV: 75°x65°
- FPS: 30
- tag_size: 2 meters
- distance from tag to camera: about 70 meters
Example given on 22 Jun shows the error function's output. And example given on 27 Jun tells at which point it's flipping. The image on the left is exactly the image processed by Apriltag, while images on the right is screenshot from gazebo.
from apriltag.
I notice the same issue with 16h5 family. It is an ambiguity issue, but I believe the ambiguity should be resolvable by the assumption that you should never be able to see the "back" of an april tag, and thus always get z-values which are towards the camera.
from apriltag.
Actually, after looking into the problem more, I think the ambiguity is fundamental. Both solutions you see (when it flips, it's another solution of the perspective n point problem) are valid, and there's no way to resolve it other than more points, or 4 non-planar points.
from apriltag.
Related Issues (20)
- Improve documentation concerning estimated pose HOT 5
- What do the tag-specific hex codes in the c files represent?
- How to deal with tag36h9? HOT 1
- install problem HOT 5
- Clarify licensing HOT 1
- Geometric interpretation of estimation error HOT 2
- Help with thresholding parameters HOT 1
- How to run pose estimation in python ? HOT 3
- compatibility with WIN32_LEAN_AND_MEAN HOT 8
- Anyone implmented c# wrapper for this? HOT 1
- error when i run make in ubuntu 22.04 HOT 1
- Has anyone confirmed that this library can work on ESP32S3? HOT 3
- How to use intrinsics in Scaramuzza format to estimate the apriltag pose? HOT 3
- Suggestions on improving detections in low light conditions HOT 4
- Python bindings for apriltag_detect throws error when no detection is found HOT 5
- What's the meaning of 'apriltag.c:448: homography_compute2: Assertion `max_val_idx >= 0' failed.'? HOT 5
- Planned Python Package Index (PyPI) package? HOT 4
- Build fail on Ubuntu Noble in g2d.c: `last_quadrant` is used unitialized; treat-all-warnings-as-errors HOT 4
- How to detect AprilGrid? HOT 5
- (Python) 'Nthreads' is an invalid keyword argument for this function HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from apriltag.