Skip to content

docs: fiducial markers guide#482

Open
MithraGhlm wants to merge 57 commits into
mainfrom
docs/hand-eye-calibration
Open

docs: fiducial markers guide#482
MithraGhlm wants to merge 57 commits into
mainfrom
docs/hand-eye-calibration

Conversation

@MithraGhlm

Copy link
Copy Markdown
Contributor

Description

Initial draft of documentation for camera frame calibration guide.
This PR closes the camera frame calibration guide #479

This PR solves the issue by adding two stand-alone guides to the documentation.
The guide for intrinsic camera calibration already exists.
One guide is about the configuration and the process of recognizing STag marker (WIP) and a second one would be dedicated to calibrating the robot.

Review guidelines

Estimated Time of Review: 10 minutes

Feedback Needed

  • Structure okay?
  • Level of detail appropriate?

@MithraGhlm MithraGhlm requested a review from domire8 April 21, 2026 11:26

@SprGrf SprGrf left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! First quick review:

Comment thread docs/core/examples/guides/camera-streamer.md Outdated
Comment thread docs/core/examples/guides/stag-marker-detection.md Outdated
Comment thread docs/core/examples/guides/stag-marker-detection.md Outdated
Comment thread docs/core/examples/guides/stag-marker-detection.md Outdated
Comment thread docs/core/examples/guides/stag-marker-detection.md Outdated
Comment thread docs/core/examples/guides/stag-marker-detection.md Outdated
Comment thread docs/core/examples/guides/stag-marker-detection.md Outdated
Comment thread docs/core/examples/guides/stag-marker-detection.md Outdated
Comment thread docs/core/examples/guides/stag-marker-detection.md Outdated
@MithraGhlm MithraGhlm force-pushed the docs/hand-eye-calibration branch from bec2ef4 to 0613b51 Compare April 27, 2026 11:11
@MithraGhlm

Copy link
Copy Markdown
Contributor Author

@SprGrf Thanks

@MithraGhlm MithraGhlm changed the title docs: Hand-Eye calibration guide #479 docs: Marker detection guide #479 Apr 27, 2026
@MithraGhlm MithraGhlm changed the title docs: Marker detection guide #479 docs: Hand-Eye calibration guide #479 Apr 27, 2026
@MithraGhlm

MithraGhlm commented Apr 28, 2026

Copy link
Copy Markdown
Contributor Author

Should there be a stand alone guide to introduce the Robot Camera Calibration component?
Or is it better to have it in the same docs page?

@SprGrf SprGrf left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! The backbone is here, some first comments I had while reading:

Comment thread docs/core/examples/guides/hand-eye-calibration.md Outdated
Comment thread docs/core/examples/guides/hand-eye-calibration.md Outdated
Comment thread docs/core/examples/guides/hand-eye-calibration.md Outdated
Comment thread docs/core/examples/guides/hand-eye-calibration.md Outdated
Comment thread docs/core/examples/guides/hand-eye-calibration.md Outdated
Comment thread docs/core/examples/guides/hand-eye-calibration.md Outdated
Comment thread docs/core/examples/guides/hand-eye-calibration.md Outdated
MithraGhlm and others added 3 commits April 29, 2026 11:49
Co-authored-by: Spyros Garyfallidis <spyros@aica.tech>
Co-authored-by: Spyros Garyfallidis <spyros@aica.tech>
Co-authored-by: Spyros Garyfallidis <spyros@aica.tech>
Comment thread docs/core/examples/guides/marker-detection.md Outdated
Comment thread docs/core/examples/guides/hand-eye-calibration.md Outdated
Comment thread docs/core/examples/guides/camera-streamer.md Outdated
Comment thread docs/core/examples/guides/marker-detection.md Outdated
Comment thread docs/core/examples/guides/marker-detection.md Outdated
Comment thread docs/core/examples/guides/fiducial-markers.md Outdated
Comment thread docs/core/examples/guides/fiducial-markers.md Outdated
Comment thread docs/core/examples/guides/fiducial-markers.md Outdated
Comment thread docs/core/examples/guides/hand-eye-calibration.md Outdated
Comment thread docs/core/examples/guides/hand-eye-calibration.md Outdated
Co-authored-by: Dominic Reber <71256590+domire8@users.noreply.github.com>

@MithraGhlm MithraGhlm left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Upper and Lower limits for Error_correction of STag Detector

Comment thread docs/core/examples/guides/fiducial-markers.md Outdated
Comment thread docs/core/examples/guides/fiducial-markers.md Outdated
Comment thread docs/core/examples/guides/fiducial-markers.md Outdated
Comment thread docs/core/examples/guides/fiducial-markers.md Outdated
Comment thread docs/core/examples/guides/fiducial-markers.md Outdated
Comment thread docs/core/examples/guides/fiducial-markers.md
Comment thread docs/core/examples/guides/fiducial-markers.md Outdated
- **Marker selection**: The name(s) of the marker(s) that we intend to be recognized. If any of these markers enters the camera frame, the `is_any_selected_marker_detected` predicate is set to **True**. This name should always be prepended with the value of `Prefix`.
- **Marker size**: Determins 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**:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

0 ≤ errorCorrection ≤ (libraryHD - 1) / 2 ah that is a shame that the error bounds depend on the library selection.. This is something we can't validate easily in Studio directly.

You could then open a PR on the relevant description files to set the minimum to 0 and also to set the maximum to (23 - 1) / 2 = 11. You could even improve the component implementation such that a detail ROS log is spit out when the error correction is too high for the given library.

MithraGhlm and others added 2 commits May 18, 2026 10:44
Co-authored-by: Dominic Reber <71256590+domire8@users.noreply.github.com>

