当前位置:   article > 正文

【matlab】机器人工具箱快速上手-正运动学仿真(代码直接复制可用)_matlab机器人仿真

matlab机器人仿真

安装好机器人工具箱,代码复制可用,按需修改参数

1.建模

  1. %%%%%%%%SCARA机器人仿真模型
  2. l=[0.457 0.325];
  3. L(1)= Link('d',0,'a',l(1),'alpha',0,'standard','qlim',[-130 130]*pi/180);%连杆1
  4. L(2)=Link('d',0,'a',l(2),'alpha',pi,'standard','qlim',[-145 145]*pi/180);%连杆2
  5. L(3)=Link('theta',0,'a',0,'alpha',0,'standard','qlim',[0 0.3]);%连杆3
  6. L(4)= Link('d',0,'a',0,'alpha',0,'standard','qlim',[-360 360]*pi/180);%连杆4
  7. scara=SerialLink(L,'name','SCARA Robot');%建立 SCARA 机器人模型
  8. q0=[0 0 0 0];%初始关节变量
  9. scara.plot(q0);%绘制机器人结构
  10. scara.teach(q0);%驱动机器人

2.工作空间

  1. %%%%%%%%工作空间绘制
  2. qL=scara.qlim;%关节运动范围
  3. N=10000;%随机数数量
  4. ws_q=zeros(N,4);%定义N个关节变量向量组成的关节变量矩阵q
  5. a=rand(size(ws_q)); %生成元素数值在0~1之间的与q同维度的随机矩阵
  6. for j=1:N
  7. for i=1:4
  8. ws_q(j,i)=qL(i,1)+(qL(i,2)-qL(i,1))*a(j,i);%给矩阵q赋q范围内的随机值,以得到足够多的给定范围(矩阵ql)内的机器人的关节变量(矩阵q)值
  9. end
  10. end
  11. %求机器人位置坐标
  12. ws_x=l(1)*cos(ws_q(:,1))+l(2)*cos(ws_q(:,1)+ ws_q(:,2));%机器人末端x坐标值
  13. ws_y=l(1)*sin(ws_q(:,1))+l(2)*sin(ws_q(:,1)+ws_q(:,2));%机器人末端了坐标值
  14. ws_z=- ws_q(:,3);%机器人末端z坐标值
  15. figure('Name','Scara机器人工作空间')
  16. plot3(ws_x,ws_y,ws_z,'r.')
  17. grid;
  18. xlabel('x');
  19. ylabel('y');
  20. zlabel('z');

旋转一下:

3.运动轨迹:

  1. %%%%%%%%轨迹规划
  2. qA=[0 0 0 0];%起始点关节变量值
  3. qB=[0.7 1.2 0.15 2];%终止点关节变量值
  4. t=0:0.05:2;%产生时间向量
  5. [q,qd,qdd]=jtraj(qA,qB,t);%jtraj()为构建轨迹命令,得到各关节的位移、速度和加速度
  6. %%%%%%%%正运动学仿真
  7. T=double(scara.fkine(q));%正运动学仿真函数
  8. [x,y,z]=transl(T);%机器人末端x、y、z坐标值
  9. %%%%%%%%绘制曲线图
  10. figure('Name','"SCARA Robot"机器人正运动学演示');
  11. plot(scara,q)
  12. figure('Name','机器人末端运动轨迹')
  13. plot3(x,y,z,'r-o','MarkerFaceColor','r');
  14. grid;
  15. xlabel('x');ylabel('y');zlabel('z');

