机器人基础之雅克比矩阵

机器人基础之雅克比矩阵

  • 概述
  • 雅克比矩阵的构造
    • 微分运动和广义速度
    • 微分变换法
  • MATLAB实现

概述

雅克比矩阵 J ( q ) J(q) J(q)是从关节空间向操作空间的速度传递的线性关系,借助于机械原理中的概念,可以理解为广义传动比。
对于 n n n个关节的机器人,其雅克比矩阵是 6 × n 6\times n 6×n阶矩阵。其中前3行代表机器人末端坐标系线速度 v v v的传递比;后3行代表对手爪的角速度 ω \omega ω的传递比。另一方面,每一列代表相应的关节速度对末端坐标系线速度和角速度的传递比。因此,可将雅克比矩阵分块,即 [ v ω ] = [ J l 1 J l 2 ⋅ ⋅ ⋅ J l n J a 1 J a 2 ⋅ ⋅ ⋅ J a n ] [ q 1 q 2 q ˙ 1 q ˙ 2 ⋅ ⋅ ⋅ q ˙ n ] (1) \left[ \begin{matrix} v\\ \omega \end{matrix} \right] = \left[ \begin{matrix} J_{l1} & J_{l2} & \cdot\cdot\cdot & J_{ln}\\ J_{a1} & J_{a2} & \cdot\cdot\cdot & J_{an} \end{matrix} \right] \left[ \begin{matrix} q_1\\ q_2\\ \dot q_1\\ \dot q_2\\ \cdot \\ \cdot \\ \cdot \\ \dot q_n\\ \end{matrix} \right] \tag{1} [vω]=[Jl1Ja1Jl2Ja2JlnJan]q1q2q˙1q˙2q˙n(1)

雅克比矩阵的构造

微分运动和广义速度

刚体或坐标系的微分运动包含微分移动矢量 d d d和微分转动矢量 δ \delta δ。前者由沿三个坐标轴的微分移动组成,后者由绕三坐标轴的微分转动组成。将两者合并为6维列矢量 D D D,称为刚体或坐标系的微分运动矢量。 D = [ d δ ] (2) D=\left[ \begin{matrix} d\\ \delta\\ \end{matrix} \right] \tag{2} D=[dδ](2) 相应地,刚体或坐标系的广义速度 V V V是由线速度 v v v和角速度 ω \omega ω组成的6维列矢量。即 V = D ˙ = [ d ˙ δ ˙ ] (3) V=\dot D=\left[ \begin{matrix} \dot d\\ \dot\delta\\ \end{matrix} \right] \tag{3} V=D˙=[d˙δ˙](3) 微分运动矢量D和广义速度V也是相对于某坐标系而言的,在不同坐标系中表达式不同。若坐标系{T}相对于基坐标系的齐次变换矩阵为 T = [ n x o x a x p x n y o y a y p y n z o z a z p z 0 0 0 1 ] = [ n o a p ] (4) T=\left[ \begin{matrix} n_x & o_x & a_x & p_x \\ n_y & o_y & a_y & p_y \\ n_z & o_z & a_z & p_z \\ 0& 0& 0& 1\\ \end{matrix} \right] = \left[ \begin{matrix} n & o & a & p \\ \end{matrix} \right]\tag{4} T=nxnynz0oxoyoz0axayaz0pxpypz1=[noap](4) 则坐标系{T}中的微分运动 T D {^T}D TD和基坐标系中的微分运动 D D D之间的关系为: T D = [ n x n y a x ( p × n ) x ( p × n ) y ( p × n ) z o x o y o z ( p × o ) x ( p × o ) y ( p × o ) z a x a y a z ( p × a ) x ( p × a ) y ( p × a ) z 0 0 0 n x n y a x 0 0 0 o x o y o z 0 0 0 a x a y a z ] D (5) {^T}D = \left[ \begin{matrix} n_x & n_y & a_x & (p\times n)_x & (p\times n)_y & (p\times n)_z \\ o_x & o_y & o_z & (p\times o)_x & (p\times o)_y & (p\times o)_z\\ a_x & a_y & a_z & (p\times a)_x & (p\times a)_y & (p\times a)_z\\ 0& 0& 0& n_x & n_y & a_x\\ 0& 0& 0& o_x & o_y & o_z\\ 0& 0 & 0& a_x & a_y & a_z\\ \end{matrix} \right] D\tag{5} TD=nxoxax000nyoyay000axozaz000(p×n)x(p×o)x(p×a)xnxoxax(p×n)y(p×o)y(p×a)ynyoyay(p×n)z(p×o)z(p×a)zaxozazD(5) 上式简写为 T D = [ R T − R T S ( p ) 0 R T ] D (6) {^T}D = \left[ \begin{matrix} R^T & -R^TS(p) \\ 0 & R^T\\ \end{matrix} \right] D\tag{6} TD=[RT0RTS(p)RT]D(6) 其中 R = [ n x o x a x n y o y a y n z o z a z ] (7) R=\left[ \begin{matrix} n_x & o_x & a_x \\ n_y & o_y & a_y \\ n_z & o_z & a_z \end{matrix} \right] \tag{7} R=nxnynzoxoyozaxayaz(7) 反对称矩阵 S ( p ) S(p) S(p)定义为 S ( p ) = [ 0 − p z p y p z 0 p x − p y p x 0 ] (8) S(p)=\left[ \begin{matrix} 0& -p_z & p_y \\ p_z & 0 & p_x \\ -p_y & p_x & 0 \end{matrix} \right] \tag{8} S(p)=0pzpypz0pxpypx0(8) 类似的,任意两坐标系{A}和{B}之间微分运动的坐标变换为 B D = [ B R T − A B R T S ( B p B O ) 0 A B R T ] A D (9) {^B}D = \left[ \begin{matrix} {^B}R^T & -{^B_A}R^TS({^B}p_{BO}) \\ 0 & {^B_A}R^T\\ \end{matrix} \right] {^A}D\tag{9} BD=[BRT0ABRTS(BpBO)ABRT]AD(9)

