I have a robotic arm consist of three joints (servomotor for each joint), as shown in the figure below:

enter image description here


Each servomotor rotates around 180 degrees.

The angles of the theta2 and theta3 represent 90 degrees in the figure above.

I found the forward kinematics by using the parameters of DH convention, as shown in the figure above.

The Final Transformation Matrix is:

enter image description here

enter image description here

The position of the robotic arm end-effector is correct for any angle of theta1, theta2, and theta3 between -90 and 90 degrees.

My problem is in the inverse kinematics of the robotic arm, where, the theta2 always affected by theta3 and thus the response of theta2 incorrect, while theta1 and theta3 are always correct. Please see the cases below that show this problem.

enter image description here

enter image description here

Thank you.


I’ll get you started, and see if you can calculate all three joint angles given values for $X$, $Y$, and $Z$. If you cannot, we can continue peeling the onion until you are able to do that.

You will have to manipulate the expressions for $X$, $Y$, and $Z$, and use trigonometric identities to solve for the individual joint values.

Start with the easiest: using the $X$ and $Y$ terms only, you should be able to write an expression that only involves th1. It will be a tangent function that can be inverted to find th1.

Next, square the $X$ and $Y$ terms, and add them together. This will eliminate th1 from the expression. Subtract $Z$ squared from the remaining terms. You should be left with expressions of a constant times [cos(th2 + th3) cos(th2) + sin(th2 + th3) sin(th2)]. Using a trigonometric identity, this can be solved for th3 using the inverse cos function.

See if you can get to this point, then try other manipulations to solve for (th2 + th3), which will get you the last value.

  • $\begingroup$ thank you for your reply, but I solved my problem by using the geometry approach and also I got the same results. $\endgroup$ – B. Antony Feb 6 at 5:48
  • $\begingroup$ Great answer, it is possible to calculate the inverse kinematics without getting in touch with a real computer or real software projects. The answer explains the problem on a theoretical basis with a strong focus on algebra transformation. This avoids to raise detail problems which are happening while implementing the code in Python programming language or in a 3d physics engine. $\endgroup$ – Manuel Rodriguez Feb 6 at 10:05
  • $\begingroup$ @B.Antony, the geometric approach is also a great way to solve this problem. Good job. $\endgroup$ – SteveO Feb 6 at 20:53
  • $\begingroup$ Thanks @ManuelRodriguez. $\endgroup$ – SteveO Feb 6 at 20:53

6:50 ............................................... https://www.youtube.com/watch?v=9HfcMkfLh6k

New contributor
robotno is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.
  • $\begingroup$ Welcome to Robotics robotno. Thanks for your answer but we prefer answers to be self contained where possible. Links tend to rot so answers which rely on a link can be rendered useless if the linked content disappears. If you add more context from the link, it is more likely that people will find your answer useful. $\endgroup$ – Mark Booth yesterday

Calculating the forward kinematics with a mathematical equation is straight forward and recommended for all robotics arms. Trying to do the same with inverse kinematics results often in troubles. The problem is, that a given goal coordinate in the 3d space can be reached with different poses and during it's nonlinear nature it's not easy to find an explicit formula. The problem is, that a forward model can't be transformed into an inverse model by simply modifying the equation into a new one. Instead an approximate IK-solver is needed here.

For realizing such a solver the forward model gets random values as input and the best node of the resulting graph is identified with the help of constraints. The principle is called monte carlo IK solver or sampling based ik solver and is a standard widget in animation programs like Blender.

Perhaps a short note at the end: even the problem looks easy to solve on the first look, inverse kinematics is one of the hardest problems in robotics control. Running into trouble is the normal case and Google Scholar provides many thousands of papers about the pros and cons of different solvlng techniques. For some researchers the problem is so hard, that they give up the idea of a kinematic chain at all and use a more simpler mechanic design which is a linear robot. Such a design can reach a point in the space with lower amount of calculations.

  • 2
    $\begingroup$ The inverse kinematics for this manipulator are calculatable in closed-form, and have been published in many places. Iterative solutions are not needed for this 3DOF arm. $\endgroup$ – SteveO Feb 5 at 23:58
  • $\begingroup$ thank you for reply $\endgroup$ – B. Antony Feb 6 at 5:49
  • $\begingroup$ I concur with @SteveO when he says that for a 3DOF chain we shall use closed-form solution. Further, IK is not the hardest problem in Robotics since long by now; rather, it can be considered solved by resorting to: closed-form solutions, classical iterative Jacobian-based methods and optimization techniques. $\endgroup$ – Ugo Feb 6 at 9:11
  • $\begingroup$ I'm sorry, that my answer isn't oriented on the closed form inverse kinematics, which is the easiest one to implement. The problem is, that I'm focussed on practical coding in real projects. Even in a 2d environment without a physics engine i recommend the iterative solution, because I'm interested in results and not in beautiful mathematics. It's my fault. $\endgroup$ – Manuel Rodriguez Feb 6 at 10:12
  • $\begingroup$ I have implemented closed-form inverse kinematics equations as part of practical, real-world programs for 6 and 8 DOF systems. I don’t understand where you are coming from. But that’s probably tangential to this topic. $\endgroup$ – SteveO Feb 6 at 20:51

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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