一文带你完全掌握机器人DH参数建模(详细步骤+实例+代码)

一文带你完全掌握机器人DH参数建模(详细步骤+实例+代码)

文章目录

一、前言1、描述两个坐标系的变换关系需要6个参数(3个表示位置变换,3个表示姿态变换),为什么DH参数只需4个?2、利用DH参数建模时,各个连杆坐标系的建立是唯一的吗?3、DH参数表是唯一的吗?4、标准DH参数与修正DH参数有何异同?

二、标准DH参数1、DH四个参数的定义2、DH连杆坐标系的约定3、根据DH连杆坐标系约定,建立各个连杆坐标系4、根据DH四个参数的定义,创建DH参数表

三、六轴机器人实例(standard DH)1、第一种连杆坐标系建立方法2、第二种连杆坐标系建立方法

四、MATLAB代码五、参考资料

一、前言

1、描述两个坐标系的变换关系需要6个参数(3个表示位置变换,3个表示姿态变换),为什么DH参数只需4个?

空间任意两个坐标系的变换关系确实需要6个参数来表示,然而,在建立各个连杆的坐标系时,我们可以拟定一些规则,使得坐标系满足某些约束,从而只需4个参数则可以表示两个坐标系的变换关系。 若坐标轴

x

i

x_i

xi​与坐标轴

z

i

1

z_{i-1}

zi−1​垂直相交(示例如下图),则只需4个参数(杆件长度

a

i

a_i

ai​,杆件扭角

α

i

\alpha_i

αi​,关节距离

d

i

d_i

di​,关节转角

θ

i

\theta_i

θi​)就可以表示两个坐标系的变换关系。下面的证明来于书籍:Robot Modeling and Control(First Edition),by Mark W. Spong, Seth Hutchinson, and M. Vidyasagar.

若坐标系

{

x

1

y

1

z

1

}

\{x_1y_1z_1\}

{x1​y1​z1​}与坐标系

{

x

0

y

0

z

0

}

\{x_0y_0z_0\}

{x0​y0​z0​}垂直相交,则坐标系

{

x

1

y

1

z

1

}

\{x_1y_1z_1\}

{x1​y1​z1​}到坐标系

{

x

0

y

0

z

0

}

\{x_0y_0z_0\}

{x0​y0​z0​}的齐次变换矩阵为:

A

=

R

o

t

z

,

θ

T

r

a

n

s

z

,

d

T

r

a

n

s

x

,

a

R

o

t

x

,

α

(1)

A=Rot_{z,\theta} Trans_{z,d}Trans_{x,a}Rot_{x,\alpha}\tag{1}

A=Rotz,θ​Transz,d​Transx,a​Rotx,α​(1) (1)式可以写成:

A

=

[

R

1

0

O

1

0

0

1

]

(2)

A=\left[ \begin{matrix} R_1^0 & O_1^0\\ 0 & 1 \\ \end{matrix} \right] \tag{2}

A=[R10​0​O10​1​](2) 因为

x

1

x_1

x1​垂直于

z

0

z_0

z0​,故有:

0

=

x

1

0

z

0

0

=

[

r

11

r

21

r

31

]

[

0

0

1

]

=

r

31

(3)

0=x_1^0 \cdot z_0^0=\left[ \begin{matrix} r_{11} & r_{21} & r_{31}\\ \end{matrix} \right] \left[ \begin{matrix} 0 \\ 0 \\ 1 \\ \end{matrix} \right] =r_{31} \tag{3}

0=x10​⋅z00​=[r11​​r21​​r31​​]⎣⎡​001​⎦⎤​=r31​(3) 由于

r

31

=

0

r_{31}=0

r31​=0,只要证明存在唯一的杆件扭角

α

\alpha

α,关节转角

θ

\theta

θ,使得:

R

1

0

=

R

o

t

z

,

θ

R

o

t

x

,

α

=

[

c

θ

s

θ

c

α

s

θ

s

α

s

θ

c

θ

c

α

c

θ

s

α

0

s

α

c

α

]

(4)

R_1^0=Rot_{z,\theta}Rot_{x,\alpha}= \left[ \begin{matrix} c_\theta & -s_\theta c_\alpha & s_\theta s_\alpha \\ s_\theta & c_\theta c_\alpha & -c_\theta s_\alpha \\ 0 & s_\alpha & c_\alpha \end{matrix} \right] \tag{4}

