本篇学习机械臂的正运动学,MDH法。
关节joint,连杆link,是机械臂的基本组成结构。
关节包括转动关节和移动关节,一般仅有一个自由度。
一个关节把相邻两连杆连接,n个关节把n+1个连杆连接起来,具有n个自由度。
把固定基座作为第0个连杆,机械臂末端的连杆作为第n个连杆。
两个相邻关节轴之间的公垂线的长度,称为连杆的长度。
两个相邻关节轴之间形成的角度,称为连杆的转角。
上图中,连杆i-1
的长度是其近端关节轴i-1
与远端关节轴i
之间的公垂线长度 a i − 1 a_{i-1} ai−1
连杆i-1
的转角是其近端关节轴i-1
与远端关节轴i
形成的角度 α i − 1 \alpha_{i-1} αi−1,至于角度的正负号,可以根据后面建立坐标系时再确定。
两个相邻连杆之间的距离,称为连杆偏距。
两个相邻连杆绕公共关节轴旋转的夹角,称为关节角。
由于实际的连杆是弯曲的,可以将公垂线段 a i − 1 a_{i-1} ai−1和 a i a_i ai 看作代替曲连杆的直连杆i-1
,i
。
直连杆i-1
,i
之间的距离是关节i
的连杆偏距 d i d_i di
直连杆i-1
沿关节轴i
旋转到直连杆i
的角度是关节角 θ i \theta_i θi
一个连杆可以使用上面的连杆长度、连杆转角、连杆偏距、关节角四个参数确定。
对于转动关节,关节角可变,另三个参数不变。
对于移动关节,连杆偏距可变,另三个参数不变。
可变的参数称为关节变量。
连杆坐标系用于描述相邻连杆之间的相对位置关系。
连杆坐标系编号与连杆编号相同,称为 { i } \{i\} {i}。
为连杆i
建立坐标系:
以关节轴i
作为Z轴
,以连杆i
与Z轴
的交点作为原点
,以连杆i
作为X轴
指向关节轴i+1
,以右手定则确定Y轴
。
例外:如果连杆i
的长度 a i = 0 a_i=0 ai=0(此时连杆i
,i+1
的Z轴
相交),以交点作为原点
,以两个Z轴所在平面
的垂线作为X轴
,方向可以有两种选择,而 α i \alpha_i αi的符号就由X轴
方向决定。
每个坐标轴的建立都要满足右手定则。
上图中,可以按这个顺序来建立坐标系:
首先找到所有的关节轴i-1,i
然后确定坐标系 { i − 1 } \{i-1\} {i−1},以关节轴作为 Z ^ i − 1 \hat Z_{i-1} Z^i−1,直连杆i-1
作为 X ^ i − 1 \hat X_{i-1} X^i−1,再右手定则确定 Y ^ i − 1 \hat Y_{i-1} Y^i−1。
然后确定坐标系 { i } \{i\} {i}。
对于首尾连杆0,n
,有特殊的建系方法。
坐标系 { 0 } \{0\} {0}在基座上,一般作为参考系。
第一个关节变量为0时,规定坐标系 { 0 } \{0\} {0}于 { 1 } \{1\} {1}重合。
当第一个关节为转动关节, d 1 = 0 d_1=0 d1=0;第一个关节为移动关节, θ 1 = 0 \theta_1=0 θ1=0
坐标系 { n } \{n\} {n}的原点和x轴
方向可以任意选取,但要尽量使得连杆参数为0。
按照上面的建系方法,可以把连杆参数重新定义:
设定 a i > 0 a_i>0 ai>0,其它参数可正可负。
上面建立连杆坐标系和连杆参数的方式称为MDH法(Modified Denavit–Hartenberg)。
DH法建立的坐标系并不是唯一的。
连杆参数可用于相邻杆之间的相对位姿计算。
上图中,考虑坐标系 { i − 1 } , { i } \{i-1\},\{i\} {i−1},{i}之间的变换 i − 1 i T ^i_{i-1}T i−1iT,建立中间坐标系 { P } , { Q } , { R } \{P\},\{Q\},\{R\} {P},{Q},{R},则有:
i i − 1 T = R i − 1 T Q R T P Q T i P T ^{i-1}_iT = \ ^{i-1}_RT \ ^R_{Q}T \ ^Q_PT \ ^P_{i}T ii−1T= Ri−1T QRT PQT iPT
上面的变换,可以看作是把 X ^ i \hat X_i X^i变换为 X ^ i − 1 \hat X_{i-1} X^i−1,则有:
i i − 1 T = R X ( α i − 1 ) D X ( a i − 1 ) R Z ( θ i ) D Z ( d i ) ^{i-1}_iT = R_X(\alpha_{i-1})D_X(a_{i-1})R_Z(\theta_i)D_Z(d_i) ii−1T=RX(αi−1)DX(ai−1)RZ(θi)DZ(di)
或者将每个中间坐标系的变换都写出来:
i P T = [ 1 0 0 0 0 1 0 0 0 0 1 d i 0 0 0 1 ] P Q T = [ cos θ 1 − sin θ 1 0 0 sin θ 1 cos θ 1 0 0 0 0 1 0 0 0 0 1 ] Q R T = [ 1 0 0 0 0 1 0 a i − 1 0 0 1 0 0 0 0 1 ] R i − 1 T = [ 1 0 0 0 0 cos α i − 1 − sin α i − 1 0 0 sin α i − 1 cos α i − 1 0 0 0 0 1 ] ^P_iT = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & d_i \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} \\ \quad \\ \ ^Q_PT = \begin{bmatrix} \cos \theta_1 & -\sin \theta_1 & 0 & 0 \\ \sin \theta_1 & \cos \theta_1 & 0 & 0 \\ 0 & 0 & 1 &0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} \\ \quad \\ \ ^R_QT = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & a_{i-1} \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} \\ \quad \\ \ ^{i-1}_RT = \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} \\ \quad \\ iPT=⎣⎢⎢⎡10000100001000di1⎦⎥⎥⎤ PQT=⎣⎢⎢⎡cosθ1sinθ100−sinθ1cosθ10000100001⎦⎥⎥⎤ QRT=⎣⎢⎢⎡1000010000100ai−101⎦⎥⎥⎤ Ri−1T=⎣⎢⎢⎡10000cosαi−1sinαi−100−sinαi−1cosαi−100001⎦⎥⎥⎤
得到 i i − 1 T ^{i-1}_iT ii−1T的一般形式:
本篇是机器人学中的正运动学,采用的是MDH法。
后续会有Matlab示例编程。