No BSD License  

Highlights from
Robot Simulator

image thumbnail
from Robot Simulator by Victor Andrade
Simulation Model of Industrial Robot Manipulator

Joy_Inverso(hObject, eventdata, handles)
function Joy_Inverso(hObject, eventdata, handles)

global flag_joy Px Py Pz
global teta1 teta4 teta5 teta6 tetap tetaf d2 d3 l1 d4 x_joyantesPx y_joyantesPy z_joyantesPz
warning off;

%ai=analoginput('joy',1); % the number is an ID number of installed joystick (see Controller IDs in Control panel/Gaming options

%addchannel(ai,[1 2 3 4 5 6]);
%channels 
% 1 - X axis
% 2 - Y axis
% 3 - Z axis
% 4 - R axis
% 5 - buttons pressed (quasy binary data - see below)
% 6 - no of buttons pressed at the time
% Set up the display

flag_joy=1;
while flag_joy==1 
    pause(0.05);
    samples = jst;
    samples(1) = -samples(1)*100;  %Y data
    samples(2) = samples(2)*100;   %X data
    samples(3) = -samples(3)*100;  %Z data
    % decoding the data from dll. You may play with the dll. Please see
    % JoyIn.cpp
    ButtonsPressed = samples(5);
    BP = ButtonsPressed;
        
    if BP==32         %BP==32 =>R1 controlar eixos dos XX
     % pause(0.01);
      x_joy=samples(2);    %%varia entre -100 e 100
     
      x_joy=x_joy+x_joyantesPx;
      x_joyantesPx=x_joy;
      Pxmax=sqrt((282^2)-(Py^2));
      Pxmin=sqrt((112.75^2)-(Py^2));
      if(x_joy>=0)
          Px=((x_joy*(Pxmax-Pxmin)/100)+Pxmin);
      else
          Px=((x_joy*(Pxmax-Pxmin)/100)-Pxmin);
      end
      
      if(x_joy>100)
          Px=Pxmax;
      end    
      if(x_joy<-100)
          Px=-Pxmax;
      end    

      teta1=atan2(Py,Px)+atan2(sqrt(Px^2+Py^2-l1^2),l1);
      d2=Pz;
      d3=sin(teta1)*Px-cos(teta1)*Py-d4;
      teta4=atan2(1,0);
      teta5=(tetap*pi)/180;
      tetaf=(tetaf*pi)/180;
      teta6=tetaf-teta4;
    
      Pxstr=num2str(Px);
      Pystr=num2str(Py);
      Pzstr=num2str(Pz);
      set(handles.textpz,'String',Pzstr);
      set(handles.textpx,'String',Pxstr);
      set(handles.textpy,'String',Pystr);
      
      SimuladorCs('Desenha_robo',hObject, eventdata,handles); %tem q estar dentro senao o cpu est a 100%       
    
      teta1deg=teta1*180/pi;
      teta4deg=teta4*180/pi;
      teta5deg=teta5*180/pi;
      teta6deg=teta6*180/pi;
      set(handles.textteta1,'String',num2str(teta1deg));
      set(handles.textteta4,'String',num2str(teta4deg));
      set(handles.textteta5,'String',num2str(teta5deg));
      set(handles.textteta6,'String',num2str(teta6deg));
      set(handles.textd2,'String',num2str(d2));
      set(handles.textd3,'String',num2str(d3));
    end
    
    
    if BP==128          %BP==128 =>R2 controlar eixos dos YY
     % pause(0.01);
      y_joy=samples(1);    %%varia entre -100 e 100
      %y_joy=y_joy+100;  %%varia entre 0 e 200
      y_joy=y_joy+y_joyantesPy;
      y_joyantesPy=y_joy;
      
      Pymax=sqrt((282^2)-(Px^2));
      Pymin=sqrt((112.75^2)-(Px^2));
      
      if(y_joy>=0)
         Py=((y_joy*(Pymax-Pymin)/100)+Pymin);
      else
         Py=((y_joy*(Pymax-Pymin)/100)-Pymin);
      end
      
      if(y_joy>100)
          Py=Pymax;
      end    
      if(y_joy<-100)
          Py=-Pymax;
      end  
      
      teta1=atan2(Py,Px)+atan2(sqrt(Px^2+Py^2-l1^2),l1);
      d2=Pz;
      d3=sin(teta1)*Px-cos(teta1)*Py-d4;
      teta4=atan2(1,0);
      teta5=(tetap*pi)/180;
      tetaf=(tetaf*pi)/180;
      teta6=tetaf-teta4;
    
      Pxstr=num2str(Px);
      Pystr=num2str(Py);
      Pzstr=num2str(Pz);
      set(handles.textpx,'String',Pxstr);
      set(handles.textpy,'String',Pystr);
      set(handles.textpz,'String',Pzstr);
      SimuladorCs('Desenha_robo',hObject, eventdata,handles); %tem q estar dentro senao o cpu est a 100%       
    
      teta1deg=teta1*180/pi;
      teta4deg=teta4*180/pi;
      teta5deg=teta5*180/pi;
      teta6deg=teta6*180/pi;
      set(handles.textteta1,'String',num2str(teta1deg));
      set(handles.textteta4,'String',num2str(teta4deg));
      set(handles.textteta5,'String',num2str(teta5deg));
      set(handles.textteta6,'String',num2str(teta6deg));
      set(handles.textd2,'String',num2str(d2));
      set(handles.textd3,'String',num2str(d3));
    end

   

    if BP==16         %BP==16 =>L1 controlar eixos dos ZZ
     % pause(0.01);
      z_joy=samples(3);    %%varia entre -100 e 100
      %z_joy=z_joy+100;  %%varia entre 0 e 200
      
      z_joy=z_joy+z_joyantesPz;
      z_joyantesPz=z_joy;
      Pz=((z_joy*180)/200)+90;
      
      if(z_joy>100)
          Pz=180;
      end    
      if(z_joy<-100)
          Pz=0;
      end 
      
      
      teta1=atan2(Py,Px)+atan2(sqrt(Px^2+Py^2-l1^2),l1);
      d2=Pz;
      d3=sin(teta1)*Px-cos(teta1)*Py-d4;
      teta4=atan2(1,0);
      teta5=(tetap*pi)/180;
      tetaf=(tetaf*pi)/180;
      teta6=tetaf-teta4;
      
      Pxstr=num2str(Px);
      Pystr=num2str(Py);
      Pzstr=num2str(Pz);
      set(handles.textpz,'String',Pzstr);
      set(handles.textpx,'String',Pxstr);
      set(handles.textpy,'String',Pystr);
      SimuladorCs('Desenha_robo',hObject, eventdata,handles); %tem q estar dentro senao o cpu est a 100%       
      teta1deg=teta1*180/pi;
      teta4deg=teta4*180/pi;
      teta5deg=teta5*180/pi;
      teta6deg=teta6*180/pi;
      set(handles.textteta1,'String',num2str(teta1deg));
      set(handles.textteta4,'String',num2str(teta4deg));
      set(handles.textteta5,'String',num2str(teta5deg));
      set(handles.textteta6,'String',num2str(teta6deg));
      set(handles.textd2,'String',num2str(d2));
      set(handles.textd3,'String',num2str(d3)); 
     
    end 
end

Contact us at files@mathworks.com