【机器人学】3-1.六自由度机器人速度域-雅可比矩阵【附MATLAB代码】

  MATLAB仿真验证

已知六轴机器人的D-H参数如下所示:

关节1关节2关节3关节4关节5关节6
\alpha09000-9090
a0042539300
d160.700113.39993.6
\theta0900-9000
\beta000000

通过D-H参数,选用改进型的D-H参数,可以得到各个关节间的旋转矩阵。详细请看我的第一篇博客六自由度机器人正解

% 求齐次变换矩阵
function T = DHTrans(alpha, a, d, theta)
T= [cos(theta)             -sin(theta)            0            a;
    sin(theta)*cos(alpha)  cos(theta)*cos(alpha)  -sin(alpha)  -sin(alpha)*d;
    sin(theta)*sin(alpha)  cos(theta)*sin(alpha)  cos(alpha)   cos(alpha)*d;
    0                      0                      0            1];
end
%微分法求解雅克比矩阵
function result =  differential(theta)
th(1) = theta(1); d(1) = 0.1607; a(1) = 0; alp(1) = 0;
th(2) = theta(2); d(2) = 0; a(2) = 0; alp(2) = pi/2;   
th(3) = theta(3); d(3) = 0; a(3) = 0.425; alp(3) = 0;
th(4) = theta(4); d(4) = 0.1133; a(4) = 0.393; alp(4) = 0;
th(5) = theta(5); d(5) = 0.099; a(5) = 0; alp(5) = -pi/2;
th(6) = theta(6); d(6) = 0.0936; a(6) = 0; alp(6) = pi/2;

T01 = DHTrans(alp(1), a(1), d(1), th(1));
T12 = DHTrans(alp(2), a(2), d(2), th(2)+pi/2);
T23 = DHTrans(alp(3), a(3), d(3), th(3));
T34 = DHTrans(alp(4), a(4), d(4), th(4)-pi/2);
T45 = DHTrans(alp(5), a(5), d(5), th(5));
T56 = DHTrans(alp(6), a(6), d(6), th(6));

T06 = T01*T12*T23*T34*T45*T56;
T46 = T45*T56;
T36 = T34*T45*T56;
T26 = T23*T34*T45*T56;
T16 = T12*T23*T34*T45*T56;


% j11 = [-T06(1,1)*T06(2,4)+T06(2,1)*T06(1,4);-T06(1,2)*T06(2,4)+T06(2,2)*T06(1,4);-T06(1,3)*T06(2,4)+T06(2,3)*T06(1,4);[T06(3,1);T06(3,2);T06(3,3)]];
j11 = [-T16(1,1)*T16(2,4)+T16(2,1)*T16(1,4);-T16(1,2)*T16(2,4)+T16(2,2)*T16(1,4);-T16(1,3)*T16(2,4)+T16(2,3)*T16(1,4);[T16(3,1);T16(3,2);T16(3,3)]];
j22 = [-T26(1,1)*T26(2,4)+T26(2,1)*T26(1,4);-T26(1,2)*T26(2,4)+T26(2,2)*T26(1,4);-T26(1,3)*T26(2,4)+T26(2,3)*T26(1,4);[T26(3,1);T26(3,2);T26(3,3)]];
j33 = [-T36(1,1)*T36(2,4)+T36(2,1)*T36(1,4);-T36(1,2)*T36(2,4)+T36(2,2)*T36(1,4);-T36(1,3)*T36(2,4)+T36(2,3)*T36(1,4);[T36(3,1);T36(3,2);T36(3,3)]];
j44 = [-T46(1,1)*T46(2,4)+T46(2,1)*T46(1,4);-T46(1,2)*T46(2,4)+T46(2,2)*T46(1,4);-T46(1,3)*T46(2,4)+T46(2,3)*T46(1,4);[T46(3,1);T46(3,2);T46(3,3)]];
j55 = [-T56(1,1)*T56(2,4)+T56(2,1)*T56(1,4);-T56(1,2)*T56(2,4)+T56(2,2)*T56(1,4);-T56(1,3)*T56(2,4)+T56(2,3)*T56(1,4);[T56(3,1);T56(3,2);T56(3,3)]];
j66 = [0;0;0;0;0;1];
T06 = T01*T12*T23*T34*T45*T56;
T = [T06(1,1) T06(1,2) T06(1,3) 0 0 0;
    T06(2,1) T06(2,2) T06(2,3) 0 0 0
    T06(3,1) T06(3,2) T06(3,3) 0 0 0
    0 0 0 T06(1,1) T06(1,2) T06(1,3)
    0 0 0 T06(2,1) T06(2,2) T06(2,3)
    0 0 0 T06(3,1) T06(3,2) T06(3,3)];
