6自由度机械臂雅克比矩阵求解,结果同jacob0函数

雅可比矩阵描述了关节空间和笛卡尔空间的速度和角速度映射关系。

初学者入门通常会使用matlab中的robotics toolbox,在进行操作空间末端速度求解时会有疑问jacob0函数是怎样实现的。
在网上有很多人公布了jacobian求解的代码,但是都不能运行出正确的结果,本文给出了与机器人工具箱jacob0函数出一样结果的方法。
其公式基于:
在这里插入图片描述

syms theta1 theta2 theta3 theta4 theta5 theta6
theta1 = 0;theta2 = -90;theta3 = 90; theta4 =-180; theta5 = -90; theta6 = 0;
T01 = trans(theta1, 0, 0, 90); %theta是角度制
T12 = trans(theta2, 129,-310, 0);
T23 = trans(theta3,-129,-286, 0);
T34 = trans(theta4,93.5, 0, 90);
T45 = trans(theta5,93.5, 0,-90);
T56 = trans(theta6,67.5, 0, 0);
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([0;0;1],P06 );[0;0;1]];
j2 = [cross(z1,P06-P01);z1];
j3 = [cross(z2,P06-P02);z2];
j4 = [cross(z3,P06-P03);z3];
j5 = [cross(z4,P06-P04);z4];
j6 = [cross(z5,P06-P05);z5];
jacobian0 = [j1,j2,j3,j4,j5,j6]

function T = trans(theta, d, a, alpha)
T = [cos(deg2rad(theta)),-cos(deg2rad(alpha))*sin(deg2rad(theta)), sin(deg2rad(alpha))*sin(deg2rad(theta)),a*cos(deg2rad(theta));
sin(deg2rad(theta)), cos(deg2rad(alpha))*cos(deg2rad(theta)),-sin(deg2rad(alpha))*cos(deg2rad(theta)),a*sin(deg2rad(theta));
0, sin(deg2rad(alpha)), cos(deg2rad(alpha)), d;
0, 0, 0, 1];
end

输出结果:
在这里插入图片描述

对你有帮助的话就帮忙点个赞吧~

机器人工具箱结果:
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是计算7自由度机械臂雅克矩阵的MATLAB程序: ```matlab function J = robot_jacobian(q) % q为机械臂的关节角度,是一个7x1的列向量 % J为机械臂雅克矩阵,是一个6x7的矩阵 % 机械臂长度参数 a = [0, 0.4318, 0.0203, 0, 0, 0, 0]; d = [0.333, 0, 0.316, 0, 0.384, 0, 0.107]; alpha = [-pi/2, 0, pi/2, -pi/2, pi/2, -pi/2, 0]; % DH参数 DH = [q(1), a(1), d(1), alpha(1); q(2), a(2), d(2), alpha(2); q(3), a(3), d(3), alpha(3); q(4), a(4), d(4), alpha(4); q(5), a(5), d(5), alpha(5); q(6), a(6), d(6), alpha(6); q(7), a(7), d(7), alpha(7)]; % 计算正运动学矩阵 T = eye(4); for i = 1:7 T = T * dh_transform(DH(i,:)); end % 计算末端位置和姿态的雅克矩阵 Jv = zeros(3,7); Jw = zeros(3,7); for i = 1:7 % 计算第i个关节的旋转矩阵 Ti = eye(4); for j = 1:i-1 Ti = Ti * dh_transform(DH(j,:)); end Ri = Ti(1:3,1:3); pi = Ti(1:3,4); % 计算第i个关节的线速度雅克矩阵 zi = Ri(:,3); Jv(:,i) = cross(zi, T(1:3,4)-pi); % 计算第i个关节的角速度雅克矩阵 Jw(:,i) = zi; end % 将线速度雅克矩阵和角速度雅克矩阵合并成一个6x7的雅克矩阵 J = [Jv; Jw]; end function T = dh_transform(dh) % 计算DH参数为dh的转换矩阵 theta = dh(1); a = dh(2); d = dh(3); alpha = dh(4); T = [cos(theta), -sin(theta)*cos(alpha), sin(theta)*sin(alpha), a*cos(theta); sin(theta), cos(theta)*cos(alpha), -cos(theta)*sin(alpha), a*sin(theta); 0, sin(alpha), cos(alpha), d; 0, 0, 0, 1]; end ``` 使用方法: 1. 将上面的代码复制到MATLAB编辑器中。 2. 在MATLAB命令窗口中输入`robot_jacobian(q)`,其中`q`是机械臂的关节角度,是一个7x1的列向量。 3. 程序会返回机械臂雅克矩阵`J`,是一个6x7的矩阵

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值