Skip to content

Commit 265a51b

Browse files
committed
Update README with ArUco support and new API utilities
1 parent 9c22a14 commit 265a51b

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

README.md

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ Some heuristics for when to choose other tag families:
7272
1. If you need more tags, use tagStandard52h13
7373
2. If you need to maximize the use of space on a small circular object, use tagCircle49h12 (or tagCircle21h7).
7474
3. If you want to make a recursive tag use tagCustom48h12.
75-
4. If you want compatibility with the ArUcO detector use tag36h11
75+
4. If you need ArUco support, use the native ArUco families (e.g., `tagAruco4x4_50`, `tagAruco5x5_100`, `tagAruco6x6_250`, `tagAruco7x7_1000`, etc.). These are now fully integrated and optimized.
76+
4. If you want compatibility with the legacy ArUco detector use tag36h11
7677

7778
If none of these fit your needs, generate your own custom tag family [here](https://github.com/AprilRobotics/apriltag-generation).
7879

@@ -193,6 +194,28 @@ Note: The tag size should not be measured from the outside of the tag. The tag s
193194
### Coordinate System
194195
The coordinate system has the origin at the camera center. The z-axis points from the camera center out the camera lens. The x-axis is to the right in the image taken by the camera, and y is down. The tag's coordinate frame is centered at the center of the tag. From the viewer's perspective, the x-axis is to the right, y-axis down, and z-axis is into the tag.
195196

197+
### Handling Pose Ambiguity
198+
Planar targets often result in two possible pose solutions with similar errors (the "ambiguity" problem). To retrieve the alternative solution, you can use:
199+
200+
```c
201+
apriltag_pose_t pose1, pose2;
202+
double err1 = estimate_tag_pose(&info, &pose1);
203+
double err2;
204+
205+
// v and p are the object and image points used during the iteration
206+
get_second_solution(v, p, &pose1, &pose2, nIters, &err2);
207+
```
208+
209+
This is particularly useful when temporal filtering or additional constraints are used to disambiguate the tag's orientation.
210+
211+
Utility Functions
212+
=================
213+
AprilTag 3 now includes helper functions for deep-copying structures, which is essential for multi-threaded applications or when you need to store detections beyond the detector's lifecycle.
214+
215+
* `apriltag_detector_copy(td)`: Creates a clone of the detector configuration.
216+
* `apriltag_detections_copy(detections)`: Returns a new `zarray_t` with deep copies of all `apriltag_detection_t` objects.
217+
* `apriltag_detection_copy(src, dst)`: Performs a deep copy of a single detection into an existing structure.
218+
196219
Debugging
197220
=========
198221

0 commit comments

Comments
 (0)