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

Cannot change site position programmatically when pos is set to zero in XML #793

Open
bikcrum opened this issue Mar 7, 2024 · 0 comments

Comments

@bikcrum
Copy link

bikcrum commented Mar 7, 2024

Describe the bug
I am specifying a <site> position in the XML file to zero in all x y z and when I try to change the site position programmatically the value doesn't change and is not reflected in the viewer. However, having a non-zero value for a position in XML allows changing it programmatically and is reflected in the viewer.

To Reproduce

  1. Create a Mujoco XML file. Download a file from the example here (https://github.com/google-deepmind/mujoco/blob/main/doc/_static/pendulum.xml) and add a site.
<mujoco model="energy conserving pendulum">
  <option integrator="RK4">
    <flag constraint="disable" energy="enable"/>
  </option>

  <worldbody>
    <light pos="0 0 2"/>
    <geom pos="0 0 -.5" type="plane" size="1 1 .01"/>
    <body pos="0 0 0">
      
<!--      # Add the site here-->
      <site name='my_site' size='0.05' pos='0 0 0' rgba='0.0 0.5 0.5 1.0'/>
      
      <joint type="hinge" axis="0 1 0"/>
      <geom type="cylinder" size="0.02" fromto="0 -.02 0 0 .02 0"/>
      <geom type="capsule" size="0.02" fromto="0 0 0 .1 0 0"/>
      <body pos="0.1 0 0">
        <joint type="slide" axis="1 0 0" stiffness="200"/>
        <geom type="capsule" size="0.015" fromto="-.1 0 0 .1 0 0"/>
        <body pos=".1 0 0">
          <joint type="ball"/>
          <geom type="box" size=".02" fromto="0 0 0 0 .1 0"/>
          <body pos="0 .1 0">
            <joint axis="1 0 0"/>
            <geom type="capsule" size="0.02" fromto="0 0 0 0 .1 0"/>
          </body>
        </body>
      </body>
    </body>
  </worldbody>
</mujoco>
  1. Use following function to set and get the position of site
import mujoco as mj

model = mj.MjModel.from_xml_path(str("pendulum.xml"))
data = mj.MjData(model)

model.site('my_site').pos[:2] = [0.5, 0.5]

mj.mj_forward(model, data)

print(data.site('my_site').xpos)

Expected behavior
The result expected here is [0.5 0.5 0.]. However, the result comes to be [0. 0. 0.].

Workaround
The current solution is to have a non-zero position in the XML. So,

Change <site name='my_site' size='0.05' pos='0 0 0' rgba='0.0 0.5 0.5 1.0'/>
to
<site name='my_site' size='0.05' pos='0.1 0 0' rgba='0.0 0.5 0.5 1.0'/>

Desktop

  • OS: macOS 14.1.2
  • Python Version 3.10.11
  • Mujoco Version 3.1.2
  • mujoco-py version 3.1.2
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

1 participant