最近在学INTRODUCTION TO ROBOTICS MECHANICS AND CONTROL
也就是国内的机器人导论
第三章的MATLAB实验要用到LINK ROBOT FKINE三个函数
网上查了半天总是有问题
LINK我只用到了最简单的这个参数
L =LINK([alpha A theta D sigma])
直接把相应的DH表的数据填入就会 sigma这个东西就是0为转动的关节 非0如1就是滑动的关节 就是推送
然后robot这个东西是建模用的 其实就是把各个link连接起来
r0H = ROBOT({LK0,LK1,LK2,LK3,LKH})
我的作业里一共LK1,LK2,LK3,LKH四段 LK0是我蛋疼弄的一个 主要是MATLAB自动的z轴是躺着的
我模拟画图的时候把LK0的alpha设为90度 好看点 不过算值的时候就不要了 因为第二行的值会变成第三行
最后也是最蛋疼的是fkine这个东西 我前前后后查了2天 也没查出来什么
其实这个函数没什么特别的 在第三章就是求个T的正解 但是它需要个要命的参数Q
这个q可要了命了 我百度谷歌了半天也没查出个所以然 后来搭配drivebot这个比较直观的绘图函数
才看出来问题
顺带说下drivebot吧 正常比如刚才的r0H你想画出来 以为直接就drivebot(r0H)了
然后你会看到无论你的link角度怎么设置 你的结构都是在躺尸 一直都是横着的
后来再help drivebot才看出来 这货原来也和要命的Q有关 相当于直接r0H的时候 默认q为0了
这才想到q的值的意义到底是什么 查了半天好像是说和原点的距离啥的 最后试了半天才发现是角度
你妹的 不是距离吗 然后把theta角度填进去又有问题 我是三个手臂的机器人啊 怎么变成两个爪了
而且fkine的结果也不对
后来才发现 Q这货的真正意义是 和前一个的角度差 比如LK1和LK0也就是原点是重合的
所以LK1 的q就是0 而LK2和LK1有theta1的差 所以LK2的地方就是theta1
所以这里的Q应该是q0H = [0 0 t1 t2 t3]
最后是代码
%
%DEFINE
%
DRG=pi/180;
'-----------example 1 is {0,0,0}T------------'
alp = 0*DRG;
bet = 0*DRG;
gam = 0*DRG;
ctx = cos(alp);
stx = sin(alp);
cty = cos(bet);
sty = sin(bet);
ctz = cos(gam);
stz = sin(gam);
%
%MATRIX
%
T01 = [ctx-stx00
stxctx 00
0 0 10
0 001]
T12 = [cty-sty04
stycty 00
0 0 10
0 001]
T23 = [ctz-stz03
stzctz 00
0 0 10
0 001]
T3H = [1 002
0 1 00
0 0 10
0 001]
T03 = T01*T12*T23
T0H = T03*T3H
'-----------example 2 is {0,0,0}T------------'
alp = 10*DRG;
bet = 20*DRG;
gam = 30*DRG;
ctx = cos(alp);
stx = sin(alp);
cty = cos(bet);
sty = sin(bet);
ctz = cos(gam);
stz = sin(gam);
%
%MATRIX
%
T01 = [ctx-stx00
stxctx 00
0 0 10
0 001]
T12 = [cty-sty04
stycty 00
0 0 10
0 001]
T23 = [ctz-stz03
stzctz 00
0 0 10
0 001]
T3H = [1 002
0 1 00
0 0 10
0 001]
T03 = T01*T12*T23
T0H = T03*T3H
'-----------example 3 is {90,90,90}T------------'
alp = 90*DRG;
bet = 90*DRG;
gam = 90*DRG;
ctx = cos(alp);
stx = sin(alp);
cty = cos(bet);
sty = sin(bet);
ctz = cos(gam);
stz = sin(gam);
%
%MATRIX
%
T01 = [ctx-stx00
stxctx 00
0 0 10
0 001]
T12 = [cty-sty04
stycty 00
0 0 10
0 001]
T23 = [ctz-stz03
stzctz 00
0 0 10
0 001]
T3H = [1 002
0 1 00
0 0 10
0 001]
T03 = T01*T12*T23
T0H = T03*T3H
'-----------example 4 use the link and robot------------'
l1 = 4;
l2 = 3;
l3 = 2;
DRG=pi/180;
'-----------example 4.1 is {0,0,0}T------------'
t1 = 0*DRG;
t2 = 0*DRG;
t3 = 0*DRG;
LK0 = LINK([ 0 0 0 0 0]);
LK1 = LINK([ 0 0 t1 0 0]);
LK2 = LINK([ 0 l1 t2 0 0]);
LK3 = LINK([ 0 l2 t3 0 0]);
LKH = LINK([ 0 l3 0 0 0]);
r0H = ROBOT({LK0,LK1,LK2,LK3,LKH})
r0H.name = 'gripe'
r03 = ROBOT({LK0,LK1,LK2,LK3})
r03.name = 'not gipe'
q03=[0 0 t1 t2]
q0H=[0 0 t1 t2 t3]
T03 = fkine(r03,q03)
T0H = fkine(r0H,q0H)
'-----------example 4.2 is {10,20,30}T------------'
t1 = 10*DRG;
t2 = 20*DRG;
t3 = 30*DRG;
LK0 = LINK([ 0 0 0 0 0]);
LK1 = LINK([ 0 0 t1 0 0]);
LK2 = LINK([ 0 l1 t2 0 0]);
LK3 = LINK([ 0 l2 t3 0 0]);
LKH = LINK([ 0 l3 0 0 0]);
r0H = ROBOT({LK0,LK1,LK2,LK3,LKH})
r0H.name = 'gripe'
r03 = ROBOT({LK0,LK1,LK2,LK3})
r03.name = 'not gipe'
q03=[0 0 t1 t2]
q0H=[0 0 t1 t2 t3]
T03 = fkine(r03,q03)
T0H = fkine(r0H,q0H)
'-----------example 4.3 is {90,90,90}T------------'
t1 = 90*DRG;
t2 = 90*DRG;
t3 = 90*DRG;
LK0 = LINK([ 0 0 0 0 0]);
LK1 = LINK([ 0 0 t1 0 0]);
LK2 = LINK([ 0 l1 t2 0 0]);
LK3 = LINK([ 0 l2 t3 0 0]);
LKH = LINK([ 0 l3 0 0 0]);
r0H = ROBOT({LK0,LK1,LK2,LK3,LKH})
r0H.name = 'gripe'
r03 = ROBOT({LK0,LK1,LK2,LK3})
r03.name = 'not gipe'
q03=[0 0 t1 t2]
q0H=[0 0 t1 t2 t3]
T03 = fkine(r03,q03)
T0H = fkine(r0H,q0H)
drivebot(r0H,q0H)