4.各关节位移、速度、加速度:

  1. figure('Name','各关节的位移、速度和加速度曲线');
  2. subplot(3,4,1);
  3. plot(t,q(:,1)); %得到关节1的位移曲线
  4. title('关节1'); %命名
  5. grid;
  6. hold on;
  7. ylabel('位移(rad)');
  8. subplot(3,4,5);
  9. plot(t,qd(:,1)); %得到关节1的速度曲线
  10. grid;
  11. ylabel('速度(rad/s)');
  12. subplot(3,4,9);
  13. plot(t,qdd(:,1)); %得到关节1的加速度曲线
  14. grid;
  15. xlabel('时间(s)');
  16. ylabel('加速度(rad/s^2)');
  17. subplot(3,4,2);
  18. plot(t,q(:,2)); %得到关节1的位移曲线
  19. title('关节2'); %命名
  20. grid;
  21. hold on;
  22. ylabel('位移(rad)');
  23. subplot(3,4,6);
  24. plot(t,qd(:,2)); %得到关节1的速度曲线
  25. grid;
  26. ylabel('速度(rad/s)');
  27. subplot(3,4,10);
  28. plot(t,qdd(:,2)); %得到关节1的加速度曲线
  29. grid;
  30. xlabel('时间(s)');
  31. ylabel('加速度(rad/s^2)');
  32. subplot(3,4,3);
  33. plot(t,q(:,3)); %得到关节1的位移曲线
  34. title('关节3'); %命名
  35. grid;
  36. hold on;
  37. ylabel('位移(rad)');
  38. subplot(3,4,7);
  39. plot(t,qd(:,3)); %得到关节1的速度曲线
  40. grid;
  41. ylabel('速度(rad/s)');
  42. subplot(3,4,11);
  43. plot(t,qdd(:,3)); %得到关节1的加速度曲线
  44. grid;
  45. xlabel('时间(s)');
  46. ylabel('加速度(rad/s^2)');
  47. subplot(3,4,4);
  48. plot(t,q(:,4)); %得到关节1的位移曲线
  49. title('关节4'); %命名
  50. grid;
  51. hold on;
  52. ylabel('位移(rad)');
  53. subplot(3,4,8);
  54. plot(t,qd(:,4)); %得到关节1的速度曲线
  55. grid;
  56. ylabel('速度(rad/s)');
  57. subplot(3,4,12);
  58. plot(t,qdd(:,4)); %得到关节1的加速度曲线
  59. grid;
  60. xlabel('时间(s)');
  61. ylabel('加速度(rad/s^2)');

