我们首先研究关节坐标的微小变化如何影响末端执行器的位姿。使用齐次坐标变换表示位姿,我们可以通过一个一阶微分近似得到位姿相对于关节坐标的导数:
根据 的定义,可以得到
其中, 表示末端执行器的平移位移。下面我们举个例子
>> mdl_puma560
>> T0 = p560.fkine(qn);
>> dq = 1e-6;
>> Tp = p560.fkine(qn + [dq 0 0 0 0 0]);
>> dTdq1 = (Tp - T0) / dq
dTdq1 =
0.0000 -1.0000 -0.0000 0.1500
-0.0000 -0.0000 1.0000 0.5963
0 0 0 0
0 0 0 0
得到的 矩阵显然不是齐次变换矩阵,其左上角的 矩阵不是正交矩阵,右下角元素不为1。这说明了什么呢?
我们将dTdq1
中的第四列元素与方程 的矩阵中相应元素相等,得到
它代表了 的变化引起的末端执行器位置的变化。
从图中我们能更容易地理解——腰关节()的一个微小的旋转将使得末端执行器在世界坐标系水平的 平面内移动,但却不产生垂直方向上的移动。
>> Tp = p560.fkine(qn + [0 dq 0 0 0 0]);
>> dTdq2 = (Tp - T0) / dq
dTdq2 =
1.0000 -0.0000 -0.0000 0.0144
0.0000 0 0.0000 0
0.0000 0.0000 1.0000 0.5963
0 0 0 0
同样可以写出
正如我们所预料的,肩关节 的一个微小转动会引起末端执行器在垂直的 平面内的运动,而没有 方向运动。等式两边同除以一个无限小的时间长度 ,则得到关节角速度和末端执行器速度之间的一个关系:
现在考虑方程 的矩阵中左上方的 子矩阵。我们将其乘以 ,从而得到 的一阶近似导数:
回顾前面对正交旋转矩阵导数的定义,可以写出:
从上式可以得出一个末端执行器角速度和关节速度之间的关系:
继续利用前面算的关节1的导数,得到:
>> dRdq1 = dTdq1(1:3,1:3);
>> R = T0.R
R =
-0.0000 0.0000 1.0000
-0.0000 1.0000 -0.0000
-1.0000 -0.0000 -0.0000
>> S = dRdq1 * R'
S =
-0.0000 -1.0000 0.0000
1.0000 -0.0000 0.0000
0 0 0
这是一个反对称矩阵,从中可以提取出角速度向量:
>> vex(S)
ans =
-0.0000
0.0000
1.0000
最后得出
从之前那张图可以很容易地理解上式,末端执行器的角速度就是关节 1 绕着世界坐标系 轴旋转的角速度。
对第二关节的微小运动重复上述过程,得到
>> dRdq2 = dTdq2(1:3,1:3);
>> S = dRdq2 * R'
S =
-0.0000 -0.0000 -1.0000
0.0000 -0.0000 -0.0000
1.0000 -0.0000 -0.0000
>> vex(S)
ans =
0.0000
-1.0000
0.0000
最后得出
再次参见之前的图片来理解上式,关节 2 的转动轴线在 轴负方向上,其旋转将使机械臂得到一个负y轴方向上的角速度。
一个雅可比矩阵就是一个向量关于另一个向量的向量值函数导数。如果 ,且 ,则雅可比矩阵是一个 阶的矩阵:
我们已经建立了各个关节的速度和机器人末端执行器的移动速度和角速度之间的数字关系。我们将机械臂的正运动学写为以下函数形式:
对其求导数得到:
这是一个瞬时正运动学,其中 是一个空间速度,包含平移速度和旋转速度分量。矩阵 是机械臂的雅可比矩阵或称为几何雅可比矩阵。可以通过jacob0
方法计算
>> J = p560.jacob0(qn)
J =
0.1501 0.0144 0.3197 0 0 0
0.5963 0.0000 0.0000 0 0 0
0 0.5963 0.2910 0 0 0
-0.0000 -0.0000 -0.0000 0.7071 -0.0000 1.0000
0.0000 -1.0000 -1.0000 -0.0000 -1.0000 -0.0000
1.0000 0.0000 0.0000 -0.7071 0.0000 -0.0000
矩阵的行对应于笛卡儿自由度,而列对应于各个关节——它们是对应于各相应关节单位速度的末端执行器空间速度。前两列即为前面使用近似导数所计算出的结果。其右上方 阶的“0”表明手腕关节的运动对末端执行器的平移运动没有任何影响——这是机械臂拥有球腕和一个零长度工具的必然结果。