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