Robotics StackExchange | Archived questions

Cannot generate IKFast closed solutions for regular 6DOF Arm

Hello everybody!

I'm trying to generate closed analytical solutions for custom 6Dof arm manipulator that we are creating. I managed to obtain container with required software packages (openrave and ikfast plugin). I followed this tutorial: https://adrlab.bitbucket.io/ct/v2.2/ct_doc/doc/html/ik_tut_docker.html

Everything seems to work fine - I'm able to load my .dae file and get some informations (indices list). It looks OK. But process of generation final file with solutions last for ages - it never ends...

I also tried to use this online generator: https://www.hamzamerzic.info/ikfast_generator/

The result is exactly the same. Process always gets stuck on lines:

INFO: skipping dependent index 3, numausymbols=0, numausymbols=6
INFO: skipping dependent index 5, numausymbols=0, numausymbols=7
INFO: skipping dependent index 6, numausymbols=0, numausymbols=7

I'm assuming that there is something wrong with my .urdf file. Can anyone be so kind and check what can be causing the problem?

<?xml version="1.0"?>
<robot name="pseudobot">

    <material name="blue">
        <color rgba="0 0 0.8 1"/>
    </material>

    <material name="white">
        <color rgba="1 1 1 1"/>
    </material>

    <link name="basis">
        <visual>
        <origin xyz="0 0 0.05" rpy="0 0 0"/>
        <geometry>
            <box size="0.404 0.404 0.1"/>
        </geometry>
    <material name="blue"/>
        </visual>
    </link>

    <link name="base_link">
        <visual>
        <origin xyz="0 0 0.165" rpy="0 0 0"/>
        <geometry>
            <cylinder radius="0.085" length="0.33"/>
        </geometry>
    <material name="white"/>
        </visual>
    </link>

    <link name="arm_link_1">
        <visual>
        <origin xyz="0 0 0.059" rpy="0 0 0"/>
        <geometry>
            <cylinder radius="0.07" length="0.288"/>
        </geometry>
    <material name="white"/>
        </visual>
    </link>

    <link name="arm_link_1_1">
        <visual>
        <origin xyz="0 0 0.135" rpy="0 0 0"/>
        <geometry>
            <cylinder radius="0.055" length="0.4105"/>
        </geometry>
    <material name="white"/>
        </visual>
    </link>

    <link name="arm_link_2">
        <visual>
        <origin xyz="0 0 0.08125" rpy="0 0 0"/>
        <geometry>
            <cylinder radius="0.064" length="0.2625"/>
        </geometry>
    <material name="white"/>
        </visual>
    </link>

    <link name="arm_link_2_1">
        <visual>
        <origin xyz="0 0 0.135" rpy="0 0 0"/>
        <geometry>
            <cylinder radius="0.055" length="0.3805"/>
        </geometry>
    <material name="white"/>
        </visual>
    </link>

    <link name="arm_link_3">
        <visual>
        <origin xyz="0 0 0.07615" rpy="0 0 0"/>
        <geometry>
            <cylinder radius="0.060" length="0.2523"/>
        </geometry>
    <material name="white"/>
        </visual>
    </link>

    <link name="arm_link_4">
        <visual>
        <origin xyz="0 0 0.07615" rpy="0 0 0"/>
        <geometry>
            <cylinder radius="0.060" length="0.23993"/>
        </geometry>
    <material name="white"/>
        </visual>
    </link>

    <link name="arm_link_5">
        <visual>
        <origin xyz="0.01 0 0" rpy="0 1.57 0"/>
        <geometry>
            <cylinder radius="0.060" length="0.12"/>
        </geometry>
    <material name="white"/>
        </visual>
    </link>

    <joint name="base_joint" type="revolute">
        <parent link="basis"/>
        <child link="base_link"/>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <limit lower="-3.1416" upper="3.1416" effort="0.2" velocity="0.2"/>
        <axis xyz="0 0 1"/>
    </joint>

    <joint name="joint_1" type="revolute">
        <parent link="base_link"/>
        <child link="arm_link_1"/>
        <origin xyz="0 0 0.274" rpy="1.57 0 0"/>
        <limit lower="-3.1416" upper="3.1416" effort="0.2" velocity="0.2"/>
        <axis xyz="0 0 1"/>
    </joint>

    <joint name="fixed_joint_1_1" type="fixed">
        <parent link="arm_link_1"/>
        <child link="arm_link_1_1"/>
        <origin xyz="0 0 0.148" rpy="-1.57 0 0"/>
        <axis xyz="0 0 1"/>
    </joint>

    <joint name="joint_2" type="revolute">
        <parent link="arm_link_1_1"/>
        <child link="arm_link_2"/>
        <origin xyz="0 0 0.2855" rpy="-1.57 0 0"/>
        <limit lower="-3.1416" upper="3.1416" effort="0.2" velocity="0.2"/>
        <axis xyz="0 0 1"/>
    </joint>

    <joint name="fixed_joint_2_1" type="fixed">
        <parent link="arm_link_2"/>
        <child link="arm_link_2_1"/>
        <origin xyz="0 0 0.1575" rpy="1.57 0 0"/>
        <axis xyz="0 0 1"/>
    </joint>

    <joint name="joint_3" type="revolute">
        <parent link="arm_link_2_1"/>
        <child link="arm_link_3"/>
        <origin xyz="0 0 0.27032" rpy="1.57 0 0"/>
        <limit lower="-3.1416" upper="3.1416" effort="0.2" velocity="0.2"/>
        <axis xyz="0 0 1"/>
    </joint>

    <joint name="joint_4" type="revolute">
        <parent link="arm_link_3"/>
        <child link="arm_link_4"/>
        <origin xyz="0 0 0.15212" rpy="-1.57 0 0"/>
        <limit lower="-3.1416" upper="3.1416" effort="0.2" velocity="0.2"/>
        <axis xyz="0 0 1"/>
    </joint>

    <joint name="joint_5" type="revolute">
        <parent link="arm_link_4"/>
        <child link="arm_link_5"/>
        <origin xyz="0 0 0.14527" rpy="1.57 0 0"/>
        <limit lower="-3.1416" upper="3.1416" effort="0.2" velocity="0.2"/>
        <axis xyz="1 0 0"/>
    </joint>

