-
Notifications
You must be signed in to change notification settings - Fork 2
docs: fiducial markers guide #482
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
62 commits
Select commit
Hold shift + click to select a range
4dd39c8
hand-eye calibration branch created on relevant order between other d…
MithraGhlm c23f24a
Added the STag detector doc and rearranged the numbers
MithraGhlm 8790c37
some text written for the STag marker detector.Related image added. T…
MithraGhlm a459c04
The STag detection video added.
MithraGhlm bd5c193
WIP: initial documentation draft
MithraGhlm 0613b51
info for Aruco marker added.
MithraGhlm 81dbf13
Decoupled the explanation of Marker detection from Hand-Eye calibration
MithraGhlm b5952af
Applied some grammatical, structural, and definitional improvements.
MithraGhlm 413e081
canceled the small change made to the text.
MithraGhlm 743eede
Renamed the file to show the marker detection process is generic
MithraGhlm a9a0028
The first version of introduction for the robot calibration guide.
MithraGhlm c0b4a83
added the screenshot of component configuration for the Hand-Eye cali…
MithraGhlm d904aeb
added calibration workflow.
MithraGhlm 426fef6
one word replaced by a better one.
MithraGhlm c4da9af
added things that can be done with the acquired calibration info
MithraGhlm 9ce7fec
corrected capital letter which was in the middle of the sentence.
MithraGhlm f2e20b7
adding a small frame to the image
MithraGhlm b12fd16
Added the missing word, Launcher.
MithraGhlm 4f58281
sidebar position modified
MithraGhlm b290070
sidebar position modified
MithraGhlm 8ec6d43
sidebar position modified
MithraGhlm 94c8d66
The structure of the sentence improved.
MithraGhlm f256e5a
added fiducial to marker
MithraGhlm ce36b54
changed the name of the file to Fiducial Markers
MithraGhlm 93f6f3f
structure of the sentence improved
MithraGhlm 004055e
The structure of the sentence improved.
MithraGhlm b1d7970
Misspelling corrected
MithraGhlm 07e4020
reminder to add the camera configuration file to the Camera Streamer …
MithraGhlm a4fa172
corrected the definition of Rate parameter of the STag Detector compo…
MithraGhlm d529009
the word stag_ replaced by the word Prefix
MithraGhlm 43c9874
small typo corrected
MithraGhlm c59aa4a
adding the explanation of the Marker Size parameter
MithraGhlm e22827b
moved the robot camera calibration component explanation to the prope…
MithraGhlm a3bd7fc
screenshot of Robot Camera Calibration parameters added
MithraGhlm 9d55015
app added for the HE calibration
MithraGhlm addc15b
the structure of some sentences enhanced
MithraGhlm 6fea105
added the reminder to turn on the camera attached check
MithraGhlm c07b8c2
added the definition of Bundle file
MithraGhlm a747428
added the explanation for obtaining, downloading, and printing markers
MithraGhlm 941b84b
rectified the file that Bundle File was explained in
MithraGhlm 5417117
The wrong image removed
MithraGhlm b7b0bfc
typo correction
MithraGhlm 346be2b
Some typo and font inconsistency corrected. Some definitions and pict…
MithraGhlm 9c2edee
text added to explain the screenshot, HE caliberation configuration e…
MithraGhlm 27e362f
Links for obtaining fiducial markers corrected
MithraGhlm f884fe8
screenshots for STag detector predicates added.
MithraGhlm f62b7e6
typo correction
MithraGhlm 4ece868
some order and structur changes in the body of documentation. Some de…
MithraGhlm a9118c4
added the yaml file for the STag Detector
MithraGhlm 50f36a1
Explanation for the Frame Broadcaster component added to the HE calib…
MithraGhlm 1f0f3d8
Print Width corrected, set to 120
MithraGhlm 7cd986b
Unintended changes to ur-harware-interface.md file reverted.
MithraGhlm 83d2982
Removed hand-eye calibration guide to be placed in a separate PR
MithraGhlm b9375b2
reordered imports which were jumbled by the extension
MithraGhlm f906b18
stag detector parameters definition correction
MithraGhlm 62b6ae3
formatted again just to be sure
MithraGhlm b5f63c3
some formatting nitpicks
MithraGhlm 3300154
some small final formatting changes
MithraGhlm d0cce71
An extra unrelated leftover line deleted
MithraGhlm 6017a78
New words in Prettier dictionary transfered from Project Setting to t…
MithraGhlm 9a17480
bundle file discription corrected.
MithraGhlm 1451a1c
Extra .json file removed
MithraGhlm File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change | ||
|---|---|---|---|---|
| @@ -0,0 +1,240 @@ | ||||
| --- | ||||
| sidebar_position: 14 | ||||
| title: Fiducial Markers | ||||
| --- | ||||
|
|
||||
| import stagDetectorExample from './assets/stag-detector-example.png' | ||||
| import stagMarkerDetection from './assets/stag-marker-detection.webm' | ||||
| import stagMarkerNumOne from './assets/stagDetector-predicates_1.png' | ||||
| import stagMarkerNumZero from './assets/stagDetector-predicates_0.png' | ||||
|
|
||||
| # Fiducial Markers | ||||
|
|
||||
| Different types of fiducial markers are used in robotics to provide precise 3D pose estimation and identification for | ||||
| cameras, enabling or improving robotic calibration and object manipulation. | ||||
|
|
||||
| AICA's `core-vision` package gives you the choice between using two commonly used markers, the STag and ArUco. | ||||
|
|
||||
| :::tip | ||||
| Performing the [intrinsic calibration](./camera-calibration.md) of the camera improves the precision for fiducial | ||||
| marker detection and tracking. | ||||
| ::: | ||||
|
|
||||
| This guide provides an example of STag marker detection. Using the ArUco marker follows a very similar process. | ||||
|
|
||||
| ## Preparing fiducial markers | ||||
|
|
||||
| A fiducial marker is an object placed in the field of view of an image for use as a point of reference or a measure. | ||||
| STag and ArUco markers are two of the common types of fiducial marker systems used for real-time 6D pose estimation. | ||||
| This section explains how to obtain, download and print these markers. | ||||
|
|
||||
| ### Obtaining markers | ||||
|
|
||||
| - **ArUco marker**: ArUco markers can be generate online (e.g., from [here](https://chev.me/arucogen/)), which permits | ||||
| choosing the dictionary, marker ID, and marker size. It can be then exported as PDF or SVG for printing. | ||||
|
|
||||
| - **STag marker**: STag marker sets can be either downloaded from | ||||
| [public Google Drive](https://drive.google.com/drive/folders/0ByNTNYCAhWbIV1RqdU9vRnd2Vnc?resourcekey=0-9ipvecbezW8EWUva5GBQTQ) | ||||
| or obtained from the [ROS2 STag project repository](https://github.com/usrl-uofsc/stag_ros/tree/ros2-devel) or the | ||||
| generator/reference files linked by the project. In practice, you’ll want to obtain the marker PDF/SVG or generate the | ||||
| markers from the project’s reference generator, then print them at true size. | ||||
|
|
||||
| ### Printing markers | ||||
|
|
||||
| After choosing the marker family, selecting the library/dictionary and the marker ID, download it as PDF or SVG. Use | ||||
| the actual size of the marker (100% scale) for printing, so the black border and marker geometry are not resized. Also | ||||
| it is recommended to print with high contrast and avoid compression artifacts. | ||||
|
|
||||
| If possible, print on a rigid and flat sheet of paper to reduce warping, since fiducial detection is sensitive to | ||||
| distortion. As another solution, you can fix the printed marker on a rigid surface, such as a piece of wood or | ||||
| cardboard. | ||||
|
|
||||
| After printing, measure the marker’s outer dimensions and compare them with the intended size from the generator. This | ||||
| matters because calibration will be wrong if the marker size in the software does not match the physical print. | ||||
|
|
||||
| ## Using the STag detector | ||||
|
|
||||
| Launch AICA Studio with a configuration that contains the `core-vision` package and create a new application. | ||||
|
|
||||
| 1. Remove the hardware interface that is included in new applications by default. | ||||
| 2. From the `Scene` menu, use the `Add Component` tab and look for the **Camera Streamer** and **STag Detector** | ||||
| components, either by searching or by manually going under the `Core Vision Components` menu. Add both of them to the | ||||
| graph. | ||||
| 3. Next, connect both components to the start block. Moreover, connect the outputs of the Camera Streamer to the | ||||
| relevant inputs of the STag Detector. | ||||
| 4. Enable **auto-configure** and **auto-activate** on both components. | ||||
| 5. By selecting any of the components, you can find all the available component parameters in the right panel under | ||||
| Settings. | ||||
| 6. If an intrinsic camera calibration is performed prior to this, add the file path of the camera configuration file as | ||||
| a parameter to the **Camera Streamer** component. | ||||
|
|
||||
|
MithraGhlm marked this conversation as resolved.
|
||||
| By this point, you should have something like the following: | ||||
|
|
||||
| <div class="text--center"> | ||||
| <img src={stagDetectorExample} alt="CameraStreamer configuration alongside STagDetector component" style={{ borderRadius: "8px" }}/> | ||||
| </div> | ||||
|
|
||||
| :::info | ||||
| The Camera Streamer parameters are explained in the [CameraStreamer component guide](./camera-streamer.md). | ||||
| ::: | ||||
|
|
||||
| ## STag Detector parameters | ||||
|
|
||||
| - **Rate**: The rate parameter doesn't affect the behavior of the component as the detection process occurs on reception | ||||
| of a new image. | ||||
| - **Bundle file**: The filepath to a predefined marker bundle configuration. | ||||
| - **Marker selection**: The name(s) of the marker(s) that we want to recognize. If any of these markers enters the | ||||
| camera frame, the `is_any_selected_marker_detected` predicate is set to **True**. Also if a decision needs to be made | ||||
| based on the existence of a specific STag marker in the camera frame, its name should be indicated in this parameter. | ||||
| The markers name should always be prepended with the value of `Prefix`. | ||||
| - **Marker size**: Determines the side length of a square that specifies the marker in meters. | ||||
| - **Library**: This is the ID number of the HD library utilized by STag markers. The allowed numbers are | ||||
| [11, 13, 15, 17, 19, 21, 23]. | ||||
| - **Error correction**: This parameter sets how permissive the detector is. Meaning it controls how many bit errors the | ||||
| STag detector is allowed to tolerate when decoding a marker ID. Lower values mean stricter matching, but detection | ||||
| would be less robust to blur, noise, bad lighting, or partial image degradation. Higher values mean more tolerant | ||||
| matching. The detector can still recognize a marker even if some bits are read incorrectly, so detection is more | ||||
| robust, but the risk of wrong matches increases. The lower and upper limits for this parameter are 0 and 11 | ||||
| respectively (inclusive). | ||||
| - **Prefix**: This is the prefix used for marker names. | ||||
|
|
||||
| ## STag Detector predicates | ||||
|
|
||||
| - **Is any marker detected**: This predicate will be set to **True** if any marker is detected in the camera frame, even | ||||
| though its name is not indicated in the 'Marker Selection' parameter. As you can see in the screenshot below, the | ||||
| marker name specified in the `Marker selection` parameter is stag_1, but the marker recognized in the camera frame is | ||||
| stag_0, yet `Is any marker detected` predicate is set to **True**. | ||||
|
|
||||
| <div class="text--center"> | ||||
| <img src={stagMarkerNumOne} alt="Is any marker detected at all" style={{ borderRadius: "8px" }}/> | ||||
| </div> | ||||
|
|
||||
| - **Is any selected marker detected**: If one or more marker names are indicated in the `Marker selection` parameter, | ||||
| and if any of them appears in the camera frame, this predicate with be set to **True**. If the names of none of the | ||||
| markers present in the camera frame is indicated as a parameter, this predicate will remain **False**. In the | ||||
| screenshot below the name of the marker appearing in the camera frame matches the name indicated in the | ||||
| `Marker selection` parameter. | ||||
|
|
||||
| <div class="text--center"> | ||||
| <img src={stagMarkerNumZero} alt="Is any of the selected markers detected" style={{ borderRadius: "8px" }}/> | ||||
| </div> | ||||
|
|
||||
| - **Is a marker bundle detected**: If a registered group of markers is detected by the camera, this parameter will be | ||||
| set to **True**. Otherwise it will remain **False**. | ||||
|
MithraGhlm marked this conversation as resolved.
|
||||
|
|
||||
| ## Running the application | ||||
|
|
||||
| After setting up the proper parameters for Camera Streamer and STag Detector: | ||||
|
MithraGhlm marked this conversation as resolved.
|
||||
|
|
||||
| 1. Press **Start** to start the application. | ||||
| 2. To see the live camera feed, select **Launch RViz** from the Launcher settings | ||||
| 3. In RViz, select _Add > By topic > /stag_detector/annotated_image > Image_. This adds a panel that shows the live | ||||
| image. The marker should be detected in the camera. | ||||
|
|
||||
| <div style={{ display: "flex", justifyContent: "center" }}> | ||||
| <video autoPlay loop muted playsInline style={{ maxWidth: "100%", borderRadius: "8px" }}> | ||||
| <source src={stagMarkerDetection} type="video/webm" /> | ||||
| STag marker detection video. | ||||
| </video> | ||||
| </div> | ||||
|
|
||||
|
MithraGhlm marked this conversation as resolved.
|
||||
| <br></br> | ||||
|
|
||||
| The following YAML snippet contains the full application of the STag Detector above: | ||||
|
MithraGhlm marked this conversation as resolved.
|
||||
|
|
||||
| <details> | ||||
| <summary>Example application, STag Detector</summary> | ||||
|
|
||||
| ```yaml | ||||
| schema: 2-0-6 | ||||
| dependencies: | ||||
| core: v5.1.0 | ||||
| on_start: | ||||
| load: | ||||
| - component: stag_detector | ||||
| - component: camera_streamer | ||||
| components: | ||||
| stag_detector: | ||||
| component: core_vision_components::pose_detection::STagDetector | ||||
| display_name: STag Detector | ||||
| events: | ||||
| transitions: | ||||
| on_configure: | ||||
| lifecycle: | ||||
| component: stag_detector | ||||
| transition: activate | ||||
| on_load: | ||||
| lifecycle: | ||||
| component: stag_detector | ||||
| transition: configure | ||||
| parameters: | ||||
| marker_selection: | ||||
| value: | ||||
| - stag_0 | ||||
| type: string_array | ||||
| inputs: | ||||
| image: /camera_streamer/image | ||||
| camera_info: /camera_streamer/camera_info | ||||
| camera_streamer: | ||||
| component: core_vision_components::image_streaming::CameraStreamer | ||||
| display_name: Camera Streamer | ||||
| events: | ||||
| transitions: | ||||
| on_configure: | ||||
| lifecycle: | ||||
| component: camera_streamer | ||||
| transition: activate | ||||
| on_load: | ||||
| lifecycle: | ||||
| component: camera_streamer | ||||
| transition: configure | ||||
| parameters: | ||||
| camera_info_path: | ||||
| value: /data/ost.yaml | ||||
| type: string | ||||
| undistorted_image_cropping: | ||||
| value: false | ||||
| type: bool | ||||
| outputs: | ||||
| image: /camera_streamer/image | ||||
| camera_info: /camera_streamer/camera_info | ||||
| graph: | ||||
| positions: | ||||
| on_start: | ||||
| x: -60 | ||||
| y: 0 | ||||
| stop: | ||||
| x: -60 | ||||
| y: 100 | ||||
| components: | ||||
| stag_detector: | ||||
| x: 820 | ||||
| y: 0 | ||||
| camera_streamer: | ||||
| x: 200 | ||||
| y: 60 | ||||
| edges: | ||||
| on_start_on_start_camera_streamer_camera_streamer: | ||||
| path: | ||||
| - x: 100 | ||||
| y: 60 | ||||
| - x: 100 | ||||
| y: 120 | ||||
| camera_streamer_image_stag_detector_image: | ||||
| path: | ||||
| - x: 700 | ||||
| y: 280 | ||||
| - x: 700 | ||||
| y: 260 | ||||
| camera_streamer_camera_info_stag_detector_camera_info: | ||||
| path: | ||||
| - x: 660 | ||||
| y: 360 | ||||
| - x: 660 | ||||
| y: 300 | ||||
| ``` | ||||
|
|
||||
| </details> | ||||
|
|
||||
|
|
||||
|
|
||||
|
Comment on lines
+238
to
+240
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,5 @@ | ||
| --- | ||
| sidebar_position: 14 | ||
| sidebar_position: 16 | ||
| title: Using YOLO to track objects | ||
| --- | ||
|
|
||
|
|
||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.