matlab fkine,MATLAB ROBOT里的link robot fkine drivebot

最近在学INTRODUCTION TO ROBOTICS MECHANICS AND CONTROL

也就是国内的机器人导论

第三章的MATLAB实验要用到LINK ROBOT FKINE三个函数

网上查了半天总是有问题

0818b9ca8b590ca3270a3433284dd417.png

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值