@domire8 domire8 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, this is really coming together nicely. As we enter the final stages, could you now please try to format the file fiducial-markers.md?

Comment thread docs/core/examples/guides/fiducial-markers.md
@MithraGhlm

Copy link
Copy Markdown
Contributor Author

Nice, this is really coming together nicely. As we enter the final stages, could you now please try to format the file fiducial-markers.md?

I am using Prettier. I also changed the print width to 120. Isn't it working as intended?

@domire8

domire8 commented May 28, 2026

Copy link
Copy Markdown
Member

I am using Prettier. I also changed the print width to 120. Isn't it working as intended?

Well no, most lines are still way longer than 120 characters

@domire8 domire8 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a few last nitpicks for the fiducial markers guide.

In order to proceed here, please

  1. revert the changes from the ur-hardware-interface.md file, you can do that in #485
  2. Remove the hand-eye-calibration guide from this PR. We'll make a separate PR for it.
  3. Format the fiducial-markers.md file such that no lines are longer than 120 characters

Comment thread docs/core/examples/guides/fiducial-markers.md Outdated
Comment thread docs/core/examples/guides/fiducial-markers.md Outdated
Comment thread docs/core/examples/guides/fiducial-markers.md Outdated
Comment thread docs/core/examples/guides/fiducial-markers.md Outdated
@MithraGhlm

MithraGhlm commented Jun 10, 2026

Copy link
Copy Markdown
Contributor Author

I am using Prettier. I also changed the print width to 120. Isn't it working as intended?

Well no, most lines are still way longer than 120 characters

I added "prettier.proseWrap": "always",
seems like without this, Prettier often preserves existing line breaks and may ignore printWidth.

@MithraGhlm

Copy link
Copy Markdown
Contributor Author

In order to proceed here, please

  1. revert the changes from the ur-hardware-interface.md file, you can do that in Docs/style: Reformatting the Docs #485

Why should they be reverted?
The changes are not big, just some tiny modifications, such as Bolding of some words, made to make the formatting look more in sync across different pages. Does it cause any problem?

@domire8

domire8 commented Jun 10, 2026

Copy link
Copy Markdown
Member

The changes are not big, just some tiny modifications, such as Bolding of some words, made to make the formatting look more in sync across different pages. Does it cause any problem?

Unless we have actual guidelines how we want to improve style and formatting, there is no need increasing the scope of this PR to files that are unrelated to hand-eye calibration. It's good practice to keep scopes of PRs narrow.

I'm not against the changes alltogether, but this is not the place to do it. A reformatting PR would be more appropriate

@MithraGhlm MithraGhlm changed the title docs: Hand-Eye calibration guide #479 docs: Fiducial Markers #479 Jun 10, 2026
@MithraGhlm MithraGhlm changed the title docs: Fiducial Markers #479 docs: Hand-Eye calibration guide #479 Jun 10, 2026
@MithraGhlm

Copy link
Copy Markdown
Contributor Author

In order to proceed here, please

  1. Remove the hand-eye-calibration guide from this PR. We'll make a separate PR for it.

Before I change anything there, do you want the existing review comments be preserved or is it acceptable to move it to a new branch and create a fresh PR?

This is what I want to do: (Since the name of this PR is already HE calibration, I'll move the Fiducial Markers to a new PR)

  1. Make a new branch for Fiducial Markers
  2. Delete the fiducial-markers.md file and all media related to it

So the existing PR would be only for HE calibration.

Then I'll open a new PR for the Fiducial Markers and rebase on main.

Is this workflow accepted?

@MithraGhlm

Copy link
Copy Markdown
Contributor Author

Unless we have actual guidelines how we want to improve style and formatting, there is no need increasing the scope of this PR to files that are unrelated to hand-eye calibration. It's good practice to keep scopes of PRs narrow.

I'm not against the changes alltogether, but this is not the place to do it. A reformatting PR would be more appropriate

As you correctly commented once on the #485 (This PR contains all commits from #482, could you untangle this?), I untangled #482 from #485.
The initial problem was due to me forgetting to switch to main before making the new branch. But then I rebased it on the main and the problem was resolved. Now #482 and #485 are 2 different PRs.

So I don't understand what you mean by: increasing the scope of this PR to files that are unrelated to hand-eye calibration. It's good practice to keep scopes of PRs narrow.

Since we don't have any specific guidelines yet, how about just merging the small changes and closing #485, instead of reverting it?

@MithraGhlm MithraGhlm changed the title docs: Hand-Eye calibration guide #479 docs: fiducial markers guide #479 Jun 10, 2026
@MithraGhlm MithraGhlm changed the title docs: fiducial markers guide #479 docs/ fiducial markers guide #479 Jun 10, 2026
@domire8

domire8 commented Jun 11, 2026

Copy link
Copy Markdown
Member

All 4 of my previous review comments are still unresolved

@domire8 domire8 changed the title docs/ fiducial markers guide #479 docs: fiducial markers guide Jun 11, 2026

@domire8 domire8 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just two last formatting nitpicks. Otherwise all good!

Comment on lines +102 to +122
- **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**.

@domire8 domire8 Jun 12, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- **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**.
- **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**.

purely a formatting change here. By adding the indents before the image <div> elements, the images will have the same width as the enumeration.

Image

@MithraGhlm MithraGhlm Jun 12, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So the image being aligned with the text is the preferred format over the image being aligned with the bullet points?
Great. Got it :)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should other images be also shifted a tab to the right, or it only applies to those who are next to the bullet points?

@domire8 domire8 Jun 15, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the ones in enumerations only is better. The main point is that the images should look like they are part of the enumeration, not that they interrupt the alignment of the enumerations.

Comment thread docs/core/examples/guides/fiducial-markers.md

@domire8 domire8 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alright looks good now! Good work with this 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants