mujoco-py icon indicating copy to clipboard operation
mujoco-py copied to clipboard

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

Open bikcrum opened this issue 11 months ago • 0 comments

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

bikcrum avatar Mar 07 '24 05:03 bikcrum