Default vs. Real DH Parameters

Hello!

Can someone please explain to me why there is such a difference (parameter: d2, d3, d4) between the default and real
UR3cb robot DH parameters.

Default DH parameter (from urcontrol.conf file):
a = [0.00000, -0.24365, -0.21325, 0.00000, 0.00000, 0.0000]
d = [0.1519, 0.00000, 0.00000, 0.11235, 0.08535, 0.0819]

Real DH parameter (from urp file):
a = [-8.877594828730812E-5, -0.24190932780158622, -0.1944686038508423, -3.430756754524374E-5, 8.014394699916158E-5, 0.0]
d = [0.15201944530996783, 6.288151284507379, 13.782504034925292, -19.95853123846862, 0.08528467571374589, 0.08231231418889878]

Thanks you and best regards!
Mitja

Hello!

We want to get an accurate kinematic model of the UR3 robot. So I have extracted the parameters both from the urcontrol.conf file and from an unzipped .urp file. If I use this real kinematic (DH) parameters, I get completely wrong solutions.

Can anyone explain why there is such a difference between the real and default D-H parameters (d-parameter).

Thanks you and best regards!
Mitja

Hi @mitja.golob

Other articles explain this in detail, please search for DH parameters on the forum. But in short, the robot has offsets from the ideal values after it has been calibrated. So you must add these offsets to the DH parameters. It then works perfectly. I agree, the offsets are pretty wild, but cancel out, leading to tiny deviations from the “ideal”, but will match the values the UR teach pendant shows. It’s also the reason why control boxes and robots should never be mixed with other sets.

Regards,

Max

Hi,

Thanks for your help.

Maybe one example. If I try in this way, I don’t get a proper solution. What could be wrong here?

a_dist = [0.00000, -0.24365, -0.21325, 0.00000, 0.00000, 0.0000];
d_dist = [0.1519, 0.00000, 0.00000, 0.11235, 0.08535, 0.0819];
alpha = [1.570796327, 0, 0, 1.570796327, -1.570796327, 0];
theta = [0, 0, 0, 0, 0, 0];

delta_theta = [1.46784724364846482e-05, 0.125194454792358717, 0.298589965416812431, -0.423762927247810284, 2.086302247193182e-05, 6.34186815268841846e-05];
delta_a = [-8.87759482873081237e-05, 0.00174067219841378407, 0.018781396149157692, -3.43075675452437408e-05, 8.01439469991615784e-05, 0];
delta_d = [0.000119445309967824986, 6.28815128450737859, 13.7825040349252923, -20.070881238468619, -6.53242862541092428e-05, 0.000412314188898782463];
delta_alpha = [0.00170780282864457789, 0.00484436940923784701, 0.00437109159076555162, 0.000652816409936640696, -0.00010301091898123893, 0];

L(1) = Link([theta(1)+delta_theta(1), d_dist(1)+delta_d(1), a_dist(1)+delta_a(1), alpha(1)+delta_alpha(1)]);
L(2) = Link([theta(2)+delta_theta(2), d_dist(2)+delta_d(2), a_dist(2)+delta_a(2), alpha(2)+delta_alpha(2)]);
L(3) = Link([theta(3)+delta_theta(3), d_dist(3)+delta_d(3), a_dist(3)+delta_a(3), alpha(3)+delta_alpha(3)]);
L(4) = Link([theta(4)+delta_theta(4), d_dist(4)+delta_d(4), a_dist(4)+delta_a(4), alpha(4)+delta_alpha(4)]);
L(5) = Link([theta(5)+delta_theta(5), d_dist(5)+delta_d(5), a_dist(5)+delta_a(5), alpha(5)+delta_alpha(5)]);
L(6) = Link([theta(6)+delta_theta(6), d_dist(6)+delta_d(6), a_dist(6)+delta_a(6), alpha(6)+delta_alpha(6)]);

Thanks you and best regards!
Mitja

Hi!

I solved the problem, thank you.

Best regards.
Mitja

HI!

Maybe one more question. The calculation of direct kinematics (DK) works correctly. How can I then calculate the inverse kinematics (IK)? What should I change or add (based on these real DH parameters no IK solution is found)?

Thank you and best regards!

Mitja

Hi!

Any suggestion, what I should change or add that the calculation of the inverse kinematics (UR3cb robot) based on the real DH parameters of the robot would be correct? Code example below:

……

L(1) = Link([new_Theta(1), new_d(1), new_a(1), new_Alpha(1)]);

L(2) = Link([new_Theta(2), new_d(2), new_a(2), new_Alpha(2)]);

L(3) = Link([new_Theta(3), new_d(3), new_a(3), new_Alpha(3)]);

L(4) = Link([new_Theta(4), new_d(4), new_a(4), new_Alpha(4)]);

L(5) = Link([new_Theta(5), new_d(5), new_a(5), new_Alpha(5)]);

L(6) = Link([new_Theta(6), new_d(6), new_a(6), new_Alpha(6)]);

q_deg = [-150.380, -153.420, 110.890, -98.730, -44.050, 177.720];

q_rad = deg2rad(q_deg);

Rob_UR3cb = SerialLink(L,‘tool’,TCP);

Rob_UR3cb.name = ‘UR3e_robot’;

HTM = Rob_UR3e.fkine(q_rad); → OK

q_cal = Rob_UR3e.ikine(HTM); → NO SOLUTION (it should be: q_cal = q_deg)

……

Thank you and best regards!
Mitja

Hi!

Does anyone have any suggestions (solution), what should be changed / added to make the inverse kinematics calculation appropriate? If I use real DH parameters, the direct kinematics calculation is correct, while the inverse kinematics calculation is incorrect!

Thanks you and best regards!
Mitja