微分变换法

下面采用构造性的方法,不需要求导而直接构造出 J l i J_{li} Jli J a i J_{ai} Jai
以六自由度机械臂为例。

  1. 首先计算出各连杆变换矩阵 1 0 T {^0_1}T 10T 2 1 T {^1_2}T 21T 3 2 T {^2_3}T 32T 4 3 T {^3_4}T 43T 5 4 T {^4_5}T 54T 6 5 T {^5_6}T 65T
  2. 然后利用公式 i − 1 i T = [ i i − 1 R T i i − 1 R T i − 1 P B O 0 1 ] (n) {^i_{i-1}}T = \left[ \begin{matrix} {^{i-1}_i}R^T & {^{i-1}_i}R^T {^{i-1}}P_{BO}\\ 0 & 1 \\ \end{matrix} \right] \tag{n} i1iT=[ii1RT0ii1RTi1PBO1](n)计算得 0 1 T {^1_0}T 01T 1 2 T {^2_1}T 12T 2 3 T {^3_2}T 23T 3 4 T {^4_3}T 34T 4 5 T {^5_4}T 45T 5 6 T {^6_5}T 56T
  3. 依次计算末端坐标系在各连杆坐标系中的变化矩阵 0 6 T {^6_0}T 06T 1 6 T {^6_1}T 16T 2 6 T {^6_2}T 26T 3 6 T {^6_3}T 36T 4 6 T {^6_4}T 46T 5 6 T {^6_5}T 56T
  4. 利用公式9计算微分运动变化矩阵。
  5. 若关节 i i i为直线运动,则取微分运动变化矩阵的第三列作为雅克比矩阵的第 i i i列;
    若关节 i i i为旋转运动,则取微分运动变化矩阵的第六列作为雅克比矩阵的第 i i i列;
    对于六自由度机械臂而言,显然取微分运动变化矩阵的第六列作为雅克比矩阵的第 i i i列。

至此,构造出机器人的雅克比矩阵。

MATLAB实现

function J = calJacobi(DH_parameter)
% 计算雅克比矩阵
% DH_parameter:DH参数表;

[dim_row, dim_col] = size(DH_parameter);
J = zeros(6, dim_row);

for i = 1 : dim_row
    T = calT(DH_parameter, i - 1, dim_row);
    R = T(1:3, 1:3);
    P = T(1:3, 4);
    DiffM = [R', -R' * antiSymMatrix(P); zeros(3, 3), R'];
    J(:, i) = DiffM(:, 6);
end

你可能感兴趣的:(机器人基础之雅克比矩阵)