Closed kinematic chain in ISAAC GYM

Hi all,

I am trying to import my custom robot which has a closed kinematic chain. The problematic part in the urdf file is:

   ...

  <joint name="joint1" type="revolute">
    <origin rpy="0 0 0" xyz="0 0 0.92"/>
    <parent link="link0"/>
    <child  link="link1"/>
    <axis xyz="0 0 1"/>
    <limit effort="87" lower="-3.14" upper="3.14" velocity="2.1750"/>
  </joint>
  <link name="link2">
    <visual>
      <geometry>
        <mesh filename="package://my_description/meshes/visual/link1.dae"/>
      </geometry>
    </visual>
    <collision>
      <geometry>
        <mesh filename="package://my_description/meshes/visual/link1.dae"/>
      </geometry>
    </collision>
	<inertial>      
		<origin rpy="0 0 0" xyz="0 0 0"/>      
		<mass value="250"/>      
		<inertia ixx="1" ixy="0" ixz="0" iyy="1" iyz="0" izz="1"/>    
	</inertial> 
  </link>
  <joint name="joint2" type="prismatic">
    <origin rpy="0 -0.0498132 0" xyz="3.22 0 18.58"/>
    <parent link="link1"/>
    <child link="link2"/>
    <axis xyz="1 0 0"/>
    <limit effort="87" lower="0" upper="10" velocity="2.1750"/>
  </joint>
  <link name="link3">
    <visual>
      <geometry>
        <mesh filename="package://my_description/meshes/visual/link2.dae"/>
      </geometry>
    </visual>
    <collision>
      <geometry>
        <mesh filename="package://my_description/meshes/visual/link2.dae"/>
      </geometry>
    </collision>
	<inertial>      
		<origin rpy="0 0 0" xyz="0 0 0"/>      
		<mass value="50"/>      
		<inertia ixx="1" ixy="0" ixz="0" iyy="1" iyz="0" izz="1"/>    
	</inertial> 
  </link>

  <joint name="joint3Psi" type="continuous" >
    <parent link="link2" />
    <child link="link3_theta" />
    <axis xyz="0 0 1" />
    <dynamics damping="0.005" />
  </joint>

  <link name="link3_theta" />

  <joint name="joint3Theta" type="continuous" >
    <parent link="link3_theta" />
    <child link="link3_alpha" />
    <axis xyz="0 1 0" />
    <dynamics damping="0.005" />
  </joint>

  <link name="link3_alpha" />

  <joint name="joint3Alpha" type="continuous" >
    <parent link="link3_alpha" />
    <child link="link3_psi" />
    <axis xyz="1 0 0" />
    <dynamics damping="0.005" />
  </joint>

  <link name="link3_psi" />

  <joint name="joint3" type="prismatic" >
    <origin xyz="0.08 0 -3" />
    <parent link="link3_psi" />
    <child link="link3" />
    <axis xyz="0 0 -1"/>
    <limit effort="87" lower="0" upper="10" velocity="2.1750"/>
  </joint>


  <joint name="joint3_2Psi" type="continuous" >
    <parent link="link2" />
    <child link="link3_2_theta" />
    <axis xyz="0 0 1" />
    <dynamics damping="0.005" />
  </joint>

  <link name="link3_2_theta" />

  <joint name="joint3_2Theta" type="continuous" >
    <parent link="link3_2_theta" />
    <child link="link3_2_alpha" />
    <axis xyz="0 1 0" />
    <dynamics damping="0.005" />
  </joint>

  <link name="link3_2_alpha" />

  <joint name="joint3_2Alpha" type="continuous" >
    <parent link="link3_2_alpha" />
    <child link="link3_2_psi" />
    <axis xyz="1 0 0" />
    <dynamics damping="0.005" />
  </joint>

  <link name="link3_2_psi" />

  <joint name="joint3_2" type="fixed" >
    <origin xyz="-0.08 0 -3" />
    <parent link="link3_2_psi" />
    <child link="link3" />
    <axis xyz="0 0 -1"/>
    <limit effort="87" lower="0" upper="10" velocity="2.1750"/>
  </joint>

Since the error occurs in the joint3_2 part, I assume that ISAAC GYM does not support this closed kinematic chain… Could you guys confirm this and also suggest any walk around solution?

Best

Hi,

To my knowledge URDF does not support closed chain structures as it has a tree-based architecture.
Maybe you can resolve this by adding an external constraint forces in the simulator to keep links attached