I have big problem. I have to solve inverse kinematics for a manipulator with 6-DOF using jacobian method. From what I know to do that I need to have matrix of transformation and Denavit–Hartenberg parameters, which both I have. But I am not a mathematician, and descriptions I find on the web are not even a bit understandable to me. So I would love if you could give me an example of how to solve my problem.

The Denavit-Hartenberg parameters are: $$ \begin{matrix} \alpha & l & \lambda & \theta\\ 90 & 150 & 0 & var(-69) \\ 0 & 610 & 0 & var(85) \\ 90 & 110 & 0 & var(-52) \\ -90 & 0 & 610 & var(62) \\ 90 & 0 & 113 & var(-60) \\ 0 & 0 & 78 & var(-108) \\ \end{matrix} $$

The values in theta are values to get the following matrix of transformation, and values I want to get with this jacobian method. And those values are in degrees.

Matrix of transformation: $$ \begin{matrix} 0.7225 & 0.0533 & 0.6893 & 199.1777\\ -0.2557 & -0.9057 & 0.3381 & -500.4789\\ 0.6423 & -0.4206 & -0.6408 & 51.6795\\ 0 & 0 & 0 & 1 \\ \end{matrix} $$

I would be most greatful, if someone could walk me through how to solve it in simple language.

  • 1
    $\begingroup$ Using Jacobian ? Are you sure ? Answer this question and then I can see what I can do :D Alright, there is some more information that I need, how was the Forward Kinematics computed otherwise, the Transformation Matrix obtained ? What is the template of the Transformation Matrix ? Was it computed using the Proximal Convention or the Distal Convention ? The reason this information is needed because, the transformation matrix you gave, I am assuming is the Goal Position of the Arm. So what you have to do is use the DH parameters and multiply it with the Template of the Goal Matrix and compare it $\endgroup$ Feb 27, 2014 at 2:05

3 Answers 3


I agree with all of Tvaṣṭā's questions above. It would be nice to have answers to these, but I will try to provide an answer regardless.

To calculate the (geometric) Jacobian, you don't really need all those D-H parameters. See this question for an explanation how to calculate the Jacobian: jacobian of Abb irb140 robot

Inverse-kinematics using the Jacobian doesn't sound right. Remember that the Jacobian describes the mapping between joint velocities and end-effector velocities, and that this relationship is configuration dependant. So you can use the Jacobian to determine joint velocities to move your end-effector along a given vector. But not really to move the end-effector to some other point in the workspace, far from the current configuration. Typically IK solvers will give you a number of solutions for a target pose.

That being said, you might want to check out this page by another user: http://freespace.virgin.net/hugo.elias/models/m_ik2.htm on gradient based methods.

Finally, I would highly recommend using a kinematics library such as OpenRave, Orocos KDL, ROS MoveIt! among others. These libraries will do the heavy math stuff for you, give you advanced controls, and get you up and running much quicker.


Well, I totally understand your problem. You want to solve inverse kinematics problem using Jacobian inversion.

1) Firstly you need to compute Jacobian matrix. for that you may refer book "RObotics and control" by R K mittal and I J Nagrath or J Crag. you have 6 DOF manipulator, for that you will get 6 x 6 matrix. You need to take note that which 3 rows are linar velocity and which are angular velocity. Generally first 3 rows are of liner and last 3 rows are of angular velocity(this is recommended).

2) Understand jacobian kinematics.

$Ve = J(q)*Vq $ .....(eq 1)

where Ve is end effector velocty and Vq is the joint velocty.

so, for mapping joint velocty you need jacobian inverse

$Vq = inv(J(q))*Ve$ ..... (eq 2)

3) Now, how you can input Ve. So, for that you need to understand that the that jacobian base IK is the iterative method to solve IK. You need large number of iteration to obtain the required goal position and orientation.

Ve can be inputted in form of error vector. Error vector is the difference between the target position vector and current or home position vector. In your case it will be 6 x 1 matrix. Home position vector can be calculated by forward kinematcs. And target position vector can be calculated by the matrix you provided. the vector is in form [position vector, orientation vector]. position vector is 3 x 1 vctor form right top of transformation matrix and orientatin matrix is 3 x3 matrix at left top corner, you need to convert in euler angle 3x1 matrix.

4) Now you can apply eq-2 to solve inverse kinematics. This will approximate your solution. At the end of each iteration you need to calculte error vector. you need to define least square error when you stop iterating.


enter link description hereYou can Use Jacobian Method of course; couple of the techniques are

  1. Jacobian Inverse Method
  2. Jacobian Transpose Method
  3. Jacobian Pseudo_Inverse Method.

It depends, whether computational cost or accuracy is at stake

The Procedure is as follows: compute Transformation Matrix

Compute FKI (forward Kinematics)

i.e. (base to Tool Center Point(TCP) Transformation Matrix)

$$ T_{6}^{0} = T_{1}^{0}*T_{2}^{1}*T_{3}^{2}*T_{4}^{3}*T_{5}^{4}*T_{6}^{5}$$

Transformation matrix. In fact you can compute Transformation matrix from base to any point on any link of the robot arm.

Joint Velocity and end-effect velocity are related as $\qquad (1)$ $$V_{e} = J(q)\dot q $$

q-> joint position($\theta$),$\dot q$->joint velocity

J(q) is the Jacobian of the manipulator (6,dof) matrix

$J(q) = [z_{i} \times r_{6}^{i};z_{i}]$ for revolute joint

def  Matrix Jacobian(q):

 Matrix4d tempMat; //(4x4) matrix

 for i in range(0,dof):

    tempMat = get_T(i)  //transformation matrix from i-1 to i

    Ri    = R[i-1]*tempMat[0:3;0:3] //orientation Matrix
    Ti    = T[i-1]*tempMat

    zi  = Ri[:,2]
    Oi  = Ti[0:3,3]

    for i in range(0,dof):  
    Vector3d tempVec = zi.cross( Oi[dof] - Oi[i] )
    Jmat[0:3,i] = tempVec
    Jmat[3:6,i] = zi

    return Jmat

$z_{i}$->direction axis-i $3^{rd}$ column of $T_{1}^{0}*T_{2}^{1}..*T_{i-1}^{i}$ Matrix $r_{i}^{6} = r_{0}^{6} - r_{0}^{i}$ note(this is vector operation)is position vector from joint i to TCP(end-effector)

Thus to solve Inverse Kinematics do the inverse of velocity relation equation(1) as: $$\dot q = J^{(-1)}(q)*V_{e} $$

$$q = q_{0} + \int \dot q dt $$

or do numerical integration in case of a discrete motion (which is mostly the case in real robot control)

$$q = q_{prev} + qd*\Delta t$$, $$\Delta t -> sampling \ time $$

for Better and clear understanding read By these Authors

  • 1
    $\begingroup$ Welcome to Robotics Ababu. Great answer, but I'd suggest editing it with MathJax markdown. $\endgroup$
    – Ben
    Mar 29, 2018 at 13:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.