R10​=Rotz,θ​Rotx,α​=⎣⎡​cθ​sθ​0​−sθ​cα​cθ​cα​sα​​sθ​sα​−cθ​sα​cα​​⎦⎤​(4)

因此,存在唯一的

θ

,

α

\theta,\alpha

θ,α满足:

{

(

r

11

,

r

21

)

=

(

c

θ

,

s

θ

)

(

r

32

,

r

33

)

=

(

c

α

,

s

α

)

(5)

\left \{ \begin{array}{c} (r_{11},r_{21})=(c_\theta,s_\theta) \\ (r_{32},r_{33})=(c_\alpha,s_\alpha) \end{array}\right. \tag 5

{(r11​,r21​)=(cθ​,sθ​)(r32​,r33​)=(cα​,sα​)​(5) 易得:

{

θ

=

a

t

a

n

2

(

r

21

,

r

11

)

α

=

a

t

a

n

2

(

r

32

,

r

33

)

(6)

\left \{ \begin{array}{c} \theta=atan2(r_{21},r_{11}) \\ \alpha=atan2(r_{32},r_{33}) \end{array}\right. \tag 6

{θ=atan2(r21​,r11​)α=atan2(r32​,r33​)​(6) 根据旋转矩阵的性质,可以推导得到:

{

s

θ

c

α

=

r

12

s

θ

s

α

=

r

13

c

θ

c

α

=

r

22

c

θ

s

α

=

r

23

(7)

\left \{ \begin{array}{c} -s_\theta c_\alpha=r_{12} \\ s_\theta s_\alpha=r_{13} \\ c_\theta c_\alpha=r_{22} \\ -c_\theta s_\alpha=r_{23} \\ \end{array}\right. \tag 7

⎩⎪⎪⎨⎪⎪⎧​−sθ​cα​=r12​sθ​sα​=r13​cθ​cα​=r22​−cθ​sα​=r23​​(7) 可见,坐标系

{

x

1

y

1

z

1

}

\{x_1y_1z_1\}

{x1​y1​z1​}到坐标系

{

x

0

y

0

z

0

}

\{x_0y_0z_0\}

{x0​y0​z0​}的旋转变换关系用

θ

,

α

\theta,\alpha

θ,α来表达就足够了。 若

x

1

x_1

x1​与

z

0

z_0

z0​相交,坐标系

{

x

1

y

1

z

1

}

\{x_1y_1z_1\}

{x1​y1​z1​}的原点在坐标系

{

x

0

y

0

z

0

}

\{x_0y_0z_0\}

{x0​y0​z0​}下的坐标(或平移向量)为:

O

1

0

=

O

0

0

+

d

z

0

0

+

a

x

1

0

=

[

0

0

0

]

+

d

[

0

0

1

]

+

a

[

c

θ

s

θ

0

]

=

[

a

c

θ

a

s

θ

d

]

(8)

O_1^0=O_0^0+dz_0^0+ax_1^0= \left[ \begin{matrix} 0 \\ 0 \\ 0 \\ \end{matrix} \right] +d\left[ \begin{matrix} 0 \\ 0 \\ 1 \\ \end{matrix} \right] +a\left[ \begin{matrix} c_{\theta} \\ s_{\theta} \\ 0 \\ \end{matrix} \right] = \left[ \begin{matrix} ac_{\theta} \\ as_{\theta} \\ d \\ \end{matrix} \right] \tag{8}

O10​=O00​+dz00​+ax10​=⎣⎡​000​⎦⎤​+d⎣⎡​001​⎦⎤​+a⎣⎡​cθ​sθ​0​⎦⎤​=⎣⎡​acθ​asθ​d​⎦⎤​(8) 综上,坐标系

{

x

1

y

1

z

1

}

\{x_1y_1z_1\}

{x1​y1​z1​}到坐标系

{

x

0

y

0

z

0

}

\{x_0y_0z_0\}

{x0​y0​z0​}的齐次变换关系用杆件长度

a

a

a,杆件扭角

α

\alpha

α,关节距离

d

d

d,关节转角

θ

\theta

θ 这4个参数就够了。

2、利用DH参数建模时,各个连杆坐标系的建立是唯一的吗?

利用DH参数建模时,各个连杆坐标系的建立不是唯一的。只要在建立坐标系时,坐标轴

x

i

x_i

xi​与坐标轴

z

i

1

z_{i-1}

zi−1​垂直相交即可。

3、DH参数表是唯一的吗?

DH参数表不是唯一的。因为各个连杆坐标系的建立不是唯一的,导致DH参数不同,但是最终计算得到末端工具坐标系到机器人基坐标系下的齐次变换矩阵是唯一的。(前提是机器人基坐标系与末端工具坐标系的建立保持不变)

4、标准DH参数与修正DH参数有何异同?

祥见参考资料2,3。 (1)标准DH参数坐标系建立在传动轴上,而修正DH参数坐标系建立在驱动轴上。 (2)由于坐标系建立位置发生了变化,连杆之间的坐标系变换关系自然也发生变化。 标准DH相邻连杆之间坐标系的变换关系为:

i

1

A

i

=

R

o

t

z

,

θ

i

T

r

a

n

s

z

,

d

i

T

r

a

n

s

x

,

a

i

R

o

t

x

,

α

i

(9)

^{i-1}A_i=Rot_{z,\theta_i} Trans_{z,d_i}Trans_{x,a_i}Rot_{x,\alpha_i}\tag{9}

i−1Ai​=Rotz,θi​​Transz,di​​Transx,ai​​Rotx,αi​​(9) 修正DH相邻连杆之间坐标系的变换关系为:

i

1

A

i

=

R

o

t

x

,

α

i

1

T

r

a

n

s

x

,

a

i

1

R

o

t

z

,

θ

i

T

r

a

n

s

z

,

d

i

(10)

^{i-1}A_i=Rot_{x,\alpha_{i-1}}Trans_{x,a_{i-1}}Rot_{z,\theta_i}Trans_{z,d_i} \tag{10}

i−1Ai​=Rotx,αi−1​​Transx,ai−1​​Rotz,θi​​Transz,di​​(10) (3)修正DH参数中各个参数的物理意义与标准DH参数是一样的。 (4)对于传统的串联机器人而言,两者的表现能力是一样的,没有优劣之分,我们可以选择其中一种方法进行建模。然而,由于修正DH参数坐标系建立在驱动轴上,对于树状结构的机器人,其表现能力更强,可以简化问题。 (5)对于标准DH参数,根据DH参数表,并对式(9) 连乘得到的是末端工具坐标系到机器人基坐标系的齐次变换矩阵;对于修正DH参数,根据DH参数表,并对式(10) 连乘得到的是最后一个驱动关节上的坐标系到机器人基坐标系的齐次变换矩阵,变换到末端工具坐标系还需增加一个变换(通常为平移变换)。

二、标准DH参数

1、DH四个参数的定义

(1)

d

i

d_i

di​ :坐标轴

x

i

1

x_{i-1}

xi−1​与坐标轴

x

i

x_{i}

xi​沿着坐标轴

z

i

1

z_{i-1}

zi−1​的有向距离。 (2)

a

i

a_i

ai​:坐标轴

z

i

1

z_{i-1}

zi−1​与坐标轴

z

i

z_{i}

zi​沿着坐标轴

x

i

x_{i}

xi​的有向距离。 (3)

α

i

\alpha_i

αi​:坐标轴

z

i

1

z_{i-1}

zi−1​与坐标轴

z

i

z_{i}

zi​的夹角,方向定义如下:

(4)

θ

i

\theta_i

θi​:坐标轴

x

i

1

x_{i-1}

xi−1​与坐标轴

x

i

x_{i}

xi​的夹角,方向定义如下:

2、DH连杆坐标系的约定

(1)坐标轴

x

i

x_{i}

xi​与坐标轴

z

i

1

z_{i-1}

zi−1​垂直。 (2)坐标轴

x

i

x_{i}

xi​与坐标轴

z

i

1

z_{i-1}

zi−1​相交。

3、根据DH连杆坐标系约定,建立各个连杆坐标系

4、根据DH四个参数的定义,创建DH参数表

三、六轴机器人实例(standard DH)

这里以六轴机器人为例,通过建立3种不同的连杆坐标系,创建对应的DH表,比较最终运动学正解最终结果是否一致。其中,

d

1

=

0.3991

a

2

=

0.448

a

3

=

0.042

d

4

=

0.451

d

6

=

0.082

d_1 = 0.3991,a_2 = 0.448,a_3 = 0.042, d_4 = 0.451, d_6 = 0.082

d1​=0.3991,a2​=0.448,a3​=0.042,d4​=0.451,d6​=0.082,以米为单位。两种不同的连杆坐标系的建立方法得到不同的DH参数表,但最终的机器人运动学正解完全一样!

1、第一种连杆坐标系建立方法

连杆坐标系建立如下:

DH参数表如下:

Link

d

i

d_i

di​

a

i

a_i

ai​

α

i

\alpha_i

αi​

θ

i

\theta_i

θi​1

d

1

d_1

d1​0

π

/

2

-\pi/2

−π/2

θ

1

\theta_1

θ1​20

a

2

a_2

a2​0

θ

2

π

/

2

\theta_2-\pi/2

θ2​−π/230

a

3

a_3

a3​

π

/

2

-\pi/2

−π/2

θ

3

\theta_3

θ3​4

d

4

d_4

d4​0

π

/

2

\pi/2

π/2

θ

4

\theta_4

θ4​500

π

/

2

-\pi/2

−π/2

θ

5

\theta_5

θ5​6

d

6

d_6

d6​00

θ

6

+

π

\theta_6+\pi

θ6​+π

2、第二种连杆坐标系建立方法

连杆坐标系建立如下:

DH参数表如下:

Link

d

i

d_i

di​

a

i

a_i

ai​

α

i

\alpha_i

αi​

θ

i

\theta_i

θi​1

d

1

d_1

d1​0

π

/

2

-\pi/2

−π/2

θ

1

\theta_1

θ1​20

a

2

-a_2

−a2​0

θ

2

+

π

/

2

\theta_2+\pi/2

θ2​+π/230

a

3

-a_3

−a3​

π

/

2

\pi/2

π/2

θ

3

\theta_3

θ3​4

d

4

d_4

d4​0

π

/

2

-\pi/2

−π/2

θ

4

\theta_4

θ4​500

π

/

2

\pi/2

π/2

θ

5

\theta_5

θ5​6

d

6

d_6

d6​00

θ

6

\theta_6

θ6​

四、MATLAB代码

clc;

clear;

syms d1 d2 d3 d4 d5 d6 a1 a2 a3 a4 a5 a6 real

syms alpha1 alpha2 alpha3 alpha4 alpha5 alpha6 real

syms theta1 theta2 theta3 theta4 theta5 theta6 real;

%% (1)

a1 = sym(0);

alpha1 = sym(-pi/2);

A1 = simplify([cos(theta1), -sin(theta1)*cos(alpha1), sin(theta1)*sin(alpha1), a1*cos(theta1)

sin(theta1), cos(theta1)*cos(alpha1), -cos(theta1)*sin(alpha1), a1*sin(theta1)

0, sin(alpha1), cos(alpha1), d1

0, 0, 0, 1]);

d2 = sym(0);

alpha2 = sym(0);

A2 = simplify([cos(theta2 - pi/2), -sin(theta2 - pi/2)*cos(alpha2), sin(theta2 - pi/2)*sin(alpha2), a2*cos(theta2 - pi/2)

sin(theta2 - pi/2), cos(theta2 - pi/2)*cos(alpha2), -cos(theta2 - pi/2)*sin(alpha2), a2*sin(theta2 - pi/2)

0, sin(alpha2), cos(alpha2), d2

0, 0, 0, 1]);

d3 = sym(0);

alpha3 = sym(-pi/2);

A3 = simplify([cos(theta3), -sin(theta3)*cos(alpha3), sin(theta3)*sin(alpha3), a3*cos(theta3)

sin(theta3), cos(theta3)*cos(alpha3), -cos(theta3)*sin(alpha3), a3*sin(theta3)

0, sin(alpha3), cos(alpha3), d3

0, 0, 0, 1]);

a4 = sym(0);

alpha4 = sym(pi/2);

A4 = simplify([cos(theta4), -sin(theta4)*cos(alpha4), sin(theta4)*sin(alpha4), a4*cos(theta4)

sin(theta4), cos(theta4)*cos(alpha4), -cos(theta4)*sin(alpha4), a4*sin(theta4)

0, sin(alpha4), cos(alpha4), d4

0, 0, 0, 1]);

a5 = sym(0);

d5 = sym(0);

alpha5 = sym(-pi/2);

A5 = simplify([cos(theta5), -sin(theta5)*cos(alpha5), sin(theta5)*sin(alpha5), a5*cos(theta5)

sin(theta5), cos(theta5)*cos(alpha5), -cos(theta5)*sin(alpha5), a5*sin(theta5)

0, sin(alpha5), cos(alpha5), d5

0, 0, 0, 1]);

a6 = sym(0);

alpha6 = sym(0);

A6 = simplify([cos(theta6+pi), -sin(theta6+pi)*cos(alpha6), sin(theta6+pi)*sin(alpha6), a6*cos(theta6+pi)

sin(theta6+pi), cos(theta6+pi)*cos(alpha6), -cos(theta6+pi)*sin(alpha6), a6*sin(theta6+pi)

0, sin(alpha6), cos(alpha6), d6

0, 0, 0, 1]);

T1 = simplify(A1*A2*A3*A4*A5*A6);

%% (2)

a1 = sym(0);

alpha1 = sym(-pi/2);

A1 = simplify([cos(theta1), -sin(theta1)*cos(alpha1), sin(theta1)*sin(alpha1), a1*cos(theta1)

sin(theta1), cos(theta1)*cos(alpha1), -cos(theta1)*sin(alpha1), a1*sin(theta1)

0, sin(alpha1), cos(alpha1), d1

0, 0, 0, 1]);

d2 = sym(0);

alpha2 = sym(0);

A2 = simplify([cos(theta2 + pi/2), -sin(theta2 + pi/2)*cos(alpha2), sin(theta2 + pi/2)*sin(alpha2), (-a2)*cos(theta2 + pi/2)

sin(theta2 + pi/2), cos(theta2 + pi/2)*cos(alpha2), -cos(theta2 + pi/2)*sin(alpha2), (-a2)*sin(theta2 + pi/2)

0, sin(alpha2), cos(alpha2), d2

0, 0, 0, 1]);

d3 = sym(0);

alpha3 = sym(pi/2);

A3 = simplify([cos(theta3), -sin(theta3)*cos(alpha3), sin(theta3)*sin(alpha3), (-a3)*cos(theta3)

sin(theta3), cos(theta3)*cos(alpha3), -cos(theta3)*sin(alpha3), (-a3)*sin(theta3)

0, sin(alpha3), cos(alpha3), d3

0, 0, 0, 1]);

a4 = sym(0);

alpha4 = sym(-pi/2);

A4 = simplify([cos(theta4), -sin(theta4)*cos(alpha4), sin(theta4)*sin(alpha4), a4*cos(theta4)

sin(theta4), cos(theta4)*cos(alpha4), -cos(theta4)*sin(alpha4), a4*sin(theta4)

0, sin(alpha4), cos(alpha4), d4

0, 0, 0, 1]);

a5 = sym(0);

d5 = sym(0);

alpha5 = sym(pi/2);

A5 = simplify([cos(theta5), -sin(theta5)*cos(alpha5), sin(theta5)*sin(alpha5), a5*cos(theta5)

sin(theta5), cos(theta5)*cos(alpha5), -cos(theta5)*sin(alpha5), a5*sin(theta5)

0, sin(alpha5), cos(alpha5), d5

0, 0, 0, 1]);

a6 = sym(0);

alpha6 = sym(0);

A6 = simplify([cos(theta6), -sin(theta6)*cos(alpha6), sin(theta6)*sin(alpha6), a6*cos(theta6)

sin(theta6), cos(theta6)*cos(alpha6), -cos(theta6)*sin(alpha6), a6*sin(theta6)

0, sin(alpha6), cos(alpha6), d6

0, 0, 0, 1]);

T2 = simplify(A1*A2*A3*A4*A5*A6);

err = simplify(T1 - T2)

五、参考资料

1.Robot Modeling and Control(First Edition),by Mark W. Spong, Seth Hutchinson, and M. Vidyasagar 2.https://blog.csdn.net/hitgavin/article/details/105018983 3.https://blog.csdn.net/jldemanman/article/details/80508683

相关推荐

王者荣耀: S1至S9各赛季版本历史回顾, 哪个赛季最让你念念不忘
“蕺菜”你吃过吗?“蕺”字不读qí,那它的正确读音是?
1986年预选赛
英国365bet官网

1986年预选赛

08-15 596