【matlab】机器人工具箱快速上手-正运动学仿真(代码直接复制可用)
时间:2024-04-29 19:35:21 来源:网络cs 作者:淼淼 栏目:广告工具 阅读:
安装好机器人工具箱,代码复制可用,按需修改参数
1.建模
%%%%%%%%SCARA机器人仿真模型l=[0.457 0.325];L(1)= Link('d',0,'a',l(1),'alpha',0,'standard','qlim',[-130 130]*pi/180);%连杆1L(2)=Link('d',0,'a',l(2),'alpha',pi,'standard','qlim',[-145 145]*pi/180);%连杆2L(3)=Link('theta',0,'a',0,'alpha',0,'standard','qlim',[0 0.3]);%连杆3L(4)= Link('d',0,'a',0,'alpha',0,'standard','qlim',[-360 360]*pi/180);%连杆4scara=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个关节变量向量组成的关节变量矩阵qa=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)值 endend%求机器人位置坐标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);%连杆1L(2)=Link('d',0,'a',l(2),'alpha',pi,'standard','qlim',[-145 145]*pi/180);%连杆2L(3)=Link('theta',0,'a',0,'alpha',0,'standard','qlim',[0 0.3]);%连杆3L(4)= Link('d',0,'a',0,'alpha',0,'standard','qlim',[-360 360]*pi/180);%连杆4scara=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个关节变量向量组成的关节变量矩阵qa=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)值 endend%求机器人位置坐标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)');
本文链接:https://www.kjpai.cn/news/2024-04-29/163585.html,文章来源:网络cs,作者:淼淼,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
上一篇:Java——Map.getOrDefault方法详解
下一篇:返回列表