Rosanswers logo

Hi everyone,

we are currently working on an ERICC 1 robot (probably >30 years old) and need to update its control systems, etc. Considering that it is a 5 DOF robot, we are having a lot of difficulty with the inverse kinematics problem. It seems that KDL is able to find a solution every once in a while but it is not reliable (< 10 % of the time and not validated).

After a quick search, we found that the encouraged method for < 6 DOF robot is to use ikfast which we are currently trying to implement. We are following the tutorial.

The URDF we are using was created by us and a package containing all the meshes and the URDF can be found here: Robot_description package (sorry for the download format, I am not used to using git or anything else I hope it is not too bad)

From these files, we are able to convert the URDF to collada succesfully as explained in the tutorial using :

rosrun collada_urdf urdf_to_collada
my_robot.urdf ericc_collada.dae

then, when we visualize it using openrave, we can see the robot as in the following picture (can't upload too new on the group):

ERICC collada openrave http://oi57.tinypic.com/2virv5x.jpg

If we look at it quickly, we can see that it was imported properly (at least visually) but there is no reference frame at the tip of the end effector as I expected when reading a previous post about 5 DOF katana arm.

If I try to generate the solver, using :

python `openrave-config --python-dir`/openravepy/_openravepy_/ikfast.py --robot=ericc_collada.dae --iktype=translationdirection5d --baselink=0 --eelink=5 --savefile=ikfast_ericc

It tries various methods and end up with this error message

Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/openravepy/_openravepy_/ikfast.py", line 6121, in <module>
    chaintree = solver.generateIkSolver(options.baselink,options.eelink,options.freeindices,solvefn=solvefn)
  File "/usr/lib/python2.7/dist-packages/openravepy/_openravepy_/ikfast.py", line 1639, in generateIkSolver
    chaintree = solvefn(self, LinksRaw, jointvars, isolvejointvars)
  File "/usr/lib/python2.7/dist-packages/openravepy/_openravepy_/ikfast.py", line 2055, in solveFullIK_TranslationDirection5D
    endbranchtree2 += self.solveAllEquations(AllEquations,curvars=curvars,othersolvedvars = self.freejointvars+usedvars,solsubs = solsubs,endbranchtree=endbranchtree)
  File "/usr/lib/python2.7/dist-packages/openravepy/_openravepy_/ikfast.py", line 4264, in solveAllEquations
    return self.addSolution(solutions,AllEquations,curvars,othersolvedvars,solsubs,endbranchtree,currentcases=currentcases)
  File "/usr/lib/python2.7/dist-packages/openravepy/_openravepy_/ikfast.py", line 4340, in addSolution
    return [solution[0].subs(solsubs)]+self.solveAllEquations(AllEquations,curvars=newvars,othersolvedvars=othersolvedvars+[var],solsubs=solsubs+self.Variable(var).subs,endbranchtree=endbranchtree,currentcases=currentcases)
  File "/usr/lib/python2.7/dist-packages/openravepy/_openravepy_/ikfast.py", line 4321, in solveAllEquations
    raise self.CannotSolveError('failed to find a variable to solve')
__main__.CannotSolveError: 'failed to find a variable to solve'

Any suggestions as to how I could fix this issue ?

SETUP informations: Ubuntu 12.04 LTS 64 bits, ROS hydro, Openrave 0.8

Best regards,

Pascal Fortin

Originally posted by pascal.fortin on ROS Answers with karma: 16 on 2014-11-04

Post score: 0


1 Answer 1


Rosanswers logo

Edit (2017-09-26): I've written an updated version of this in #q263925. That also uses a Docker image to avoid having to install OpenRave on the ROS machine (which is non-trivial on current versions of Ubuntu).

For some of my 5dof manipulators, I've run into the same issue.

What worked for me was to wrap the Collada file describing your manipulator in an OpenRAVE robot definition file (that is not official terminology). This provides OpenRAVE IKFast with enough information to be able to generate a plugin for your robot. This also requires passing different parameters to be passed to the openrave.py script (I used version 0.8):

openrave0.8.py --database inversekinematics --robot=/path/to/collada_file_with_manipulator.xml --iktype=translationdirection5d --iktests=100

The iktests parameter value was just a default, you can make it larger or smaller.

Unfortunately I cannot find my collada_file_with_manipulator.xml right now, so I cannot provide it to you, but I used something like:

<robot file="/path/to/converted.urdf.dae">
  <Manipulator name="YOUR_NAME">

Note that you don't need to manually edit the Collada file you got by converting your urdf, you can reference it in your wrapper model definition using the file attribute.

I used the following pages for information:

Originally posted by gvdhoorn with karma: 86574 on 2014-11-12

This answer was ACCEPTED on the original site

Post score: 3


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.