⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 robotarm.m.shtml

📁 利用Matlab仿真工具
💻 SHTML
字号:
<html><head><title>The MathWorks - Gallery</title><link rel=stylesheet href="/site.css" type="text/css"></head><body bgcolor="#FFFFFF" link="0033CC" vlink="#666666"><table width="600" border="0" cellspacing="0" cellpadding="0">  <tr>     <td> <!-- Site Navigation --> <!--#include virtual="/mason/sitenav.html" -->       <!-- End Site Navigation --> <!-- Right Navigation --> <!--#include virtual="/products/gallery/gallery_top.shtml" -->       <!-- End Right Navigation -->       <p>    <!-- Insert Body Here --><table border="0" cellpadding="0" cellspacing="0">  <tr>     <td width=20><img src="/images/pixelwhite.gif" width="20" height="1"></td>          <td>            <p><font size="+1" face="Arial, Helvetica, sans-serif" color="000066"><b>Kinematic Simulation of a Robot Arm</b></font></p><p class=margin>The data file, qini.mat, is available for <a href="qini.exe">download</a>.<p class=margin><b class=subhead>Main.m</b><br><pre>% *This file demonstrates how simulate and draw%  easily a moving mechanism using Matlab and the %  automatically generated code from the 'Kinematic%   Assistant'.%%  This code shows an robot arm of 6 degrees of %  freedom moving his hand along an spiral.%% -'qini.mat' contains the initial values of the %    coordinates (q) of each point and vector%    of the mechanism.% -'initpos' solves de assembly or initial-position%     problem for the mechanism, given the values%     of the degrees of freedom.% -'findesp' solves the problem of finite displacement%    given small variation on the degrees of freedom.%%  Author: Juan L. J. Bascones, 1999%  e-mail: jljbascones@sportstt.com</pre></td></tr></table></td></tr></table><span class=margin><pre>global q;load qini.mat;initpos([7 0 8 1 0 0]);drawmech;% Loopfor i=[0:10:3*360];  j=pi/180*i;  findesp([7+3*cos(j) 3*sin(j) 8+j/2 1 0 0]);  drawmech;end;</pre></span><p class=margin><b class=subhead>Initpos.m</b><span class=margin><pre>function answer=initpos(dof,p)%  Solve the initial position problem for mechanism: %%    - * Robot arm * -%%  N DOF:                6%  N point and vectors:  11%  N paramaters:         0%%  Iteration level:%    in initpos:          FULL%    in findesp:          FULL%    in veloc:            FULL%    in acel:             FULL%  Iteration structure:   While(...);%  Veloc. approx.:        No%  Symbolic solution:     Identity equations%  Convergence criterion: Norm of phi%  Use of tmp's:          Yes%%  Matlab code automatically generated by the Kinematic Wizard.%  Date:  Thursday, September 26 of 1996 at 10:20:40%%  Comments:%    Author: Juan L. J. Bascones%    e-mail: jljbascones@sportstt.com%global q;global tmp1 tmp2 tmp3 tmp4 tmp5;global phi1 phi2 phi3 phi4 phi5;global J1 J2 J3 J4 J5;J1=zeros(3,3);J2=zeros(3,3);J3=zeros(3,3);J4=zeros(3,3);J5=zeros(3,3);TOL=1e-24;NUMITMAX=100;q([1:6 19:24])=[0 0 0 0 0 7.5 dof(1) dof(2) dof(3) dof(4) dof(5) dof(6)];q(1,6)=+q(1,7)-q(1,8);q(2,6)=+q(2,7)-q(2,8);q(3,6)=+q(3,7)-q(3,8);numit=0;phi1=[0.5*(q(:,11)'*q(:,11)-1) q(:,11)'*(q(:,1)-q(:,2))-0 q(:,11)'*(q(:,1)-q(:,6))-0]';while (phi1'*phi1)>TOL;  numit=numit+1;if numit>NUMITMAX;answer=0;return;end;  J1([1:9])=[q(1,11) q(1,1)-q(1,2) q(1,1)-q(1,6) q(2,11) q(2,1)-q(2,2) q(2,1)-q(2,6) q(3,11) q(3,1)-q(3,2) q(3,1)-q(3,6)];  q([31:33])=q([31:33])'-J1\phi1;  phi1=[0.5*(q(:,11)'*q(:,11)-1) q(:,11)'*(q(:,1)-q(:,2))-0 q(:,11)'*(q(:,1)-q(:,6))-0]';end;numit=0;phi2=[0.5*(q(:,9)'*q(:,9)-1) q(:,9)'*q(:,11)-0 q(:,8)'*q(:,9)-0]';while (phi2'*phi2)>TOL;  numit=numit+1;if numit>NUMITMAX;answer=0;return;end;  J2([1:9])=[q(1,9) q(1,11) q(1,8) q(2,9) q(2,11) q(2,8) q(3,9) q(3,11) q(3,8)];  q([25:27])=q([25:27])'-J2\phi2;  phi2=[0.5*(q(:,9)'*q(:,9)-1) q(:,9)'*q(:,11)-0 q(:,8)'*q(:,9)-0]';end;numit=0;phi3=[0.5*(q(:,10)'*q(:,10)-1) q(:,8)'*q(:,10)-0 q(:,9)'*q(:,10)-0]';while (phi3'*phi3)>TOL;  numit=numit+1;if numit>NUMITMAX;answer=0;return;end;  J3([1:9])=[q(1,10) q(1,8) q(1,9) q(2,10) q(2,8) q(2,9) q(3,10) q(3,8) q(3,9)];  q([28:30])=q([28:30])'-J3\phi3;  phi3=[0.5*(q(:,10)'*q(:,10)-1) q(:,8)'*q(:,10)-0 q(:,9)'*q(:,10)-0]';end;numit=0;tmp4=q(:,[2 3])-q(:,[3 6]);phi4=[q(:,11)'*(tmp4(:,1))-0 0.5*((tmp4(:,1))'*(tmp4(:,1))-50.41) 0.5*((tmp4(:,2))'*(tmp4(:,2))-72.25)]';while (phi4'*phi4)>TOL;  numit=numit+1;if numit>NUMITMAX;answer=0;return;end;  J4([1:9])=[-q(1,11) -tmp4(1,1) tmp4(1,2) -q(2,11) -tmp4(2,1) tmp4(2,2) -q(3,11) -tmp4(3,1) tmp4(3,2)];  q([7:9])=q([7:9])'-J4\phi4;  tmp4=q(:,[2 3])-q(:,[3 6]);  phi4=[q(:,11)'*(tmp4(:,1))-0 0.5*((tmp4(:,1))'*(tmp4(:,1))-50.41) 0.5*((tmp4(:,2))'*(tmp4(:,2))-72.25)]';end;q(1,4)=+(1+0.196470588)*q(1,3)-0.196470588*q(1,6);q(2,4)=+(1+0.196470588)*q(2,3)-0.196470588*q(2,6);q(3,4)=+(1+0.196470588)*q(3,3)-0.196470588*q(3,6);numit=0;tmp5=q(:,[2 5])-q(:,[5 4]);phi5=[q(:,11)'*(tmp5(:,1))-0 0.5*((tmp5(:,1))'*(tmp5(:,1))-2.7889) 0.5*((tmp5(:,2))'*(tmp5(:,2))-50.41)]';while (phi5'*phi5)>TOL;  numit=numit+1;if numit>NUMITMAX;answer=0;return;end;  J5([1:9])=[-q(1,11) -tmp5(1,1) tmp5(1,2) -q(2,11) -tmp5(2,1) tmp5(2,2) -q(3,11) -tmp5(3,1) tmp5(3,2)];  q([13:15])=q([13:15])'-J5\phi5;  tmp5=q(:,[2 5])-q(:,[5 4]);  phi5=[q(:,11)'*(tmp5(:,1))-0 0.5*((tmp5(:,1))'*(tmp5(:,1))-2.7889) 0.5*((tmp5(:,2))'*(tmp5(:,2))-50.41)]';end;answer=1;</pre></span><p class=margin><b class=subhead>Findesp.m</b><span class=margin><pre>function answer=fd1(dof,p)%  Solve the finite displacement problem for mechanism: %%    - * Robot arm * -%%  N DOF:                6%  N point and vectors:  11%  N paramaters:         0%%  Iteration level:%    in initpos:          FULL%    in findesp:          FULL%    in veloc:            FULL%    in acel:             FULL%  Iteration structure:   While(...);%  Veloc. approx.:        No%  Symbolic solution:     Identity equations%  Convergence criterion: Norm of phi%  Use of tmp's:          Yes%%  Matlab code automatically generated by the Kinematic Wizard.%  Date:  Thursday, September 26 of 1996 at 10:20:39%%  Comments:%    Author: Juan L. J. Bascones%    e-mail: jljbascones@sportstt.com%global q;global tmp1 tmp2 tmp3 tmp4 tmp5;global phi1 phi2 phi3 phi4 phi5;global J1 J2 J3 J4 J5;TOL=1e-24;NUMITMAX=100;q([19:24])=[dof(1) dof(2) dof(3) dof(4) dof(5) dof(6)];q(1,6)=+q(1,7)-q(1,8);q(2,6)=+q(2,7)-q(2,8);q(3,6)=+q(3,7)-q(3,8);numit=0;phi1=[0.5*(q(:,11)'*q(:,11)-1) q(:,11)'*(q(:,1)-q(:,2))-0 q(:,11)'*(q(:,1)-q(:,6))-0]';while (phi1'*phi1)>TOL;  numit=numit+1;if numit>NUMITMAX;answer=0;return;end;  J1([1:9])=[q(1,11) q(1,1)-q(1,2) q(1,1)-q(1,6) q(2,11) q(2,1)-q(2,2) q(2,1)-q(2,6) q(3,11) q(3,1)-q(3,2) q(3,1)-q(3,6)];  q([31:33])=q([31:33])'-J1\phi1;  phi1=[0.5*(q(:,11)'*q(:,11)-1) q(:,11)'*(q(:,1)-q(:,2))-0 q(:,11)'*(q(:,1)-q(:,6))-0]';end;numit=0;phi2=[0.5*(q(:,9)'*q(:,9)-1) q(:,9)'*q(:,11)-0 q(:,8)'*q(:,9)-0]';while (phi2'*phi2)>TOL;  numit=numit+1;if numit>NUMITMAX;answer=0;return;end;  J2([1:9])=[q(1,9) q(1,11) q(1,8) q(2,9) q(2,11) q(2,8) q(3,9) q(3,11) q(3,8)];  q([25:27])=q([25:27])'-J2\phi2;  phi2=[0.5*(q(:,9)'*q(:,9)-1) q(:,9)'*q(:,11)-0 q(:,8)'*q(:,9)-0]';end;numit=0;phi3=[0.5*(q(:,10)'*q(:,10)-1) q(:,8)'*q(:,10)-0 q(:,9)'*q(:,10)-0]';while (phi3'*phi3)>TOL;  numit=numit+1;if numit>NUMITMAX;answer=0;return;end;  J3([1:9])=[q(1,10) q(1,8) q(1,9) q(2,10) q(2,8) q(2,9) q(3,10) q(3,8) q(3,9)];  q([28:30])=q([28:30])'-J3\phi3;  phi3=[0.5*(q(:,10)'*q(:,10)-1) q(:,8)'*q(:,10)-0 q(:,9)'*q(:,10)-0]';end;numit=0;tmp4=q(:,[2 3])-q(:,[3 6]);phi4=[q(:,11)'*(tmp4(:,1))-0 0.5*((tmp4(:,1))'*(tmp4(:,1))-50.41) 0.5*((tmp4(:,2))'*(tmp4(:,2))-72.25)]';while (phi4'*phi4)>TOL;  numit=numit+1;if numit>NUMITMAX;answer=0;return;end;  J4([1:9])=[-q(1,11) -tmp4(1,1) tmp4(1,2) -q(2,11) -tmp4(2,1) tmp4(2,2) -q(3,11) -tmp4(3,1) tmp4(3,2)];  q([7:9])=q([7:9])'-J4\phi4;  tmp4=q(:,[2 3])-q(:,[3 6]);  phi4=[q(:,11)'*(tmp4(:,1))-0 0.5*((tmp4(:,1))'*(tmp4(:,1))-50.41) 0.5*((tmp4(:,2))'*(tmp4(:,2))-72.25)]';end;q(1,4)=+(1+0.196470588)*q(1,3)-0.196470588*q(1,6);q(2,4)=+(1+0.196470588)*q(2,3)-0.196470588*q(2,6);q(3,4)=+(1+0.196470588)*q(3,3)-0.196470588*q(3,6);numit=0;tmp5=q(:,[2 5])-q(:,[5 4]);phi5=[q(:,11)'*(tmp5(:,1))-0 0.5*((tmp5(:,1))'*(tmp5(:,1))-2.7889) 0.5*((tmp5(:,2))'*(tmp5(:,2))-50.41)]';while (phi5'*phi5)>TOL;  numit=numit+1;if numit>NUMITMAX;answer=0;return;end;  J5([1:9])=[-q(1,11) -tmp5(1,1) tmp5(1,2) -q(2,11) -tmp5(2,1) tmp5(2,2) -q(3,11) -tmp5(3,1) tmp5(3,2)];  q([13:15])=q([13:15])'-J5\phi5;  tmp5=q(:,[2 5])-q(:,[5 4]);  phi5=[q(:,11)'*(tmp5(:,1))-0 0.5*((tmp5(:,1))'*(tmp5(:,1))-2.7889) 0.5*((tmp5(:,2))'*(tmp5(:,2))-50.41)]';end;answer=1;</pre></span><p class=margin><b class=subhead>Drawmech.m</b><span class=margin><pre>function drawmech%  DRAWMECH - Draw the mechanism:%%    - * Robot arm * -%%  Matlab code automatically generated by the Kinematic Wizard.%  Date:  Sunday, August 31 of 1997 at 15:24:49global q drawdata;vS=3;handle=findobj('Type','figure','Name','DrawMech');if isempty(handle);  x0=-5;  y0=-10;  z0= 0;  range=20;  linewidth=0.1;  pointwidth=1;  figure('Name','DrawMech','NumberTitle','Off','BackingStore','Off','Color','k');  set(gca,'DrawMode','Fast');  set(gca,'position',[0.01 0.1 0.99 1.1],'units','normalized')  set(gca,'color','k','xcolor','w','ycolor','w','zcolor','w');  axis('square');  axis(1*[x0 x0+range y0 y0+range z0 z0+range]);  view(30,30);  hold on;    drawdata(1)=line(q(1,[1 2]),q(2,[1 2]),q(3,[1 2]),'Color','r','LineStyle','-','LineWidth',linewidth,'EraseMode','xor');  drawdata(2)=line(q(1,[2 3]),q(2,[2 3]),q(3,[2 3]),'Color','g','LineStyle','-','LineWidth',linewidth,'EraseMode','xor');  drawdata(3)=line(q(1,[2 5]),q(2,[2 5]),q(3,[2 5]),'Color','b','LineStyle','-','LineWidth',linewidth,'EraseMode','xor');  drawdata(4)=line(q(1,[5 4]),q(2,[5 4]),q(3,[5 4]),'Color','m','LineStyle','-','LineWidth',linewidth,'EraseMode','xor');  drawdata(5)=line(q(1,[4 6]),q(2,[4 6]),q(3,[4 6]),'Color','y','LineStyle','-','LineWidth',linewidth,'EraseMode','xor');  drawdata(6)=line(q(1,[7 6]),q(2,[7 6]),q(3,[7 6]),'Color','c','LineStyle','-','LineWidth',linewidth,'EraseMode','xor');  drawdata(7)=plot3(q(1,7),q(2,7),q(3,7),'Color','r','Marker','o','LineWidth',pointwidth,'EraseMode','none');  drawdata(8)=line([q(1,7) vS*q(1,8)+q(1,7)],[q(2,7) vS*q(2,8)+q(2,7)],[q(3,7) vS*q(3,8)+q(3,7)],'Color','w','LineStyle','-','Marker','>','LineWidth',linewidth,'EraseMode','xor');  drawdata(9)=line([q(1,7) vS*q(1,9)+q(1,7)],[q(2,7) vS*q(2,9)+q(2,7)],[q(3,7) vS*q(3,9)+q(3,7)],'Color','w','LineStyle','-','Marker','>','LineWidth',linewidth,'EraseMode','xor');  drawdata(10)=line([q(1,7) vS*q(1,10)+q(1,7)],[q(2,7) vS*q(2,10)+q(2,7)],[q(3,7) vS*q(3,10)+q(3,7)],'Color','w','LineStyle','-','Marker','>','LineWidth',linewidth,'EraseMode','xor');  drawdata(11)=line([q(1,2) vS*q(1,11)+q(1,2)],[q(2,2) vS*q(2,11)+q(2,2)],[q(3,2) vS*q(3,11)+q(3,2)],'Color','w','LineStyle','-','Marker','>','LineWidth',linewidth,'EraseMode','xor');    drawnow;    return;end;set(drawdata(1),'Xdata',q(1,[1 2]),'Ydata',q(2,[1 2]),'Zdata',q(3,[1 2]));set(drawdata(2),'Xdata',q(1,[2 3]),'Ydata',q(2,[2 3]),'Zdata',q(3,[2 3]));set(drawdata(3),'Xdata',q(1,[2 5]),'Ydata',q(2,[2 5]),'Zdata',q(3,[2 5]));set(drawdata(4),'Xdata',q(1,[5 4]),'Ydata',q(2,[5 4]),'Zdata',q(3,[5 4]));set(drawdata(5),'Xdata',q(1,[4 6]),'Ydata',q(2,[4 6]),'Zdata',q(3,[4 6]));set(drawdata(6),'Xdata',q(1,[7 6]),'Ydata',q(2,[7 6]),'Zdata',q(3,[7 6]));set(drawdata(7),'Xdata',q(1,7),'Ydata',q(2,7),'Zdata',q(3,7));set(drawdata(8),'Xdata',[q(1,7) vS*q(1,8)+q(1,7)],'Ydata',[q(2,7) vS*q(2,8)+q(2,7)],'Zdata',[q(3,7) vS*q(3,8)+q(3,7)]);set(drawdata(9),'Xdata',[q(1,7) vS*q(1,9)+q(1,7)],'Ydata',[q(2,7) vS*q(2,9)+q(2,7)],'Zdata',[q(3,7) vS*q(3,9)+q(3,7)]);set(drawdata(10),'Xdata',[q(1,7) vS*q(1,10)+q(1,7)],'Ydata',[q(2,7) vS*q(2,10)+q(2,7)],'Zdata',[q(3,7) vS*q(3,10)+q(3,7)]);set(drawdata(11),'Xdata',[q(1,2) vS*q(1,11)+q(1,2)],'Ydata',[q(2,2) vS*q(2,11)+q(2,2)],'Zdata',[q(3,2) vS*q(3,11)+q(3,2)]);figure(handle);drawnow;</pre></span>     <!-- End Body --> <!-- Footer --> <!--#include virtual="/products/gallery/gallery_footer.shtml" --> <!-- End Footer --> </body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -