我们首先研究关节坐标的微小变化如何影响末端执行器的位姿。使用齐次坐标变换表示位姿,我们可以通过一个一阶微分近似得到位姿相对于关节坐标的导数:
d T d q ≈ T ( q + δ q ) − T ( q ) δ q \dfrac{\text{d}T}{\text{d}q}\approx\dfrac{T(q+\delta_q)-T(q)}{\delta_q} dqdT≈δqT(q+δq)−T(q)根据 T T T 的定义,可以得到
d T d q ≈ 1 δ q ( R ( q + δ q ) − R ( q ) δ x δ y δ z 0 0 0 0 ) (1) \tag{1} \dfrac{\text{d}T}{\text{d}q}\approx\dfrac{1}{\delta_q} \left( \begin{matrix} R\left( q+\delta _q \right) -R\left( q \right)& \begin{array}{c} \delta _x\\ \delta _y\\ \delta _z\\ \end{array}\\ \begin{matrix} 0& 0& 0\\ \end{matrix}& 0\\ \end{matrix} \right) dqdT≈δq1⎝⎜⎜⎛R(q+δq)−R(q)000δxδyδz0⎠⎟⎟⎞(1)其中, ( δ x , δ y , δ z ) (\delta_x,\delta_y,\delta_z) (δx,δy,δz) 表示末端执行器的平移位移。下面我们举个例子
>> 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
得到的 矩阵显然不是齐次变换矩阵,其左上角的 3 × 3 3\times3 3×3 矩阵不是正交矩阵,右下角元素不为1。这说明了什么呢?
我们将dTdq1
中的第四列元素与方程 ( 1 ) (1) (1) 的矩阵中相应元素相等,得到
( δ x δ y δ z ) = ( 0.1500 0.5963 0 ) δ q 1 \left( \begin{array}{c} \delta _x\\ \delta _y\\ \delta _z\\ \end{array} \right) =\left( \begin{array}{c} 0.1500\\ 0.5963\\ 0\\ \end{array} \right) \delta _{q_1} ⎝⎛δxδ