Robotics StackExchange | Archived questions

URDF, Attaching two joints to one link for a gripper

HI everyone im trying to make my own gripper , but i had a problem , how can i can attach two joints to the same link? for example LINK "A" attach with link c(green color) and "A" attached with B , im used mimic tag but it dosnt work , its any one can help me please? here is my urdf code AND an image of my gripper image description I'm searched about "virtual links" and "dummy" but i cant find anything, well thanks for reading this post =) hope you can help me!

ROS VERSION : KINETIC

<?xml version="1.0"?>
<robot name="gripper">
    <link name="world"/>
                            <!-- BASE -->
    <link name="base_link">
        <visual>
            <geometry>
                <mesh filename="package://odam_arm/meshes/GRIPPER_DAE/base.dae" scale="1 1 1"/>
            </geometry>
        </visual>
        <material name="blue">
            <color rgba="${0/255} ${0/255} ${255/255} 1.0"/>
        </material>
        <origin rpy="0.0 0.0 0.0" xyz="0.0 0.0 0.0"/>
    </link>


    <joint name="fixed_joint" type="fixed">
        <parent link="world"/>
        <child link="base_link"/>
    </joint>

    <!-- LEFT PART BASE ACTUADOR  -->

    <link name="actBody_Link">
        <visual>
            <geometry>
                <mesh filename="package://odam_arm/meshes/GRIPPER_DAE/ActuadorBody.dae" scale="1 1 1"/>
            </geometry>
        </visual>
        <material name="blue">
            <color rgba="${0/255} ${0/255} ${255/255} 1.0"/>
        </material>
        <origin xyz=" 0 0 0.0" rpy="0.0 0.0 0.0"/>>
    </link>


    <joint name="actBody_Joint" type="revolute">
        <parent link="base_link"/>
        <child link="actBody_Link"/>
        <origin xyz=" 0.044661  -0.022722  0.016772   " rpy="0.0 0.0 0.0"/>
        <axis xyz="0 0 1 "/>
        <limit effort="200" lower="-0.02" upper="0.13" velocity="1.0"/>

    </joint>

    <!-- LEFT PART SHAFT ACTUADOR OR C PART -->
    <link name="actShaft_Link">
        <visual>
            <geometry>
                <mesh filename="package://odam_arm/meshes/GRIPPER_DAE/ActuadorShaft.dae" scale="1 1 1"/>
            </geometry>
        </visual>
        <material name="blue">
            <color rgba="${0/255} ${0/255} ${255/255} 1.0"/>
        </material>
        <origin xyz="0 0 0.0" rpy="0.0 0.0 0.0"/>>
    </link>


    <joint name="actShaft_Joint" type="fixed">
        <parent link="actBody_Link"/>
        <child link="actShaft_Link"/>
        <origin xyz="0.029065  -0.091559  0.004383   " rpy="0 0 0.3"/>
        <axis xyz="0 1 0 "/>
        <limit effort="200" lower="0.0" upper="0.05" velocity="1.0"/>
        <!-- <mimic joint="part1_Joint" multiplier="1" offset="0"/> -->
    </joint>
        <!-- PART5  OR A PART-->
    <link name="part5_Link">
        <visual>
            <geometry>
                <mesh filename="package://odam_arm/meshes/GRIPPER_DAE/parte5.dae" scale="1 1 1"/>
            </geometry>
        </visual>
        <material name="blue">
            <color rgba="${0/255} ${0/255} ${255/255} 1.0"/>
        </material>
        <origin xyz="0 0 0.0" rpy="0.0 0.0 0.0"/>>
    </link>


    <joint name="part5_Joint" type="revolute">
        <parent link="base_link"/>
        <child link="part5_Link"/>
        <origin xyz="0.043003 -0.141189 0.00803  " rpy="0 0 0.5"/>
        <axis xyz="0 0 1 "/>
        <limit effort="200" lower="-0.56" upper="0.75" velocity="1.0"/>
    </joint>




     <!-- PART 1  OR D PART-->
 <link name="part1_Link">
        <visual>
            <geometry>
                <mesh filename="package://odam_arm/meshes/GRIPPER_DAE/parte1.dae" scale="1 1 1"/>
            </geometry>
        </visual>
        <material name="blue">
            <color rgba="${0/255} ${0/255} ${255/255} 1.0"/>
        </material>
        <origin xyz="0 0 0.0" rpy="0.0 0.0 0.0"/>>
    </link>


    <joint name="part1_Joint" type="revolute">
        <parent link="base_link"/>
        <child link="part1_Link"/>
        <origin xyz="0.109902  -0.074139 0.007389 " rpy="0 0 0.0"/>
        <axis xyz="0 0 1 "/>
        <limit effort="200" lower="0.43" upper="1" velocity="1.0"/>
        <mimic joint="part5_Joint" multiplier="1" offset="0.0005"/> 
    </joint>




     <!-- PART 2 (finger)   OR B PART-->
 <link name="part2_Link">
        <visual>
            <geometry>
                <mesh filename="package://odam_arm/meshes/GRIPPER_DAE/parte2.dae" scale="1 1 1"/>
            </geometry>
        </visual>
        <material name="blue">
            <color rgba="${0/255} ${0/255} ${255/255} 1.0"/>
        </material>
        <origin xyz="0 0 0.0" rpy="0.0 0.0 0.0"/>>
    </link>


    <joint name="part2_Joint" type="fixed">
        <parent link="part1_Link"/>
        <child link="part2_Link"/>
        <origin xyz="0.000606 -0.097249 0.027551  " rpy="0 0 -0.5"/>
        <axis xyz="0 0 1 "/>

        <!-- <limit effort="200" lower="-0.05" upper="0" velocity="1.0"/> -->
    </joint>




</robot>

Asked by Aaron MV on 2020-01-09 14:57:06 UTC

Comments

Answers

The URDF format does not support closed loops of links so cannot represent a four bar linkage such as your gripper.

There is a solution though. URDF models can describe mimic joints where the angle of one joint is defined to have a linear relationship to the angle of another joint. In your case one of the four revolute joints on each side of your gripper would be a normal joint, two others would be mimic joints, and the final joint wouldn't need adding at all. This is not an ideal solution and only works for parallel four bar linkages, but it will work in your case.

Here's an example of this being used in a URDF model.

Asked by PeteBlackerThe3rd on 2020-01-09 17:33:08 UTC

Comments

Thank's for your fast response , i will try it!

Asked by Aaron MV on 2020-01-10 13:41:35 UTC