Skip to content
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

How to load Apriltags into the simulation? #38

Open
altyi opened this issue Sep 19, 2023 · 4 comments
Open

How to load Apriltags into the simulation? #38

altyi opened this issue Sep 19, 2023 · 4 comments

Comments

@altyi
Copy link

altyi commented Sep 19, 2023

Hi, I want to use Apriltags in the simulation but are not sure what are some ways for loading them in? I have tried loading a static object with a custom looks using the Apriltag image as a texture. The Apriltag is loaded but are repeated over the entire surface.

@devinhunsberger
Copy link

Were you able to figure this out? I'm looking to do something similar.

@altyi
Copy link
Author

altyi commented Jun 5, 2024

I was able to add in the apriltag as a texture for graphical materials (looks):

In the looks scenario xacro file, I added tags in one by one:
<look name="apriltag0" gray="0.1" roughness="0.1" texture="Apriltag File Location"/>

Then, I added them into my world scenario file, an exmaple:
<static name="apriltag0" type="box"> <dimensions xyz="0.20 0.20 0.0001"/> <material name="Steel"/> <look name="apriltag0" uv_mode="1"/> <world_transform xyz="3.25 -1.0 0.5" rpy="0.0 1.5708 3.1415"/> </static>

However, I have only tried this method for a one sided Apriltag, since this method applies the Apriltag as texture to all surface of the object, it might not work if you need something like a cube.

@devinhunsberger
Copy link

devinhunsberger commented Jun 5, 2024

I was able to add in the apriltag as a texture for graphical materials (looks):

In the looks scenario xacro file, I added tags in one by one: <look name="apriltag0" gray="0.1" roughness="0.1" texture="Apriltag File Location"/>

Then, I added them into my world scenario file, an exmaple: <static name="apriltag0" type="box"> <dimensions xyz="0.20 0.20 0.0001"/> <material name="Steel"/> <look name="apriltag0" uv_mode="1"/> <world_transform xyz="3.25 -1.0 0.5" rpy="0.0 1.5708 3.1415"/> </static>

However, I have only tried this method for a one sided Apriltag, since this method applies the Apriltag as texture to all surface of the object, it might not work if you need something like a cube.

Yeah, I have been having issues attempting to overlay some textures I made in blender for some of my team's 3D models (a red buoy for instance). I can only get it work with a box though and I would like to replicate my actual environment as much as possible. And having the ability to have separate colors on the objects is pretty important for us. I could use multiple 3d files and just have them together but that seems like alot of extra work that shouldn't exist.

Example Code:

Env Setup:

<static name="gate" type="model">
  <physical>
    <mesh filename="$(find tardigrade)/data/objects/Gate.obj" scale="0.001"/>
    <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
  </physical>
  <visual>
    <mesh filename="$(find tardigrade)/data/objects/Gate.obj" scale="0.001"/>
    <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
  </visual>
  <material name="Neutral"/>"
  <look name="gate" uv_mode="1"/>
  <world_transform xyz="0.0 0.0 2.6" rpy="0.0 0.0 0.0"/>
</static>

Looks Metadata:

 <look name="gate" gray="0.1" roughness="0.1" texture="GateTexture.jpg"/>

@devinhunsberger
Copy link

devinhunsberger commented Jun 6, 2024

To answer your question on AprilTags, you can set the different uv_modes and the scaling, depending on if you have a singular Apriltag or a whole rectangular prism texture image.

Plane definition has one special functionality. It is possible to scale the automatically generated texture
coordinates, to tile the textures associated with the look. In the XML syntax the <look> tag has to be augmented to
include attribute uv_scale="#.#" and in the C++ code the scale can be passed as the last argument in the object
constructor.
Box definition has one special functionality. It is possible to choose from 3 automatically generated texture
coordinate schemes: scheme 0 (default) assumes that the texture is in a cubemap format and applies it to the box faces
accordingly, scheme 1 applies the whole texture to each face of the box, and scheme 2 tiles the whole texture along
each of the box faces, based on face dimensions. In the XML syntax the <look> tag has to be augmented to include
attribute uv_mode="#" and in the C++ code the mode can be passed as the last argument in the object constructor.

So depending on your AprilTag image you may need to select a different UV mode or scale to your box "looks".

After taking a more in-depth look at the documentation it seems to be the case that you cannot add textures to any shape more complex than the box.

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

No branches or pull requests

2 participants