原创 机器人手臂程序位置

2019-11-5 22:10 2367 33 4 分类: 工业电子 文集: MATLAB
  1. function [sys,x0,str,ts] = spacemodel(t,x,u,flag)
  2. %设置系统的初始值、长度、时间等
  3. switch flag,
  4. case 0,
  5. [sys,x0,str,ts]=mdlInitializeSizes;
  6. case 3,
  7. sys=mdlOutputs(t,x,u);
  8. case {2,4,9}
  9. sys=[];
  10. otherwise
  11. error(['Unhandled flag = ',num2str(flag)]);
  12. end
  13. %以上的选择参数


  1. function [sys,x0,str,ts]=mdlInitializeSizes
  2. sizes = simsizes;
  3. sizes.NumOutputs = 2;
  4. sizes.NumInputs = 6;
  5. sizes.DirFeedthrough = 1;
  6. sizes.NumSampleTimes = 1;
  7. sys = simsizes(sizes);
  8. x0 = [];
  9. str = [];
  10. ts = [0 0];
  11. %以上是输入信号



  1. function sys=mdlOutputs(t,x,u)
  2. R1=u(1);dr1=0;
  3. R2=u(2);dr2=0;
  4. x(1)=u(3);
  5. x(2)=u(4);
  6. x(3)=u(5);
  7. x(4)=u(6);
  8. e1=R1-x(1);
  9. e2=R2-x(3);
  10. e=[e1;e2];
  11. de1=dr1-x(2);
  12. de2=dr2-x(4);
  13. de=[de1;de2];
  14. Kp=[50 0;0 50];
  15. Kd=[50 0;0 50];
  16. tol=Kp*e+Kd*de;
  17. sys(1)=tol(1);
  18. sys(2)=tol(2);
  19. %以上是模型输出信号

这个是控制模型chap2_1ctrl,给定一个系统的模型。


  1. function [sys,x0,str,ts] = spacemodel(t,x,u,flag)
  2. switch flag,
  3. case 0,
  4. [sys,x0,str,ts]=mdlInitializeSizes;
  5. case 3,
  6. sys=mdlOutputs(t,x,u);
  7. case {2,4,9}
  8. sys=[];
  9. otherwise
  10. error(['Unhandled flag = ',num2str(flag)]);
  11. end
  12. function [sys,x0,str,ts]=mdlInitializeSizes
  13. sizes = simsizes;
  14. sizes.NumOutputs = 2;
  15. sizes.NumInputs = 6;
  16. sizes.DirFeedthrough = 1;
  17. sizes.NumSampleTimes = 1;
  18. sys = simsizes(sizes);
  19. x0 = [];
  20. str = [];
  21. ts = [0 0];
  22. function sys=mdlOutputs(t,x,u)
  23. R1=u(1);dr1=0;
  24. R2=u(2);dr2=0;
  25. x(1)=u(3);
  26. x(2)=u(4);
  27. x(3)=u(5);
  28. x(4)=u(6);
  29. e1=R1-x(1);
  30. e2=R2-x(3);
  31. e=[e1;e2];
  32. de1=dr1-x(2);
  33. de2=dr2-x(4);
  34. de=[de1;de2];
  35. Kp=[50 0;0 50];
  36. Kd=[50 0;0 50];
  37. tol=Kp*e+Kd*de;
  38. sys(1)=tol(1);
  39. sys(2)=tol(2);


这个是控制模型chap2_1plant,检测系统的模型。

本身这两个模型是一样的,唯一的不同点,一个是给定的系统模型,可以认为是精确的,后一个模型是检测模型,有一定的误差。

 

模型如图所示。



  1. close all;
  2. figure(1);
  3. subplot(211);
  4. plot(t,x1(:,1),'r',t,x1(:,2),'b');
  5. xlabel('time(s)');ylabel('position tracking of link 1');
  6. subplot(212);
  7. plot(t,x2(:,1),'r',t,x2(:,2),'b');
  8. xlabel('time(s)');ylabel('position tracking of link 2');
  9. figure(2);
  10. subplot(211);
  11. plot(t,tol(:,1),'r');
  12. xlabel('time(s)');ylabel('tol1');
  13. subplot(212);
  14. plot(t,tol(:,2),'r');
  15. xlabel('time(s)');ylabel('tol2');
  16. %以上是显示图形程序


仿真后的结果如图所示。



需要源程序或者有任何问题请联系 scut_08@sina.com

作者: curton, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3876349.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论0条评论)

登录后参与讨论
我要评论
0
33
关闭 站长推荐上一条 /2 下一条