赞
踩
安装好机器人工具箱,代码复制可用,按需修改参数
1.建模
- %%%%%%%%SCARA机器人仿真模型
- l=[0.457 0.325];
- L(1)= Link('d',0,'a',l(1),'alpha',0,'standard','qlim',[-130 130]*pi/180);%连杆1
- L(2)=Link('d',0,'a',l(2),'alpha',pi,'standard','qlim',[-145 145]*pi/180);%连杆2
- L(3)=Link('theta',0,'a',0,'alpha',0,'standard','qlim',[0 0.3]);%连杆3
- L(4)= Link('d',0,'a',0,'alpha',0,'standard','qlim',[-360 360]*pi/180);%连杆4
- scara=SerialLink(L,'name','SCARA Robot');%建立 SCARA 机器人模型
- q0=[0 0 0 0];%初始关节变量
- scara.plot(q0);%绘制机器人结构
- scara.teach(q0);%驱动机器人
2.工作空间
- %%%%%%%%工作空间绘制
- qL=scara.qlim;%关节运动范围
- N=10000;%随机数数量
- ws_q=zeros(N,4);%定义N个关节变量向量组成的关节变量矩阵q
- a=rand(size(ws_q)); %生成元素数值在0~1之间的与q同维度的随机矩阵
-
- for j=1:N
- for i=1:4
- ws_q(j,i)=qL(i,1)+(qL(i,2)-qL(i,1))*a(j,i);%给矩阵q赋q范围内的随机值,以得到足够多的给定范围(矩阵ql)内的机器人的关节变量(矩阵q)值
- end
- end
- %求机器人位置坐标
- ws_x=l(1)*cos(ws_q(:,1))+l(2)*cos(ws_q(:,1)+ ws_q(:,2));%机器人末端x坐标值
- ws_y=l(1)*sin(ws_q(:,1))+l(2)*sin(ws_q(:,1)+ws_q(:,2));%机器人末端了坐标值
- ws_z=- ws_q(:,3);%机器人末端z坐标值
- figure('Name','Scara机器人工作空间')
- plot3(ws_x,ws_y,ws_z,'r.')
- grid;
- xlabel('x');
- ylabel('y');
- zlabel('z');
旋转一下:
3.运动轨迹:
- %%%%%%%%轨迹规划
- qA=[0 0 0 0];%起始点关节变量值
- qB=[0.7 1.2 0.15 2];%终止点关节变量值
- t=0:0.05:2;%产生时间向量
- [q,qd,qdd]=jtraj(qA,qB,t);%jtraj()为构建轨迹命令,得到各关节的位移、速度和加速度
- %%%%%%%%正运动学仿真
- T=double(scara.fkine(q));%正运动学仿真函数
- [x,y,z]=transl(T);%机器人末端x、y、z坐标值
- %%%%%%%%绘制曲线图
- figure('Name','"SCARA Robot"机器人正运动学演示');
- plot(scara,q)
- figure('Name','机器人末端运动轨迹')
- plot3(x,y,z,'r-o','MarkerFaceColor','r');
- grid;
- xlabel('x');ylabel('y');zlabel('z');
4.各关节位移、速度、加速度:
- figure('Name','各关节的位移、速度和加速度曲线');
- subplot(3,4,1);
- plot(t,q(:,1)); %得到关节1的位移曲线
- title('关节1'); %命名
- grid;
- hold on;
- ylabel('位移(rad)');
- subplot(3,4,5);
- plot(t,qd(:,1)); %得到关节1的速度曲线
- grid;
- ylabel('速度(rad/s)');
- subplot(3,4,9);
- plot(t,qdd(:,1)); %得到关节1的加速度曲线
- grid;
- xlabel('时间(s)');
- ylabel('加速度(rad/s^2)');
-
-
- subplot(3,4,2);
- plot(t,q(:,2)); %得到关节1的位移曲线
- title('关节2'); %命名
- grid;
- hold on;
- ylabel('位移(rad)');
- subplot(3,4,6);
- plot(t,qd(:,2)); %得到关节1的速度曲线
- grid;
- ylabel('速度(rad/s)');
- subplot(3,4,10);
- plot(t,qdd(:,2)); %得到关节1的加速度曲线
- grid;
- xlabel('时间(s)');
- ylabel('加速度(rad/s^2)');
-
- subplot(3,4,3);
- plot(t,q(:,3)); %得到关节1的位移曲线
- title('关节3'); %命名
- grid;
- hold on;
- ylabel('位移(rad)');
- subplot(3,4,7);
- plot(t,qd(:,3)); %得到关节1的速度曲线
- grid;
- ylabel('速度(rad/s)');
- subplot(3,4,11);
- plot(t,qdd(:,3)); %得到关节1的加速度曲线
- grid;
- xlabel('时间(s)');
- ylabel('加速度(rad/s^2)');
-
- subplot(3,4,4);
- plot(t,q(:,4)); %得到关节1的位移曲线
- title('关节4'); %命名
- grid;
- hold on;
- ylabel('位移(rad)');
- subplot(3,4,8);
- plot(t,qd(:,4)); %得到关节1的速度曲线
- grid;
- ylabel('速度(rad/s)');
- subplot(3,4,12);
- plot(t,qdd(:,4)); %得到关节1的加速度曲线
- grid;
- xlabel('时间(s)');
- ylabel('加速度(rad/s^2)');
汇总:
- %%%%%%%%SCARA机器人仿真模型
- l=[0.457 0.325];
- L(1)= Link('d',0,'a',l(1),'alpha',0,'standard','qlim',[-130 130]*pi/180);%连杆1
- L(2)=Link('d',0,'a',l(2),'alpha',pi,'standard','qlim',[-145 145]*pi/180);%连杆2
- L(3)=Link('theta',0,'a',0,'alpha',0,'standard','qlim',[0 0.3]);%连杆3
- L(4)= Link('d',0,'a',0,'alpha',0,'standard','qlim',[-360 360]*pi/180);%连杆4
- scara=SerialLink(L,'name','SCARA Robot');%建立 SCARA 机器人模型
- q0=[0 0 0 0];%初始关节变量
- scara.plot(q0);%绘制机器人结构
- scara.teach(q0);%驱动机器人
-
- %%%%%%%%工作空间绘制
- qL=scara.qlim;%关节运动范围
- N=10000;%随机数数量
- ws_q=zeros(N,4);%定义N个关节变量向量组成的关节变量矩阵q
- a=rand(size(ws_q)); %生成元素数值在0~1之间的与q同维度的随机矩阵
-
- for j=1:N
- for i=1:4
- ws_q(j,i)=qL(i,1)+(qL(i,2)-qL(i,1))*a(j,i);%给矩阵q赋q范围内的随机值,以得到足够多的给定范围(矩阵ql)内的机器人的关节变量(矩阵q)值
- end
- end
- %求机器人位置坐标
- ws_x=l(1)*cos(ws_q(:,1))+l(2)*cos(ws_q(:,1)+ ws_q(:,2));%机器人末端x坐标值
- ws_y=l(1)*sin(ws_q(:,1))+l(2)*sin(ws_q(:,1)+ws_q(:,2));%机器人末端了坐标值
- ws_z=- ws_q(:,3);%机器人末端z坐标值
- figure('Name','Scara机器人工作空间')
- plot3(ws_x,ws_y,ws_z,'r.')
- grid;
- xlabel('x');
- ylabel('y');
- zlabel('z');
- %%%%%%%%轨迹规划
- qA=[0 0 0 0];%起始点关节变量值
- qB=[0.7 1.2 0.15 2];%终止点关节变量值
- t=0:0.05:2;%产生时间向量
- [q,qd,qdd]=jtraj(qA,qB,t);%jtraj()为构建轨迹命令,得到各关节的位移、速度和加速度
- %%%%%%%%正运动学仿真
- T=double(scara.fkine(q));%正运动学仿真函数
- [x,y,z]=transl(T);%机器人末端x、y、z坐标值
- %%%%%%%%绘制曲线图
- figure('Name','"SCARA Robot"机器人正运动学演示');
- plot(scara,q)
- figure('Name','机器人末端运动轨迹')
- plot3(x,y,z,'r-o','MarkerFaceColor','r');
- grid;
- xlabel('x');ylabel('y');zlabel('z');
- figure('Name','各关节的位移、速度和加速度曲线');
- subplot(3,4,1);
- plot(t,q(:,1)); %得到关节1的位移曲线
- title('关节1'); %命名
- grid;
- hold on;
- ylabel('位移(rad)');
- subplot(3,4,5);
- plot(t,qd(:,1)); %得到关节1的速度曲线
- grid;
- ylabel('速度(rad/s)');
- subplot(3,4,9);
- plot(t,qdd(:,1)); %得到关节1的加速度曲线
- grid;
- xlabel('时间(s)');
- ylabel('加速度(rad/s^2)');
-
-
- subplot(3,4,2);
- plot(t,q(:,2)); %得到关节1的位移曲线
- title('关节2'); %命名
- grid;
- hold on;
- ylabel('位移(rad)');
- subplot(3,4,6);
- plot(t,qd(:,2)); %得到关节1的速度曲线
- grid;
- ylabel('速度(rad/s)');
- subplot(3,4,10);
- plot(t,qdd(:,2)); %得到关节1的加速度曲线
- grid;
- xlabel('时间(s)');
- ylabel('加速度(rad/s^2)');
-
- subplot(3,4,3);
- plot(t,q(:,3)); %得到关节1的位移曲线
- title('关节3'); %命名
- grid;
- hold on;
- ylabel('位移(rad)');
- subplot(3,4,7);
- plot(t,qd(:,3)); %得到关节1的速度曲线
- grid;
- ylabel('速度(rad/s)');
- subplot(3,4,11);
- plot(t,qdd(:,3)); %得到关节1的加速度曲线
- grid;
- xlabel('时间(s)');
- ylabel('加速度(rad/s^2)');
-
- subplot(3,4,4);
- plot(t,q(:,4)); %得到关节1的位移曲线
- title('关节4'); %命名
- grid;
- hold on;
- ylabel('位移(rad)');
- subplot(3,4,8);
- plot(t,qd(:,4)); %得到关节1的速度曲线
- grid;
- ylabel('速度(rad/s)');
- subplot(3,4,12);
- plot(t,qdd(:,4)); %得到关节1的加速度曲线
- grid;
- xlabel('时间(s)');
- ylabel('加速度(rad/s^2)');
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。