1、前记:记录下scara机器人建模和轨迹规划。由于有移动关节的存在,稍微和六轴的有区别。
clc
clear
L1=Link([0 0 0 0 0],'modified');
L2=Link([0 0 200 pi 0],'modified');
L3=Link([0 0 150 0 1],'modified');%移动关节最后一个参数为1
L4=Link([0 0.20 0 0 0],'modified');
Robot=SerialLink([L1 L2 L3 L4],'name','Scara');
Robot.qlim=[-125*pi/180 125*pi/180;-140*pi/180 140*pi/180;0 200;-3*pi 3*pi];%关节限制
Robot.plot([0 0 0 0], 'workspace',[-400 400 -400 400 -300 300]);%空间范围定义
% Robot.teach()
q0=[0 0 0 0];
q1b=[pi/2 0 100 -3*pi];
q1=[pi/2 0 200 3*pi];
q2=[pi/2 0 0 pi];
q3=[0 0 0 0];
t=0:.04:2;
sqtraj1=jtraj(q0,q1b,t);
sqtraj2=jtraj(q1b,q1,t);
sqtraj3=jtraj(q1,q2,t);
sqtraj4=jtraj(q2,q3,t);
hold on
atj=zeros(4,4);
view(3)
hold on
for i=1:1:51
atj=Robot.fkine(sqtraj1(i,:));
jta=transpose(atj);
JTA(i,:)=jta.t;
jta=JTA;
plot2(jta(i,:),'r.')
Robot.plot(sqtraj1(i,:))
plot2(JTA,'b')
end
for i=1:1:51
atj=Robot.fkine(sqtraj2(i,:));
jta=transpose(atj);
JTA(i,:)=jta.t;
jta=JTA;
plot2(jta(i,:),'r.')
Robot.plot(sqtraj2(i,:))
plot2(JTA,'b')
end
for i=1:1:51
atj=Robot.fkine(sqtraj3(i,:));
jta=transpose(atj);
JTA(i,:)=jta.t;
jta=JTA;
plot2(jta(i,:),'r.')
Robot.plot(sqtraj3(i,:))
plot2(JTA,'b')
end
for i=1:1:51
atj=Robot.fkine(sqtraj4(i,:));
jta=transpose(atj);
JTA(i,:)=jta.t;
jta=JTA;
plot2(jta(i,:),'r.')
Robot.plot(sqtraj4(i,:))
plot2(JTA,'b')
end
效果(打孔、拧螺丝动作):
后记:在matlab2018a中,工具箱为10.3.其他版本报错可参考:https://blog.csdn.net/weixin_39090239/article/details/105022806
轨迹规划参考:https://blog.csdn.net/weixin_39090239/article/details/80962723