jacobian1 = T*[j11,j22,j33,j44,j55,j66];
result = jacobian1;

end

%矢量积法求解雅克比矩阵
function result =  vector(theta)
th(1) = theta(1); d(1) = 0.1607; a(1) = 0; alp(1) = 0;
th(2) = theta(2); d(2) = 0; a(2) = 0; alp(2) = pi/2;   
th(3) = theta(3); d(3) = 0; a(3) = 0.425; alp(3) = 0;
th(4) = theta(4); d(4) = 0.1133; a(4) = 0.393; alp(4) = 0;
th(5) = theta(5); d(5) = 0.099; a(5) = 0; alp(5) = -pi/2;
th(6) = theta(6); d(6) = 0.0936; a(6) = 0; alp(6) = pi/2;

T01 = DHTrans(alp(1), a(1), d(1), th(1));
T12 = DHTrans(alp(2), a(2), d(2), th(2)+pi/2);
T23 = DHTrans(alp(3), a(3), d(3), th(3));
T34 = DHTrans(alp(4), a(4), d(4), th(4)-pi/2);
T45 = DHTrans(alp(5), a(5), d(5), th(5));
T56 = DHTrans(alp(6), a(6), d(6), th(6));


T02 = T01*T12;
T03 = T01*T12*T23;
T04 = T01*T12*T23*T34;
T05 = T01*T12*T23*T34*T45;
T06 = T01*T12*T23*T34*T45*T56;
P01 = [T01(1,4);T01(2,4);T01(3,4)];
P02 = [T02(1,4);T02(2,4);T02(3,4)];
P03 = [T03(1,4);T03(2,4);T03(3,4)];
P04 = [T04(1,4);T04(2,4);T04(3,4)];
P05 = [T05(1,4);T05(2,4);T05(3,4)];
P06 = [T06(1,4);T06(2,4);T06(3,4)];

z1 = T01(1:3,3);
z2 = T02(1:3,3);
z3 = T03(1:3,3);
z4 = T04(1:3,3);
z5 = T05(1:3,3);
z6 = T06(1:3,3);
j1 = [cross(z1,P06-P01);z1];
j2 = [cross(z2,P06-P02);z2];
j3 = [cross(z3,P06-P03);z3];
j4 = [cross(z4,P06-P04);z4];
j5 = [cross(z5,P06-P05);z5];
j6 = [cross(z6,P06-P06);z6];
jacobian0 = [j1,j2,j3,j4,j5,j6];
result = jacobian0;
end

%机器人工具箱测试
clc
clear;
% 输入关节角
q(1)=150.1/180*pi;
q(2)=-25.19/180*pi;
q(3)=-35.07/180*pi;
q(4)=-155.82/180*pi;
q(5)=256.86/180*pi;
q(6)=-1.51/180*pi;
%机器人工具箱建立机器人模型
%        theta(z)   d(z)     a(x)     alpha(x)  
L1=Link([  0       0.1607       0        0       ],'modified');
L2=Link([  0       0        0       pi/2    ],'modified');L2.offset = pi/2;
L3=Link([  0       0        0.425       0       ],'modified');
L4=Link([  0       0.1133       0.393       0    ],'modified');L4.offset = -pi/2;
L5=Link([  0       0.099        0       -pi/2    ],'modified');
L6=Link([  0       0.0936        0        pi/2    ],'modified');
My_Robot=SerialLink([L1,L2,L3,L4,L5,L6],'name','My_Robot');
vector = vector(q)
differential = differential(q)
%调用机器人工具箱的jacob0函数,求解雅克比矩阵
robot_data = My_Robot.jacob0(q)

测试结果:

下一章:4-1.六自由度机器人动力学

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值