您的位置:首页 > 编程语言 > MATLAB

Matlab Robotics Toolbox系列—使用篇(5)

2016-12-01 17:18 393 查看
Chapter 5 Jacobian

% 雅可比矩阵和差分运动,差分运动可以用一组向量表示[dx dy dz drx dry drz],可用公式表示为transl(dx, dy, dz) * trotx(drx) * troty(dry) * trotz(drz),当然更直接用 diff2tr() 函数

>> D = [.1 .2 0 -.2 .1 .1]';

>> delta2tr(D)

ans =

 

    1.0000   -0.1000    0.1000    0.1000

    0.1000    1.0000    0.2000    0.2000

   -0.1000   -0.2000    1.0000         0

       0         0         0    1.0000

% 在其他坐标系下表示方法上,先给出坐标系变换矩阵,再用叉乘方式

>> T = transl(100, 200, 300) * troty(pi/8) * trotz(-pi/4);

>> DT = tr2jac(T) * D;

 

% 以puma560为例进行描述

>> mdl_puma560

>> q = [0.1 0.75 -2.25 0 .75 0]

 

% 计算该坐标系下的Jacobian矩阵

>> J = p560.jacob0(q)

J =

 

    0.0746   -0.3031   -0.0102         0         0         0

    0.7593   -0.0304   -0.0010         0         0         0

   -0.0000    0.7481    0.4322         0         0         0

   -0.0000    0.0998    0.0998    0.9925    0.0998    0.6782

    0.0000   -0.9950   -0.9950    0.0996   -0.9950    0.0681

    1.0000    0.0000    0.0000    0.0707    0.0000    0.7317

 

% 以关节末端为坐标系计算Jacobian矩阵

>> J = p560.jacobn(q)

J =

 

    0.1098   -0.7328   -0.3021         0         0         0

    0.7481    0.0000    0.0000         0         0         0

    0.1023    0.3397    0.3092         0         0         0

   -0.6816   -0.0000   -0.0000    0.6816         0         0

   -0.0000   -1.0000   -1.0000   -0.0000   -1.0000         0

0.7317    0.0000    0.0000    0.7317    0.0000    1.0000

% 右上角的3x3矩阵为0,表明了4-6关节的平移运动不会对末端产生影响

% 判断是否为奇异矩阵,可以用det()方法,不为0即可

>> det(J)

% 其逆矩阵为

>> Ji = inv(J) 

Ji =

    0.0000    1.3367   -0.0000   -0.0000   -0.0000         0

   -2.4946    0.6993   -2.4374         0    0.0000        0

    2.7410   -1.2106    5.9125    0.0000    0.0000   -0.0000

    0.0000    1.3367   -0.0000    1.4671   -0.0000        0

   -0.2464    0.5113   -3.4751   -0.0000   -1.0000         0

   -0.0000   -1.9561    0.0000   -1.0734    0.0000    1.0000

 

% Whitney's resolved rate motion control   dQ/dt = J(q)^-1 dX/dt

>> vel = [1 0 0 0 0 0]'; % translational motion in the X direction

>> qvel = Ji * vel;

>> qvel'

 

% 计算末端的变换矩阵

>> T6 = p560.fkine(q);

 

% 将世界坐标系下的速度转换为T6坐标系

>> d6X = tr2jac(T6) * vel;

 

% 计算关节速度

>> qvel = Ji *d6X;

 

% 可以通过Jacobian的秩来描述

>> rank( p560.jacobn(qr) )

 

% 对于特定的一组关节角,其奇异性可以衡量为:

>> svd( jacobn(p560, qr) )

 

% 两种用于描述可操作性的方法

>> p560.maniplty(q, 'yoshikawa')

>> p560.maniplty(q, 'asada')    %计入了惯量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: