引言
重新复习了一下机器人学DH参数,并且利用matlab符号运算进行了推导,验证了公式。
1.DH参数原理
图中的坐标系定义:
- 坐标系
i
{i}
i的
z
z
z轴
z
i
z_i
zi?和关节轴线
i
i
i共线,指向任意规定。
- 坐标系
i
{i}
i的
x
x
x轴
x
i
x_i
xi?和
a
i
a_i
ai?重合,由关节
i
i
i指向关节
i
+
1
i+1
i+1,当
a
i
=
0
a_i=0
ai?=0,取
x
i
=
±
z
i
+
1
×
z
i
x_i=±z_{i+1}\times z_i
xi?=±zi+1?×zi?。
- 坐标系
i
{i}
i的
y
y
y轴
y
i
y_i
yi?按右手法则规定。
- 坐标系
i
{i}
i的原点
o
i
o_i
oi?取在
x
i
x_i
xi?和
z
i
z_i
zi?的交点上;当
z
i
z_i
zi?和
z
i
+
z_{i+}
zi+?相交时,原点取再两轴交点上,当
z
i
z_i
zi?和
z
i
+
z_{i+}
zi+?平行时,原点取在使
d
i
+
1
=
0
d_{i+1}=0
di+1?=0的地方。
利用连杆坐标系定义相应的连杆参数:
-
a
i
a_i
ai?=从
z
i
z_i
zi?到
z
i
+
1
z_{i+1}
zi+1?沿
x
i
x_i
xi?测量的距离(公垂线长度)
-
α
i
\alpha_i
αi?=从
z
i
z_i
zi?到
z
i
+
1
z_{i+1}
zi+1?沿
x
i
x_i
xi?旋转的角度
-
d
i
d_i
di?=从
x
i
?
1
x_{i-1}
xi?1?到
x
i
x_{i}
xi?沿
z
i
z_i
zi?测量的距离
-
θ
i
\theta_i
θi?=从
x
i
?
1
x_{i-1}
xi?1?到
x
i
x_{i}
xi?沿
z
i
z_i
zi?旋转的角度
坐标系
{
i
}
\{i\}
{i}相对坐标系
{
i
?
1
}
\{i-1\}
{i?1}的变换矩阵
i
?
1
T
i
{}^{i-1}T_{i}
i?1Ti?可以看作四个子变换矩阵的乘积:
- 绕
x
i
?
1
x_{i-1}
xi?1?轴转
α
i
?
1
\alpha_{i-1}
αi?1?角
R
o
t
x
(
α
i
?
1
)
=
[
1
0
0
0
0
c
o
s
α
i
?
1
?
s
i
n
α
i
?
1
0
0
s
i
n
α
i
?
1
c
o
s
α
i
?
1
0
0
0
0
1
]
R o t_{x}\left(\alpha_{i-1}\right)=\begin{bmatrix}1 &0&0&0\\ 0&cos\alpha_{i-1}&{-sin\alpha_{i-1}}&0\\0&{sin\alpha_{i-1}}&{cos\alpha_{i-1}}&{0}\\ {0}&{0}&{0}&{1}\end{bmatrix}
Rotx?(αi?1?)=?????1000?0cosαi?1?sinαi?1?0?0?sinαi?1?cosαi?1?0?0001?????? - 沿
x
i
?
1
x_{i-1}
xi?1?轴移动
a
i
?
1
a_{i-1}
ai?1?
T
r
a
n
s
x
(
a
i
?
1
)
=
[
1
0
0
a
i
?
1
0
1
0
0
0
0
1
0
0
0
0
1
]
T r a n s_{x}\left(a_{i-1}\right)=\begin{bmatrix}1 &0&0&a_{i-1}\\ 0&1&0&0\\0&0&1&{0}\\ {0}&{0}&{0}&{1}\end{bmatrix}
Transx?(ai?1?)=?????1000?0100?0010?ai?1?001?????? - 沿
z
i
z_{i}
zi?轴移动
θ
i
\theta_{i}
θi?
R
o
t
z
(
θ
i
)
=
[
c
o
s
θ
i
?
s
i
n
θ
i
0
0
s
i
n
θ
i
c
o
s
θ
i
0
0
0
0
1
0
0
0
0
1
]
R o t_{z}\left(\theta_{i}\right)=\begin{bmatrix}{cos\theta_{i}}&{-sin\theta_{i}}&0&0\\ {sin\theta_{i}}&{cos\theta_{i}}&0&0\\0&0&1&0\\ {0}&{0}&{0}&{1}\end{bmatrix}
Rotz?(θi?)=?????cosθi?sinθi?00??sinθi?cosθi?00?0010?0001?????? - 沿
z
i
z_{i}
zi?轴移动
d
i
d_{i}
di?
T
r
a
n
s
z
(
d
i
)
=
[
1
0
0
0
0
1
0
0
0
0
1
d
i
0
0
0
1
]
T r a n s_{z}\left(d_{i}\right)=\begin{bmatrix}1 &0&0&0\\ 0&1&0&0\\0&0&1&d_i\\ {0}&{0}&{0}&{1}\end{bmatrix}
Transz?(di?)=?????1000?0100?0010?00di?1??????
这些变换都是相对运动坐标系描述的,满足从左到右的原则,可以得到最终变换公式如下:
i
i
?
1
T
=
R
o
t
x
(
α
i
)
T
r
a
n
s
x
(
a
i
)
R
o
t
z
(
θ
i
)
T
r
a
n
s
z
(
d
i
)
_{i}^{i-1}T=R o t_{x}\left(\alpha_{i}\right)T r a n s_{x}\left(a_{i}\right)R o t_{z}\left(\theta_{i}\right)T r a n s_{z}\left(d_{i}\right)
ii?1?T=Rotx?(αi?)Transx?(ai?)Rotz?(θi?)Transz?(di?) 通常规定
a
i
≥
0
a_i\ge0
ai?≥0,因为它代表连杆长度,而
α
i
,
d
i
,
θ
i
\alpha_i, d_i, \theta_i
αi?,di?,θi?可正可负。
i
i
?
1
T
=
[
c
o
s
θ
i
?
s
i
n
θ
i
0
a
i
?
1
s
i
n
θ
i
c
o
s
α
i
?
1
c
o
s
θ
i
c
o
s
α
i
?
1
?
s
i
n
α
i
?
1
?
d
i
s
i
n
α
i
?
1
s
i
n
θ
i
s
i
n
α
i
?
1
c
o
s
θ
i
s
i
n
α
i
?
1
c
o
s
α
i
?
1
d
i
c
o
s
α
i
?
1
0
0
0
1
]
_{i}^{i-1}T=\begin{bmatrix}{cos\theta_{i}}&{-sin\theta_{i}}&0&{a _{i-1}}\\ {sin\theta_{i}cos\alpha_{i-1}}&{cos\theta_{i}cos\alpha_{i-1}}&{-sin\alpha_{i-1}}&{-d_isin\alpha_{i-1}}\\{sin\theta_{i}sin\alpha_{i-1}}&{cos\theta_{i}sin\alpha_{i-1}}&{cos\alpha_{i-1}}&{d_icos\alpha_{i-1}}\\ {0}&{0}&{0}&{1}\end{bmatrix}
ii?1?T=?????cosθi?sinθi?cosαi?1?sinθi?sinαi?1?0??sinθi?cosθi?cosαi?1?cosθi?sinαi?1?0?0?sinαi?1?cosαi?1?0?ai?1??di?sinαi?1?di?cosαi?1?1??????
2.Matlab符号运算验证
利用Matlab的符号运算进行公式推导进行一下公式的验证
syms theta d alpha a
M=DH_Trans(theta,d,alpha,a)
function M=DH_Trans(theta,d,alpha,a)
R_z_theta=[cos(theta),-sin(theta),0,0;...
sin(theta),cos(theta),0,0;...
0,0,1,0;...
0,0,0,1];
T_z_d=[1,0,0,0;...
0,1,0,0;...
0,0,1,d;...
0,0,0,1];
R_x_alpha=[1,0,0,0;...
0,cos(alpha),-sin(alpha),0;...
0,sin(alpha),cos(alpha),0;...
0,0,0,1];
T_x_a=[1,0,0,a;...
0,1,0,0;...
0,0,1,0;...
0,0,0,1];
M=R_x_alpha*T_x_a*R_z_theta*T_z_d;
end
结果是一致的
|