ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | Q&A
Ask Your Question

How to verify generated IKfast plugin?

asked 2016-02-21 00:42:49 -0500

Yishin gravatar image

From this IKfast tutorial, we may generate IKfast plugin with OpenRave. I would like to learn how to verify the generated IK.

  • Is there an unit test example for IK plugin?
  • What is the Python/C++ API for accessing joint and world positions of IKfast?
edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted

answered 2016-02-21 01:19:40 -0500

gvdhoorn gravatar image

updated 2016-02-21 01:23:58 -0500

  • Is there an unit test example for IK plugin?

OpenRAVE provides a way to test every IKFast plugin, see OpenRAVE Documentation - inversekinematics Module - Testing.

You might need to adapt the instructions in the tutorial you linked though, as IIRC it doesn't store the generated plugins in OpenRAVEs cache.

  • What is the Python/C++ API for accessing joint and world positions of IKfast?

IKFast is actually part of OpenRAVE, we in ROS are just 'users'. For more info, see OpenRAVEs documentation. For OpenRAVE/IKFast specific questions, I'd recommend contacting the OpenRAVE mailing list.

Information on IKFast and its (plugin) API, see OpenRAVE Documentation - ikfast Module - IKFast: The Robot Kinematics Compiler

Edit: you might also want to look at trac_ik, not as fast, but for some kinematic structures it's a better plugin.

edit flag offensive delete link more


Thanks for your answer regarding OpenRave Testing. For trac_ik, would it be better for generic 6-joints industrial robot manipulators similar to PUMA-560?

Yishin gravatar image Yishin  ( 2016-02-22 01:40:51 -0500 )edit
gvdhoorn gravatar image gvdhoorn  ( 2016-02-22 02:40:12 -0500 )edit

answered 2016-02-25 17:38:13 -0500

Yishin gravatar image

From Create_a_Fast_IK_Solution, it mentioned ikfastdemo.cpp for testing the generated IKfast code. It needs a little bit fix to workaround compile errors.

Here's its usage:

./compute ik 0.794 0 0.415 1 0 0 0
Found 2 ik solutions:
sol0 (free=0): -0.000000000000003, 0.117857486686850, -0.235590643741151, -0.000000000000026, 0.117733157054301, 0.000000000000026, 
sol1 (free=0): -0.000000000000003, 0.117857486686850, -0.235590643741151, 3.141592653589767, -0.117733157054301, -3.141592653589767,

./compute fk 0 0 0 0 0 0
Found fk solution for end frame: 
Translation:  x: 0.794000  y: 0.000000  z: 0.415000  
     Rotation     1.000000   0.000000   0.000000  
       Matrix:    0.000000   1.000000   -0.000000  
                  0.000000   0.000000   1.000000  
 Euler angles: 
       Yaw:   0.000000    (1st: rotation around vertical blue Z-axis in ROS Rviz) 
       Pitch: 0.000000  
       Roll:  -0.000000  
  Quaternion:  1.000000   0.000000   0.000000   0.000000   
               1.000000 + 0.00000i + 0.00000j + 0.00000k   (alternate convention)
edit flag offensive delete link more


The euler angles I am getting using this is different from the ones I am getting from arm_move_group->getCurrentPose(arm_move_group->getEndEffectorLink()).pose. In both the case, reference frame is base_link.

Anubhav Singh gravatar image Anubhav Singh  ( 2021-08-09 00:08:17 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2016-02-21 00:42:49 -0500

Seen: 956 times

Last updated: Feb 25 '16