Inverse Kinematics

Is there an example for the IK library and is the advanced library from calamity available somewhere?
Using the IK lib in the Web gui throws NullPointer when trying to center all joints. Am I doing something wrong?


Every information about IK / the IK library is welcome since I need it for my thesis!


kwatters's picture


Hi Weiler,

What is your thesis?  Where are you going to school?  Welcome!


  There are a few options for inverse kinematics in mrl. Back in the day Alessandruino had implemented an IK algorithm that would solve IK problemsin x,y   (2D only.)

  That algorithm had implemented an iterative algorithm that would ultimatley come up with a solution to get the end effector of the 2d robot arm linkage to the desired position.

  I updated the algorithm based on the Stanford University class  Introduction to Robotics.  The nice thing is all of the lectures for these classes are available on youtube.  This class outlined a basic understanding and how to implement inverse kinematic algorithms by representing the robot arm as a table of DH parameters and using the "Jacobian" matrix.

  The basic algorithm is implemented here:

This algorithm uses the homogenous transformation matrix with the DH parameters that describe the robotic arm to compute the forward kinematics.  Once the forward kinematics are known, the jacobian matrix is approximated by "wiggling" each of the joint angles to see what the resulting change in x,y, and z.  The jacobian matrix is a mapping that relates the change in the input to the output for a system.  If you move joint 1 by a little bit, how much does the x,y,z of the output change..  

So, once the jacobian is known, we can take the inverse of the jacobian and this gives us a mapping that defines the changes in the joint angles based on a small change in the x,y,and z position of the end effector.

Ok.. so , then it's just a matter of itterating in small increments , and updating the joint angles and recomputing the new jacobian at each step.. to move towards the goal.

This apporach is also known as a "gradient descent"... 

Much of this approach is also documented in the open source book  "Planning Algorithms"

The transformation matrix is found here:


Hope this helps & Good luck!


Weller's picture

What is your

What is your thesis?

Teaching inmoov to play checkers against a human player on a real board.

(Includes CV; IK; basic AI)


Thanks for this huge amount of information I will try to read through everything 

calamity's picture

Hi Weller the 3rd IK option

Hi Weller

the 3rd IK option in MRL is called IntegratedMovement. I won't called it advance, but a different service than InverseKinetics3D. My goal with it is to implement other method to ultimatly do SLAM (collision avoidance, interraction with objects etc). It's still a work in progress.

In IntegratedMovement, the IK computation is different than in IK3D.

As kwatters explain, IK3D will have the arm follow as closely as possible a vector between the current position and the target position.

In IntegratedMovement, the angle of the DH link are computed using a Genetic Algorithm approach. So it generated random angles, compute the bests combinaison and try to improved the results. The end results is the same (arm reach target point) but the path it will follow to reach the target will be different (will follow links constraint instead of a straith vector). 


Weller's picture

Where can I find

Where can I find IntegratedMovement?
I can't find it in the MRL service list.
Is the source code somewhere available?

calamity's picture

Hi Weller it`s on the latest

Hi Weller

it`s on the latest build, you can find the link on top of the shoutbox

Weller's picture

I have the latest build

I have the latest build (1.0.1902) and according to MRL every possible service is installed but it's still not in my list.

Mats's picture


There was an error in the metaData for the IntegratedMovement service. It's corrected now. Download the 'latest build' to an empty folder. After starting MRL you should see IntegratedMovement in the runtime tab. Then select runtime => system => 'install all' to get all dependencies downloaded.