I am trying to solve a forward kynematics problem for a 3DOF manipulator.

I am working with the Robotics Toolbox for MatLab created by Peter Corke and after calculte the DH parameters and introduce them into MatLab to compute the fordward kynematics the plotted robot is not what it should be.

I guess I made some mistakes calculating the DH parameters.

Attached is the file where you can see what are the DH frames calculated for each joint and the DH parameters for each frame.

Anyone could give me a clue whether this is the correct answer?

Here is the image with the frames calculated by me. enter image description here

And here the robot I get from Matlab (using the Robotics Toolbox by P.Corke) enter image description here

  • $\begingroup$ Are these all rotational joints? Are you trying to solve for YZ? $\endgroup$
    – 50k4
    Commented Nov 10, 2015 at 23:26
  • $\begingroup$ yes, they are all rotational joints. The red frames were calculated by me as a solution, but I think something is wrong there... What do you mean solve for YZ? $\endgroup$
    – osuarez
    Commented Nov 10, 2015 at 23:52
  • $\begingroup$ I meant XYZ............... $\endgroup$
    – 50k4
    Commented Nov 11, 2015 at 0:18
  • $\begingroup$ What I am trying to do is draw the frames for the 3 joints and calculate from them the theta, d, a and alfa parameters. I am still not sure what you mean solving it for XYZ, sorry! $\endgroup$
    – osuarez
    Commented Nov 11, 2015 at 8:52
  • $\begingroup$ What coordinates of the end-effector would you like to control? X Y and Z or some combination of position and orientation? $\endgroup$
    – 50k4
    Commented Nov 11, 2015 at 8:59

2 Answers 2


I defined the robot using your (assumed standard) DH parameters:

>> robot = SerialLink([pi/2 1 0 pi/2; pi/2 1 0 -pi/2; pi/2 1 1 0])
robot = 
noname:: 3 axis, RRR, stdDH, fastRNE                             
| j |     theta |         d |         a |     alpha |    offset |
|  1|         q1|          1|          0|     1.5708|          0|
|  2|         q2|          1|          0|    -1.5708|          0|
|  3|         q3|          1|          1|          0|          0|

Note that for revolute joints the value of theta is ignored, not it is replaced with the values q1 to q3 in the printed table above.

To plot the robot at this configuration:

>> robot.plot([pi/2 pi/2 pi/2])

shows a robot somewhat different to your diagram. I think your DH parameters are not correct.

I really don't like DH parameters. Looking at your diagram I can write the forward kinematics as a string of simple transformations expressed in the world coordinate frame

>> DHFactor('Rz(q1)Tz(L0)Rz(q2)Ty(L1)Tx(L2)Ry(q3)Tx(L3)')
DH(q1, 0, 0, 0).DH(q2, L0, L2, -90).DH(q3, L1, L3, 90)

where the parameters of the DH() functions are theta, d, a, alpha.


Try these:

Theta = [pi/2, -pi/2, -pi/2];
D     = [L0,    L2,    L1  ];
A     = [0,     0,     L3  ];
Alfa  = [pi/2, -pi/2,  0   ];


 T = [cos(theta) -sin(theta)*cos(alpha) sin(theta)*sin(alpha) a*cos(theta); 
      sin(theta) cos(theta)*cos(alpha) -cos(theta)*sin(alpha) a*sin(theta);
      0          sin(alpha)             cos(alpha)            d;
      0          0                      0                     1];

i added the matrix to make sure the differences do not come from the differences in the DH and modified DH paramters.

  • $\begingroup$ Thanks for the help! Can you try your parameters with the Robotics Toolbox by Peter Corke? I have similar results when I create a SerialLink with yours. The robot plotted no resembles the one in the picture, and I am not sure why. (I choosed L1, L2, and L3 = 1). $\endgroup$
    – osuarez
    Commented Nov 11, 2015 at 11:08
  • $\begingroup$ Sorry, I do not have Robotics Toolbox installed. Do you use the 'standard' parameter when you define the links? $\endgroup$
    – 50k4
    Commented Nov 11, 2015 at 11:16
  • $\begingroup$ yes. I use the stdDH. I attached at the first message an image with the robot I get from Matlab with my parameters. The one get using yours, is quite similar. $\endgroup$
    – osuarez
    Commented Nov 11, 2015 at 11:25
  • 1
    $\begingroup$ Do you have to initialize with the Dh parameters? can you initialize using the transformation matrix I have copy pasted? $\endgroup$
    – 50k4
    Commented Nov 11, 2015 at 11:54
  • $\begingroup$ Assuming that the global fram is displayed in the image, it seems that you are building up the robot in an inverted order. The first joint connected to the XYZ frame is translated in two dimentions, but the table only has two translateion (a and d) for the last frame... $\endgroup$
    – 50k4
    Commented Nov 11, 2015 at 12:44

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.