What is the correct way to describe a 9dof robot cell in urdf/srdf?

asked 2021-07-26 02:37:06 -0500

The_Vaasty gravatar image

I'm working on a 9dof robot cell, which consists of a 6dof manipulator (Yaskawa Motoman GP88) which is hung upside down on linear rails. They provide additional movement in Y, Z axes. The last movement is a carousel under the robot, on which the workpiece will be placed. I am planning for all 9 dof to get the desired end effector trajectory. I've been provided with urdf/srdf files created by a colleague but to me, the description seems incorrect. He used two end-effectors, one in the middle of the carousel and one on the flange of the robot. Beacuse of some issue with IK in MoveIt, he was forced to describe the cell with the base link being the carousel end-effector, since, apparently, MoveIt can't solve IK of a robot which has two chains (If the robot was described with the base link being the real base of the cell). I am willing to accept this, but I still think his description is not correct, mainly regarding the end-effectors. Whenever I launch the cell, I get this warning at least once:

Could not identify parent group for end-effector 'tool1'

He has created two groups. One consists of all 9 joints and the second one only of the joints of the robot. tool1 already has a group but as it is the highest group, I don't know what should be it's parent group.

Here are all the files: URDF:

<?xml version="1.0" ?>
<robot name="cell" xmlns:xacro="http://www.ros.org/wiki/xacro">

    <!-- BGN - Include -->
    <xacro:include filename="$(find cell_description)/urdf/links_joints.urdf.xacro"/>

    <!-- END - Include -->
    <!-- BGN - Cell description -->
    <!-- Table part -->
    <link name="tool1"/>

    <joint name="tool1_tank" type="fixed">
        <origin xyz="0 0 0.001" rpy="0 0 0"/>
        <parent link="tool1"/>
        <child link="tank"/>
    </joint>


    <xacro:m_link_mesh_tank name="tank"
                 origin_rpy="0 0 0" origin_xyz="0 0 0"
                 mass="157.633"
                 ixx="13.235" ixy="0" ixz="0"
                 iyy="13.235" iyz="0"
                 izz="9.655"
                 meshfile="file://$(find cell_description)/meshes/tanks/cube_2m.stl"
                 meshscale="0.01 0.01 0.01"/>

    <joint name="tool1_table" type="fixed">
        <origin xyz="0 0 -0.02" rpy="0 0 0"/>
        <parent link="tool1"/>
        <child link="table"/>
    </joint>

    <xacro:m_link_box_hoki name="table"
                     origin_rpy="0 0 0" origin_xyz="0 0 0.01"
                     mass="1024"
                     ixx="170.667" ixy="0" ixz="0"
                     iyy="170.667" iyz="0"
                     izz="170.667"
                     size="2.4 2.4 0.02"/>

    <xacro:m_joint name="Joint_9" type="revolute"
             axis_xyz="0 0 1"
             origin_rpy="0 0 0" origin_xyz="0 0 0"
             parent="table" child="table_leg"
             limit_e="1000" limit_l="${radians(-185)}" limit_u="${radians(185)}" limit_v="0.25"/>

    <xacro:m_link_cylinder name="table_leg"
                     origin_rpy="0 0 0" origin_xyz="0 0 -0.15"
                     mass="57.906"
                     ixx="12.679" ixy="0" ixz="0"
                     iyy="12.679" iyz="0"
                     izz="0.651"
                     radius="0.265" length ...
(more)
edit retag flag offensive close merge delete

Comments

Just a quick comment: the problem is not MoveIt per se, it's the IK solver used which cannot solve for non-chain groups of joints.

MoveIt doesn't care. As long as there is something which can provide FK+IK, it'll use it.

Also (but just because I'm curious): why the custom GP88 urdf/xacro?

gvdhoorn gravatar image gvdhoorn  ( 2021-07-26 05:07:27 -0500 )edit

Honestly, I don't know. I received the project from a fellow student, it was his diploma thesis. I was thrown in to the thick of things, never have used ROS before. I might redo this later, when I'm feeling more comfortable with ROS.

The_Vaasty gravatar image The_Vaasty  ( 2021-07-26 06:06:28 -0500 )edit