InMoov Kinematics and Inverse Kinematics

Hello all,

I am using InMoov arms with our already available robotics head. We are using yarp and c#. For the InMoov arm we don't use arduino,... till now I have a  working arm and I manually send angles for motors (using sliders and my gui) and the arm moves. Now I need to develop the kinematics and Inverse kinematics algorithm for the arm. I mean the box that receives as input endeffector position (or motor angles in Kinematics) and as output the required angle of each motor (end-effector position in Kinematics).

I know that Kinematics and Inverse Kinematics are already developed for InMoov, but is there any way that I can access their source code or mathematics withhout using MRL? I mean I don't want to use the already available kinematic on MRL, I need only the kinematic part to be developed  in my platform.

Please help me if there is a source code or .... for InMoove Kinematics, Inverse Kinematics, Dynamics,....

Thank you,


kwatters's picture


Hi MaryBD,  As you know I've also been working on IK for the InMoov arm.  I recently added the InverseKinematics3D service and I think there's even a sample python script now that attempts to move the inmoov arm.

I have been working on a set of DH parameters that I've simulated in MRPT for the InMoov arm.  I am finding , that in practice, the reference frames for the joints do not line up with what the potentiometer thinks is 0 degrees.  So there must be some angle offsets to normalize that.

Also, the current pseudo-inverse jacobian approach to solve the joint angles does not include any joint constraints.  I.e.  the max/min limits for each of the servos.   That will also need to be added to the algorithm to make it useful.  

That being said,  I'm super happy that someone else is interested in defining the DH params for the InMoov arm.  Another option , i suppose, would be to consider using URDF to describe the arm.  

Also, we should make sure we're all using the same reference frames and orientations for the frames..  I believe that having a proper forward/inverse kinematics service is key to MRL's future, so, this is a big area of interest for me.



MaryBD's picture


Hi Kwatters,

Thank you for the reply. I followed the old Kinematic codes you have developed... Now in my main I introduce the links, I call palmpos, and then I give the goalPos and I can receive dtheta.  I have some questions:

1.what is the correct DH parameters for feeding DHLink class? Now, based on my computation I did this:

//DHLink(double d, double r, double theta, double alpha)

DHLink link1 = new DHLink(53.21, 69.82, 0.00, -90.00);//in mm

DHLink link2 = new DHLink(66.81, 62.12, -90.00, 90.00);

DHLink link3 = new DHLink(227.91, 25.47, -90.00, 90.00);

DHLink link4 = new DHLink(0.00, 289.21, -90.00, -90.00);

DHLink link5 = new DHLink(0.00, 10.00, 0.00, 0.00);

then I add all the links using addlink function in DHLink. Would you tell me if these values are correct, or what are the correct values...

3. Where can I find the InverseKinematics3D service? It is not at kinematic folder....

2. should I feed the motors with dtheta? In my case the elements of dtheta are really small....

3. where can I find some data about inMoov workspace?

Thank you very Much for your kind helps.