汇总:

  1. %%%%%%%%SCARA机器人仿真模型
  2. l=[0.457 0.325];
  3. L(1)= Link('d',0,'a',l(1),'alpha',0,'standard','qlim',[-130 130]*pi/180);%连杆1
  4. L(2)=Link('d',0,'a',l(2),'alpha',pi,'standard','qlim',[-145 145]*pi/180);%连杆2
  5. L(3)=Link('theta',0,'a',0,'alpha',0,'standard','qlim',[0 0.3]);%连杆3
  6. L(4)= Link('d',0,'a',0,'alpha',0,'standard','qlim',[-360 360]*pi/180);%连杆4
  7. scara=SerialLink(L,'name','SCARA Robot');%建立 SCARA 机器人模型
  8. q0=[0 0 0 0];%初始关节变量
  9. scara.plot(q0);%绘制机器人结构
  10. scara.teach(q0);%驱动机器人
  11. %%%%%%%%工作空间绘制
  12. qL=scara.qlim;%关节运动范围
  13. N=10000;%随机数数量
  14. ws_q=zeros(N,4);%定义N个关节变量向量组成的关节变量矩阵q
  15. a=rand(size(ws_q)); %生成元素数值在0~1之间的与q同维度的随机矩阵
  16. for j=1:N
  17. for i=1:4
  18. ws_q(j,i)=qL(i,1)+(qL(i,2)-qL(i,1))*a(j,i);%给矩阵q赋q范围内的随机值,以得到足够多的给定范围(矩阵ql)内的机器人的关节变量(矩阵q)值
  19. end
  20. end
  21. %求机器人位置坐标
  22. ws_x=l(1)*cos(ws_q(:,1))+l(2)*cos(ws_q(:,1)+ ws_q(:,2));%机器人末端x坐标值
  23. ws_y=l(1)*sin(ws_q(:,1))+l(2)*sin(ws_q(:,1)+ws_q(:,2));%机器人末端了坐标值
  24. ws_z=- ws_q(:,3);%机器人末端z坐标值
  25. figure('Name','Scara机器人工作空间')
  26. plot3(ws_x,ws_y,ws_z,'r.')
  27. grid;
  28. xlabel('x');
  29. ylabel('y');
  30. zlabel('z');
  31. %%%%%%%%轨迹规划
  32. qA=[0 0 0 0];%起始点关节变量值
  33. qB=[0.7 1.2 0.15 2];%终止点关节变量值
  34. t=0:0.05:2;%产生时间向量
  35. [q,qd,qdd]=jtraj(qA,qB,t);%jtraj()为构建轨迹命令,得到各关节的位移、速度和加速度
  36. %%%%%%%%正运动学仿真
  37. T=double(scara.fkine(q));%正运动学仿真函数
  38. [x,y,z]=transl(T);%机器人末端x、y、z坐标值
  39. %%%%%%%%绘制曲线图
  40. figure('Name','"SCARA Robot"机器人正运动学演示');
  41. plot(scara,q)
  42. figure('Name','机器人末端运动轨迹')
  43. plot3(x,y,z,'r-o','MarkerFaceColor','r');
  44. grid;
  45. xlabel('x');ylabel('y');zlabel('z');
  46. figure('Name','各关节的位移、速度和加速度曲线');
  47. subplot(3,4,1);
  48. plot(t,q(:,1)); %得到关节1的位移曲线
  49. title('关节1'); %命名
  50. grid;
  51. hold on;
  52. ylabel('位移(rad)');
  53. subplot(3,4,5);
  54. plot(t,qd(:,1)); %得到关节1的速度曲线
  55. grid;
  56. ylabel('速度(rad/s)');
  57. subplot(3,4,9);
  58. plot(t,qdd(:,1)); %得到关节1的加速度曲线
  59. grid;
  60. xlabel('时间(s)');
  61. ylabel('加速度(rad/s^2)');
  62. subplot(3,4,2);
  63. plot(t,q(:,2)); %得到关节1的位移曲线
  64. title('关节2'); %命名
  65. grid;
  66. hold on;
  67. ylabel('位移(rad)');
  68. subplot(3,4,6);
  69. plot(t,qd(:,2)); %得到关节1的速度曲线
  70. grid;
  71. ylabel('速度(rad/s)');
  72. subplot(3,4,10);
  73. plot(t,qdd(:,2)); %得到关节1的加速度曲线
  74. grid;
  75. xlabel('时间(s)');
  76. ylabel('加速度(rad/s^2)');
  77. subplot(3,4,3);
  78. plot(t,q(:,3)); %得到关节1的位移曲线
  79. title('关节3'); %命名
  80. grid;
  81. hold on;
  82. ylabel('位移(rad)');
  83. subplot(3,4,7);
  84. plot(t,qd(:,3)); %得到关节1的速度曲线
  85. grid;
  86. ylabel('速度(rad/s)');
  87. subplot(3,4,11);
  88. plot(t,qdd(:,3)); %得到关节1的加速度曲线
  89. grid;
  90. xlabel('时间(s)');
  91. ylabel('加速度(rad/s^2)');
  92. subplot(3,4,4);
  93. plot(t,q(:,4)); %得到关节1的位移曲线
  94. title('关节4'); %命名
  95. grid;
  96. hold on;
  97. ylabel('位移(rad)');
  98. subplot(3,4,8);
  99. plot(t,qd(:,4)); %得到关节1的速度曲线
  100. grid;
  101. ylabel('速度(rad/s)');
  102. subplot(3,4,12);
  103. plot(t,qdd(:,4)); %得到关节1的加速度曲线
  104. grid;
  105. xlabel('时间(s)');
  106. ylabel('加速度(rad/s^2)');

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号