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/20 17:02] 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 74: Line 81:
  
 {{youtube>SZP1KQ2qSEA?medium}} {{youtube>SZP1KQ2qSEA?medium}}
 +
 +----
 +
 +
 +===== Denavit - Hartenberg notation for DASL Serial Arm =====
 +
 + Following the step by step and rules presented previously, lets calculate the DH parameter for the serial arm available on the DASL at UNLV.
 +
 +{{ ::novos_frames.jpg?direct |}}
 +
 + ** Defining the Frames **
 +
 + 1-> drawing the z axes.
 +{{ ::ded1.jpg?direct |}}
 + 2-> drawing the x axes.
 +{{ ::ded2.jpg?direct |}}
 + 3-> drawing the y axes.
 +{{ ::ded3.jpg?direct |}}
 + 4-> checking if every x(n) axis intersect the z(n-1) axis.
 +{{ ::ded4.jpg?direct |}}
 + 5-> Change the axis that don't follow rule 4.
 +{{ ::ded5.jpg?direct |}}
 + 6-> Create the table and get the DH parameters.
 +{{ ::ded6.jpg?direct |}}
 +
  
 ---- ----
Line 248: Line 280:
 ---- ----
  
-=====Visualizing the Denavit-Hartenberg Parameters =====+=====Creating the DASL Serial Arm and solving IK on the RVC toolbox =====
  
- There is an interesting tool on the RVC toolbox that is the 'teach'  plot. There we can adjust manually the joints angle values and see the robot arm moving - this is useful to test if you created your robot arm right ( if you used the right DH parameters). For example , if you used the wrong alpha parameter your link will rotate on the wrong direction , and this will interfere on the foward/inverse kinematics calculations. + If you followed the last topics on this page you already know how to create a serial Link based on its Denavit-Hartenberg parameters , so lets do this for the DASL serial armThe code is:
- +
-Lets create a mechanism with four links , and atribute random parameters at first and then we will modify it.+
  
 <Code> <Code>
-pi=3.14+%Creating the DASL serial arm on the RVC toolbox. 
 +%L(n)=LINK([theta D A alpha Sigma(optional) Offset(optional)])
  
-%L(n)=LINK([theta D A alpha Sigma(optional) Offset(optional)])  +L1=11; 
-%Denavit-Hartenberg parameters+L2=15; 
 +L3=10; 
 +L4=21; 
 +L5=8; 
 +pi=3.1416;
  
 +q0=[0 0 0 0 0];
  
-L(1)=Link([0 -0 pi/2]); +L(1)=Link([0 -L1 -pi/2 0]); 
-L(2)=Link([0 0  0]); +L(2)=Link([0 0 L2 0 0]); 
-L(3)=Link([0 0 pi/2]); +L(3)=Link([0 0 L3 0 0]); 
-L(4)=Link([0 0 0 0]);+L(4)=Link([0 0 0 pi/2 0]); 
 +L(5)=Link([0 -(L4+L5) 0 0 0]);
  
  
-testing=SerialLink(L,'name','Testing');+DaslArm=SerialLink(L,'name','DaslArm');
  
 +DaslArm.teach(q0)
  
-%testing.teach() 
- 
-testing.plot([0 0 0 0],'nobase') 
 </Code> </Code>
  
- You can change the '%' to the testing.plot or testing.teach. If you want to see only the robot arm you can hide the testing.teach inserting '%' before it+{{ ::novoteach.jpg?direct |}}
  
- This configuration will create the following robot arm:+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.
  
-{{ ::8_manip.jpg?direct |}}+ 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 :
  
- Remeber that by convention the link #0 is the base that is fixed, so we start to work with Link 1.  +<Code>
-Changing the offset value  **(d)** (second argument on the Link Function) lets see what happens.+
  
- {{ ::9_manip.jpg?direct |}}+%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
  
- As can be seen , **CHANGING THE LINK 1 OFFSET (D)** value we change the position on the z-axis of the joint 2 . +%For example lets use a pure translation . 
 +T=transl(20,35,-30);
  
- Now changing the **link's length value (a):**+%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];
  
- {{ ::10_manip.jpg?direct |}}+%Solving the IK and converting to degrees 
 +q_ikine=DaslArm.ikine(T,q0,m); 
 +q_degrees=q_ikine*(180/pi);
  
- As can be seen , the joint 2 got dislocated because the LINK 1 length changed.+%Creating a trajectory from q0 to the IK solution 
 +%Time variable 
 +t=[0:0.05:4]; 
 +%trajectory 
 +q_TRAJ=jtraj(q0,q_ikine,t);
  
- Now changing the **link's twist (alpha).** +%Plot the result 
 +DaslArm.plot(q_TRAJ)
  
- {{ ::11_manip.jpg?direct |}}+</Code>
  
- Note that the joint 2 got twisted, this will change the direction of rotation of the LINK 2. Use the teach command now (using link1 alpha=pi/2 and then alpha=0 ) and see how the direction will go.+ 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.1469059328.txt.gz · Last modified: 2016/07/20 17:02 by joaomatos