</robot>

Does it have something to do with fixed joints that I'm using? I figured that it is the proper way to create more complex links (multiple shapes).

In the IKFast plugin I use attributes:

export BASE_LINK="0"
export EEF_LINK="8"

because I have 8 joints, from which 2 are fixed.

Any hints will be much appreciated!

Asked by mkt on 2019-01-31 11:09:23 UTC

Comments

I don't know whether it's a factor here, but the docker image that is used in the tutorial you link was last updated a year ago. OpenRAVE is quite actively developed, so I would suggest trying with a more recent version first.

Asked by gvdhoorn on 2019-01-31 12:54:24 UTC

I tried following the procedure that You have described here: https://answers.ros.org/question/263925/generating-an-ikfast-solution-for-4-dof-arm/ The result is exactly the same! I think that it must be something wrong with my urdf... Although it is working fine with default moveit planner...

Asked by mkt on 2019-02-01 10:20:10 UTC

Hi! Have you solved the issue? I'm having the same trouble here, following the steps described in the same link you sent. (#q263925). EDIT: I tried again with a fresh OpenRAVE install on a docker image that I've built, following the tutorial pointed on MoveIT site. It passed the first frozen state, and apparently was running ok. A few minutes later, when it was on the "addSolution" steps, it threw an error "GeneratorsNeeded" from sympy.

Asked by lewis_ferreira on 2020-04-30 17:18:00 UTC

Yes, in the end, I managed to build IKFast solution. I changed some parameters in the script which was starting the calculations on the docker-machine... The parameter was called maxDepthSomethingSomething and I reduced it. Sorry, I don't remember much :( After all that IKFast solution was not better/faster than TracIK, so I'm using the latter one.

Asked by mkt on 2020-05-02 03:09:33 UTC

Thank you very much! it helped and I managed to build it, too! The parameter name is --maxcasedepth, and setting it to 1 or 2 made the build possible! Setting it to 3 resulted on the same error I commented on the edit (on the docker image i've made). Although the test success rate was below 50%, so I'll try the TracIK.

Asked by lewis_ferreira on 2020-05-03 11:09:37 UTC

Answers