# Inverse Kinematics algorithm implementation

asked 2013-03-16 10:55:13 -0500

This post is a wiki. Anyone with karma >75 is welcome to improve it.

Dear Friends,

I am newbie to ROS and Ubuntu and a Masters Student. I am basically a windows user and have now switched to Ubuntu to learn ROS. But ROS + UBUNTU = (GREAT FUN);

As my masters project I have designed an Inverse Kinematics algorithm for joints. My supervisor advised me to implement the same using ROS showing the algorithm in action using Simulation. I completed the tutorials and was able to understand most of the ROS fundamental and now my questions are

Q1 - Am I on the right direction? Do I need ROS to show the algorithm in action using Simulation? I have already done this using Flash and Webgl.

Q2 - Are there any tutorials for ROS to get started with regards to Kinematics and Joints ?

Regards,

Srinivasan!

edit retag close merge delete

Sort by ยป oldest newest most voted

ROS is a great way for you to test/demonstrate your inverse kinematics algorithms!

The arm_kinematics_constraint_aware package provides a plugin interface for integrating different kinematics algorithms into the standard ROS ecosystem. See the tutorials for an introduction on how to set up your own kinematics plugin.

Once you have implemented the standard kinematics-plugin interface for your algorithms, then you can easily swap between the default ROS kinematics methods and your own algorithms, for comparison and benchmarking.

You can test your kinematics in a few different ways:

1) Qualitatively - create a arm navigation package for your robot arm, then use the planning components visualizer to interactively drag the end-effector and observe the joint solutions computed by your IK algorithms.

2) Quantitatively - write a program to call the kinematics service for a set of random, critical, or evenly-spaced poses to evaluate the performance (timing, accuracy, etc.) of your kinematics algorithms. One easy method is to iterate through all valid joint-angle combinations, and calculate a round-trip kinematic solution (forward-kinematics followed by inverse-kinematics). Comparing the IK results against the original joint-angles can help evaluate your IK algorithms.

Good luck! Hope these pointers are helpful.

more

Thank you very very much for having taken time to have answered my queries despite the stupidity of mine for having not included in the query about the technical details like the ubuntu and the ros verison.

The details about the versions of the softwares I am using

Ubuntu 13.04 ROS - Groovy

( 2013-03-18 10:03:27 -0500 )edit

answered 2013-03-18 14:05:37 -0500

This post is a wiki. Anyone with karma >75 is welcome to improve it.

Since you are talking about kinematics and not dynamics, I recommend you don't bother with a Gazebo simulation at all. It's a really nice tool, but I don't see the need for you.

You can make things move and visualise with RViz only - just feed your motion commands directly into the current state (i.e. joint position/velocity command = joint position/velocity state).

Have a look at the joint_state_publisher package for more details. We use this tool a lot in order to visualise our robot models.

Further than that I strongly recommend to take a look at the Kinematics and Dynamics Library (KDL). It contains various IK solvers and is also used in multiple kinematics packages/tools in ROS (e.g. pr2_kinematics). Also worth taking a look at is the IKFast module from OpenRAVE. The major difference between both is that the solvers in KDL are iterative, while the IKfast plugin uses an analytic solver - each naturally with its own strengths and weaknesses.

Good luck with your project!

more

answered 2013-03-18 06:11:28 -0500

This post is a wiki. Anyone with karma >75 is welcome to improve it.

Although the arm_navigation stack is a comprehensive package, it may go beyond the capabilities you are trying to test, and you may get lost learning the arm_navigation stack and gazebo (the simulator) and ros all at the same time.

If you are trying to develop your own algorithms you may want to try developing these first without the arm_navigation stack, but making use of ROS's distributed programming and message formats which are quite powerful.

If this sounds sensible, I'd suggest getting a model of your arm done in gazebo (noting ROS fuerte uses gazebo 1.0) using a urdf file. Create your own plugin to simulate your arm's control system. And then write a couple of nodes for your IKcontrol and for your DesiredPoseGoal. If you use basic messaging provided by ROS such as the sensor_msgs::JointState and perhaps define a couple of your own basic message groups for defining your Cartesian_Pose_Goals in a simple way then you will have the basics for testing a number of your own algorithms.

This way you can focus on your IK development for your specific configuration in a simple and uncluttered way. The arm_navigation_stacks are generalistic and take a bit to understand and the documentation is by no way a yellow brick road, and you can get easily sidetracked and not everything may be relevant for your case.

Though that being said, the arm_navigation_stack is very professional and worth a look to understand a lot of the concepts around what makes IK difficult.

more

Thank you very very much for having taken time to have answered my queries despite the stupidity of mine for having not included in the query about the technical details like the ubuntu and the ros verison. The details about the versions of the softwares I am using Ubuntu 13.04 ROS - Groovy

( 2013-03-18 10:04:31 -0500 )edit