Ask Your Question

Openrave ikfast as an ik plugin for motion planning

asked 2011-06-27 18:46:25 -0600

Fei Liu gravatar image

updated 2011-06-28 00:38:30 -0600

Hi, all,

I want to make use of the strength of Openrave to get the analytic solutions for our 5dof manipulator. I know in orrosplanning package, provide a service /GetPositionIK. But I want a IK plugin to be loaded by ompl_ros_interface for motion planning. I just wonder how could I configure the Openrave IK module into a plugin? I heard that openrave could generate a C++ file as the inverse kinematics for the given manipulator, is it possible to use it to build a plugin. What would be the best way to do it and how to do it? Thanks.

edit retag flag offensive close merge delete

6 answers

Sort by » oldest newest most voted

answered 2011-06-29 23:58:39 -0600

Henning Deeken gravatar image

Hi Fei,

i just wanted to tell you that we (Martin and I) just pushed the latest version of our katana_driver stack, which now supports constraint aware motion planning for our arm.

The set up is the following:

  • we fully specified the arms kinematics in a urdf file and coverted file into the collada format from which openrave then computed the analytical solution cpp files(see katana_description)
  • then we implemented a kinematics plugin (as Gil suggested above), which does not calls the generated cpp files directly, but via the orroplanning/IK service specifiying to use the TranslationDirection5D IK type (see katana_openrave_kinematics)
  • we then use the plugin with the arm_kinematics_constraint_aware node from the same package to establish all necessary service (see katana_openrave_kinematics)

with this set up we are now able to use OMPL within our for our arm navigation. I hope looking through our files will help you setting up your arm. We also included some code for testing within the katana_openrave_test package.

Please feel free to e-mail me if you could need more detailed support or in cases you find some bugs or other ideas for improvement.

Greetings from Osnabrück, Henning

edit flag offensive delete link more


Wow, great! Anyway, I just see it. Thanks a lot for your hint. Fei Liu ( 2012-02-01 16:35:26 -0600 )edit

answered 2011-06-30 05:26:29 -0600

egiljones gravatar image

Calling the ik solver through a service call should work for converting pose goals into joint goals, which only needs to happen once or a few times (if sampling in goal regions) during planning. For planning in task space - for instance, when it is desired that the end effector of the robot maintain a particular pitch and roll during the movement such that a glass is not upended - the ik solver will need to be called thousands of times, and the time required for calling even a persistent service will likely be orders of magnitude more than the cost of computation ik using ik fast, which should be microseconds. Using pure C++ for the plugin is definitely the way to go in terms of efficiency.

My hope is in the near future we at willow can make it very easy to use ikfast as a generic ik solver, and again if you pursue this path we'd love some pointers.

edit flag offensive delete link more


What is now the current state of this? I don't want to do this myself if it already exists. John Hoare ( 2011-10-05 08:19:33 -0600 )edit

answered 2012-12-03 11:35:56 -0600

Dave Coleman gravatar image

This question is a year old but a comprehensive tutorial for setting up IKFast using your URDF is finally available here, thanks to David Butterworth:

That said, while I have gotten the IKFast plugin to generate and compile, I have not had any luck getting it to actually find solutions while running. Still working on that.

edit flag offensive delete link more

answered 2011-06-30 05:36:06 -0600

hi gil,

that sounds great! currently there's two ways to do this:

  1. compile the raw cpp file as a shared object (done automatically when calling ikfast) and load the shared object inside your packages. The functions defined for the shared objects are documented here:

  1. load the COLLADA file through openrave and call the Robot.Manipulator.FindIKSolution function. The openrave manipulator objects define the base and end effector links and are required for ikfast to find the correct chain. All this can be achieved through C++ as shown in the following example:

good luck!

edit flag offensive delete link more

answered 2011-06-28 12:05:41 -0600

egiljones gravatar image


I've also been wanting to do this on our end but haven't gotten around to it yet. If indeed you can get a C++ function for the ik then it should be pretty straightforward to implement the necessary functions for a kinematics plugin. There's some info on making a kinematics plugin the wiki that may not be totally complete: - you basically just need to implement a bunch of virtual function and make the plugin. You can use the generic arm navigation package in arm_kinematics_constraint_aware/src/kdl_arm_kinematics_plugin.cpp as a starting point.

I will probably get around to getting some more materials on this in the coming months, but if you have any luck a tutorial on the wiki would be a great help! Especially helpful would be information on the OpenRave side, as I don't have much experience with that.


edit flag offensive delete link more

answered 2011-06-28 15:27:41 -0600

hi martin,

if you are interested in the planning part of openrave, we would be glad to help set up all the necessary ROS service calls to get it working with the katana arm. currently the orrosplanning/ script only supports the CollisionMap message, but we can add any messages you feel are important for discovering the collision world.

Although you might have many plans for OMPL and OMPL may support many cool features, we can help you reduce the time to setup planning for your system.

any model files you can send would be helpful.


edit flag offensive delete link more

Your Answer

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

Add Answer

[hide preview]

Question Tools



Asked: 2011-06-27 18:46:25 -0600

Seen: 1,156 times

Last updated: Dec 03 '12