运动学是力学的一个分支,它在不考虑质量和作用力的前提下研究一个刚体,或者由多个刚体组成系统的运动。一个串联机械臂是由多个连杆和运动副组成的运动链。通过运动副的连接,一个连杆能相对于另一个连杆做相对运动。运动链的一端,即机械手的基座,通常上是固定不动的,而运动链另一端上一般有夹持工具或者末端执行器,可以在空间中自由运动。
一个串联机械臂的整个链路是由一组被称为连杆的刚体组成的,这些连杆由关节(运动副)连接起来。每个关节有一个平移(滑动或移动副)或者转动(转动副)的自由度。关节的运动改变了其邻接连杆的相对角度和位置。通常大部分机器人的关节都是回转的。
一个机器人的关节结构可以用一串字符来描述,例如 Puma560 为“RRRRRR”,斯坦福臂为“RRPRRR”,其中每个字符代表相应关节的类型,R是转动副,P为移动副。迪拉维特(Denavit)和哈滕贝格(Hartenberg)于1955年提出了一种用于描述这种串联式链路上连杆和关节几何关系的系统方法,这就是如今熟知的 D-H 参数法。
有 N N N 个关节(编号从 1 1 1 到 N N N)的机械臂具有 N + 1 N+1 N+1 个连杆(编号从 0 0 0 到 N N N)。连杆 0 0 0 是机械臂的基座,连杆 N N N 则固接末端执行器或者工具。关节 j j j 将连杆 j − 1 j-1 j−1 连接到连杆上,因此关节 j j j 带动连杆 $j。连杆被看作一个刚体,它确定了其相邻两个关节轴线的空间关系。一个连杆由长度 a j a_j aj和扭转角 α j \alpha_j αj,两个参数来描述。同样,一个关节也由两个参数来描述,其中连杆偏移 d j d_j dj 是指沿着关节轴线从一个连杆坐标系到另一个连杆坐标系的距离,而关节角 θ j \theta_j θj,则是指一个连杆相对于另一个连杆关于关节轴线的转动角度。
如图所示。 { j } \{j\} {j} 坐标系固接于连杆 j j j 的远端或末梢。关节 j j j 的轴线即为该坐标系的 z z z 轴。这些连杆和关节的参数即我们所熟知的 D-H 参数,总结于下表中。
参数 | 符号 | 物理含义 | 定义 |
---|---|---|---|
关节角 | θ j \theta_j θj | x j − 1 x_{j-1} xj−1 轴和 x j x_j xj 轴之间关于 z j − 1 z_{j-1} zj−1 轴的角度 | 转动关节变量 |
连杆偏移 | d j d_j dj | 沿着 z j − 1 z_{j-1} zj−1 轴, j − 1 j-1 j−1 坐标系原点到 x j x_j xj 轴的距离 | 移动关节变量 |
连杆长度 | a j a_j aj | 沿着 x j x_j xj 轴, z j − 1 z_{j-1} zj−1 轴和 z j z_j zj 轴之间的距离;对于相交轴,它与 z ^ j − 1 × z ^ j \hat{z}_{j-1}\times\hat{z}_j z^j−1×z^j 平行 | 常量 |
连杆扭转角 | α j \alpha_j αj | z j − 1 z_{j-1} zj−1 轴和 z j z_j zj 轴之间关于 x j x_{j} xj 轴的角度 | 常量 |
关节类型 | σ j \sigma_j σj | σ = 0 \sigma=0 σ=0为转动副, σ = 1 \sigma=1 σ=1为移动副 | 常量 |
按照约定,第一个关节,即关节 1 1 1,连接连杆 0 0 0 和连杆 1 1 1。连杆 0 0 0 为机器人的基座。通常来说第一个连杆有 d 1 = α 1 = 0 d_1=\alpha_1=0 d1=α1=0,然而我们可以设定 d 1 > 0 d_1>0 d1>0 用来表示肩关节的高度超出基座。在一个制造系统中,基座通常是固定在环境中的,然而它有可能安装在一个移动的基座上,例如一架航天飞机、一个水下机器人或者一辆卡车。
最后一个关节,即关节 N N N,连接连杆 N − 1 N-1 N−1 和连杆 N N N。连杆 N N N 是机器人的工具,它的相关参数 d N d_N dN 和 a N a_N aN 分别代表了工具的长度及其 x x x 轴的偏移量。如图所示,这个工具通常指向 z z z 轴。
从连杆坐标系 { j − 1 } \{j-1\} {j−1} 到坐标系 { j } \{j\} {j} 的变换被定义为基本旋转和平移,其形式如下:
j − 1 A j ( θ j , d j , a j , α j ) = T R z ( θ j ) T z ( d j ) T x ( a j ) T R x ( α j ) ^{j-1}A_j(\theta_j,d_j,a_j,\alpha_j)=T_{Rz}(\theta_j)T_z(d_j)T_x(a_j)T_{Rx}(\alpha_j) j−1Aj(θj,dj,aj,αj)=TRz(θj)Tz(dj)Tx(aj)TRx(αj)展开如下
j − 1 A j = ( cos θ j − sin θ j cos α j sin θ j sin α j a j cos θ j sin θ j cos θ j cos α j − cos θ j sin α j a j sin θ j 0 sin α j cos α j d j 0 0 0 1 ) ^{j-1}A_j=\left( \begin{matrix} \cos \theta _j& -\sin \theta _j\cos \alpha _j& \sin \theta _j\sin \alpha _j& a_j\cos \theta _j\\ \sin \theta _j& \cos \theta _j\cos \alpha _j& -\cos \theta _j\sin \alpha _j& a_j\sin \theta _j\\ 0& \sin \alpha _j& \cos \alpha _j& d_j\\ 0& 0& 0& 1\\ \end{matrix} \right) j−1Aj=⎝⎜⎜⎛cosθjsinθj00−sinθjcosαjcosθjcosαjsinαj0sinθjsinαj−cosθjsinαjcosαj0ajcosθjajsinθjdj1⎠⎟⎟⎞
参数 a j a_j aj 和 α j \alpha_j αj,始终是常量。对于转动关节 θ j \theta_j θj 是关节变量且 d j d_j dj 是常量,然而对于移动关节 d j d_j dj 是变量, θ j \theta_j θj 是常量,且 α j = 0 \alpha_j=0 αj=0。在很多公式中,我们将使用如下的广义关节坐标:
q j = { θ j , σ j = 0 转 动 关 节 d j , σ j = 1 移 动 关 节 q_j=\left\{ \begin{array}{l} \theta _j,\quad\sigma_j=0转动关节\\[1em] d_j,\quad\sigma_j=1移动关节\\ \end{array} \right. qj=⎩⎨⎧θj,σj=0转动关节dj,σj=1移动关节对于一个 N N N 轴的机器人,其广义关节坐标为 q ∈ C q\in\mathcal{C} q∈C,其中 C ⊂ R N \mathcal{C}\subset\mathbb{R}^N C⊂RN 被称为关节空间或者位形空间。一般情况下,一个全旋转关节机器人 C ⊂ S N \mathcal{C}\subset\mathbb{S}^N C⊂SN 的关节坐标被称为关节角度。这种关节坐标同时也被称为机械臂姿态,它不同于属于笛卡儿姿态 ξ ∈ S E ( 3 ) \xi\in SE(3) ξ∈SE(3) 的末端执行器的姿态。
我们使用机器人工具箱中的Link
对象来描述一个机器人连杆,其创建如下:
>> L = Link([0, 0.1, 0.2, pi/2, 0])
L =
theta=q, d=0.1, a=0.2, alpha=1.571, offset=0 (R,stdDH)
其中,输入向量的元素按顺序分别是 θ j \theta_j θj, d j d_j dj, a j a_j aj, α j \alpha_j αj。而可选的第 5 5 5 个元素 σ j \sigma_j σj 则表明该关节是转动的 σ j = 0 \sigma_j=0 σj=0 还是移动的 σ j = 1 \sigma_j=1 σj=1 ,如果未指定该值则默认为转动关节。
该Link
对象的显示值不仅给出了其运动学参数,还表示了其他的一些状态,例如它是一个转动关节(标签“R
”),以及使用了标准的 D-H 参数表达(标签“stdDH
”)。
尽管赋给了 θ \theta θ 一个值,但并没有显示出来——这个值在运动学参数系列中仅仅作为一个占位者。 θ \theta θ 将被关节变量 q q q 所取代,因此它的值在
Link
对象中被忽略掉了。这个值将由Link
对象进行管理。
当 q = 0.5 q=0.5 q=0.5 时,连杆变换矩阵如下:
>> L.A(0.5)
ans =
0.8776 -0.0000 0.4794 0.1755
0.4794 0.0000 -0.8776 0.0959
0 1.0000 0.0000 0.1000
0 0 0 1.0000
这是一个 4 × 4 4×4 4×4 的齐次变换矩阵。我们可以对不同连杆参数的值进行读取或更改。例如:
>> L.RP
ans =
'R'
它表明这个连杆是一个转动型的。而
>> L.a
ans =
0.2000
它返回运动参数 a a a 的值。最后,一个连杆还能包含一个偏移量:
>> L.offset = 0.5;
>> L.A(0)
ans =
0.8776 -0.0000 0.4794 0.1755
0.4794 0.0000 -0.8776 0.0959
0 1.0000 0.0000 0.1000
0 0 0 1.0000
该值将在计算连杆变换之前加到关节变量中。