CNN Matlab例子RGB_matlab官方机器人工具箱使用:移动抓取物体建模(matlab)

28465341a440d6610585bd6b609185c7.png

距离 Simscape Mutibody Modeling学习--碰撞接触与反应(1) 和MATLAB下机器人可视化与控制---simulink篇(4)已经很久了。在最开始,学习如何利用接触力库中的模型去仿真,实现机器人抓手抓取和放置物体。但是测试中一直出错,在官网上问了也没有下文。恰巧前几天看见了官网中刚出的bloghttps://blogs.mathworks.com/racing-lounge/2020/08/18/creating-virtual-robot-environments-in-simscape-part-1/。

主要看见了下面的这个动图。

64805f2cf34e5b5d2a2d307fd4aed94d.png

一时间高兴万分,便问了我 出 现的问题。在https://www.mathworks.com/matlabcentral/answers/525834-why-the-robot-gripper-can-not-pick-up-the-object-in-simscape-with-contact-forces-library?s_tid=srchtitle【我的puma例子上传在帖子里,有大佬感兴趣可以下载下来帮忙调下参数,debug一下,在此先谢为敬】中Jose Avendano Arbelaez 给了些建议,尽管如此我经过一天多的参数调试还是没有解决在将要抓取物体时报错。

所以目前,通过接触力库中的模型去实现机器人抓取暂时搁浅................................................

2、曲线救国:

既然机器人抓取物体是在空间中移动,那么最多在六个自由度上可以实现对物体的移动。在MATLAB下机器人可视化与控制---simulink篇(4)中就是用Prismatic Joint实现的机器人在导轨上移动。这就很明显了Simscape Mutibody Modeling中的关节【关节的意义在于实现坐标系之间的转换】组件有很多。能进行移动物体操作的我测试的有下面红色框的部分。

3aa59ee33e17f99860a0c7a3184c7af1.png

如下一个测试:

3a19259ff381a0db2dda7b28bbeb1936.png

这样就可以实现抓取了吧。如上测试只要将机器人的末端抓手位置导入到关节驱动中即可,将Silder Gain模块的数据输入更改为机器人末端笛卡尔位置即可。末端位置只需要一个机器人的正运动学公式,或者用Transform sensor去测量即可。大家可以提前去下载Scara机器人那个仿真。我在B站看到了一个UP主使用过这个例子https://www.bilibili.com/video/BV12g4y1i7fA【我的实现也是主要参考了这个例子】。里面应该有源码链接,没有的可以去Github直接下载。

3、一个代码例子:

这个想法是之前在看Peter老爷子的视频时想到的,我尝试了下将机器人末端赋值给球的位置,实现机器人移动时球的位置跟随移动。在视觉上看起来就是抓取的过程。

附:工具箱实现抓取和放置代码(在Google论坛上https://groups.google.com/g/robotics-tool-box/c/IBOxJ4insek/m/jGUq4NCeBAAJ问Peter教授,解决了工具转换的错误)


%% My code for picking and place simutaion

mdl_puma560

p = [0.8 0 0];

T = transl(p) * troty(pi/2);

qr(1) = -pi/2;

qqr = p560.ikine6s(T, 'ru');

qrt = jtraj(qr, qqr, 50);

ae = [139 41];

p(1) = 1;

clf

plot_sphere(p, 0.05, 'y');%position of the ball

p560.plot3d(qrt, 'view', ae);

qr(1) = pi/2;

qrt = jtraj(qqr, qr, 50);

for i=1:1:length(qrt)

    T=p560.fkine(qrt(i,:));%forword kinimatics

    Tool=transl(0,0,0)*trotz(pi/2)*transl(0,0,0.2)*trotx(pi/2);

    P=transl(T.t(:,1)')*Tool;%tool transfrom 

    clf

    P=P(1:3,end);plot_sphere(P, 0.05, 'b');%plot moving sphere

p560.plot3d(qrt(i,:), 'view', ae);

pause(0.001)

end

p560.plot3d(qrt(i,:), 'view', ae);

%% Mr Corke tweaked my code below

%%

mdl_puma560 %puma model 

p = [0.8 0 -0.2];% ball position

T = transl(p) * troty(pi/2);%the pick pose

q1= [0.2,0.6,-2.6,0.47,0.46,1.2];%start point

qqr = p560.ikine6s(T, 'ru');% Pick pose configration

qqr(6)=1.2;

qrt = jtraj(q1, qqr,20);  % path from qr' to T

ae = [-132 24];

p(1) = 1;

clf

plot_sphere(p, 0.045, 'b');%position of the ball

p560.plot3d(qrt, 'view', ae, 'nowrist');  % animate motion to the ball,no arrow on wrist frane

%% For pick and place

qr =[1.6,0.48,-2.4,0.5,0.4,1.2];

qrt = jtraj(qqr, qr, 20);  % path from T to qr'

clf

for i=1:length(qrt)

    T = p560.fkine(qrt(i,:)); % get EE pose

    Tball = T * SE3(0,0,0.2); %tool transfrom

    P = Tball.t;

     clf

    plot_sphere(P, 0.045, 'b');%plot moving sphere

    p560.plot3d(qrt(i,:), 'view', ae, 'nowrist');

    pause(0.01)

end

qrr=[1.6,0.8,-2.2,0.5,-0.6,1.2];

qrt1 = jtraj(qr, qrr, 15);  % path from T to qr'

pause(0.5)

for i=1:length(qrt1)

    T = p560.fkine(qrt1(i,:)); % get EE pose

    clf

    plot_sphere(P, 0.045, 'b');%plot moving sphere

    p560.plot3d(qrt1(i,:), 'view', ae, 'nowrist');

    pause(0.01)

end

最开始的是我的代码,有错误,后面的是Peter老爷子修改后的。这里直接贴上老爷子的效果。

fb4bb80d7cec97341abdffd62ebb5fa1.png
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值