Generating ikfast plugin for 5 DOF robot
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):
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