robotic_manipulators
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
robotic_manipulators [2016/07/20 17:02] – joaomatos | robotic_manipulators [2016/08/06 23:28] (current) – joaomatos | ||
---|---|---|---|
Line 1: | Line 1: | ||
===== Robotic Manipulators Basics ===== | ===== Robotic Manipulators Basics ===== | ||
+ | **Author:** Joao Matos Email: < | ||
+ | \\ | ||
+ | **Date:** Last modified on 6/8/2016 | ||
+ | \\ | ||
+ | **Keywords: | ||
+ | \\ | ||
+ | |||
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 |
* **(α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) |
* **(θj)**: If you have only revolute joints , you can call them q1, | * **(θj)**: If you have only revolute joints , you can call them q1, | ||
Line 74: | Line 81: | ||
{{youtube> | {{youtube> | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ===== Denavit - Hartenberg notation for DASL Serial Arm ===== | ||
+ | |||
+ | | ||
+ | |||
+ | {{ :: | ||
+ | |||
+ | ** Defining the Frames ** | ||
+ | |||
+ | | ||
+ | {{ :: | ||
+ | | ||
+ | {{ :: | ||
+ | | ||
+ | {{ :: | ||
+ | | ||
+ | {{ :: | ||
+ | | ||
+ | {{ :: | ||
+ | | ||
+ | {{ :: | ||
+ | |||
---- | ---- | ||
Line 248: | Line 280: | ||
---- | ---- | ||
- | =====Visualizing | + | =====Creating |
- | There is an interesting tool on the RVC toolbox that is the ' | + | If you followed |
- | + | ||
- | Lets create a mechanism with four links , and atribute random | + | |
< | < | ||
- | 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 -1 0 pi/2]); | + | L(1)=Link([0 -L1 0 -pi/2 0]); |
- | L(2)=Link([0 0 | + | L(2)=Link([0 0 L2 0 0]); |
- | L(3)=Link([0 0 1 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 | ||
- | testing=SerialLink(L,' | + | DaslArm=SerialLink(L,' |
+ | DaslArm.teach(q0) | ||
- | %testing.teach() | ||
- | |||
- | testing.plot([0 0 0 0],' | ||
</ | </ | ||
- | You can change the ' | + | {{ ::novoteach.jpg?direct |}} |
- | This configuration | + | The teach command |
- | {{ :: | + | 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 |
- | | + | < |
- | Changing the offset value **(d)** (second argument on the Link Function) lets see what happens. | + | |
- | {{ :: | + | %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, | ||
+ | % The end effector pose will be a combination of tranls and trot | ||
- | As can be seen , **CHANGING THE LINK 1 OFFSET | + | %For example lets use a pure translation . |
+ | T=transl(20,35,-30); | ||
- | Now changing | + | %IK SOLVER |
+ | %Initial pose (all rotations = 0) | ||
+ | q0=[0 0 0 0 0]; | ||
+ | %Mask to be used on the IK solver | ||
+ | m=[1 1 1 0 0 0]; | ||
- | {{ ::10_manip.jpg?direct |}} | + | %Solving the IK and converting to degrees |
+ | q_ikine=DaslArm.ikine(T, | ||
+ | q_degrees=q_ikine*(180/ | ||
- | 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, | ||
- | Now changing | + | %Plot the result |
+ | DaslArm.plot(q_TRAJ) | ||
- | {{ :: | + | </ |
- | Note that the joint 2 got twisted, this will change | + | This code will open a window to show the animation |
robotic_manipulators.1469059328.txt.gz · Last modified: 2016/07/20 17:02 by joaomatos