雅克比矩阵是联系末端操作空间速度与空间关节速度的枢扭,推导过程如下:
文章图片
雅克比矩阵为m*n矩阵,其中m表示末端操作空间的自由度,一般为6个(即 x y z Wx Wy Wz),n为关节空间的关节数,本例中为6旋转关节机器人,史陶比尔TX90
雅克比矩阵中各个元素的推导如图
文章图片
通过编写代码和机器人工具箱求解对比,发现结果一致,运行结果如下:
>> >> [J,T] = TX90_jacobian([0 0 0 0 00 ])//机器人工具箱的解J =-50.0000950.0000525.00000100.00000
50.00000.00000000
0-0.00000000
000000
01.00001.000001.00000
1.00000.00000.00001.00000.00001.0000T =1.00000050.0000
01.0000050.0000
001.0000950.0000
0001.0000>>>> [ J ] = ykb( [0 0 0 0 0 0 ] )//自己写的求雅克比函数J =[ -50.0,950.0,525.0,0,100.0,0]
[50.0,0,0,0,0,0]
[0,0,0,0,0,0]
[0,0,0,0,0,0]
[0,1.0,1.0,0,1.0,0]
[1.0, 6.123234e-17, 6.123234e-17, 1.0, 6.123234e-17, 1.0]>>>> [ T06] = tx90_ForwardKinematics( [0 0 0 0 0 0] )T06 =10050
01050
001950
0001
%自己的正运动学变换矩阵和雅克比矩阵与机器人工具箱求解的一致
%工具箱输入角度为[90 45 0 90 0 45]的求解结果 >> [J,T] = TX90_jacobian([90 45 0 90 0 45])J = -721.7514000 -100.00000
-50.0000671.7514371.2311-0.000000
-0.0000 -671.7514 -371.23110.0000-0.00000
0.0000-1.0000-1.00000.0000-0.00000.0000
-0.00000.00000.00000.7071-0.70710.7071
1.0000-0.0000-0.00000.70710.70710.7071T =-0.70710.70710.0000-50.0000
-0.5000-0.50000.7071721.7514
0.50000.50000.7071671.7514
0001.0000 % 自己创建的函数输入角度为[90 45 0 90 0 45]的求解结果
>> [ J ] = ykb( [90 45 0 90 0 45] )J =[ -721.75144, -4.1132913e-14, -2.2731346e-14,0,-100.0,0]
[-50.0,671.75144,371.23106,0, -4.3297803e-15,0]
[0,-671.75144,-371.23106,0,1.7934537e-15,0]
[0,-1.0,-1.0, -1.7934537e-17,4.3297803e-17, -1.7934537e-17]
[0,0,0,0.70710678,-0.70710678,0.70710678]
[1.0,6.123234e-17,6.123234e-17,0.70710678,0.70710678,0.70710678]> [ T06] = tx90_ForwardKinematics( [90 45 0 90 0 45] )T06 =-0.70710.70710-50.0000
-0.5000-0.50000.7071721.7514
0.50000.50000.7071671.7514
0001.0000
以上代码表明该雅克比矩阵建立方法与机器人工具箱函数算出的结果一致,
运行速度方面,机器人工具箱函数更快
以下为代码:
% 机器人工具箱的函数
function [J,T] = TX90_jacobian(theta)
%UNTITLED 此处显示有关此函数的摘要
%此处显示详细说明
%syms q1 q2 q3 q4 q5 q6
q1 = theta(1)/180*pi;
q2 = theta(2)/180*pi-pi/2;
q3 = theta(3)/180*pi+pi/2;
q4 = theta(4)/180*pi;
q5 = theta(5)/180*pi;
q6 = theta(6)/180*pi;
%thetadaalpha
L(1) = Link([q1,0,50,-pi/2]);
L(2) = Link([q2,0,425,0]);
L(3) = Link([q3,50,0,pi/2]);
L(4) = Link([q4, 425, 0,-pi/2]);
L(5) = Link([q5,0,0,pi/2]);
L(6) = Link([q6, 100 ,0,0]);
tx90 = SerialLink(L, 'name', '史陶比尔TX90');
J = tx90.jacob0([q1 q2 q3 q4 q5 q6]);
T = tx90.fkine([q1 q2 q3 q4 q5 q6]);
end%自写函数
function [ T ] = Trans( alpha, a, theta, d ) % 变换矩阵
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];
endfunction [ JT ] = test( theta )
%UNTITLED 此处显示有关此函数的摘要
%此处显示详细说明
T01 =Trans( -pi/2, 50, theta(1), 0 );
%[alpha a theta d ]长度统一为mm单位,角度统一为度单位
T12 =Trans( 0, 425, theta(2)-pi/2, 0 );
T23 =Trans( pi/2, 0, theta(3)+pi/2, 50 );
T34 =Trans( -pi/2, 0, theta(4), 425 );
T45 =Trans( pi/2, 0, theta(5), 0 );
T56 =Trans( 0, 0, theta(6), 100 );
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;
T00 = [1 0 0 0;
0 1 0 0;
0 0 1 0;
00 0 1];
%因为这是标准dh参数建立的转换,设工具坐标系与T06重合,与教程中改进的DH参数确定角速度方法不同ox = T06(1,4);
oy = T06(2,4);
oz = T06(3,4);
w1 = T00(1:3,3);
w2 = T01(1:3,3);
w3 = T02(1:3,3);
w4 = T03(1:3,3);
w5 = T04(1:3,3);
w6 = T05(1:3,3);
%Jw = [w1,w2,w3,w4,w5,w6];
J11 = diff(ox,theta(1));
J12 = diff(ox,theta(2));
J13 = diff(ox,theta(3));
J14 = diff(ox,theta(4));
J15 = diff(ox,theta(5));
J16 = diff(ox,theta(6));
J21 = diff(oy,theta(1));
J22 = diff(oy,theta(2));
J23 = diff(oy,theta(3));
J24 = diff(oy,theta(4));
J25 = diff(oy,theta(5));
J26 = diff(oy,theta(6));
J31 = diff(oz,theta(1));
J32 = diff(oz,theta(2));
J33 = diff(oz,theta(3));
J34 = diff(oz,theta(4));
J35 = diff(oz,theta(5));
J36 = diff(oz,theta(6));
JT = [J11,J12,J13,J14,J15,J16;
J21,J22,J23,J24,J25,J26;
J31,J32,J33,J34,J35,J36;
w1, w2, w3, w4, w5, w6];
endfunction [ J ] = ykb( jiao )
%UNTITLED 此处显示有关此函数的摘要
%此处显示详细说明
syms a1 a2 a3 a4 a5 a6;
theta =[a1 a2 a3 a4 a5 a6];
JT =test( theta );
q = jiao*pi/180;
JT1=subs(JT,a1,q(1));
JT2=subs(JT1,a2,q(2));
JT3=subs(JT2,a3,q(3));
JT4=subs(JT3,a4,q(4));
JT5=subs(JT4,a5,q(5));
J=subs(JT5,a6,q(6));
old = digits;
digits(4)
J = vpa(J,8);
endfunction [ T06] = tx90_ForwardKinematics( theta )
if nargin<2;
end
d6=100;
T1 =Trans( -90, 50, theta(1), 0 );
%[alpha a theta d ]
T2 =Trans( 0, 425, theta(2)-90, 0 );
T3 =Trans( 90, 0, theta(3)+90, 50 );
T4 =Trans( -90, 0, theta(4), 425 );
T5 =Trans( 90, 0, theta(5), 0 );
T6 =Trans( 0, 0, theta(6), d6 );
T06=T1*T2*T3*T4*T5*T6;
endfunction [ T ] = Trans( alpha, a, theta, d )
T =[
cosd(theta), -sind(theta)*cosd(alpha), sind(theta)*sind(alpha), a*cosd(theta);
sind(theta), cosd(theta)*cosd(alpha), -cosd(theta)*sind(alpha), a*sind(theta);
0,sind(alpha),cosd(alpha),d;
0,0,0,1];
end
【机械|使用matlab建立机器人雅克比矩阵】总结:
通过编写机器人雅克比矩阵函数,对matlab的掌握更进一步,使用函数时,必须在文件夹里打开,否则容易报错,掌握如何对符号函数进行化简,求偏导最后再代值运算,比较实用。
参考教程:http://mp.weixin.qq.com/s?__biz=MzI1MTA3MjA2Nw==&mid=400013659&idx=1&sn=68abc24fff30e4a16601316a0fe91a46&chksm=7bdb82774cac0b61e3f6cbfd3bfa92973e9c033c816912b5c7439f880254a8571f66897e9229&mpshare=1&scene=23&srcid=0824XXjKUPzVQ1UjlVkokGjl#rd
推荐阅读
- 最优化问题|改进交叉算子的自适应人工蜂群黏菌算法
- matlab|嵌入均衡池的黏菌优化算法
- 最优化问题|加入领导者的黏菌优化算法
- MATLAB图形界面|基于Matlab的汽车出入库计时计费系统
- Matlab旅程|MATLAB的结构化程序设计
- matlab 内存管理 清理内存
- matlab中使用colormap没有效果
- Matlab|圆柱绕流
- MATLAB|Splart-Allmaras湍流模型及MATLAB编程~
- regionprops统计被标记的区域的面积分布,显示区域总数。