I am working on an ABB IRB120 simulation using MATLAB Simulink. I use the decoupling method to solve the inverse kinematic of the robot. However, I have some questions related to the computation of the last three joints (spherical wrist).

  1. I have read many books and I found that the solutions for the last 3 joints are not the same for theta 5,theta 4, theta 6 consequently. My question is that: Those formulas that I found in books or in the INTERNET, aren't they the same, or dependent on the D-H parameters of the robot (how we choose alpha, adding special angles 0,pi,pi/2 to Theta...). If they are dependent on the D-H parameters, then how could I choose the easiest posture to solve the robot.

    a. In the book Robot modeling and control (Siciliano), he chose the the final coordinate frame for the anthromopophic arm’s end-effector with X pointing upward (No special angle added to Theta6).

    b. However, in RoKiSim, X points downward (Pi is added to Theta6). Thus, I have looked at other papers and I saw different formulas. The question is: Why they choose these postures, and how they got those formulas.

  2. When I run the simulation, I saw that there are some points, the Theta 4 and Theta 5 rotate 180 degrees (change of signs), however, the end-effector is the same. Is there anyway for me to know if my code is correct (sample codes/ papers/ softwares…) so I can know I’m still on the right track.

I have built the robot and ready to implement the code at any time. I have built the controller and the only thing left is the kinematic itself. Should I keep enhancing my decoupling method inverse kinematic or move to analytical solutions, or any method that suit me. Please give me advice on this (I use 32bit ARM chip for the controller).

  • 1
    $\begingroup$ You can try to use IKFast package to geberate analytical solution in C++. It handy much easier than deriving solution manually. By the way if your motion planning is performed in C-space you and performance is bot much of the importance you can look at Jacobian based methods. They are quite easier to implement. $\endgroup$
    – Long Smith
    Jul 12, 2018 at 19:38

1 Answer 1


To choose the best posture:

  • If you have absolute encoders: compare which is the closest compared to your current position

  • if you use incremental encoders: You need a reference at the beginning (e.g. start the system always in the same posture). After that you can compare the next possible postures with your current posture (and look for the closest again)

this issue with the x axis. I don't understand your problem completely. Usually your robot can rotate around the z-axis of your tool frame. So you can choose x completely free. It is just a definition. You have just adapt your coordinates later to your chosen convention. So I wouldn't wonder when even robot manufacturer vary. You should now that DH parameters are not completely defined. Several correct solutions can exist.

A decoupled kinematic is always better for calculation and a analytical solution is faster than a numeric. So I would go on with this, if I were you. Do you know already this paper? It is from the proceedings of the Austrian Robotics Workshop - the implementation is open source here.

For checking your inverse kinematic: just calculate the forward kinematic. If the difference equals zero your implementation is consistant. That helps a lot but of course you could have the same mistake in forward and inverse transformation. So there is no guarantee.

  • 1
    $\begingroup$ Thank you for advice! Sorry It's been a while. I have finished my project. Anyways, your information is still a valuable reference I can add further to my robotics in the future! $\endgroup$
    – Tai Le
    Sep 17, 2018 at 14:46
  • $\begingroup$ Links appear dead, here is a C++ implementation github.com/Jmeyer1292/opw_kinematics $\endgroup$ Dec 10, 2023 at 21:27

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.