# Denavit Hartenberg parameters - 3DOF articulated manipulator

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. And here the robot I get from Matlab (using the Robotics Toolbox by P.Corke) • Are these all rotational joints? Are you trying to solve for YZ? – 50k4 Nov 10 '15 at 23:26
• 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? – osuarez Nov 10 '15 at 23:52
• I meant XYZ............... – 50k4 Nov 11 '15 at 0:18
• 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! – osuarez Nov 11 '15 at 8:52
• What coordinates of the end-effector would you like to control? X Y and Z or some combination of position and orientation? – 50k4 Nov 11 '15 at 8:59

Try these:

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


with

 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.

• 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). – osuarez Nov 11 '15 at 11:08
• Sorry, I do not have Robotics Toolbox installed. Do you use the 'standard' parameter when you define the links? – 50k4 Nov 11 '15 at 11:16
• 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. – osuarez Nov 11 '15 at 11:25
• Do you have to initialize with the Dh parameters? can you initialize using the transformation matrix I have copy pasted? – 50k4 Nov 11 '15 at 11:54
• 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... – 50k4 Nov 11 '15 at 12:44

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.