Sequence of two revolute joints allows link to "bounce" linearly

asked 2020-04-04 03:02:30 -0500

KaelinL gravatar image

I am using the (rather simple) SDF I have included at the bottom of this post. When I load it into Gazebo 9.0, the "base_turret" link bounces vertically immediately on load. My (apparently flawed) understanding was that rotational joints shouldn't allow movement which is not rotation around their axis, and thus my link should be able to only rotate, and should do so along two axes (pitch and yaw). What's going on here? What am I missing about joint behavior?

image description

<sdf version='1.6'>
  <model name='demo'>
    <link name='base_center'>
      <pose frame=''>0 0 0 0 -0 0</pose>
      <inertial>
        <pose frame=''>0 0 0.2 0 -0 0</pose>
        <mass>15</mass>
        <inertia>
          <ixx>100</ixx>
          <ixy>0</ixy>
          <ixz>0</ixz>
          <iyy>100</iyy>
          <iyz>0</iyz>
          <izz>100</izz>
        </inertia>
      </inertial>
      <collision name='base_center_collision'>
        <pose frame=''>0 0 0 0 -0 0</pose>
        <geometry>
          <box>
            <size>0.5 0.5 0.1</size>
          </box>
        </geometry>
      </collision>
      <visual name='base_center_visual'>
        <pose frame=''>0 0 0 0 -0 0</pose>
        <geometry>
          <box>
            <size>0.5 0.5 0.1</size>
          </box>
        </geometry>
      </visual>
    </link>
    <link name='base_turret_yaw'>
      <pose frame=''>0 0 0 0 -0 0</pose>
      <inertial>
        <pose frame=''>0 0 0 0 -0 0</pose>
        <mass>1e-05</mass>
        <inertia>
          <ixx>0</ixx>
          <ixy>0</ixy>
          <ixz>0</ixz>
          <iyy>0</iyy>
          <iyz>0</iyz>
          <izz>0</izz>
        </inertia>
      </inertial>
    </link>
    <joint name='turret_yaw_joint' type='revolute'>
      <child>base_turret_yaw</child>
      <parent>base_center</parent>
      <axis>
        <xyz>0 0 1</xyz>
      </axis>
    </joint>
    <link name='base_turret'>
      <pose frame=''>0 0 0.5 0 -0 0</pose>
      <inertial>
        <pose frame=''>0.1 0 0.05 0 -0 0</pose>
        <mass>5</mass>
        <inertia>
          <ixx>100</ixx>
          <ixy>0</ixy>
          <ixz>0</ixz>
          <iyy>100</iyy>
          <iyz>0</iyz>
          <izz>100</izz>
        </inertia>
      </inertial>
      <visual name='base_turret_visual'>
        <pose frame=''>0 0 0 0 -0 0</pose>
        <geometry>
          <box>
            <size>0.1 0.02 0.02</size>
          </box>
        </geometry>
      </visual>
    </link>
    <joint name='turret_pitch_joint' type='revolute'>
      <child>base_turret</child>
      <parent>base_turret_yaw</parent>
      <axis>
        <xyz>0 1 0</xyz>
      </axis>
    </joint>
  </model>
</sdf>
edit retag flag offensive close merge delete