1
$\begingroup$

I want to write a Matlab function which takes the DH parameters as input and outputs a 4X4 transformation matrix.

The code I have written is :

function  [A]  = compute_dh_matrix(r, alpha, d, theta)

A = eye(4);

% ROTATION FOR X
A(1,1) = cos((theta));
A(2,1) = sin((theta));

% ROTATION FOR Y 
A(1,2) = -(sin(theta))*(cos(alpha))*(1);
A(2,2) = (cos(theta))*(cos(alpha));
A(3,2) = (sin(alpha));

% ROTATION FOR Z
A(1,3) = (sin(theta))*(sin(alpha));
A(2,3) = -(cos(theta))*(sin(alpha))*(1);
A(3,3) = (cos(alpha));

% TRANSLATION VECTOR
A(1,4) = (alpha)*(cos(theta));
A(2,4) = (alpha)*(sin(theta));
A(3,4) = d;

end

But when I submit the code for evaluation in an online platform it prompts that variable A has incorrect value.

One of the input data used for evaluation of the code is :

r = 5;
alpha = 0;
d = 3;
theta = pi/2;

The matrix representation I have used to write the code is :

$A =$ \begin{bmatrix}cos(\theta)&&-\sin(\theta)\cos(\alpha)&&\sin(\theta)\sin(\alpha)&&\alpha \cos(\theta)\\\sin(\theta)&&\cos(\theta)\cos(\alpha)&&-\cos(\theta)\sin(\alpha)&&\alpha \sin(\theta)\\0&&\sin(\alpha)&&\cos(\alpha)&&d\\0&&0&&0&&1\end{bmatrix}

A is the transformation matrix generated using DH parameters $\theta$, $\alpha$ and d

$\alpha$ is angle about common normal from old z axis to new z axis

$\theta$ is angle about previous z axis, from old x axis to new x axis

d is offset along previous z axis to the common normal

$\endgroup$
4
  • $\begingroup$ Check your formulae for A(1,2) and A(2,3). I assume you intended to negate the values? $\endgroup$ Jul 5, 2018 at 15:09
  • $\begingroup$ sorry, I actually missed it while writing the question. I have edited it :) $\endgroup$
    – MSD
    Jul 5, 2018 at 15:12
  • $\begingroup$ I don't think you need radtodeg for $\alpha$ in the translation part. $\endgroup$ Jul 6, 2018 at 10:17
  • $\begingroup$ It's not working even on removing radtodeg $\endgroup$
    – MSD
    Jul 7, 2018 at 11:21

1 Answer 1

0
$\begingroup$

The multiplication factor in the translation terms should be the link length instead of the angle $\alpha$.

That is, the translation should be $(r\cos\theta, r\sin\theta, d)$.

$\endgroup$

Your Answer

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

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