CannotSolveError: raghavan roth equations too complex (--iktype=translationdirection5d)
Hi, all
Meet a solve issue when generating IK solver with the manuel http://docs.ros.org/kinetic/api/movei....
Hardware: 5-dof innfos which was 6-dof but the wrist3 joint is broken, so I move the wrist3 joint and change the urdf to 5-dof robot...
Reference information:
export MYROBOT_NAME="innfox"
export PLANNING_GROUP="bytedance_arm"
export BASE_LINK="0"
export EEF_LINK="5"
export IKFAST_OUTPUT_PATH=pwd
/ikfast61_"$PLANNING_GROUP".cpp
export IKFAST_PRECISION="5"
$openrave-robot.py "$MYROBOT_NAME".dae --info links
name index parents
base_link 0
shoulder_link 1 base_link
elbow_link 2 shoulder_link
elbow2_link 3 elbow_link
wrist_link 4 elbow2_link
wrist2_link 5 wrist_link
name index parents
Generate command:
$python openrave-config --python-dir
/openravepy/_openravepy_/ikfast.py
--robot="$MYROBOT_NAME".dae --iktype=translationdirection5d
--baselink="$BASE_LINK" --eelink="$EEF_LINK"
--savefile="$IKFAST_OUTPUT_PATH"
======================error log ======================= INFO: not unique: (Poly(-r00cj0 - r01sj0, cj0, sj0, cj2, sj2, htj1, domain='ZZ[r00,r01]'), Poly(sj4, cj3, sj3, cj4, sj4, htj1, domain='ZZ')) INFO: not unique: [Poly(-pxcj0 - pysj0, cj0, sj0, cj2, sj2, htj1, domain='QQ[px,py]'), Poly(-2031/25000, cj3, sj3, cj4, sj4, htj1, domain='QQ')] INFO: assuming equation htj1 is non-zero, dividing by Poly(pxcj0htj1 + pysj0htj1 - 2031/25000htj1, cj0, sj0, cj2, sj2, cj3, sj3, cj4, sj4, htj1, domain='QQ[px,py]') INFO: not unique: (Poly(-pxcj0 - py*sj0, cj0, sj0, cj2, sj2, htj1, domain='ZZ[px,py]'), Poly(-2031/25000, cj3, sj3, cj4, sj4, htj1, domain='QQ')) WARNING: CannotSolveError: reduced equations are zero INFO: attempting kohli/osvatic general ik method INFO: solving for all pairwise variables in (cj0, sj0, cj1, sj1), number of symbol coeffs are 15 INFO: solving for all pairwise variables in (cj0, sj0, cj1, sj1), number of symbol coeffs are 22 WARNING: CannotSolveError: KohliOsvatic method: could not reduce the equations INFO: attempting kohli/osvatic general ik method WARNING: CannotSolveError: need 8 or less equations of one variable, currently have 12 Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/openravepy/_openravepy_/ikfast.py", line 9521, in <module> chaintree = solver.generateIkSolver(options.baselink,options.eelink,options.freeindices,solvefn=solvefn) File "/usr/local/lib/python2.7/dist-packages/openravepy/_openravepy_/ikfast.py", line 2281, in generateIkSolver chaintree = solvefn(self, LinksRaw, jointvars, isolvejointvars) File "/usr/local/lib/python2.7/dist-packages/openravepy/_openravepy_/ikfast.py", line 2803, in solveFullIK_TranslationDirection5D raise self.CannotSolveError('raghavan roth equations too complex') __main__.CannotSolveError: CannotSolveError: raghavan roth equations too complex
Pls see the URDF file in the attachment. Could anyone tell where the issue is?
BR Thx.
just solved this problem after 3 days' crazy seaching... the key point is that the z axis of the eef should be normal to the gripper surface. see these links for details: link1, link2
The disappointing thing for me is that the ikfast plugin can't solve for all the 10 preset reachable poses of eef in my case..."no motion plan found"..
Hi, Xibeisiber
Thanks for reply.
My robot arm just does place moving, so doesn't have the gripper device.
I just followed the tutorial to generate the ikfast cpp file, didn't see the robot.xml(katana6m90a.robot.xml in the given link).
How should I do? Can I just modify the urdf file to correct the eef pose?
Below is the EEF joint configure in my urdf file:
<joint name="wrist2_joint" type="continuous"> <origin xyz="0.0380973329553973 0.0463798976413489 0" rpy="0 3.1415926 0"/> <parent link="wrist_link"/> <child link="wrist2_link"/> <axis xyz="0 -1 0"/> <limit effort="1000.0" lower="-2.75" upper="2.75" velocity="0.5"/> <safety_controller k_velocity="0"/> </joint>
BR
Thx.
try to change the axis of the eef_link by modifying the RPY in your <joint> or modifying the intrinsic axis of the mesh file of the eef_link. then generate the cpp again. both ways work for me .