User Tools

Site Tools


robotic_manipulators

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
robotic_manipulators [2016/07/21 10:53] joaomatosrobotic_manipulators [2016/08/06 23:28] (current) joaomatos
Line 1: Line 1:
 ===== Robotic Manipulators Basics ===== ===== Robotic Manipulators Basics =====
    
 +**Author:** Joao Matos Email: <jcunha@id.uff.br> <!-- replace with your email address -->
 +\\
 +**Date:** Last modified on 6/8/2016
 +\\
 +**Keywords:** Robotic Manipulator , Serial Arm, Denavit Hartenberg, Inverse kinematics
 +\\
 +
  This page is to introduce the theory behind the robotic manipulators. It will be used the Denavit-Hartenberg parameters notation to describe the geometry of a serial chain of links and joints (Serial-Link).Using the robotic toolbox developed by Peter Corke (RVCtoolbox) we can visualize and understand more about the Denavit-Hartenberg parameters and how the process of the inverse kinematics works.   This page is to introduce the theory behind the robotic manipulators. It will be used the Denavit-Hartenberg parameters notation to describe the geometry of a serial chain of links and joints (Serial-Link).Using the robotic toolbox developed by Peter Corke (RVCtoolbox) we can visualize and understand more about the Denavit-Hartenberg parameters and how the process of the inverse kinematics works. 
    
Line 45: Line 52:
  
 **Four steps and rules to define the frame on each joint ** **Four steps and rules to define the frame on each joint **
-  - You will define the z axes as the joints rotation axes. Start drawing only the z axis on all your joints, starting from z(0) at the base and going to z(....) at the end effector . DON'T FORGET that the z axis of the end effector must be in the same direction of the z axis of the last joint. +  - You will define the z axes as the joints rotation axes (CCW). Start drawing only the z axis on all your joints, starting from z(0) at the base and going to z(....) at the end effector . DON'T FORGET that the z axis of the end effector must be in the same direction of the z axis of the last joint. 
-  - Now you will draw the x axes , the x axis must be perpendicular to both z(j-1) and z(j). Do it for every joint. If you have more than one direction that satisfy this condition , you can choose the direction that goes from z(j-1) to z(j) axes. DON'T FORGET that the x axis of the end effector must be in the same direction of the x axis from the last joint+  - Now you will draw the x axes , the x axis must be perpendicular to both z(j-1) and z(j). Do it for every joint. If you have more than one direction that satisfy this condition , choose the direction that goes from z(j-1) to z(j) axes. DON'T FORGET that the x axis of the end effector must be in the same direction of the x axis from the last joint
   - Now you will draw the y axes.The y axis must follow the right hand rule , from z axis to x axis. And don't forget that the y axis of the end effector must be in the same direction of the y axis of the last joint.   - Now you will draw the y axes.The y axis must follow the right hand rule , from z axis to x axis. And don't forget that the y axis of the end effector must be in the same direction of the y axis of the last joint.
   - Now that you drawn the three axis on every joint , you must check if the x(j) axis intersect the z(j-1) axis. To your DH notation be right , every x(j) axis must intersect the z(j-1) axis. If you don't have this , you must translate your (j) frame , in order to guarantee this intersection.   - Now that you drawn the three axis on every joint , you must check if the x(j) axis intersect the z(j-1) axis. To your DH notation be right , every x(j) axis must intersect the z(j-1) axis. If you don't have this , you must translate your (j) frame , in order to guarantee this intersection.
Line 55: Line 62:
  
  
-  * **(aj)**: Is the displacement along the xj axis between the center of the frame (j-1) and frame (j).+  * **(aj)**: Is the displacement along the xj axis DIRECTION between the center of the frame (j-1) and frame (j).
   * **(αj)**: Is the Rotation around the xj axis that make the axis z(j-1) and z(j) to match each other.   * **(αj)**: Is the Rotation around the xj axis that make the axis z(j-1) and z(j) to match each other.
-  * **(dj)**: Is the displacement along the z(j-1) between the center of the frame (j-1) and frame (j).+  * **(dj)**: Is the displacement along the z(j-1) DIRECTION between the center of the frame (j-1) and frame (j).
   * **(θj)**: If you have only revolute joints , you can call them q1,q2,q3,q4.......   * **(θj)**: If you have only revolute joints , you can call them q1,q2,q3,q4.......
  
Line 82: Line 89:
  Following the step by step and rules presented previously, lets calculate the DH parameter for the serial arm available on the DASL at UNLV.  Following the step by step and rules presented previously, lets calculate the DH parameter for the serial arm available on the DASL at UNLV.
  
