zoukankan      html  css  js  c++  java
  • 机器人学(MATLAB机器人工具箱10.x)——4.1-雅克比矩阵(1)

    我们首先研究关节坐标的微小变化如何影响末端执行器的位姿。使用齐次坐标变换表示位姿,我们可以通过一个一阶微分近似得到位姿相对于关节坐标的导数:
    dTdqT(q+δq)T(q)δq dfrac{ ext{d}T}{ ext{d}q}approxdfrac{T(q+delta_q)-T(q)}{delta_q} 根据 TT定义,可以得到
    dTdq1δq(R(q+δq)R(q)δxδyδz0000)(1) ag{1} dfrac{ ext{d}T}{ ext{d}q}approxdfrac{1}{delta_q} left( egin{matrix} Rleft( q+delta _q ight) -Rleft( q ight)& egin{array}{c} delta _x\ delta _y\ delta _z\ end{array}\ egin{matrix} 0& 0& 0\ end{matrix}& 0\ end{matrix} ight) 其中,(δx,δy,δz)(delta_x,delta_y,delta_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×33 imes3 矩阵不是正交矩阵,右下角元素不为1。这说明了什么呢?

    我们将dTdq1中的第四列元素与方程 (1)(1) 的矩阵中相应元素相等,得到
    (δxδyδz)=(0.15000.59630)δq1 left( egin{array}{c} delta _x\ delta _y\ delta _z\ end{array} ight) =left( egin{array}{c} 0.1500\ 0.5963\ 0\ end{array} ight) delta _{q_1}
    它代表了 q1q_1 的变化引起的末端执行器位置的变化。
    在这里插入图片描述
    从图中我们能更容易地理解——腰关节(q1q_1)的一个微小的旋转将使得末端执行器在世界坐标系水平的 xyxy 平面内移动,但却不产生垂直方向上的移动。

    >> 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
    

    同样可以写出
    (δxδyδz)=(0.014400.5963)δq2 left( egin{array}{c} delta _x\ delta _y\ delta _z\ end{array} ight) =left( egin{array}{c} 0.0144\ 0\ 0.5963\ end{array} ight) delta _{q_2}
    正如我们所预料的,肩关节 q2q_2 的一个微小转动会引起末端执行器在垂直的 xzxz 平面内的运动,而没有 yy 方向运动。等式两边同除以一个无限小的时间长度 δtdelta_t,则得到关节角速度和末端执行器速度之间的一个关系:
    (x˙y˙z˙)=(0.014400.5963)q˙2 left( egin{array}{c} dot x\ dot y\ dot z\ end{array} ight) =left( egin{array}{c} 0.0144\ 0\ 0.5963\ end{array} ight) {dot q_2}
    现在考虑方程 (1)(1) 的矩阵中左上方的 3×33×3 子矩阵。我们将其乘以 δq/δtdelta_q/delta_t ,从而得到 RR 的一阶近似导数:
    R˙(R(q+δq)R(q)δq)δqδt dot{R}approx left( frac{Rleft( q+delta _q ight) -Rleft( q ight)}{delta _q} ight) frac{delta _q}{delta _t}
    回顾前面对正交旋转矩阵导数的定义,可以写出:
    S(ω)R(R(q+δq)R(q)δq)q˙1 Sleft( omega ight) Rapprox left( frac{Rleft( q+delta _q ight) -Rleft( q ight)}{delta _q} ight) dot{q}_1
    S(ω)(R(q+δq)R(q)δqRT)q˙1 Sleft( omega ight) approx left( frac{Rleft( q+delta _q ight) -Rleft( q ight)}{delta _q}R^T ight) dot{q}_1
    从上式可以得出一个末端执行器角速度和关节速度之间的关系:
    ωvex(R(q+δq)R(q)δqRT)q˙1 omega approx ext{vex}left( frac{Rleft( q+delta _q ight) -Rleft( q ight)}{delta _q}R^T ight) dot{q}_1
    继续利用前面算的关节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
    

    最后得出
    (ωxωyωz)=(001)q˙1 left( egin{array}{c} omega _x\ omega _y\ omega _z\ end{array} ight) =left( egin{array}{c} 0\ 0\ 1\ end{array} ight) dot{q}_1
    从之前那张图可以很容易地理解上式,末端执行器的角速度就是关节 1 绕着世界坐标系 zz 轴旋转的角速度。

    对第二关节的微小运动重复上述过程,得到

    >> 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
    

    最后得出
    (ωxωyωz)=(010)q˙2 left( egin{array}{c} omega _x\ omega _y\ omega _z\ end{array} ight) =left( egin{array}{c} 0\ -1\ 0\ end{array} ight) dot{q}_2
    再次参见之前的图片来理解上式,关节 2 的转动轴线在 yy 轴负方向上,其旋转将使机械臂得到一个负y轴方向上的角速度。

    一个雅可比矩阵就是一个向量关于另一个向量的向量值函数导数。如果 y=F(x)y=F(x),且 xRn,yRmxinmathbb{R}_n,yinmathbb{R}_m,则雅可比矩阵是一个 m×nm×n 阶的矩阵:
    J=Fx(y1x1y1xnymx1ymxn) J=frac{partial F}{partial x}left( egin{matrix} frac{partial y_1}{partial x_1}& cdots& frac{partial y_1}{partial x_n}\ vdots& ddots& vdots\ frac{partial y_m}{partial x_1}& cdots& frac{partial y_m}{partial x_n}\ end{matrix} ight)
    我们已经建立了各个关节的速度和机器人末端执行器的移动速度和角速度之间的数字关系。我们将机械臂的正运动学写为以下函数形式:
    0ξ=K(q) ^0xi=mathcal{K}(q)
    对其求导数得到:
    0ν=0J(q)q˙ ^0 u ={}^0Jleft( q ight) dot{q}
    这是一个瞬时正运动学,其中 ν=(vx,vy,vz,ωx,ωy,ωz)R6 u=(v_x,v_y,v_z,omega_x,omega_y,omega_z)inmathbb{R}^6 是一个空间速度,包含平移速度和旋转速度分量。矩阵 J(q)R6×NJ(q)inmathbb{R}^{6 imes N} 是机械臂的雅可比矩阵或称为几何雅可比矩阵。可以通过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
    

    矩阵的行对应于笛卡儿自由度,而列对应于各个关节——它们是对应于各相应关节单位速度的末端执行器空间速度。前两列即为前面使用近似导数所计算出的结果。其右上方 3×33×3 阶的“0”表明手腕关节的运动对末端执行器的平移运动没有任何影响——这是机械臂拥有球腕和一个零长度工具的必然结果。

  • 相关阅读:
    Java中的static关键字解析
    Hadoop记录-metastore jmx配置
    Hadoop记录-hadoop jmx配置
    Hadoop记录-yarn ResourceManager Active频繁易主问题排查(转载)
    Hadoop记录-hive merge小文件
    Linux记录-salt命令
    Hadoop记录-Hadoop监控指标汇总
    Hadoop记录-日常运维操作
    Hadoop记录-技术网站
    Hadoop记录-Hadoop jmx
  • 原文地址:https://www.cnblogs.com/thewaytotheway/p/12847225.html
Copyright © 2011-2022 走看看