Simscape Mutibody Modeling学习--移动多体模型中的物体(2)

1、前记:抓住八月的尾巴>_<

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

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

                       screenshot

一时间高兴万分,便问了我   出 现的问题。在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中的关节【关节的意义在于实现坐标系之间的转换】组件有很多。能进行移动物体操作的我测试的有下面红色框的部分。

         

如下一个测试:

                                      

这样就可以实现抓取了吧。如上测试只要将机器人的末端抓手位置导入到关节驱动中即可,将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老爷子修改后的。这里直接贴上老爷子的效果。

                               

猜你喜欢

转载自blog.csdn.net/weixin_39090239/article/details/108329302