- {{ ::eixos_e_distancias.jpg?direct |}}+{{ ::novos_frames.jpg?direct |}}
  
  ** Defining the Frames **  ** Defining the Frames **
Line 94: Line 101:
  4-> checking if every x(n) axis intersect the z(n-1) axis.  4-> checking if every x(n) axis intersect the z(n-1) axis.
 {{ ::ded4.jpg?direct |}} {{ ::ded4.jpg?direct |}}
-5-> Create the table and get the DH parameters.+ 5-> Change the axis that don't follow rule 4.
 {{ ::ded5.jpg?direct |}} {{ ::ded5.jpg?direct |}}
 + 6-> Create the table and get the DH parameters.
 +{{ ::ded6.jpg?direct |}}
 +
 +
 +----
  
  
Line 277: Line 289:
  
 L1=11; L1=11;
-L2=14+L2=15
-L3=8.5;+L3=10;
 L4=21; L4=21;
 L5=8; L5=8;
 pi=3.1416; pi=3.1416;
  
-L(1)=Link([0 -L1 0 pi/2 0]); +q0=[0 0 0 0 0]; 
-L(2)=Link([0 0 -L2 0 0]); + 
-L(3)=Link([0 0 -L3 0 0]); +L(1)=Link([0 -L1 0 -pi/2 0]); 
-L(4)=Link([0 0 0 -pi/2 0]);+L(2)=Link([0 0 L2 0 0]); 
 +L(3)=Link([0 0 L3 0 0]); 
 +L(4)=Link([0 0 0 pi/2 0]);
 L(5)=Link([0 -(L4+L5) 0 0 0]); L(5)=Link([0 -(L4+L5) 0 0 0]);
  
Line 292: Line 306:
 DaslArm=SerialLink(L,'name','DaslArm'); DaslArm=SerialLink(L,'name','DaslArm');
  
-DaslArm.teach()+DaslArm.teach(q0) 
 </Code> </Code>
  
-{{ ::teach_serial.jpg?direct |}}+{{ ::novoteach.jpg?direct |}}
  
 The teach command will create a window that allow you to change the q1,q2,q3,q4,q5 rotation and see how the arm moves , it's good to change this rotation by hand to check if your Denavit-Hartenberg parameters are OK. The teach command will create a window that allow you to change the q1,q2,q3,q4,q5 rotation and see how the arm moves , it's good to change this rotation by hand to check if your Denavit-Hartenberg parameters are OK.
 +
 + If everything is moving as the arm moves , we can use the IK solver available on the RVC toolbox to get the joints angles given a desired end effector pose , you just need to add this code after defining your serial link object :
 +
 +<Code>
 +
 +%END EFFECTOR POSITION
 +% trotx(angle) = rotate (angle) about the x axis 
 +% troty(angle) = rotate (angle) about the y axis
 +% trotz(angle) = rotate (angle) about the z axis
 +% transl(x,y,z) = pure translation of x , y , z
 +% The end effector pose will be a combination of tranls and trot
 +
 +%For example lets use a pure translation .
 +T=transl(20,35,-30);
 +
 +%IK SOLVER
 +%Initial pose (all rotations = 0)
 +q0=[0 0 0 0 0];
 +%Mask to be used on the IK solver (x y z rotx roty rotz)
 +m=[1 1 1 0 0 0];
 +
 +%Solving the IK and converting to degrees
 +q_ikine=DaslArm.ikine(T,q0,m);
 +q_degrees=q_ikine*(180/pi);
 +
 +%Creating a trajectory from q0 to the IK solution
 +%Time variable
 +t=[0:0.05:4];
 +%trajectory
 +q_TRAJ=jtraj(q0,q_ikine,t);
 +
 +%Plot the result
 +DaslArm.plot(q_TRAJ)
 +
 +</Code>
 +
 + This code will open a window to show the animation of the serial arm , going from an initial position q0 ( we defined as all the joint angles =0 ) to a final position - which is the IK solution. Is important to note that some end effector poses cannot be reached by the arm , so when you input these values , you will get some errors saying that the IK solver took more than 1000 iterations to find a solution and you will get an approximated solution. This IK solver available on the toolbox is not 100% accurate , the best choice is to program the IK solver by yourself , you can easily find a lot of algorithm to solve an IK problem on the internet. 
  
robotic_manipulators.1469123621.txt.gz · Last modified: 2016/07/21 10:53 by joaomatos